//==========================================================
/* global vars
-----------------------------------------------------------*/
	
var cart = {}; //main cart object
cart.settings = {};
cart.settings.newdomainprice 			= {1:65,2:120,3:165,4:200,5:225}; 	//% discount for multiple years of new ownership
cart.settings.renewaldomainprice		= {1:65,2:120,3:165,4:200,5:225};	//% discount for multiple years of renewal
cart.settings.transfermonthlyprice		= 2.5; 								//monthly price for remaining time on a transfer domain
cart.settings.transferdailyprice		= 0.1; 								//daily price for remaining time on a transfer domain
cart.settings.transfergraceperiod		= 30; 								//number of days we subtract from transfer pricing to allow for transfer lags
cart.settings.transferautoextension		= 365 - cart.settings.transfergraceperiod; //automated time extension on any transfer
cart.settings.quantitypricing			= [0,0.1,0.15,0.20];					//% discount for multiple domains
cart.settings.monthlyemailpricing		= 0.50;								//monthly cost per unique mail box
cart.settings.dailyemailpricing			= 0.02;								//Daily cost for an email redirect

cart.settings.isVisible 				= false;
cart.settings.defaultemailpointer 		= "firstname.lastname.alias@statefarm.com";
cart.settings.defaultemailname 			= "yourfirstname";
cart.settings.showemptycart 			= true;
cart.settings.allowemailpurchase 		= true;
cart.settings.isBillingOpen				= false;

cart.contents = {};
cart.renewal = {};
cart.FX = {};

cart.emaillength = function(){
	var cnt = 0;
	for (var i in cart.contents){
		if (cart.contents[i]){
			for (var j in cart.contents[i].email){
				cnt++;
			}
		}
	}
	return cnt;
};

cart.length = function(ignoreEmailOnly){
	var cnt = 0;
	for (var i in cart.contents){
		if((ignoreEmailOnly && !cart.contents[i].isEmailOnly) || !ignoreEmailOnly){
			cnt++;
		}
	}
	return cnt;
};

cart.domainObj = function(domainName,years,dayCount,isTransfer,eppCode,transferEmail,transferRemainingDays,isRenewal,isEmailOnly){
	this.domainName 							= domainName;
	this.isTransfer 							= isTransfer?true:false;
	this.eppCode								= eppCode==null? eppCode: eppCode.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&apos;");
	this.transferEmail	 						= transferEmail;
	this.transferRemainingDays 					= transferRemainingDays;
	this.dayCount								= dayCount;
	this.isRenewal	 							= isRenewal?true:false;
	this.email 									= {};
	this.years 									= years?years:1;
	this.sld 									= domainName.split(".")[0];
	this.tld 									= domainName.split(".")[1];
	this.isNew									= (!(isTransfer || isRenewal || isEmailOnly))?true:false;
	this.isEmailOnly							= isEmailOnly?true:false;
	this.orderSuccess 							= isEmailOnly?true:false;
	this.orderMessage 							= "";
};

cart.emailObj = function(mailName,pointsTo,replaceEmailID){
	this.mailName 			= mailName;
	this.pointsTo 			= pointsTo;
	this.replaceEmailID		= replaceEmailID?replaceEmailID:false;
	this.orderSuccess 		= false;
	this.orderMessage 		= "";
};

/* add domain to the cart object
----------------------------------------------------------------*/
cart.addDomain = function(domainName,years,isTransfer,eppCode,transferEmail,transferRemainingDays,isRenewal,isEmailOnly,skipRefresh){
	cart.emailDialog(null,true);
	years = years?years:($(domainName))?($(domainName).years):null;
	//console.info("--- adding domain ---");
	//console.info(arguments);
	//add to cart contents object
	
	//if overwriting values, grab the email
	var e = (cart.contents[domainName])?(cart.contents[domainName].email):null;

	var dayCount = 0;
	if (!(isTransfer || isRenewal || isEmailOnly)){  				//must be a new domain purchase
		dayCount = dateDiff("d",now(true),dateAdd("yyyy",years,now()));
	}else if (isRenewal){																		//a renewal, naturally
		dayCount = dateDiff("d",now(true),dateAdd("yyyy",years,now()));
	}else if (isTransfer){																	//transfer
		dayCount = transferRemainingDays;
	}else if (isEmailOnly){
		//figure out how many days are left on this domain				
		dayCount = transferRemainingDays;
	}
	
	cart.contents[domainName] = new cart.domainObj(domainName,years,dayCount,isTransfer,eppCode,transferEmail,transferRemainingDays,isRenewal,isEmailOnly);
	//console.info(cart.contents[domainName]);
	if (e){
		cart.contents[domainName].email = e; //replace the email
	}
	//console.info(cart.contents)
	if (!skipRefresh){ cart.refresh(); }
	cart.addTotals();
};

/* add domain to the cart object
----------------------------------------------------------------*/
cart.removeDomain = function(domainName,skipRefresh){
	console.info("removing " + domainName);
	//remove to cart contents object
	if (cart.contents[domainName]){
		delete cart.contents[domainName];
		//console.info(cart.contents[domainName]);
		//$("cartTR_" + domainName).parentNode.deleteRow($("cartTR_" + domainName).rowIndex);
		$("domainCartItemTable").deleteRow($("cartTR_" + domainName).rowIndex);
		if (!skipRefresh){ cart.refresh(); }
	}
	
	cart.disableMatchedSearchResults();
	cart.emailDialog(null,true);
	
};

/* add domain email to the cart object
----------------------------------------------------------------*/
cart.addDomainEmail = function(mailName,pointsTo,domainName,replaceEmailID,skipRefresh){
	//add to cart contents object
	if (cart.contents[domainName]){
		cart.contents[domainName].email[mailName] = new cart.emailObj(mailName,pointsTo,replaceEmailID);
		cart.emailDialog(null,true);
		if (!skipRefresh){ cart.refresh(); }
	}else{
		console.info("domain doesn't exist to add mail to");
	}
	
};


/* add domain email to the cart object
----------------------------------------------------------------*/
cart.updateEmailForward = function(emailID,emName,emPointsTo,forceDelete,xhrObj){
	if(emailID && !xhrObj && cart.settings.agentAlias){
		console.info("attempting email update " + emName);
		dom.addFormData("__emailUpdateForm","func","ude","hidden");
		dom.addFormData("__emailUpdateForm","emailID",emailID,"hidden");
		dom.addFormData("__emailUpdateForm","agentAlias",cart.settings.agentAlias,"hidden");
		if (forceDelete){
			dom.addFormData("__emailUpdateForm","emIsDeleted","1","hidden");
		}else{
			dom.addFormData("__emailUpdateForm","emName",emName,"hidden");
			dom.addFormData("__emailUpdateForm","emPointsTo",emPointsTo,"hidden");
		}
		var sURL = rootPath + "incs/siteXHR.asp";
		xhr.connect(sURL,"POST",cart.updateEmailForward,[emailID,emName,emPointsTo,forceDelete],"__emailUpdateForm");
	}else if(xhrObj){
		//console.info("we're back!");
		//reload the domain management listings
		agent.loadAgentInfo(readCookie("agentTempGUID"));
	}
	dom.removeObject("__emailUpdateForm");

};

/* add a mail-only domain to the cart and open the mail dialog
----------------------------------------------------------------*/
cart.addEmailRedirect = function(domainName,domainExpiration){
	//figure out how long is left on the domain
	var dayCount = dateDiff("d",now(),domainExpiration);
	//add domain to cart as isEmailOnly
	cart.addDomain(domainName,null,null,null,null,dayCount,null,true);
	//open email dialog for domain
	cart.emailDialog(domainName,null);
	agent.selectTab("__cartTab");
};


/* edit or delete a mail redirect
----------------------------------------------------------------*/
cart.editEmailRedirect = function(emailID,deleteRedirect){
	console.info("editing " + $(emailID).domainName );
	if (deleteRedirect){
		if (confirm("Are you sure you want to delete this address?\nThere are no reimbursments for un-used time.\nYou can also choose to EDIT the address and use\nthe remaining time for another individual.\n\n\nClick \"Ok\" if you still want to delete this address.")){
			cart.updateEmailForward(emailID,null,null,true);
		}
	}else{
		cart.emailDialog($(emailID).domainName,null,$(emailID));
	}
};



/* remove domain email from the cart object
----------------------------------------------------------------*/
cart.removeDomainEmail = function(mailName,domainName,skipRefresh){
	//console.info(arguments);
	//add to cart contents object
	if (cart.contents[domainName]  && cart.contents[domainName].email[mailName]){
		delete cart.contents[domainName].email[mailName];
		cart.emailDialog(null,true);
		if (!skipRefresh){ cart.refresh(); }
	}else{
		console.info("domain doesn't exist to add mail to");
	}
};

/* build the dialog for adding an email to a domain
----------------------------------------------------------------*/
cart.emailDialog = function(dVal,removeDialog,forceParent){
	var stayClosed = false;
	if (($("emailDialogTR") && $("emailDialogTR").attachedToDomain == dVal) || removeDialog){
		stayClosed = true;
		cart.refresh();
	}
	
	if ($("emailDialogTR")){
		 $("emailDialogTR").parentNode.removeChild($("emailDialogTR"));
	}
	
	if (!stayClosed){
		if ($("checkoutButton")){
			cart.settings.isBillingOpen = true;
			cart.displayBillingForm();
			$("checkoutButton").disabled = true;
			$("checkoutButton").className = 'smallInActiveButton';
		}
		var cr = (forceParent)?forceParent:$("cartTR_" + dVal);	
		
		var edTR = dom.addNode("",cr.parentNode,"tr",{},{});
		cr.parentNode.insertBefore(edTR,cr.nextSibling);
		
		//var edTR = (forceParent)?cr.parentNode.insertRow(cr.rowIndex+1):cr.parentNode.insertRow(-1);
		edTR.id = "emailDialogTR";
		edTR.attachedToDomain = dVal;
		var edTD  = edTR.insertCell(0);
		console.info(cr.cells.length);
		edTD.colSpan = cr.cells.length + ((forceParent)?0:1);
		edTD.className = "emailDialogTD";
		
		var headMsg = "";
		dom.toggle("__emailempty",false);
		if (forceParent){ //indicates we're editing an existing record, not creating a new one.
			headMsg = "<b>Edit this redirect:</b><br>Use this dialog to edit this e-mail redirect.<br>";
			headMsg += "Currently it points <b>" + forceParent.emName + "@" + dVal +"</b> to <b>" + forceParent.emPointsTo + "</b><hr>";
			
		}else{
			headMsg = "<b>Add a simple e-mail address:</b><br>Create a shorter, simpler e-mail address that will re-direct e-mail into your lengthy statefarm.com email address.<hr/>";
			var dayCount = (cart.contents[dVal].isTransfer)?(cart.contents[dVal].transferRemainingDays):(cart.contents[dVal].dayCount);
			headMsg += "<b>Pricing:</b><br>This new e-mail address will match the expiration date for your domain,";
			headMsg += " which is " + dayCount + " days from now. A new address costs 2&cent; a day<br> ";
			headMsg += "<div style='color:green;text-align:right;padding:0px;margin:0px;'>The cost will be  <b>2&cent; a day for " + dayCount + " days = ";
			headMsg += formatCurrency(dayCount * cart.settings.dailyemailpricing) + "</b></div><hr/> ";
		}
		dom.addNode(headMsg,edTD,"div",{},{});
		
		var eNameRow = dom.addNode("",edTD,"div",{},{});
		dom.addNode("<b>" + ((forceParent)?"Update this":"Create a new") + " e-mail address:</b><br>Please enter the new, short e-mail name you want (before the <b>@</b> symbol):<br/>",eNameRow,"span",{},{});
		dom.addNode(null,eNameRow,"input",{id:"newEmailName",value:cart.settings.defaultemailname,size:15},{color:"#aaa"});
		dom.addNode("<b>@" + dVal + "</b>",eNameRow,null,{},{color:"green",fontSize:"12px"});
		var ePointerRow = dom.addNode("",edTD,"div",{},{margin:"5px 0 0 0"});
		dom.addNode("Now enter your <b>full</b> statefarm.com email address:<br/>",ePointerRow,null,{},{});
		dom.addNode(null,ePointerRow,"input",{id:"newEmailPointer",value:cart.settings.defaultemailpointer,size:40},{color:"#aaa"});
		
		dom.setFieldFormat("newEmailName",{keyup:"alphanumericnospace",minlength:1,clean:true,nomark:true});
		dom.setFieldFormat("newEmailPointer",{keyup:"email",clean:true});
		dom.addNode("",edTD,"div",{id:"__newMailStatus"},{color:"red"});
		
		var eBtnRow = dom.addNode("",edTD,"div",{},{textAlign:"right",paddingTop:"5px",borderTop:"1px dotted #888"});
		dom.addNode("When you've filled out both fields click " + ((forceParent)?"UPDATE":"ADD") + " =&gt;&nbsp;",eBtnRow,"span",{},{color:"green"});
		dom.addNode("",eBtnRow,"input",{type:'button',value:((forceParent)?"Update Email":"Add Email"),onclick:function(){
																					if (dom.checkFieldFormat("newEmailName") && dom.checkFieldFormat("newEmailPointer")){
																							if ($("newEmailPointer").value == cart.settings.defaultemailpointer || $("newEmailName").value == cart.settings.defaultemailname){
																								$("__newMailStatus").innerHTML = "Don't use the example values to create your new email entry.";
																							}else{
																								if(forceParent){
																									cart.updateEmailForward(forceParent.id,$("newEmailName").value,$("newEmailPointer").value);
																								}else{
																									cart.addDomainEmail($("newEmailName").value,$("newEmailPointer").value,dVal);
																								}
																							}
																					}else{
																						$("__newMailStatus").innerHTML = "There's an error with your information above.  Fix any field colored <b>red</b>.";
																						//name or pointer is unusable
																					}						
						},className:"smallActiveButton"},{});

		dom.addNode("",eBtnRow,"input",{type:'button',value:'Cancel Email',onclick:function(){
																				cart.emailDialog(null,true);																					
																				cart.refresh();
																				if ($("checkoutButton")){
																					$("checkoutButton").disabled = false;
																					$("checkoutButton").className = 'smallActiveButton';
																				}
																				},className:"smallCancelButton"},{});	
		
		addEvent($("newEmailName"),"focus",function(){																		
																		if ($("newEmailName").value == cart.settings.defaultemailname){
																			$("newEmailName").value="";
																			$("newEmailName").style.color = "#000";
																		}
																	},false);
																
		addEvent($("newEmailName"),"blur",function(){																		
																	if (!$("newEmailName").value){
																		$("newEmailName").style.color = "#aaa";
																		$("newEmailName").value = cart.settings.defaultemailname;
																	}
																	},false);
																	
		addEvent($("newEmailPointer"),"focus",function(){																		
																		if ($("newEmailPointer").value == cart.settings.defaultemailpointer){
																			$("newEmailPointer").value="";
																			$("newEmailPointer").style.color = "#000";
																		}
																	},false);
																
		addEvent($("newEmailPointer"),"blur",function(){																		
																	if (!$("newEmailPointer").value){
																		$("newEmailPointer").style.color = "#aaa";
																		$("newEmailPointer").value = cart.settings.defaultemailpointer;
																	}
																	},false);
		if (forceParent){
			$("newEmailName").value = forceParent.emName;
			$("newEmailPointer").value = forceParent.emPointsTo;
			$("newEmailName").style.color = "#000";
			$("newEmailPointer").style.color = "#000";
			dom.checkFieldFormat("newEmailName");
			dom.checkFieldFormat("newEmailPointer");
		}
	}
	
};


/* build the dialog for renewing a domain
----------------------------------------------------------------*/
cart.renewDialog = function(domObj,removeDialog,forceParent){
	cart.renewal = {};	
	cart.renewal.domainName = domObj?(domObj.domSLD + '.' + domObj.domTLD):null;
	cart.renewal.domainID = domObj?(domObj.domainID):null;
	cart.renewal.yearCount = 0;
	cart.renewal.email = domObj?(domObj.email):null;
	cart.renewal.regExpirationDate = domObj?(domObj.regExpirationDate):null;
	var stayClosed = false;
	if (($("renewDialogTR") && $("renewDialogTR").attachedToDomain == cart.renewal.domainName) || removeDialog){
		stayClosed = true;
	}
	
	if ($("renewDialogTR")){
		 $("renewDialogTR").parentNode.removeChild($("renewDialogTR"));
	}
	
	if (domObj && !stayClosed){
		var cr = (forceParent)?forceParent:null;	
		
		var edTR = dom.addNode("",cr.parentNode,"tr",{},{});
		cr.parentNode.insertBefore(edTR,cr.nextSibling);
		
		//var edTR = (forceParent)?cr.parentNode.insertRow(cr.rowIndex+1):cr.parentNode.insertRow(-1);
		edTR.id = "renewDialogTR";
		edTR.attachedToDomain = cart.renewal.domainName;
		var edTD  = edTR.insertCell(0);
		edTD.colSpan = dom.colCount(cr);
		edTD.className = "emailDialogTD";
		var headMsg = "";
		if (forceParent){ //indicates we're editing an existing record, not creating a new one.
			headMsg = "<h3>How to renew www." + cart.renewal.domainName + ":</h3>Use this dialog to select more years of domain ownership. ";
			headMsg += "You'll also be able to extend any e-mail addresses purchased for this domain.<hr/>";
		}
		dom.addNode(headMsg,edTD,"div",{},{});		
		//var eNameRow = dom.addNode("",edTD,"div",{},{});
		dom.addNode("<h4>1. Domain Renewal Length:</h4>Select the number of years that you'd like to renew the domain for:<br/>",edTD,"div",{},{});
		var rYearRow = dom.addNode("",edTD,"div",{id:"renewalYearOptions"},{"margin":'5px',fontSize:'1.8em'});
		

		for (var y=1;y<6;y++){
			var yearOption = dom.addNode(y,rYearRow,"span",{id:"renewalYearOption_" + y,yearCount:y,domname:cart.renewal.domainName,className:"inActiveYearDurationOption"});
			addEvent(yearOption,"click",function(e){										
													cart.setRenewalYearDuration((e.srcElement || e.target).yearCount);
													});
		}
		dom.addNode("",rYearRow,"span",{id:"renewalYearMessage",className:"renewalPrice"},{});
		
		cart.setRenewalYearDuration(3);
		dom.addNode(null,rYearRow,"br",{className:"clearboth"},{});
		emMsg = "<br/><h4>2. E-Mail Renewal:</h4>All of your current e-mail addresses will be added to your cart ";
		emMsg += "when you add this renewal.  You may then remove any addresses from the cart you don't want to renew. ";
		emMsg += "";
		dom.addNode(emMsg,edTD,"div",{},{});
		
		emMsg = "<h4>3. Pricing:</h4>Your renewal costs are dependant on how many years you renew for ";
		emMsg += "and how many e-mail addresses you are renewing.  When you click the Add Renewal button, the cart will ";
		emMsg += "show your pricing with any discounts applied, and you may remove anything you don't want to purchase.";
		emMsg += "";
		dom.addNode(emMsg,edTD,"div",{},{});
		
		var eBtnRow = dom.addNode("",edTD,"div",{},{textAlign:"right",paddingTop:"5px"});
		dom.addNode("When you're done click here to add this to your cart =&gt;&nbsp;",eBtnRow,"span",{},{color:"green"});
		dom.addNode("",eBtnRow,"input",{type:'button',value:'Add Renewal To Cart',onclick:function(){
												cart.addRenewalToCart();
										},className:"smallActiveButton"},{});

		dom.addNode("",eBtnRow,"input",{type:'button',value:'Cancel Renewal',onclick:function(){
														cart.renewDialog(null,null,true);					
										},className:"smallCancelButton"},{});
		
		var dnrMsg = "<h3>If you prefer to <u>not to renew</u> www." + cart.renewal.domainName + ":</h3>";
		dnrMsg += "You don't have to do a thing.  You've paid for this domain until <b>" + smallDate(domObj.regExpirationDate) + "</b>, ";
		dnrMsg += "and it will continue working until then. After it expires, it will return to public availability about 75 days later (approx. " + smallDate(dateAdd('d',75,domObj.regExpirationDate)) + ").";
		dnrMsg += "<br/><br/><b>Please remember:</b> This domain and any associated e-mail addresses will continue working until the date of expiration.";
		dnrMsg += "";
		dom.addNode(dnrMsg,edTD,"div",{id:"doNotRenewDialog",display:"none"},{border:"1px solid #aaa",backgroundColor:"#ffe",margin:"8px 0 0 0",padding:"12px"});
		
		
		
		if (domObj.regWillNotRenew){
			var renewOptionMsg = "<b>Please Let Me Know!</b> If you'd like to be e-mailed when this domain nears expiration, click the button below.";
			var btnValue = "Send Renewal Notices";
			var bgColor = "#f0fff0";
		}else{
			var renewOptionMsg = "<b>Stop Reminding Me!</b> If you'd like us to stop sending you renewal reminders, just click the button below.";
			var btnValue = "Stop Sending Renewal Notices";
			var bgColor = "#FFF0F0";
		}
		dom.addNode(renewOptionMsg,"doNotRenewDialog","div",{id:'renewalNoticeOption'},{backgroundColor:bgColor,padding:'15px',marginTop:'10px',border:'1px solid silver'});
		
		dom.addNode("","renewalNoticeOption","div",{id:"doNotRenewNav"},{textAlign:'right'});		
		dom.addNode("","doNotRenewNav","input",{id:'renewNoticeBtn',domObj:domObj,type:'button',value:btnValue,onclick:function(e){
												cart.changeRenewalNotice((e.srcElement || e.target).domObj);
										},className:"smallActiveButton"},{});
	}
};

/* stop renewal notices for a domain
----------------------------------------------------------------*/
cart.changeRenewalNotice = function(domObj,jsonObj){
	console.info('changeRenewalNotice:',domObj,jsonObj);
	if(domObj && !jsonObj){
		$("renewNoticeBtn").className = "smallActiveButton";
		$("renewNoticeBtn").enabled = false;
		
		console.info("attempting to change status for renewal notices: " + cart.renewal.domainName);
		dom.addFormData("__changeRenewalForm","func","crn","hidden");
		dom.addFormData("__changeRenewalForm","registrationID",domObj.registrationID,"hidden");
		if (domObj.regWillNotRenew){  //already marked that they don't want notices
			dom.addFormData("__changeRenewalForm","regWillNotRenew","false","hidden");
			dom.addFormData("__changeRenewalForm","regWillNotRenewDateMarked","null","hidden");
			dom.addFormData("__changeRenewalForm","regWillNotRenewIP","null","hidden");				
		}else{
			dom.addFormData("__changeRenewalForm","regWillNotRenew","true","hidden");
			dom.addFormData("__changeRenewalForm","regWillNotRenewDateMarked","GETDATE()","hidden");
			dom.addFormData("__changeRenewalForm","regWillNotRenewIP",remoteHost,"hidden");				
		}
		var sURL = rootPath + "incs/siteXHR.asp";
		xhr.json(sURL,"POST",cart.changeRenewalNotice,[domObj],"__changeRenewalForm");
		dom.removeObject("__changeRenewalForm");
	}else if(jsonObj){
		//$("renewNoticeBtn").className = "smallActiveButton";
		//$("renewNoticeBtn").enabled = false;
		console.info('changed renwal status');
		location.request.dnrd = domObj.domainID;
		agent.loadAgentInfo(readCookie("agentTempGUID"));
	}	
};

/* add a renewed domain and its email addresses to the cart
----------------------------------------------------------------*/
cart.addRenewalToCart = function(){
	var cr = cart.renewal;
	
	cart.addDomain(cr.domainName,cr.yearCount,false,null,null,null,true); //add our renewal domain
	var e = cr.email;
	if (e && e.emailID.length){
		for (var j=0;j<e.emailID.length;j++){
			if (e.domainID[j] == cr.domainID && !e.emIsDeleted[j] && smallDate(e.emExpirationDate[j],true) >= smallDate(now(),true)){
				cart.addDomainEmail(e.emName[j],e.emPointsTo[j],cr.domainName,null,true);
			}
		}
	}
	agent.selectTab("__cartTab");
	cart.refresh();
	cart.renewDialog(null,null,true);
};

/* specify the number of years to renew a domain for
----------------------------------------------------------------*/
cart.setRenewalYearDuration = function(numYears){
	numYears = parseInt(numYears,10);
	cart.renewal.yearCount = numYears;
	cart.renewal.domainRenewalPrice = cart.settings.renewaldomainprice[numYears];
	//$("renewalYearMessage").innerHTML = numYears + " year renewal - " + formatCurrency(cart.renewal.domainRenewalPrice);
	$("renewalYearMessage").innerHTML = numYears + " year renewal to <b>" + smallDate(dateAdd("yyyy",numYears,cart.renewal.regExpirationDate)) + "</b> ";
	//var yn = $("renewalYearOption_" + y);
	var yn = $("renewalYearOptions");
	for (var i=1;i<100; i++){
		var yo = $("renewalYearOption_" + i);
		if (yo){
			if (i == numYears){
				yo.style.backgroundColor = null;
				yo.className = "activeYearDurationOption";				
			}else{
				yo.className = "inActiveYearDurationOption";
				yo.style.backgroundColor = "#F2F2F2";
			}
		}else{ 
			break;
		}
	}
};



/* refresh the contents of the cart
----------------------------------------------------------------*/
cart.refresh = function(fromCookie,orderData){
	
	//console.info("------------ refreshing cart contents - fromCookie:%s -------------", fromCookie);
	dom.removeObject("finishedOrder");
	
	if (fromCookie){
		cart.contents = eval("(" + readCookie("cart.contents") + ")");
		if (!cart.contents){ 
			console.info("no cookie stuff?");
			cart.contents = {}; 
		}
		for (var i in cart.contents){
			if (i.indexOf('.') < 0){ delete cart.contents[i]; }			
		}
	}else{
		createCookie("cart.contents",dom.toJSON(cart.contents),30);
	}

	//cart.addTotals();
	//console.info("email: " + cart.emaillength());
	//console.info('cc: ',cart.contents);
	dom.toggle("domainCartNav",(cart.length() > 0)?true:false);
	dom.toggle("checkoutControl",(cart.length() > 0)?true:false);

	//agent.selectTab("__cartTab");
	
	if (!cart.settings.isVisible && (cart.length() > 0 || cart.settings.showemptycart)){
		dom.toggle("domainCartTable",true);
		cart.settings.isVisible = true;
	}

	dom.removeObject("domainCartItemTable");
	if (!$("domainCartItemTable")){
		dom.addNode(null,"domainCart","table",{id:"domainCartItemTable",border:"0"},{width:"100%"});
	}
	if (cart.length()==0){
		$("__cartTabHeader").innerHTML = "Your cart is currently empty";
		dom.toggle("domainCartItemTable",false);
		if (agent.currenttab == '__cartTab'){
			agent.statusChange("Your cart is empty - you need to add things to it before you can check out.",null,10000);
		}
	}else{
		$("__cartTabHeader").innerHTML = "What's in your cart?";
		dom.toggle("domainCartItemTable",true);
		dom.toggle("__emailwarning",(cart.length()>1)?true:false);		
	}
	var addMailLinkText = (cart.emaillength()>0)?"add another email":"add email";
	
	//add the current cart.contents
	for (var dVal in cart.contents){	
		var cDom = cart.contents[dVal];	

		/*	handle NEW domain rows
		-----------------------------------------------------------*/
		if (cDom.isNew){ 
			if (!$("newDomainTB")){
				dom.addNode(null,"domainCartItemTable","tbody",{id:"newDomainTB"});
				dom.addNode(null,"newDomainTB","tr",{id:"newDomainHeaderRow"});
				dom.addNode("New Domains","newDomainHeaderRow","th",{colSpan:5},{});
			}
			var curTB = $("newDomainTB");
			
			if (!$("cartTR_" + dVal)){
				var newRow = dom.addNode(null,curTB,"tr",{id:"cartTR_" + dVal,domainName:dVal});
				dom.addNode("",newRow,"td",{domainName:dVal,id:"removeTD_" + dVal});
				dom.addNode("","removeTD_" + dVal,"img",{src:rootPath + "images/interface/btnRemove.gif?",domainName:dVal,id:"removeTDImg_" + dVal,className:"fakeLink"});
				dom.addNode(dVal,newRow,"td",{id:"domainTD_" + dVal,"className":"domainName"},{});
				
				dom.addNode("",newRow,"td",{domainName:dVal,id:"emailTD_" + dVal});
				//allow buying email redirects
				if (cart.settings.allowemailpurchase){
					var adEmBtn = dom.addNode(null,"emailTD_" + dVal,"input",{type:'button',value:addMailLinkText,className:'smallActiveButton',domainName:dVal,id:'emailTDImg_' + dVal});
					addEvent(adEmBtn,'click',function(e){
												var obj = (e.srcElement || e.target);
												cart.emailDialog(obj.parentNode.domainName);
												});
				}
				
				dom.addNode("",newRow,"td",{id:"yearsTD_" + dVal},{textAlign:"right"});
				dom.addNode("",newRow,"td",{id:"priceTD_" + dVal},{textAlign:"right"});

				addEvent($("removeTDImg_" + dVal),"click",function(e){cart.removeDomain((e.srcElement || e.target).domainName);});
			}
			
			$("domainTD_" + dVal).innerHTML = dVal;
			$("yearsTD_" + dVal).innerHTML = cDom.years + " yr" + ((cDom.years == 1)?"":"s") + " x " + formatCurrency(cart.settings.newdomainprice[cDom.years]/cDom.years);
			$("priceTD_" + dVal).innerHTML = formatCurrency(cart.settings.newdomainprice[cDom.years]);
			$("priceTD_" + dVal).className = "domainCartPriceColumn";
			var curDomMonths = cDom.years * 12;
		}
		
		/*	handle TRANSFER domain rows
		-----------------------------------------------------------*/	
		if (cDom.isTransfer){ 
			if (!$("transferDomainTB")){
				dom.addNode(null,"domainCartItemTable","tbody",{id:"transferDomainTB"});
				dom.addNode(null,"transferDomainTB","tr",{id:"transferDomainHeaderRow"});
				dom.addNode("Transfer Domains","transferDomainHeaderRow","th",{colSpan:5},{});
			}
			var curTB = $("transferDomainTB");
			if (!$("cartTR_" + dVal)){
				var newRow = dom.addNode(null,curTB,"tr",{id:"cartTR_" + dVal,domainName:dVal});
				var removeTD = dom.addNode("",newRow,"td",{domainName:dVal,id:"removeTD_" + dVal});
				dom.addNode(null,removeTD,"img",{src:rootPath + "images/interface/btnRemove.gif?",domainName:dVal,id:"removeTDImg_" + dVal,className:"fakeLink"});
				dom.addNode(dVal,newRow,"td",{id:"domainTD_" + dVal,"className":"domainName"});
				
				dom.addNode("",newRow,"td",{domainName:dVal,id:"emailTD_" + dVal});
				if (cart.settings.allowemailpurchase){
					var adEmBtn = dom.addNode(null,"emailTD_" + dVal,"input",{type:'button',value:addMailLinkText,className:'smallActiveButton',domainName:dVal,id:'emailTDImg_' + dVal});
					addEvent(adEmBtn,'click',function(e){
												var obj = (e.srcElement || e.target);
												cart.emailDialog(obj.parentNode.domainName);
												});
					//dom.addNode(addMailLinkText,"emailTD_" + dVal,"a",{onclick:function(e){cart.emailDialog((e.srcElement || e.target).parentNode.domainName);},domainName:dVal,id:"emailTDImg_" + dVal,className:"fakeLink"});
					//dom.addNode("","emailTD_" + dVal,"img",{onclick:function(){cart.emailDialog(this.parentNode.domainName);},src:rootPath + "images/interface/btnEmailAdd.gif?2",domainName:dVal,id:"emailTDImg_" + dVal,className:"fakeLink"});
				}
				
				//remaining days calculation				
				var timeLeft = smartDateDiff(now(true),dateAdd("d",cDom.transferRemainingDays,now()),null,{getlargest:true,abbreviate:true}) ;
				dom.addNode("<span class='fakeLink' title='" + cDom.transferRemainingDays + " days to be exact'>" + timeLeft + "</span> + <span style='color:green'>1yr</span>",newRow,"td",{domainName:dVal,id:"monthsTD_" + dVal},{textAlign:"right"});
				
				dom.addNode("",newRow,"td",{id:"priceTD_" + dVal},{textAlign:"right"});
				addEvent($("removeTDImg_" + dVal),"click",function(e){cart.removeDomain((e.srcElement || e.target).domainName);});
			}
			
			$("domainTD_" + dVal).innerHTML = dVal;
			var daysLeft = cDom.transferRemainingDays + cart.settings.transferautoextension;
			$("priceTD_" + dVal).innerHTML = formatCurrency(cart.settings.transferdailyprice*daysLeft);
			$("priceTD_" + dVal).className = "domainCartPriceColumn";
			var curDomMonths = cDom.years * 12;
		}	

		/*	handle RENEWAL domain rows
		-----------------------------------------------------------*/
		if (cDom.isRenewal){ 
		
			if (!$("renewalDomainTB")){
				dom.addNode(null,"domainCartItemTable","tbody",{id:"renewalDomainTB"});
				dom.addNode(null,"renewalDomainTB","tr",{id:"renewalDomainHeaderRow"});
				dom.addNode("Renewal Domains","renewalDomainHeaderRow","th",{colSpan:5},{});
			}
			var curTB = $("renewalDomainTB");
			
			if (!$("cartTR_" + dVal)){
				var newRow = dom.addNode(null,curTB,"tr",{id:"cartTR_" + dVal,domainName:dVal});
				dom.addNode("",newRow,"td",{domainName:dVal,id:"removeTD_" + dVal});
				dom.addNode("","removeTD_" + dVal,"img",{src:rootPath + "images/interface/btnRemove.gif?",domainName:dVal,id:"removeTDImg_" + dVal,className:"fakeLink"});
				dom.addNode(dVal,newRow,"td",{id:"domainTD_" + dVal,"className":"domainName"},{});
				
				dom.addNode("",newRow,"td",{domainName:dVal,id:"emailTD_" + dVal});
				//allow buying email redirects
				//if (cart.settings.allowemailpurchase){
					//dom.addNode(addMailLinkText,"emailTD_" + dVal,"a",{onclick:function(){cart.emailDialog(this.parentNode.domainName);},domainName:dVal,id:"emailTDImg_" + dVal,className:"fakeLink"});
					//dom.addNode("","emailTD_" + dVal,"img",{onclick:function(){cart.emailDialog(this.parentNode.domainName);},src:rootPath + "images/interface/btnEmailAdd.gif?32",domainName:dVal,id:"emailTDImg_" + dVal,className:"fakeLink"});
				//}
				
				dom.addNode("",newRow,"td",{id:"yearsTD_" + dVal},{textAlign:"right"});
				dom.addNode("",newRow,"td",{id:"priceTD_" + dVal},{textAlign:"right"});

				addEvent($("removeTDImg_" + dVal),"click",function(e){cart.removeDomain((e.srcElement || e.target).domainName);});
			}
			
			$("domainTD_" + dVal).innerHTML = dVal;
			$("yearsTD_" + dVal).innerHTML = cDom.years + " yr" + ((cDom.years == 1)?"":"s") + " x " + formatCurrency(cart.settings.renewaldomainprice[cDom.years]/cDom.years);
			$("priceTD_" + dVal).innerHTML = formatCurrency(cart.settings.renewaldomainprice[cDom.years]);
			$("priceTD_" + dVal).className = "domainCartPriceColumn";
			var curDomMonths = cDom.years * 12;
		}
	
		/*	handle purely EMAIL-ONLY domain rows
		-----------------------------------------------------------*/
		if (cDom.isEmailOnly){ 
			if (!$("emailOnlyTB")){
				dom.addNode(null,"domainCartItemTable","tbody",{id:"emailOnlyTB"});
				dom.addNode(null,"emailOnlyTB","tr",{id:"emailOnlyHeaderRow"});
				dom.addNode("E-Mail Only","emailOnlyHeaderRow","th",{colSpan:5},{});
			}
			var curTB = $("emailOnlyTB");
			
			if (!$("cartTR_" + dVal)){
				var newRow = dom.addNode(null,curTB,"tr",{id:"cartTR_" + dVal,domainName:dVal});
				dom.addNode("",newRow,"td",{domainName:dVal,id:"removeTD_" + dVal});
				dom.addNode("","removeTD_" + dVal,"img",{src:rootPath + "images/interface/btnRemove.gif?",domainName:dVal,id:"removeTDImg_" + dVal,className:"fakeLink"});
				dom.addNode(dVal,newRow,"td",{id:"domainTD_" + dVal},{});
				
				dom.addNode("",newRow,"td",{domainName:dVal,id:"emailTD_" + dVal});
				if (cart.settings.allowemailpurchase){
					var adEmBtn = dom.addNode(null,"emailTD_" + dVal,"input",{type:'button',value:addMailLinkText,className:'smallActiveButton',domainName:dVal,id:'emailTDImg_' + dVal});
					addEvent(adEmBtn,'click',function(e){
												var obj = (e.srcElement || e.target);
												cart.emailDialog(obj.parentNode.domainName);
												});
				}
				
				dom.addNode("&nbsp;",newRow,"td",{colSpan:2},{textAlign:"right"});
				addEvent($("removeTDImg_" + dVal),"click",function(e){cart.removeDomain((e.srcElement || e.target).domainName);});
			}
			
			$("domainTD_" + dVal).innerHTML = dVal;
			//$("yearsTD_" + dVal).innerHTML = cDom.years + " yr" + ((cDom.years == 1)?"":"s");
			//$("priceTD_" + dVal).innerHTML = formatCurrency(cart.settings.newdomainprice[cDom.years]);
			//var curDomMonths = cDom.years * 12;
		}	
		
	
		/* add email addresses
			---------------------------------------------------*/
		for (var emp in cDom.email){			
			var eo = cDom.email[emp];
			
			var insertPoint = ($(dVal + "_emailLabel"))?$(dVal + "_emailLabel").rowIndex :$("cartTR_" + dVal).rowIndex;
			//console.info(dVal + ".rowIndex: " + $("cartTR_" + dVal).rowIndex + " -- " + $("domainCartItemTable").rows.length + " -- " + eo.mailName);
			
			var emTR = curTB.insertRow(-1);
			emTR.style.backgroundColor = "#fff";

			var emLabelTD  = emTR.insertCell(-1);
			emLabelTD.id = dVal + "_emailLabel";
				
	
			var emTD  = emTR.insertCell(-1);
			emTD.colSpan = 3;
			emTD.className = "domainCartEmailLabel";
			
			var emPrice  = emTR.insertCell(-1);	
			emPrice.style.textAlign = "right";
			emPrice.className = "domainCartPriceColumn";
			emPrice.style.backgroundColor = "#F1F5F7";
			emPrice.style.borderWidth = "1px";

			var remBtn = dom.addNode("",emTD,"img",{src:rootPath + "images/interface/btnSmallRemove.gif",mailName:eo.mailName,domainName:dVal,className:"fakeLink"},{margin:"0 10px 0 0",cssFloat:"left",floatStyle:"left"});
			addEvent(remBtn,"click",function(e){cart.removeDomainEmail((e.srcElement || e.target).mailName,(e.srcElement || e.target).domainName);});
			dom.addNode("<b>Mail sent to:</b> <span style='color:green;font-size:14px'>" + eo.mailName + "@" + dVal + "</span><br/><b>Will be forwarded to:</b> <span style='color:green;font-size:14px'>" + eo.pointsTo + "</span>",emTD,"span",{domainName:dVal});
			
			//determine email pricing
			emPrice.innerHTML = formatCurrency(cart.settings.dailyemailpricing * (cDom.dayCount + (cDom.isTransfer?cart.settings.transferautoextension:0)));
		}

		//fade out a match in the domain search area
		//fadeCSS.ease(null,110,20,.2,"easeOutExponential",fadeCSS.setOpacity,[dVal]);
	}
	// create the footer of the cart
	if (!$("cartCheckoutTB")){
		dom.addNode(null,"domainCartItemTable","tbody",{id:"cartCheckoutTB"});
		// ---------------- add a row for totals
		dom.addNode(null,"cartCheckoutTB","tr",{id:"cartTotalsTR"});
		var totalTD = dom.addNode("","cartTotalsTR","td",{valign:"top",id:"cartTotalsTD",colSpan:5},{backgroundColor:"#ffe"});
		
		
		// ---------------- add a row for the billing form
		dom.addNode(null,"cartCheckoutTB","tr",{id:"cartCheckoutBillingTR"},{});
		dom.addNode("","cartCheckoutBillingTR","td",{valign:"top",id:"cartBillingTD",colSpan:5},{});
		cart.createBillingForm("cartBillingTD");
		
		// ---------------- add a row for navigation buttons
		dom.addNode(null,"cartCheckoutTB","tr",{id:"cartCheckoutNavTR"});
		dom.addNode("","cartCheckoutNavTR","td",{id:"cartNavTD",colSpan:5},{textAlign:"right"});
		
		
		
		dom.addNode(null,"cartNavTD","input",{id:"checkoutButton",type:"button",value:"Checkout Now",className:"smallActiveButton"},{});
		addEvent($("checkoutButton"),"click",function(e){cart.displayBillingForm();},false);
		
		dom.addNode(null,"cartNavTD","input",{id:"submitOrderButton",type:"button",value:"Submit Order",className:"smallActiveButton"},{display:"none"});
		addEvent($("submitOrderButton"),"click",function(e){cart.checkOrderForm();},false);
		
		dom.addNode("","cartNavTD","div",{id:"checkoutOrderStatus",className:""},{});
		cart.FX.orderstatus = new Fx.Styles("checkoutOrderStatus",{duration:400, wait:false});
		cart.FX.orderstatus.start({	opacity:0 });
		
		cart.addTotals();
	}
	if(readCookie('cart.settings.showcartform')){
		agent.selectTab('__cartTab');
		eraseCookie('cart.settings.showcartform');
		cart.displayBillingForm();
	}
	cart.disableMatchedSearchResults();
	cart.setCartTabSummary();
};

cart.createBillingForm = function(pObj){
	if ($("cartFormTable")){
		dom.removeObject("cartFormTable");
	}
	//create the basic table for the checkout form
	var bTbl = dom.addNode("",pObj,"table",{id:"cartFormTable"},{display:"none"});
	var bTB = dom.addNode("",bTbl,"tbody",{},{});
	var bTR = dom.addNode("",bTB,"tr",{},{});
	
	var bLeft = dom.addNode("",bTR,"td",{valign:"top",width:'370px'},{});
	dom.addNode("State Farm Specific Information",bLeft,"h4",{},{});
	dom.addNode("",bLeft,"div",{id:'checkoutFieldsStateFarm'},{});
	dom.addNode("Payment Details",bLeft,"h4",{},{});
	dom.addNode("",bLeft,"div",{id:'checkoutFieldsPayment'},{});	
	
	var bRight = dom.addNode("",bTR,"td",{valign:'top',width:'330px'},{});
	
	dom.addNode("",bRight,"div",{id:"passwordMessageDiv"},{display:"none"});
	dom.addNode("Billing Information",bRight,"h4",{},{});
	dom.addNode("",bRight,"div",{id:'checkoutFieldsBilling'},{});
	
	//create the checkout form elements for: Billing Info
	var addToDiv = $("checkoutFieldsBilling");
	
	cart.addToForm(addToDiv,"First Name:","agentFirstName",null,"text",20);
	cart.addToForm(addToDiv,"Last Name:","agentLastName",null,"text",20);
	cart.addToForm(addToDiv,"Billing Address 1:","agentAddress1",null,"text",20,200);
	cart.addToForm(addToDiv,"Billing Address 2:","agentAddress2",null,"text",20,200);
	cart.addToForm(addToDiv,"City:","agentCity",null,"text",20,200);
	cart.addToForm(addToDiv,"State:","agentStateProvince",null,"state",20,200);
	cart.addToForm(addToDiv,"Zip/Postal Code:","agentPostalCode",null,"text",6,8);
	cart.addToForm(addToDiv,"Phone:","agentPhone",null,"text",10,12);
	

	
	//create the checkout form elements for: State Farm Info
	addToDiv = $("checkoutFieldsStateFarm");
	dom.addNode("Remember to use <b>the Agent's</b> State Farm info if buying this domain on their behalf",addToDiv,"div",{},{color:'darkred','fontSize':'11px','clear':'both'});
	cart.addToForm(addToDiv,"State Farm Alias:","agentAlias",null,"text",4,4);
	addEvent("agentAlias","keyup",function(e){
										console.info((e.srcElement || e.target).value);
										if (dom.checkFieldFormat("agentAlias")){
											cart.aliasLookup((e.srcElement || e.target).value);
										}																
									});
	cart.addToForm(addToDiv,"Primary State Code:","agentStateCode",null,"text",2,2);
	cart.addToForm(addToDiv,"Agent Code:","agentCode",null,"text",4,4);
		
	//cart.addToForm(addToDiv,"mySFdomain.com Password:","agentPassword",null,"text",5);	
	cart.addToForm(addToDiv,"E-Mail:","agentEmail",null,"text",30,200);
	
	
	//create the checkout form elements for: Credit Card Info
	var ccYears = {'Exp. Year':''};
	
	var startYear = datePart("yyyy", now());
	for (var i=startYear;i<startYear+10;i++){
		ccYears[i] = i;
	}	
	addToDiv = $("checkoutFieldsPayment");
	cart.addToForm(addToDiv,"Credit Card Type:","ccType",{'Select a Credit Card':"",'MasterCard':'mc','Visa':'visa','Discover':'disc','American Express':'amex'},"select");
	cart.addToForm(addToDiv,"Card Number:","ccNumber",null,"text",30);
	cart.addToForm(addToDiv,"Exp. Month:","ccExpMonth",null,"month");
	cart.addToForm(addToDiv,"Exp. Year:","ccExpYear",ccYears,"select");
	cart.addToForm(addToDiv,"Security Code (CVV2):","ccSecurityCode",null,"text",4);
	

	//setup form filtering
	var f = $("cartForm");
	//preliminary id info
	dom.setFieldFormat(f["agentAlias"],{keyup:"alphanumericnospace",forcelength:4,clean:true,label:"State Farm Alias"});
	dom.setFieldFormat(f["agentFirstName"],{keyup:"alphanumeric",minlength:2,maxlength:100,label:"First Name"});
	dom.setFieldFormat(f["agentLastName"],{keyup:"alphanumeric",minlength:2,maxlength:100,label:"Last Name"});
	//dom.setFieldFormat(f["agentPassword"],{keyup:"alphanumeric",minlength:2,maxlength:100,fieldmatch:f["accountPasswordAgain"]});
	//dom.setFieldFormat(f["agentPasswordAgain"],{keyup:"alphanumeric",minlength:2,maxlength:100,fieldmatch:f["accountPassword"]});

	//agent address info
	dom.setFieldFormat(f["agentAddress1"],{keyup:"alphanumeric",minlength:2,maxlength:100,clean:true,label:"Billing Address 1"});
	dom.setFieldFormat(f["agentCity"],{keyup:"alphanumeric",minlength:2,maxlength:100,label:"City"});
	dom.setFieldFormat(f["agentStateProvince"],{change:"alphanumeric",minlength:2,label:"State/Province"});
	dom.setFieldFormat(f["agentPostalCode"],{keyup:"zippostalcode",minlength:2,label:"Zip/Postal Code"});
	dom.setFieldFormat(f["agentPhone"],{keyup:"numeric",forcelength:10,nomark:false,clean:true,label:"Phone Number"});
	
	//sf information
	dom.setFieldFormat(f["agentEmail"],{keyup:"email",label:"State Farm Email Address"});
	dom.setFieldFormat(f["agentStateCode"],{keyup:"alphanumericnospace",forcelength:2,label:"Primary State Code",clean:true});
	dom.setFieldFormat(f["agentCode"],{keyup:"alphanumericnospace",forcelength:4,label:"Agent Code"});

	dom.setFieldFormat(f["ccType"],{change:"alphanumeric",retest:f["ccNumber"],minlength:2,label:"Credit Card Type"});
	dom.setFieldFormat(f["ccNumber"],{keyup:"creditcard",cctype:f["ccType"],retest:f["ccType"],clean:true,label:"Credit Card Number"});
	//pass a function in to grab current values for this to compare each time
	var ccdateval = function (){ return (dateAdd("m",1,smallDate(f["ccExpMonth"].value + "/1/" + f["ccExpYear"].value))); };

	dom.setFieldFormat(f["ccExpMonth"],{change:"afternow",dateval:ccdateval,retest:f["ccExpYear"],label:"Expiration Month"});
	dom.setFieldFormat(f["ccExpYear"],{change:"afternow",dateval:ccdateval,retest:f["ccExpMonth"],label:"Expiration Year"});
	
	dom.setFieldFormat(f["ccSecurityCode"],{keyup:"cvv2",cctype:f["ccType"],clean:true,label:"Credit Card Security Code"});

	//console.info("creating billing form");
	if (agent.data){
		//console.info("agent data found");
		cart.fillCheckoutForm(null,null,true,agent.data.agent);
		//cart.aliasLookup();
	}
};


cart.setCartTabSummary = function(){
	var cts 			= $("__cartTabStatus");
	var oldDomCount 	= (cts)?cts.dCount:0;
	var oldEmCount 		= (cts)?cts.eCount:0;
	var oldGrandTotal 	= (cts)?cts.gTotal:0;
	
	var newDomCount 	= cart.length();
	var newEmCount 		= cart.emaillength();
	var newGrandTotal 	= cart.settings.grandtotal;

	if (oldDomCount != newDomCount || oldEmCount != newEmCount || oldGrandTotal != newGrandTotal || !cts){
		dom.removeObject("__cartTabStatus");
		if (newDomCount > 0 && $("__cartTab")){
			
			var summaryMsg = newDomCount + " domain" + (newDomCount==1?"":"s");
			
			if (newEmCount > 0){				
				summaryMsg += ", " + newEmCount + " email" + (newEmCount==1?"":"s");
			}
			summaryMsg += "&nbsp;:&nbsp; " + formatCurrency(newGrandTotal);
			agent.statusChange("Your cart now contains " + summaryMsg);
			
			var shortMsg = "&nbsp;total: " + formatCurrency(newGrandTotal);
			var newCts = dom.addNode(shortMsg,"__cartTab","span",{id:"__cartTabStatus","className":"cartTabStatus","dCount":newDomCount,"eCount":newEmCount,"gTotal":newGrandTotal});
			//alert("yo");
			addEvent(newCts,"click",function(e){
											agent.selectTab((e.srcElement || e.target).parentNode);
											if(e.stopPropagation) {e.stopPropagation();}
											e.cancelBubble = true;
											});
			if ($("__cartTab").className.toLowerCase().indexOf("selected")<0){
				var newFX = new Fx.Styles('__cartTab',{duration:800, wait:true});
				newFX.start({
					'background-color'	: '#F5F4E0'
					,'color'			: '#000'
					,'padding-top'	: 6
					,'padding-left'	: 6
					,'padding-right': 6
				}).chain(function(){// executes immediately after completion of above effect
					this.start.delay(1300,this,{
						'background-color'	: '#eee'
						,'color'			: '#888'
						,'padding-top'	: 2
						,'padding-left'	: 2 
						,'padding-right': 2 
					});
				}).chain(function(){ 
					$("__cartTab").style.color = "";
					$("__cartTab").style.paddingTop = "";
					$("__cartTab").style.paddingLeft = "";
					$("__cartTab").style.paddingRight = "";				
				;});
				newFX = null;
			}else{
				console.info("viewing the cart tab");
			}
		}else if($("__cartTab")){
			//agent.statusChange("Your cart is now empty.");
		}
	}
};

cart.addTotals = function(parentIDorObj,onlyCountSuccess,getDomainValue){
	if (!getDomainValue){
		var cartParent = $(parentIDorObj)?$(parentIDorObj):$("cartTotalsTD");
		//console.info('creating cart totals',cartParent);
		dom.removeObject("__cartTotalsDiv");
		
		dom.addNode(null,cartParent,"div",{id:"__cartTotalsDiv",className:'cartTotals'},{width:'100%',textAlign:'right',clear:'both'});
		dom.addNode(null,"__cartTotalsDiv","table",{id:"__cartTotalsTable"},{});
		dom.addNode(null,"__cartTotalsTable","tbody",{id:"__cartTotalsTB"});
		dom.addNode(null,"__cartTotalsTB","tr",{id:"__cartTotalsTR"});
		
		var lblTD = dom.addNode("","__cartTotalsTR","td",{},{});			
		dom.addNode("",lblTD,"div",{id:"cartLabel_domainSubTotal"});
		dom.addNode("",lblTD,"div",{id:"cartLabel_emailSubTotal"});
		dom.addNode("",lblTD,"div",{id:"cartLabel_multiDomainDiscount"});
		dom.addNode("",lblTD,"div",{id:"cartLabel_grandTotal"});
		
		var valTD = dom.addNode("","__cartTotalsTR","td",{},{});	
		dom.addNode("",valTD,"div",{id:"cartValue_domainSubTotal"});
		dom.addNode("",valTD,"div",{id:"cartValue_emailSubTotal"});
		dom.addNode("",valTD,"div",{id:"cartValue_multiDomainDiscount"});
		dom.addNode("",valTD,"div",{id:"cartValue_grandTotal"});
	}
	
	if (cart.length() > 0){
		//calculate subtotals
		var domainSubTotal = 0;
		var emailSubTotal = 0;
		for (var i in cart.contents){
			var d = cart.contents[i];
			var priceVal = 0;
			if (d.isNew){  				//must be a new domain purchase
				priceVal = cart.settings.newdomainprice[d.years];
			}else if (d.isRenewal){											//a renewal, naturally
				priceVal = cart.settings.renewaldomainprice[d.years];
			}else if (d.isTransfer){										//transfer
				var daysLeft = d.transferRemainingDays + cart.settings.transferautoextension;
				priceVal = (cart.settings.transferdailyprice*daysLeft);
			}else if (d.isEmailOnly){
				//figure out how many days are left on this domain
			}
			if (getDomainValue && getDomainValue == d.domainName){
				return priceVal;
			}
			if (!onlyCountSuccess || (onlyCountSuccess && d.orderSuccess)){
				domainSubTotal += priceVal;
			}
			
			for (var e in d.email){											//calculate mail costs
				//console.info(d.dayCount);
				emailSubTotal += (cart.settings.dailyemailpricing * (d.dayCount + (d.isTransfer?cart.settings.transferautoextension:0)));
			}
		}
		
		if (!getDomainValue && cartParent){
			//console.info(emailSubTotal);
			if (emailSubTotal != 0){
				$("cartLabel_emailSubTotal").innerHTML = "Email Subtotal:";
				$("cartValue_emailSubTotal").innerHTML = formatCurrency(emailSubTotal);
			}
			if (domainSubTotal != 0){			
				$("cartLabel_domainSubTotal").innerHTML = "Domain Subtotal:";
				$("cartValue_domainSubTotal").innerHTML = formatCurrency(domainSubTotal);
				
			}

			//calculate multi-domain discount
			var discAry = cart.settings.quantitypricing;
			var domCount = cart.length();
			var qtyDiscPercent = (domCount > discAry.length)?discAry[discAry.length-1]:discAry[domCount-1];
			var discTotal = (qtyDiscPercent && qtyDiscPercent>0)?(qtyDiscPercent*domainSubTotal):0;
			//console.info("disc total:",discTotal);

			$("cartLabel_multiDomainDiscount").innerHTML = "Multi-Domain Discounts:";
			$("cartValue_multiDomainDiscount").innerHTML = "<span style='color:red;'>- " + formatCurrency(discTotal) + "</span>";

			
			//calculate and display the grand total
			var grandTotal = (emailSubTotal + domainSubTotal - discTotal);
			grandTotal = grandTotal?grandTotal:0;

			$("cartLabel_grandTotal").innerHTML = "Grand Total:";
			$("cartValue_grandTotal").innerHTML = formatCurrency(grandTotal);

			cart.settings.grandtotal = grandTotal;
			cart.settings.discounttotal = discTotal;
			
			//var cartTest = dom.addNode("check value",dc_gt,"span",{className:"fakeLink"},{});
			//addEvent(cartTest,"click",function(){ cart.getServerCalculation(true); });
			

		}
	}
};

cart.getServerCalculation = function(startRequest,jsonObj){
	if (startRequest){
		//console.info(cart.convertToXML());		
		dom.addFormData("__cartTotalForm","func","gcc","hidden");
		dom.addFormData("__cartTotalForm","cartXML",cart.convertToXML(),"hidden");
		var xmlURL = rootPath + "incs/siteXHR.asp?"; // base query URL
		xhr.json(xmlURL,"POST",cart.getServerCalculation,[false],"__cartTotalForm");
		dom.removeObject("__cartTotalForm");
	}else if (jsonObj){
		console.info(jsonObj.totals);
	}else{
		
	}
};

cart.displayBillingForm = function(){
	if (cart.settings.isBillingOpen){		
		$("checkoutButton").value="Checkout Now";
		$("checkoutButton").className="smallActiveButton";
		dom.toggle("submitOrderButton",false);
		dom.toggle("cartFormTable",false);
		cart.settings.isBillingOpen = false;
	}else{
		if (rootPath != sslRootPath){
			$("checkoutButton").value="Please Wait A Moment...";
			$("checkoutButton").className="smallInActiveButton";
			$("checkoutButton").enabled = false;
			
			createCookie("cart.settings.showcartform",true,30);
			window.location = sslRootPath;
		}else{		
			dom.toggle("cartFormTable",true);
			dom.toggle("submitOrderButton",true);
			cart.settings.isBillingOpen = true;
			$("checkoutButton").value="Cancel Checkout";
			$("checkoutButton").className="smallCancelButton";
		}

	}
};

cart.checkOrderForm = function(){
	var errAry = dom.validateForm("cartForm",true);
	if (errAry.length > 0){
		//agent.statusChange('Please check the information on your form.','error');
		var errMsg = "---=== Please check your form ===---\n";
		errMsg += "Look for the following field" + ((errAry.length>1)?"s":"") + " marked in LIGHT RED and make any necessary changes:\n";
		errMsg += "---------------------------------------------\n";
		for (var i=0;i<errAry.length;i++){
			errMsg += " - " + (errAry[i].label || errAry[i].id || errAry[i].name) + "\n";			
		}
		alert(errMsg);
	}else{
		cart.submitOrder();		
	}
};


cart.aliasLookup = function (alias,jsonObj){
	//console.info("doing lookup");
	if (alias && dom.checkFieldFormat("agentAlias") && !jsonObj){
		dom.addFormData("__aliasLookupForm","func","alu","hidden");
		dom.addFormData("__aliasLookupForm","__agentAlias",alias,"hidden");
		var sURL = rootPath + "incs/siteXHR.asp";
		xhr.json(sURL,"POST",cart.aliasLookup,[alias],"__aliasLookupForm");
		dom.removeObject("__aliasLookupForm");
	}else if (jsonObj && jsonObj.aliasExists){ //if this alias already exists in the system
		//console.info("------ alias check result ------");
		//console.info(jsonObj);
		$("passwordMessageDiv").innerHTML = "";
		if (jsonObj.agentPassword){
			//console.info("filling in password");
			dom.addNode("","passwordMessageDiv","input",{id:"agentPassword",type:"password",className:"inputB",value:jsonObj.agentPassword},{});
		}else{
			dom.toggle("passwordMessageDiv",true);
			$("passwordMessageDiv").style.backgroundColor = "#ffe";
			var existsMsg = "<h4>Password Required</h4>The <span style='background-color:#D3FEBA;'>State Farm Alias</span> you entered is already in our system.";
			existsMsg += "<br><span style='color:red;'>If this is your correct alias</span>, please fill in your <br><b>mySFdomain.com</b> account password: &nbsp;";
			$("passwordMessageDiv").innerHTML = existsMsg;
			
					
			dom.addNode("","passwordMessageDiv","input",{id:"agentPassword",type:"password",className:"inputB"},{});
			dom.setFieldFormat("agentPassword",{keyup:"alphanumeric",minlength:2,maxlength:20,label:"mySFDomain Account Password"});
			addEvent($("agentPassword"),"blur",function(e){
													if (dom.checkFieldFormat($("agentAlias")) && dom.checkFieldFormat($("agentPassword"))){
														cart.fillCheckoutForm($("agentAlias").value,$("agentPassword").value);
													}
												},false);
		}
				
																
		existsMsg = "<br><span style='color:red;'>If you don't know</span> your password, ";
		existsMsg += "we can e-mail it to the owner of this alias immediately by clicking <span onclick='agent.emailPassword(\"" + alias + "\");' class='fakeLink'>here</span>";
		existsMsg += "<br><span style='color:red;'>If this is the wrong alias,</span> please correct it.";
		dom.addNode(existsMsg,"passwordMessageDiv","",{},{});

	}else{
		dom.toggle("passwordMessageDiv",false);
		$("passwordMessageDiv").innerHTML = "";
	}
};


cart.convertToXML = function(){
	//add the current cart.contents
	var domXML = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><root>";
	for (var dVal in cart.contents){
		var emailXML = "";	
		var cDom = cart.contents[dVal];
		
		domXML += "<domain ";
		for (var prop in cDom){
			if (prop == "email"){ //handle email forwards 
				
				for (var em in cDom.email){			
					var emo = cDom.email[em];
					emailXML += "<email ";
					for (var emProp in emo){	
						emailXML += " " + emProp +"='" + emo[emProp] + "'";
					}
					emailXML += " />";
				}
				
			}else{
				domXML += " " + prop +"='" + cDom[prop] + "'";
			}
		}
		if (emailXML.length > 0){
			domXML += " >" + emailXML + "</domain>";
		}else{
			domXML += " />";		
		}
	}
	domXML += " </root>";
	//console.info(domXML);
	return domXML;
};

//create the basic order
cart.submitOrder = function(isLoaded,xhrObj){	
	if (!isLoaded && !xhrObj && cart.length() > 0){		
		console.info("---------- submitting order -------------");

		cart.showOrderStatus("Submitting your order now - please wait a moment...");
		agent.statusChange('Submitting your order now - please wait a moment...',null,300000,true);

		//cart.displayBillingForm();
		dom.toggle("domainCartItemTable",false);
			
		var f = $("cartForm");
		dom.addFormData(f,"func","ccp","hidden");
			
		//general order info
		dom.addFormData(f,"cartXML",cart.convertToXML(),"hidden");
		dom.addFormData(f,"orderDomainCount",cart.length(true),"hidden");
		dom.addFormData(f,"orderDiscountAmount",cart.settings.discounttotal,"hidden");
		dom.addFormData(f,"orderTotalAmount",cart.settings.grandtotal,"hidden");
		dom.addFormData(f,"orderAgentAlias",f["agentAlias"].value,"hidden");
		dom.addFormData(f,"orderEmailCount",cart.emaillength(),"hidden");
		
		//some derived agent info
		//var agentPhone = "" + f["agentPhone1"].value + f["agentPhone2"].value + f["agentPhone3"].value;
		//dom.addFormData(f,"agentPhone",agentPhone,"hidden");
		var countryCode = (f["agentStateProvince"].options.selectedIndex <= 51)?"US":"CA";
		dom.addFormData(f,"agentCountry",countryCode,"hidden");
				
					
		//registrant info
		dom.addFormData(f,"RegistrantFirstName",f["agentFirstName"].value,"hidden");
		dom.addFormData(f,"RegistrantLastName",f["agentLastName"].value,"hidden");		
		dom.addFormData(f,"RegistrantAddress1",f["agentAddress1"].value,"hidden");
		dom.addFormData(f,"RegistrantAddress2",f["agentAddress2"].value,"hidden");
		dom.addFormData(f,"RegistrantCity",f["agentCity"].value,"hidden");
		dom.addFormData(f,"RegistrantStateProvince",f["agentStateProvince"].value,"hidden");
		dom.addFormData(f,"RegistrantPostalCode",f["agentPostalCode"].value,"hidden");
		//var countryCode = (f["agentStateProvince"].options.selectedIndex <= 51)?"US":"CA";
		dom.addFormData(f,"RegistrantCountry",countryCode,"hidden");	
		
		var sURL = rootPath + "incs/siteXHR.asp";
		//console.info("order form: ",f);
		xhr.connect(sURL,"POST",cart.submitOrder,[true],"cartForm");
		
	// order response -------------------------------------
	}else if(xhrObj && isLoaded){
		console.info("---------- order response -------------");
		agent.statusChange();
		var xo = xhr.XMLtoObj(xhrObj);
				
		console.info(xo);		
		
		if (!xo || !xo.root){			//something goofy happened
			agent.statusChange('A problem occurred while placing this order - please contact us via phone or e-mail and we\'ll correct it.','error',30000);
			
			dom.toggle("domainCartItemTable",true);
			//cart.displayBillingForm();
			//dom.toggle("checkoutButton",true);
			cart.showOrderStatus("There was a problem with placing this order. We apologize for the inconvenience - Please contact customer support via phone or e-mail to clear up the issue.");

			// === send an error email to support
			var f = $("cartForm");
			var contactInfo = f["agentAlias"].value + " :: " + f["agentFirstName"].value;
			contactInfo += " " + f["agentLastName"].value + "<br>" + f["agentPhone"].value;
			cart.sendEmailError(contactInfo,dom.toJSON(cart.contents),xhr.lastResponseText);
		}else if (xo.root.loginError || xo.root.ccAuthResponse.responseCode != "1"){ //authiorization failed
			
			dom.toggle("domainCartItemTable",true);
			//cart.displayBillingForm();
			//dom.toggle("checkoutButton",true);
			if(xo.root.loginError){
				agent.statusChange("There was a problem with your Agent Alias and Password. Please check your information and try again.",'error',10000);
				cart.showOrderStatus("There was a problem with your Agent Alias and Password.<br>Please check your information and try again.");
				cart.aliasLookup($("agentAlias").value);
			}else if(xo.root.ccAuthResponse.responseCode != "1"){
				if (xo.root.ccAuthResponse.responseReasonText){
					var rsn = xo.root.ccAuthResponse.responseReasonText.split("\n")[3].split(":")[1];
				}else{
					var rsn = "";
				}
				agent.statusChange('There was a problem with your Credit Card or Billing information: <b>' + rsn + '</b>','error',30000);
				cart.showOrderStatus("There was a problem with your Credit Card or Billing information.<br>Reason provided: <em>" + rsn + "</em>");
				
			}
		}else if (xo.root.ccAuthResponse && xo.root.ccAuthResponse.responseCode == "1"){ // transaction completed	
	
			agent.statusChange();

			var f = $("cartForm");
			var ccNum = f["ccNumber"].value;
			var lastFour = ccNum.substring(ccNum.length-4,ccNum.length);
			
			
			// clear out the cc info
			dom.setFormValue(f,"ccType","");
			dom.setFormValue(f,"ccNumber","");
			dom.setFormValue(f,"ccExpMonth","");
			dom.setFormValue(f,"ccExpYear","");		
			dom.setFormValue(f,"ccSecurityCode","");
			
			
			var fcc = xhrObj.getElementsByTagName("finishedCartContents")[0];
			var domains = fcc.getElementsByTagName("domain");
			
			//dom.addNode(null,"domainCart","table",{id:"cartOrderResultsTable"});
			//dom.addNode(null,"cartOrderResultsTable","tbody",{id:"cartOrderResultsHeaderTB"});
			//var resultsTR = dom.addNode(null,"cartOrderResultsHeaderTB","tr",{id:"cartOrderResultsHeaderTR"});
			//var hDiv = dom.addNode("",resultsTR,"td",{id:"cartOrderResultsHeaderTD"});
		
			var hDiv = dom.addNode("","domainCart","div",{id:"finishedOrder",className:'finishedOrder'},{});
			dom.addNode("Domain Order Completed" ,hDiv,"h2",{id:'completedOrderHeader'},{});
			
			dom.addNode("Order ID: <b>" + xo.root.oid + "</b>" ,hDiv,"div",{},{textAlign:"right"});
			
			dom.addNode("Credit Card: <b>XXXX..." + lastFour + "</b>" ,hDiv,"div",{},{textAlign:"right"});
			dom.addNode("Order placed: <b>" + smallDateTime(now()) + "</b>" ,hDiv,"div",{},{textAlign:"right"});
			
			dom.addNode("<b>Placed By:</b>" ,hDiv,"div",{},{});
			dom.addNode($("agentFirstName").value + " " + $("agentLastName").value ,hDiv,"div",{},{});
			dom.addNode($("agentAddress1").value ,hDiv,"div",{},{});
			dom.addNode($("agentAddress2").value ,hDiv,"div",{},{});
			dom.addNode($("agentCity").value + ", " + $("agentStateProvince").value + "&nbsp;&nbsp;&nbsp;" +  $("agentPostalCode").value ,hDiv,"div",{},{});
			dom.addNode("&nbsp;" ,hDiv,"div",{className:"singleDivider"},{});
	
			dom.addNode("",hDiv,"table",{id:"finishedOrderTable"},{width:"100%"});
			dom.addNode("","finishedOrderTable","tbody",{id:"foTB"});		
			
			dom.addNode("&nbsp;",hDiv,"div",{className:"doubleDivider"},{});
			var finalTotals = dom.addNode("",hDiv,"div",{},{});
			
			dom.addNode("",hDiv,"div",{id:"viewDomainsDiv"},{marginTop:"10px",clear:"both"});
			
			var hasSuccessfulDomain = false;
			var hasSuccessfulEmail = false;

			for (var i=0;i<domains.length;i++){
				var d = {};
				var d = cart.contents[domains[i].getAttribute("domainName")];
				console.info("cart results: ", d);
				if (domains[i].getAttribute("orderSuccess") == "true"){
					d.orderSuccess = true;
				}
				//alert("displaying more:");
				var newTR = dom.addNode(null,"foTB","tr",{},{});
				dom.addNode(d.domainName,newTR,"td",{},{fontWeight:"bold"});
				dom.addNode("",newTR,"td",{id:d.domainName + "_receiptStatus"},{fontSize:"0.8em"});
				
				
				var statMsg = "";				
				if (d.isNew){
					dom.addNode(d.years + " year" + ((d.years>1)?"s":""),newTR,"td",{},{});
					statMsg = (d.orderSuccess)?"ordered":"Unavailable -- Not charged";
					if (!$("viewLinksHeader")){
						dom.addNode("Your New Domains" ,"viewDomainsDiv","h4",{id:"viewLinksHeader"},{});
						dom.addNode("* Please wait <span style='color:red;'>at least 30 minutes</span> before checking your new domain in your web browser." ,"viewDomainsDiv",null,{},{});								
					}
					var newLinkDiv = dom.addNode("","viewDomainsDiv","div",{},{});
					dom.addNode("http://www." + d.domainName,newLinkDiv,"div");
		
				}else if (d.isRenewal){
					dom.addNode(d.years + " year" + ((d.years>1)?"s":""),newTR,"td",{},{});
					statMsg = (d.orderSuccess)?"renewed":"Failed -- Not charged";
				}else if (d.isTransfer){
					var tMonths = dateDiff("m",now(), dateAdd("d",d.transferRemainingDays,now()));
					dom.addNode(tMonths + " month" + ((tMonths>1)?"s":""),newTR,"td",{},{});
					statMsg = (d.orderSuccess)?"transfer requested":"Failed -- Not charged";
				}else if (d.isEmailOnly){	
					statMsg = (d.orderSuccess)?"e-mail only":"Failed -- Not charged";
				}
				$(d.domainName + "_receiptStatus").innerHTML = statMsg;
				
				
				if (d.orderSuccess){ 
					hasSuccessfulDomain = true; 
				}
				var priceVal = (d.orderSuccess)?cart.addTotals(null,null,d.domainName):0;
				dom.addNode(formatCurrency(priceVal),newTR,"td",{},{fontWeight:"bold",textAlign:"right"});
				
				var emailStatus = (d.orderSuccess)?"Ok":"Failed";
				for (var e in d.email){
					hasSuccessfulEmail = (d.orderSuccess)?true:false;
					var email = d.email[e];
					var newEmailTR = dom.addNode(null,"foTB","tr",{},{fontSize:"0.8em"});
					dom.addNode(e + "@" + d.domainName,newEmailTR,"td",{},{color:"#6697AE",paddingLeft:"20px"});
					dom.addNode(emailStatus,newEmailTR,"td",{},{});
					dom.addNode("",newEmailTR,"td",{},{});
					var emPrice = formatCurrency(cart.settings.dailyemailpricing * (d.dayCount + (d.isTransfer?cart.settings.transferautoextension:0)));
					dom.addNode(emPrice,newEmailTR,"td",{},{textAlign:"right"});
				}
				
			}
			if (!$("viewEmailHeader") && hasSuccessfulEmail){
						dom.addNode("Your New Email Redirect" ,"viewDomainsDiv","h4",{id:"viewEmailHeader"},{});
						dom.addNode("* Please remember, e-mail redirects will not work for people contacting you from <span style='color:red;'>State Farm e-mail addresses</span>.  " ,"viewDomainsDiv",null,{},{});								
			}
			
			cart.addTotals(finalTotals,true);
			
			if (!hasSuccessfulDomain){
				$("viewDomainsDiv").innerHTML = "Your purchase was not successful. Your credit card was <b>not</b> charged. You may retry this order at a later date, or contact us for assistance.";
				$("completedOrderHeader").innerHTML = "Order Was Not Successful";
			}else{
				console.info("emptying cart");
				cart.sendReceipt(f["agentEmail"].value,f["agentAlias"].value);
				cart.contents = {};
				eraseCookie("cart.contents");
				cart.setCartTabSummary();
			}
		}
	}else{
		console.info("---------- nothing came back? -------------");
		agent.statusChange("There was an error placing your order - Please contact us for more details.",'error',20000);
		console.info(arguments);
	}
};

cart.sendReceipt = function(aEmail,aAlias,xhrObj){
	if (!xhrObj && $("finishedOrder").innerHTML){
		var rHTML = "<div>" + $("finishedOrder").innerHTML + "</div>";
		dom.addFormData("__receiptMailForm","sdr","true","hidden");
		dom.addFormData("__receiptMailForm","aEmail",aEmail,"hidden");
		dom.addFormData("__receiptMailForm","aAlias",aAlias,"hidden");
		dom.addFormData("__receiptMailForm","rHTML",rHTML,"hidden");
		var sURL = rootPath + "incs/siteXHR.asp";
		xhr.connect(sURL,"POST",cart.sendReceipt,[aEmail,aAlias],"__receiptMailForm");
	}else{
		console.info(xhr.XMLtoObj(xhrObj));
	}
	dom.removeObject("__receiptMailForm");
};

cart.sendEmailError = function(inReferenceTo,errorBody,errorResponseText,xhrObj){
	if (!xhrObj){
		dom.addFormData("__orderErrorForm","func","see","hidden");
		dom.addFormData("__orderErrorForm","inReferenceTo",inReferenceTo,"hidden");
		dom.addFormData("__orderErrorForm","errorBody",errorBody + '\n------------------------\nOrder responseText:\n' + errorResponseText,"hidden");
		var sURL = rootPath + "incs/siteXHR.asp";
		xhr.connect(sURL,"POST",null,null,"__orderErrorForm");
	}else{
		console.info(xhr.XMLtoObj(xhrObj));
	}
	dom.removeObject("__orderErrorForm");
};


/* show an informative and helpful order-related message
----------------------------------------------------------------*/
cart.showOrderStatus = function(sMsg,sDelay){
	cart.FX.orderstatus.start({	
		opacity:0
	}).chain(function(){// executes immediately after completion of above effect
		if (sMsg){
			$("checkoutOrderStatus").innerHTML = sMsg;
			this.start({opacity:1});
		}		
	});
};

cart.fillCheckoutForm = function(a,p,isLoaded,jsonObj){
	//if we're not loaded yet
	if (a && p && !isLoaded){
		dom.addFormData("cartForm","func","lai","hidden");
		var xmlURL = rootPath + "incs/siteXHR.asp?"; // base query URL
		xhr.json(xmlURL,"POST",cart.fillCheckoutForm,[a,p,true],"cartForm");
	}else if(isLoaded && jsonObj){
		//console.info('sent: ',jsonObj);
		if (a && p) { //if these aren't null it's a normal request  and we want a message
			agent.statusChange('We matched your name and password - let us fill in some fields for you.',null,10000);
		}else{ //otherwise we're getting a forced-load from an account login, and need to do things differently
			cart.aliasLookup(jsonObj.agentAlias,{aliasExists:true,agentPassword:jsonObj.agentPassword});
		}
		for (var p in jsonObj){
			//console.info('p: ',p);
			if ($(p)){ dom.setFormValue("cartForm",p,jsonObj[p]); }
		}
		dom.validateForm("cartForm");
	}else{ // no valid password found?
		//console.info("no match");
		//dom.addNode("Unable to send your password.  Please contact us at 1-877-828-3131.","passwordMessageTD","div",{id:"__passwordSentMsg"},{color:"red",fontSize:"15px;",textAlign:"center"});
	}
};

/* disable any search results already in the cart
----------------------------------------------------------------*/
cart.disableMatchedSearchResults = function(){
	var sr = $$("#domainSearchAvailableTable tr");
	if (sr){
		for (var i=0;i<sr.length;i++){			
			var curNode = sr[i];
			//console.info("comparing: " + curNode.id);
			if (cart.contents[curNode.id]){ //item is in the cart - disable adding it
				$("addBtn_" + curNode.id).className = "smallInActiveButton";
				$("addBtn_" + curNode.id).disabled = true;	
				//$("domName_" + curNode.id).style.textDecoration = "line-through";	
				
				if (!curNode.style.opacity || curNode.style.opacity>99){
					fadeCSS.ease(null,110,20,.5,"easeOutExponential",fadeCSS.setOpacity,[curNode.id]);
				}
				$("avStatus_" + curNode.id).innerHTML = "In your cart";
			}else if (curNode.id){//item is NOT in the cart - enable adding it
				if ($("addBtn_" + curNode.id).disabled == true){
					//console.info("comparing: " + curNode.id);
					fadeCSS.ease(null,20,110,.3,"easeInExponential",fadeCSS.setOpacity,[curNode.id]);
				}
				//console.info("enabling add for " + curNode.id);
				$("avStatus_" + curNode.id).innerHTML = "";
				$("addBtn_" + curNode.id).className = "smallActiveButton";
				$("addBtn_" + curNode.id).disabled = false;
				//$("domName_" + curNode.id).style.textDecoration = "";	
				//dom.toggle("avYearSelect_" + curNode.id,true);
			}
		}
	}
};


cart.addToForm = function(parentObj,labelText,elementID,elementValue,elementType,elementSize,elementMaxSize){
	
	if (elementType != "hidden"){
		dom.addNode(labelText,parentObj,"label",{className:"formLabel","for":elementID},{});
	}
	

	if (elementType == "text" || !elementType){
		//formNameOrObject,elName,elValue,elType,returnObject,cssStyle,otherProp,selectListObj){
		dom.addFormData(parentObj,elementID,((elementValue)?elementValue:null),"text",null,"formField",{"size":(elementSize?elementSize:null),maxLength:(elementMaxSize?elementMaxSize:'10000')});
	}
	
	if (elementType == "state"){
		dom.createStateSelect(parentObj,elementID,"State or Province",false,true);
	}

	if (elementType == "month"){
		dom.createMonthSelect(parentObj,elementID);
	}	

	if (elementType == "select"){
		dom.addFormData(parentObj,elementID,null,"select",null,"formField",{"size":(elementSize?elementSize:null)},elementValue);
	}
	
	
	if (elementType == "hidden"){
		dom.addFormData(parentObj,elementID,((elementValue)?elementValue:null),"hidden");
	}
	
	if (elementType == "textarea"){
		dom.addFormData(parentObj,elementID,((elementValue)?elementValue:null),"textarea",null,"formField",{cols:elementSize,rows:elementMaxSize});
	}
	
	if (elementType != "hidden"){
		dom.addNode(null,parentObj,"br",{},{});
	}
};