var dblSubTotal=0; // ### set in 'tmpl_cart.php' via php
var dblShipping=0;
var dblSalesTax=0;
var dblHandlingFee = 0; // ### set in 'tmpl_cart.php' via php, it gets added to shipping cost in 'ProcessShippingRates'
var objShippingRateAJAX;
var objTaxRateAJAX;
var objUserNameAJAX;
var bUserNameExists=false;

function CheckoutValidate(frm) {
	if (bUserNameExists) {
		alert("The username you have selected already exists.  Please select a different variation");
		return false;
	}
	else {
		if (document.getElementById('txtAccountPassword')) {
			if (document.getElementById('txtAccountPassword').value!=document.getElementById('txtAccountPasswordConfirm').value) {
				alert("Your passwords do not match.");
				return false;
			}
			else if (document.getElementById('txtAccountPassword').value.length < 4) {
				alert("Please choose a password with at least 4 characters.");
				return false;
			}
		}
		var txt=document.getElementById('txtAgree');
		if (txt && txt.value!="checked") {
			alert("You must accept the terms and conditions before continuing.");
			return false;
		}
		
		return validate(frm,'');	
	}
}

function CheckUserName(txtbox) {
	objUserNameAJAX=InitializeAJAX();
	var url="/includes/username-autocomplete.php?txtUserName="+txtbox.value;
	//window.location.href=url;
	//return;
	if(objUserNameAJAX!=null) {
		objUserNameAJAX.onreadystatechange = ProcessUserName;
		objUserNameAJAX.open("GET", url, true);
		objUserNameAJAX.send(null);
		
	}
}


function ProcessUserName()	{
	if (objUserNameAJAX.readyState == 4) {
		if (objUserNameAJAX.status == 200) {
			if (objUserNameAJAX.responseText!="") {
				//alert(objUserNameAJAX.responseText);
				var lbl = document.getElementById('lblUsername');
				if (objUserNameAJAX.responseText=="true") {
					lbl.style.color='#df5f98';
					lbl.style.fontWeight='bold';
					lbl.innerHTML="USED";	
					bUserNameExists=true;
					
					with(document.getElementById('txtAccountUserName')) {
						style.borderColor = '#df5f98';
						focus();
						select();
					}
					
				}
				else {
					lbl.style.fontWeight='normal';
					lbl.innerHTML="NOT USED";
					with(document.getElementById('txtAccountUserName')) {
						style.borderColor = '#63AB62';
					}
					bUserNameExists=false;
				}
			}
		}			
	}
}

function CheckEmailAddress(txtbox) {
	objEmailAddressAJAX=InitializeAJAX();
	var url="/cart/includes/emailaddress_check.php?address="+txtbox.value;
	//window.location.href=url;
	//return;
	if(objEmailAddressAJAX!=null) {
		objEmailAddressAJAX.onreadystatechange = ProcessEmailAddress;
		objEmailAddressAJAX.open("GET", url, true);
		objEmailAddressAJAX.send(null);
		
	}
}


function ProcessEmailAddress()	{
	if (objEmailAddressAJAX.readyState == 4) {
		if (objEmailAddressAJAX.status == 200) {
			if (objEmailAddressAJAX.responseText!="") {
				//alert(objUserNameAJAX.responseText);
				var lbl = document.getElementById('lblBillingEmail');
				if (objEmailAddressAJAX.responseText=="true") {
					lbl.style.color='#df5f98';
					lbl.style.fontWeight='bold';
					lbl.innerHTML="USED";
					alert('The email address you entered seems to already be in use.');
					bUserNameExists=true;
					
					with(document.getElementById('txtBillingEmail')) {
						style.borderColor = '#df5f98';
						focus();
						select();
					}
					
				}
				else {
					lbl.style.fontWeight='normal';
					lbl.innerHTML="";
					with(document.getElementById('txtBillingEmail')) {
						style.borderColor = '#63AB62';
					}
					bUserNameExists=false;
				}
			}
		}			
	}
}


function UpdateGrandTotal() {
	var drp=document.getElementById('tmpUSPSService');
	var tmpDblShipping = 0;
	try {
		var ary=drp.options[drp.selectedIndex].value.split("|");
		if (ary.length==2) {
			tmpDblShipping=parseFloat(ary[1]);	
		}
	}
	catch (e) {
		//tmpDblShipping=0;
		
		//if(dblShipping <= 0) {
		//	dblShipping = tmpDblShipping;
		//}
	}
	
	if(tmpDblShipping > 0) {
		dblShipping = tmpDblShipping;	
	}
	
	//alert((dblSubTotal+dblShipping+dblSalesTax));
	document.getElementById('lblShippingRate').innerHTML="$"+FormatNumber(dblShipping,2,false,false,true);
	document.getElementById('lblGrandTotal').innerHTML="$"+FormatNumber((dblSubTotal+dblShipping+dblSalesTax),2,false,false,true);
	document.getElementById('hidSubTotal').value=dblSubTotal;
	document.getElementById('hidSalesTax').value=dblSalesTax;
	document.getElementById('hidShipping').value=dblShipping;
}


function InitializeAJAX() {
	try {
		objAJAX=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e) {
		try {
			objAJAX=new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(oc) {
			objAJAX=null;
		}
	}

	if(!objAJAX&&typeof XMLHttpRequest!="undefined") {
		objAJAX= new XMLHttpRequest();
	}
	return objAJAX;
} 

function SendTaxQuery(billingstate,billingzip)	{
	/*if (billingstate=="OH") {
		objTaxRateAJAX=InitializeAJAX();
		var url="/cart/includes/ohiosalestax-autocomplete.php?subtotal="+parseFloat((dblSubTotal+dblShipping))+"&billingstate="+billingstate+"&billingzip="+billingzip;
		//window.location.href=url;
		//return;
		if(objTaxRateAJAX!=null) {
			objTaxRateAJAX.onreadystatechange = ProcessOhioTax;
			objTaxRateAJAX.open("GET", url, true);
			objTaxRateAJAX.send(null);
			
		}
	}*/
}

function ProcessOhioTax()	{
	/*if (objTaxRateAJAX.readyState == 4) {
		if (objTaxRateAJAX.status == 200) {
			if (objTaxRateAJAX.responseText!="") {
				var ary=objTaxRateAJAX.responseText.split("&");
				var frm=document.getElementById("frmCheckout")
				for (i=0;i<=ary.length-1;i++) {
					arytmp=ary[i].split("=");
					if (arytmp[0]=="lblSalesTaxCounty") {
						eval("document.getElementById('"+arytmp[0]+"').innerHTML = '"+arytmp[1]+" County Tax: '");
						//frm.txtSalesTax.value=document.getElementById(arytmp[0]).innerHTML;
					}
					else if (arytmp[0]=="lblSalesTax") {
						if(arytmp[1] == '') {
							arytmp[1] = 0.00;
						}
						eval("document.getElementById('"+arytmp[0]+"').innerHTML = '$'+FormatNumber('"+arytmp[1]+"',2,false,false,true);");
						dblSalesTax=parseFloat(arytmp[1]);
					}
				}
			}
			else {
				eval("document.getElementById('lblSalesTaxCounty').innerHTML = ''");
				eval("document.getElementById('lblSalesTax').innerHTML = ''");
				frm.txtSalesTax.value= '0'
				frm.txtSalesTaxCounty.value= '';
				dblSalesTax=0;	
			}
			UpdateGrandTotal();
		}			
	}*/
}



function ToggleShippingInfo(chkbox,pnlID,frmID,strBillingPrefix,strShippingPrefix) {
	var pnl=document.getElementById(pnlID);
	var frm=document.getElementById(frmID);
	var bUseBilling=true;
	if (!chkbox.checked) {
		pnl.style.display = "block";
		bUseBilling=false;
	}
	else {
		pnl.style.display = "none";
		//document.Form1.txtShippingState.selectedIndex = document.Form1.txtBillingState.selectedIndex;
	}
	for (var i=0;i<frm.length;i++) {  //Whole Form
		if (frm.elements[i].name) {
			if (frm.elements[i].name.substr(0,strBillingPrefix.length)==strBillingPrefix) {
				try {
					obj=document.getElementById(frm.elements[i].name.replace(strBillingPrefix,strShippingPrefix));
					if (obj.type=="text") {
						if (bUseBilling) {
								obj.setAttribute('originalValue',obj.value);
								obj.value=frm.elements[i].value;
						}
						else {
							//obj.value=obj.getAttribute('originalValue');
						}
					}
					else if (obj.type=="select-one") {
						obj.selectedIndex = frm.elements[i].selectedIndex;
					}
				}
				catch (e) {
					
				}
			}
		}
	}
}

function GetShippingRates(pounds,ounces,zip)	{
	//alert(pounds+'|'+ounces+'|'+zip);
	if ((pounds!=0 || ounces!=0) && zip!="") {
		objShippingRateAJAX=InitializeAJAX();
		var drpShippingCountry=document.getElementById("txtShippingCountry");
		var url="/cart/includes/usps-autocomplete.php?country=United+States&pounds="+pounds+"&ounces="+ounces+"&zip="+zip;
		//window.location.href=url;
		//return;
		//alert(url);
		if(objShippingRateAJAX!=null) {
			objShippingRateAJAX.onreadystatechange = ProcessShippingRates;
			objShippingRateAJAX.open("GET", url, true);
			objShippingRateAJAX.send(null);
			//alert(url);
		}
	}
	else {
		dblShipping = dblHandlingFee;
		document.getElementById("idShippingMethodContainer").style.display='none';
		UpdateGrandTotal();
	}
}

function clearList(list) {
var i = 0;
var o = list.options;
//alert(o.length);
for (i = o.length; i >= 0; --i)
	o[i] = null;
list.disabled = true;
}

function addElement(list, text_in, value_in) {
var o = list.options;
var nIdx;
if (o.length < 0) //IE for Mac 4.5 sets length to -1 if list is empty
	nIdx = 0;
else
	nIdx = o.length;
if (text_in!="undefined") {
	o[nIdx] = new Option(text_in, value_in);
}
list.disabled = false;
}

function ProcessShippingRates()	{
	if (objShippingRateAJAX.readyState == 4) {
		if (objShippingRateAJAX.status == 200) {
			//alert(objAJAX.responseText);
			if (objShippingRateAJAX.responseText!="") {
				document.getElementById("idShippingMethodContainer").style.display='';
				var drpShippingRates=document.getElementById("tmpUSPSService");
				clearList(drpShippingRates);
				var ary=objShippingRateAJAX.responseText.split("&");
				for (i=0;i<ary.length-1;i++) {
					arytmp=ary[i].split("=");
					
					if(arytmp[0] == 'Parcel Post' || arytmp[0] == 'Priority Mail' || arytmp[0] == 'Express Mail') {
						//--------------------------------------------------
						// Add handling price into shipping price
						//--------------------------------------------------
						var tmpPrice = ((arytmp[1] - 0) + dblHandlingFee);
						if (arytmp[0]!="Prohibitions" && arytmp[0]!="Restrictions") {
							addElement(drpShippingRates, arytmp[0]+" ($"+tmpPrice+")", arytmp[0]+"|"+tmpPrice)
						}
					}
				}
				if (drpShippingRates.options.length==0) {
					alert("There has been a problem getting a shipping rate for information you've provided.\n")
				}
			}
			else {
				alert("There has been a problem getting a shipping rate for information you've provided.\n")	
			}
			UpdateGrandTotal();
		}
		
	}
}

function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas) { 
	num = (num - 0);
	if(isNaN(num)) {
		return "NaN";
	}
	
	//if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1;		// Get sign of number
	
	// Adjust number so only the specified number of numbers after
	// the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign;					// Readjust for sign
	
	
	// Create a string object to do our formatting on
	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
		
	var numReturn = new Number(tmpNumStr);
	tmpNumStr = numReturn.toFixed(decimalNum);
	
	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}		
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";
	//var numReturn = new Number(tmpNumStr);
	//return numReturn.toFixed(decimalNum);		// Return our formatted string!
	return tmpNumStr;
}