//Pop-Ups
function LaunchNew(location,w,h,name,extra)
{
	if (extra=='')
	{
		extra=",status=no,toolbar=no,location=no,menubar=no,scrollbars=yes,resizable=no";
	}
	var leftPos = (screen.width / 2) - (w/2);
	var topPos = (screen.height / 2) - (h/2);
	nw=window.open(location, name, "width=" + w + ",height=" + h + 
		",left=" + leftPos + ",top=" + topPos + extra);
}

function LaunchNewScroll(location,w,h,name)
{
 nw=window.open(location, name, "width=" + w + ",height=" + h +
",status=no,toolbar=no,location=no,menubar=no,scrollbars=yes,resizable=no")
;
}


function SelectAll(frm) {
	for (var i=0;i<frm.elements.length;i++) {
		var e=frm.elements[i];
		if(e.type=="checkbox")
		{
			if (e.checked==false)
				e.checked=true;
			else
				e.checked=false;
		}
	}
}

function CopyBillingInfo(billingFieldPrefix) {
	var fldShippingSameAsBilling = document.getElementById('shipping_same_as_billing');
	if (fldShippingSameAsBilling.checked==true)
	{
		var fldTitleFrom = document.getElementById('frm_' + billingFieldPrefix + 'title');
		var fldFirstNameFrom = document.getElementById('frm_' + billingFieldPrefix + 'first_name');
		var fldLastNameFrom = document.getElementById('frm_' + billingFieldPrefix + 'last_name');
		var fldCompanyFrom = document.getElementById('frm_' + billingFieldPrefix + 'company');
		var fldAddressFrom = document.getElementById('frm_' + billingFieldPrefix + 'address');
		var fldAddress2From = document.getElementById('frm_' + billingFieldPrefix + 'address2');
		var fldCityFrom = document.getElementById('frm_' + billingFieldPrefix + 'city');
		var fldStateFrom = document.getElementById('frm_' + billingFieldPrefix + 'state');
		var fldZipFrom = document.getElementById('frm_' + billingFieldPrefix + 'zip');
		var fldCountryFrom = document.getElementById('frm_' + billingFieldPrefix + 'country');
		var fldDayPhoneFrom = document.getElementById('frm_' + billingFieldPrefix + 'day_phone');
		var fldHomePhoneFrom = document.getElementById('frm_' + billingFieldPrefix + 'home_phone');
		var fldFaxFrom = document.getElementById('frm_' + billingFieldPrefix + 'fax');
		var fldEmailAddressFrom = document.getElementById('frm_' + billingFieldPrefix + 'email_address');
		var fldEmailAddressFromConfirm = document.getElementById('frm_' + billingFieldPrefix + 'email_address_confirm');
		
		var fldTitleTo = document.getElementById('frm_shipping_title');
		var fldFirstNameTo = document.getElementById('frm_shipping_first_name');
		var fldLastNameTo = document.getElementById('frm_shipping_last_name');
		var fldCompanyTo = document.getElementById('frm_shipping_company');
		var fldAddressTo = document.getElementById('frm_shipping_address');
		var fldAddress2To = document.getElementById('frm_shipping_address2');
		var fldCityTo = document.getElementById('frm_shipping_city');
		var fldStateTo = document.getElementById('frm_shipping_state');
		var fldZipTo = document.getElementById('frm_shipping_zip');
		var fldCountryTo = document.getElementById('frm_shipping_country');
		var fldDayPhoneTo = document.getElementById('frm_shipping_day_phone');
		var fldHomePhoneTo = document.getElementById('frm_shipping_home_phone');
		var fldFaxTo = document.getElementById('frm_shipping_fax');
		var fldEmailAddressTo = document.getElementById('frm_shipping_email_address');
		var fldEmailAddressToConfirm = document.getElementById('frm_shipping_email_address_confirm');
		
		fldTitleTo.value = fldTitleFrom.value;
		fldFirstNameTo.value = fldFirstNameFrom.value;
		fldLastNameTo.value = fldLastNameFrom.value;
		fldCompanyTo.value = fldCompanyFrom.value;
		fldAddressTo.value = fldAddressFrom.value;
		fldAddress2To.value = fldAddress2From.value;
		fldCityTo.value = fldCityFrom.value;
		fldStateTo.value = fldStateFrom.value;
		fldZipTo.value = fldZipFrom.value;
		fldCountryTo.value = fldCountryFrom.value;
		fldDayPhoneTo.value = fldDayPhoneFrom.value;
		fldHomePhoneTo.value = fldHomePhoneFrom.value;
		fldFaxTo.value = fldFaxFrom.value;
		fldEmailAddressTo.value = fldEmailAddressFrom.value;
		fldEmailAddressToConfirm.value = fldEmailAddressFromConfirm.value;
	}
}

function addCommas(nStr)
{
	var sReturn;
	
	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');
	}
	
	sReturn = x1 + x2;
	if (sReturn.indexOf(".")!= -1)
	{
		if (sReturn.indexOf(".") == sReturn.length - 2)
		{
			sReturn += '0';
		}
	}
	else
	{
		sReturn += '.00';
	}
	return sReturn;
}

function stripCommas(nStr)
{
	var valo = new String();
	var valid = "-0123456789.";
	var chars = nStr.split(""); 
	var i;
	
	for (i = 0; i < chars.length; i++) {
		if (valid.indexOf(chars[i]) != -1) 
			valo += chars[i];
	}
	return valo; 
}

function stripNonNumeric(nStr)
{
	var valo = new String();
	var valid = "-0123456789.";
	var chars = nStr.split(""); 
	var i;
	
	for (i = 0; i < chars.length; i++) {
		if (valid.indexOf(chars[i]) != -1) 
			valo += chars[i];
	}
	return valo; 
}
function HTMLEncode (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}; 

// ====================================================================
//       URLEncode and URLDecode functions
// ====================================================================
function URLEncode(sValue)
{
	var SAFECHARS = "0123456789" +						/* Numeric */
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +		/* Alphabetic */
					"abcdefghijklmnopqrstuvwxyz";// +
					//"-_.!~*'(){}/\\";						/* RFC2396 special characters PLUS {}/\ */
					//Removed DDH 12/10/10 because it didn't match ASP's URLEncode output
	
	var HEX = "0123456789ABCDEF";
	var encoded = "";

	if (typeof(sValue)!="undefined")
	{
		var plaintext = sValue;
		for (var i = 0; i < plaintext.length; i++ ) {
			var ch = plaintext.charAt(i);
			if (ch == " ") {
				encoded += "+";				// x-www-urlencoded, rather than %20
			} else if (SAFECHARS.indexOf(ch) != -1) {
				encoded += ch;
			} else {
				var charCode = ch.charCodeAt(0);
				if (charCode > 255) {
					alert( "Unicode Character '" 
							+ ch 
							+ "' cannot be encoded using standard URL encoding.\n" +
							  "(URL encoding only supports 8-bit characters.)\n" +
							  "A space (+) will be substituted." );
					encoded += "+";
				} else {
					encoded += "%";
					encoded += HEX.charAt((charCode >> 4) & 0xF);
					encoded += HEX.charAt(charCode & 0xF);
				}
			}
		} // for
	}
	return encoded;
};

function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   if (typeof(encoded)!="undefined")
   {
	   while (i < encoded.length) {
		   var ch = encoded.charAt(i);
		   if (ch == "+") {
			   plaintext += " ";
			   i++;
		   } else if (ch == "%") {
				if (i < (encoded.length-2) 
						&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
						&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
					plaintext += unescape( encoded.substr(i,3) );
					i += 3;
				} else {
					alert( 'Bad escape combination near ...' + encoded.substr(i) );
					plaintext += "%[ERROR]";
					i++;
				}
			} else {
			   plaintext += ch;
			   i++;
			}
		} // while
	}
	return plaintext;
};

/*
------------------------------------------------------------
Matching RoundUp function to the ASP RoundUp version we created
that fixes the problems with built in rounding.
------------------------------------------------------------
*/
function RoundUp(number, decimals)
{
	var newString;// The new rounded number
	decimals = Number(decimals);
	if (decimals < 1)
	{
		newString = (Math.round(number)).toString();
	} 
	else
	{
		var numString = number.toString();
		var iDecimalPoint = numString.indexOf(".");
		
		if (iDecimalPoint > -1)
		{
			var i999999999fix = numString.indexOf("99999999");
			/*
			if (i999999999fix > -1)
			{
				alert('iDecimalPoint=' + iDecimalPoint + ', numString=' + numString + ', i999999999fix' + i999999999fix);
			}
			*/
			if (i999999999fix - iDecimalPoint == decimals + 2)
			{
				//alert('wahoo!');
				number = RoundUp(number, decimals + 1);
				numString = number.toString();
			}
		}
		else
		{// If there is no decimal point
			numString += ".";// give it one at the end
		}
		var cutoff = numString.lastIndexOf(".") + decimals;// The point at which to truncate the number
		var d1 = Number(numString.substring(cutoff,cutoff+1));// The value of the last decimal place that we'll end up with
		var d2 = Number(numString.substring(cutoff+1,cutoff+2));// The next decimal, after the last one we want
		var iPassedPeriodBy = 0;
		var bPassedPeriodBy = false;
		if (d2 >= 5)
		{// Do we need to round up at all? If not, the string will just be truncated
			if (d1 == 9 && cutoff > 0) {// If the last digit is 9, find a new cutoff point
				while (cutoff > 0 && (d1 == 9 || isNaN(d1))) {
					if (!isNaN(d1)) {
						cutoff -= 1;
						d1 = Number(numString.substring(cutoff,cutoff+1));
						if (bPassedPeriodBy>0)
							iPassedPeriodBy++;
					} else {
						bPassedPeriodBy = true
						cutoff -= 1;
						d1 = Number(numString.substring(cutoff,cutoff+1));
						//numString = numString.substring(0,cutoff) + '0';
					}
				}
			}
			d1 += 1;
		} 
		var sZeros = '0000000000000';
		newString = numString.substring(0,cutoff) + d1.toString() + sZeros.substring(0,iPassedPeriodBy);
	}
	if (newString.lastIndexOf(".") == -1)
	{// Do this again, to the new string
		newString += ".";
	}
	var decs = (newString.substring(newString.lastIndexOf(".")+1)).length;
	for(var i=0;i<decimals-decs;i++) newString += "0";
	//var newNumber = Number(newString);// make it a number if you like
	return parseFloat(newString); // Output the result to the form field (change for your purposes)
}
