

// This can be used like Add Commas, but with more functionality
// nStr: The number to be formatted, as a string or number. No validation is done, so don't input a formatted number. If inD is something other than a period, then nStr must be passed in as a string. 
// inD: The decimal character for the input, such as '.' for the number 100.2 
// outD: The decimal character for the output, such as ',' for the number 100,2 
// sep: The separator character for the output, such as ',' for the number 1,000.2 
// Examples
// addSeparatorsNF(43211234.56, '.', '.', ',')
// 43,211,234.56
// addSeparatorsNF('52093423.003', '.', ',', '.')
// 52.093.423,003
// addSeparatorsNF('584,567890', ',', '.', ',')
// 584.567890 
// addSeparatorsNF(-1.23e8, '.', '.', ',')
// -123,000,000

function addNumberSeparators(nStr, inD, outD, sep)
{
	nStr += '';
	var dpos = nStr.indexOf(inD);
	var nStrEnd = '';
	if (dpos != -1) {
		nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
		nStr = nStr.substring(0, dpos);
	}
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '$1' + sep + '$2');
	}
	return nStr + nStrEnd;
}





function addSlashesToString(str)
{
        str = str.replace(/\"/g,'\\\"');
        str = str.replace(/\'/g,"\\\'");
        return str;
}


function addCommasToNumber(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

// Will encdoe a string to use with regular expression search terms.
// A lot of time the stuff you are searching FOR may be dynamic.
function encodeRegularExpressions(s) 
{ 
	return s.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
} 

function escapeHtmlOuput(str)
{
        str = str.replace(/\&/g,"&amp;");
        str = str.replace(/\</g,"&lt;");
        str = str.replace(/\>/g,"&gt;");
        str = str.replace(/\"/g,"&quot;");
        return str;
}


function getXmlCommunicationObj(){
	
	var xmlHttpObj = null;
	
	if(window.XMLHttpRequest) 
	{
		
		try { 
			xmlHttpObj = new XMLHttpRequest(); 
		} 
	
		catch(e) 
		{ 
			xmlHttpObj = null; 
		}
	
	} 
	
	// Modern IE browsers now support new XMLHttpRequest() natively... so  no point in maintaing these version numbers any further.
	else if(window.ActiveXObject)
	{
	
		try { 
			xmlHttpObj = new ActiveXObject('Msxml2.XMLHTTP.3.0'); 
		} 
		catch(e) 
		{
			try { 
				xmlHttpObj = new ActiveXObject('Msxml2.XMLHTTP'); 
			} 
			catch(e) 
			{
				try { 
					xmlHttpObj = new ActiveXObject('Microsoft.XMLHTTP'); 
				} 
				catch(e) 
				{ 
					xmlHttpObj = null; 
				}
			} 
		}
	}
	
	return xmlHttpObj;
}



function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

 
function hlPriceRow(e)
{
	e.style.textDecoration='underline';
}
function dlPriceRow(e)
{
	e.style.textDecoration='none';
}



