var ticketCallback = null;



var iTicketFirstPollInterval = 2000;
var iTicketNextPollInterval = 4000;
var iTicketTimeout = 45000;

function getPostUrl()
{
	var sLoc = window.location.href;
	var aURL = sLoc.split("/");
	var sServer = aURL[2];
	var opHandler = "/move/MoveG2BOpHandler.ashx";
	if(document.location.protocol == "https:")
		return "https://" + sServer + opHandler;
	else
		return "http://" + sServer + opHandler;
	
}

function getOrderTrackingUrl()
{
	var sLoc = window.location.href;
	var aURL = sLoc.split("/");
	var sServer = aURL[2];
	var opHandler = "/move/MovingG2BTrackingOpHandler.ashx";
	if(document.location.protocol == "https:")
		return "https://" + sServer + opHandler;
	else
		return "http://" + sServer + opHandler;
	
}

function eltFormSection() {
	var elt = document.getElementById("movingFormContainer"); 
	if (elt == null) alert("cant find required element: movingForm"); 
	return elt;
}
function eltFormMessage() { 
	var elt = document.getElementById("formMessage");
	if (elt == null) alert("cant find required element: formMessage"); 
	return elt;
}
function eltErrorMessages() { 
	var elt = document.getElementById("addressErrorMessages");
	if (elt == null) alert("cant find required element: formMessage"); 
	return elt;
}
function eltAnimateSection() { 
	var elt = document.getElementById("workticket_animate"); 
	if (elt == null) alert("cant find required element: OrderForm_animate"); 
	return elt;
}
function eltAnimateMessage() { 
	var elt = document.getElementById("animateMessage"); 
	if (elt == null) alert("cant find required element: animateMessage"); 
	return elt;
}
function eltGetForm() {
	var elt = document.getElementById("movingForm"); 
	if (elt == null) alert("cant find required element: movingForm"); 
	return elt;
}
function eltGetTrackingForm() {
	var elt = document.getElementById("TransferForm"); 
	if (elt == null) alert("cant find required element: transferForm"); 
	return elt;
}
function eltPageActivityMask() {
	var elt = document.getElementById("PageActivityMask"); 
	if (elt == null) alert("cant find required element: PageActivityMask"); 
	return elt;
}


function restoreOrderSummary()
{
//	alert("restorePreviousAccount()");
	eltPageActivityMask().style.display = "none";
	document.getElementById("addressParameters").style.display = "block";
	switchInProcess = false;
}

var switchInProcess = false;
// user clicked login...
function onFormSubmit() // pass parameters here that represent the callback functions for content handdling (we will pass back the Http object)
{
	var oForm = document.getElementById("movingForm");
	if(!ValidateForm(oForm))
		return false;

	// New customer -> Go to buyflow
	if(document.getElementById("noCurrentCustomer").checked == true)
	{
		RedirectToBuyflow();
		return false;
	}
	if(document.getElementById("transferService").checked == true)
	{
		
		
		//	alert("onFormSubmit()" + document.getElementById("UserAccountID").selectedIndex);
		if(switchInProcess)
		{
			return false;
		}
		else
			switchInProcess = true;
		var eltMask = eltPageActivityMask();
		document.getElementById("addressParameters").style.display = "none";
		eltAnimateSection().style.display = "block";
		eltAnimateSection().style.top = 150 + document.getElementsByTagName("html")[0].scrollTop + "px";
		//alert("body tag " + document.body.clientHeight + " " + document.body.clientWidth);
		var htmlElement = document.getElementsByTagName("html")[0]
		eltMask.style.height = htmlElement.scrollHeight + "px";
		//alert("body tag " + eltMask.style.height + " " + eltMask.style.width);
		eltMask.style.display = "block";
		/// show animation content
		updateAnimateMessage("Validating your addresses, please wait...");
		ticketCallback = new Object();
			ticketCallback.sTicketPostUrl = getPostUrl();
			ticketCallback.fnGetTicketParams = GetTicketParams;
			ticketCallback.fnHandleTicketIssued = HandleTicketIssued;
			ticketCallback.fnHandleNoTicketIssued = HandleNoTicketIssued;
			ticketCallback.fnHandleContinuePolling = HandleContinuePolling;
			ticketCallback.fnHandlePollFailed = HandlePollFailed;
			ticketCallback.fnHandleTimedOutTicket = HandleTimedOutTicket;
			ticketCallback.fnHandleCompletedTicket = HandleCompletedTicket;
			
		DF_GetTicket(iTicketTimeout);	// request ticket
		return false;
	}
	else // Current Cust who wants new services
	{
		RedirectToBuyflow();
		return false
	}
}

function onTransferFormSubmit()
{
	
	var form = document.getElementById("TransferForm");
	if(ValidateTransfer(form))
	{
		if(switchInProcess)
		{
			return false;
		}
		else
		{
			var eltMask = eltPageActivityMask();
			document.getElementById("transferParameters").style.display = "none";
			eltAnimateSection().style.display = "block";
			eltAnimateSection().style.top = 150 + document.getElementsByTagName("html")[0].scrollTop + "px";
			//alert("body tag " + document.body.clientHeight + " " + document.body.clientWidth);
			var htmlElement = document.getElementsByTagName("html")[0]
			eltMask.style.height = htmlElement.scrollHeight + "px";
			//alert("body tag " + eltMask.style.height + " " + eltMask.style.width);
			eltMask.style.display = "block";
			/// show animation content
			updateAnimateMessage("Tracking your order, please wait...");
			ticketCallback = new Object();
				ticketCallback.sTicketPostUrl = getOrderTrackingUrl();
				ticketCallback.fnGetTicketParams = GetTrackingTicketParams;
				ticketCallback.fnHandleTicketIssued = HandleTicketIssued;
				ticketCallback.fnHandleNoTicketIssued = HandleNoTrackingTicketIssued;
				ticketCallback.fnHandleContinuePolling = HandleContinuePolling;
				ticketCallback.fnHandlePollFailed = HandlePollTrackingFailed;
				ticketCallback.fnHandleTimedOutTicket = HandleTimedOutTrackingTicket;
				ticketCallback.fnHandleCompletedTicket = HandleCompletedTrackingTicket;
			DF_GetTicket(iTicketTimeout);	// request ticket
		}
	}
	return false;
}

function RedirectToBuyflow()
{
	var locForm = document.getElementById("localizationForm");
	var movingForm = document.getElementById("movingForm");
	SetLocalizationForm(locForm);
	var promoCode = ((buyflowURL.indexOf("?") >= 0)?"&":"?") +
					 "promocode=" + ((movingForm.elements["PromoCode"].value > "") ? movingForm.elements["PromoCode"].value : -1);
	//alert(buyflowURL + promoCode);
	locForm.elements["Referer"].value = XMLdeCode(buyflowURL) +  promoCode;
	locForm.submit(); 
}

function XMLdeCode(url) //remove the XMLsafe characters from the string
{
   var decodedUrl = url.replace(/&amp;/g,"&"); 
   decodedUrl = decodedUrl.replace(/&lt;/,"<");
   decodedUrl = decodedUrl.replace(/&gt;/g,">");
   decodedUrl = decodedUrl.replace(/&quot;/g,"\"");
   decodedUrl = decodedUrl.replace(/&apos;/g, "'");
return decodedUrl;
}
function RedirectToZipFallback()
{
	var locForm = document.getElementById("localizationForm");
	SetLocalizationForm(locForm);
	locForm.elements["Referer"].value = window.location.pathname;
	locForm.submit();
}

function SetLocalizationForm(locForm)
{
	var movingForm = document.getElementById("movingForm");
	locForm.elements["StreetName"].value = movingForm.elements["NewAddress"].value;
	locForm.elements["AptNumber"].value = movingForm.elements["NewAptNum"].value;
	locForm.elements["Zip"].value = movingForm.elements["NewZip"].value;
}

function updateAnimateMessage(sMessage)
{
	var elt = eltAnimateMessage();
	elt.innerHTML = sMessage;
	elt.style.display = "block";
}

function updateFormMessage(sMessage)
{
	var elt = eltFormMessage();
	var err = eltErrorMessages();
	elt.innerHTML = sMessage;
	elt.style.display = "block";
	err.style.display = "block";
	//All failed cases return to this function to display their message.
	switchInProcess = false;
}

// user clicked Cancel...
function onCancel()
{
	DF_CancelTicket();
}

function GetTicketParams()
{
//	alert("GetTicketParams()");
	var formElement = eltGetForm();
	// load parameters from a form to query string
	var sParams = "";
	for (var i = 0; i < formElement.elements.length; i++)
	{
		var sParam = formElement.elements[i];
		if (sParams != "") sParams = sParams + "&";
		sParams = sParams + sParam.name + "=" + sParam.value;
	}
//	alert("sParams=" + sParams);
	return sParams;
}

function GetTrackingTicketParams()
{
//	alert("GetTicketParams()");
	var formElement = eltGetTrackingForm();
	// load parameters from a form to query string
	var sParams = "";
	for (var i = 0; i < formElement.elements.length; i++)
	{
		var sParam = formElement.elements[i];
		if (sParams != "") sParams = sParams + "&";
		sParams = sParams + sParam.name + "=" + sParam.value;
	}
//	alert("sParams=" + sParams);
	return sParams;
}

function HandleTicketIssued(sTicketID)
{
//	alert("HandleTicketIssued()");
	updateAnimateMessage("Validating your address, please wait...");
	return iTicketFirstPollInterval;
}

function HandleNoTicketIssued(sHttpStatus)
{
//	alert("HandleNoTicketIssued()");
	// handle failure: redisplay form with message, return
	eltAnimateSection().style.display = "none";
	eltFormSection().style.display = "block";
	updateFormMessage("Unable to validate your address, please try again later. (1)");	
	restoreOrderSummary();
}

function HandleNoTrackingTicketIssued(sHttpStatus)
{
	// alert("HandleNoTicketIssued()");
	// submit even if G2B fail
	eltGetTrackingForm().submit();
}

// return the next poll interval time
function HandleContinuePolling(iPollCount, sTicketID)
{
//	alert("HandleContinuePolling()");
	//updateAnimateMessage("GetTicketStatus " + sTicketID + " Poll Count = " + iPollCount);
	return iTicketNextPollInterval;
}

function HandlePollFailed(sHttpStatus)
{
//	alert("HandlePollFailed()");
	// handle failure: redisplay form with message, return
	eltAnimateSection().style.display = "none";
	eltFormSection().style.display = "block";
	updateFormMessage("Unable to validate your address, please try again later. (2)");
	restoreOrderSummary();
}

function HandlePollTrackingFailed(sHttpStatus)
{
	// alert("HandlePollFailed()");
	// submit even if G2B fail
	eltGetTrackingForm().submit();
}



function HandleTimedOutTicket()
{
//	alert("HandleTimedOutTicket()");
	eltAnimateSection().style.display = "none";
	eltFormSection().style.display = "block";
	updateFormMessage("Unable to validate your address, please try again later. (3)");
	restoreOrderSummary();
}

function HandleTimedOutTrackingTicket()
{
//	alert("HandleTimedOutTicket()");
	// submit even if G2B fail
	eltGetTrackingForm().submit();
}


function HandleCancelledTicket()
{
	// alert("HandleCancelledTicket()");
	eltAnimateSection().style.display = "none";
	eltFormSection().style.display = "block";
	updateFormMessage("Cancelled by user, try again");
	restoreOrderSummary();
}

function HandleCancelledTrackingTicket()
{
	alert("HandleCancelledTicket()");
	eltAnimateSection().style.display = "none";
	updateFormMessage("Cancelled by user, try again");
}

// this is the specific handler for moving g2b
function HandleCompletedTicket(oXmlHttp)
{
	switchInProcess = false;
	// alert("HandleCompletedTicket()");
	var sResults = oXmlHttp.responseText;
	// alert("HandleCompletedTicket() sResults=" + sResults);
	var aResults = sResults.split("|");
	if (aResults.length > 0)
	{
		sStatus = aResults[0];	// status is in slot 0
		// Check for zip fall back
		var aStatusValue = aResults[0].split("^");
		if(aStatusValue[1] == "Fallback")
		{
			RedirectToZipFallback();
			return;
		}
		var sRedirect = "";
		document.getElementById("transferParameters").style.display = "block";
		
		for (var i = 1; i < aResults.length; i++)
		{	// remaining slots are name/value pairs
			var aNameValue = aResults[i].split("^");
			if (aNameValue[0] == "redirectUrl")
			{
				//alert("redirect to " + aNameValue[1]);
				sRedirect = aNameValue[1];
			}
			if (aNameValue[0] == "CurrentCorpNumberSPA")
			{
				document.getElementById("CurrentCorpNumberSPA").value = aNameValue[1];
			}
			if (aNameValue[0] == "NewCorpNumberSPA")
			{
				document.getElementById("NewCorpNumberSPA").value = aNameValue[1];
			}
			if(aNameValue[0] == "NewFranchiseMapId")
			{
				document.getElementById("NewFranchiseMapId").value = aNameValue[1];
			}
			if(aNameValue[0] == "TrackingNumber")
			{
				var input = document.createElement("input");
				input.setAttribute("type","hidden");
				input.value = aNameValue[1];
				input.id = "TrackingNumber";
				input.name = "TrackingNumber";
				document.getElementById("transferParameters").appendChild(input);
			}
			if(aNameValue[0] == "G2BIdentifier")
			{
				var input = document.createElement("input");
				input.setAttribute("type","hidden");
				input.value = aNameValue[1];
				input.id = "G2BIdentifier";
				input.name = "G2BIdentifier";
				document.getElementById("transferParameters").appendChild(input);
			}
			if(aNameValue[0] == "ServiceDiscovery")
			{
			    document.getElementById("ServiceDiscovery").value = aNameValue[1];
			}
//			if (aNameValue[0] == "Digital" && aNameValue[1] == 'True')
//			{
//				document.getElementById("digitalService").setAttribute("checked", true);
//			}
//			if (aNameValue[0] == "HSI" && aNameValue[1] == 'True')
//			{
//				document.getElementById("hsiService").setAttribute("checked", true);
//				document.getElementById("TransferEmailField").style.display = "block";
//			}
//			if (aNameValue[0] == "Voice" && aNameValue[1] == 'True')
//			{
//				document.getElementById("voiceService").setAttribute("checked", true);
//			}
		}
		if (sRedirect != "")
		{
			//alert("about to redirect to " + sRedirect);
			window.location.href = sRedirect;
			return;
		}
		eltAnimateSection().style.display = "none";
		eltFormSection().style.display = "block";
		eltFormMessage().style.display = "none";
		eltPageActivityMask().style.display = "none";
		
		document.getElementById("DFCMSave1").style.display = "none";
		document.getElementById("transferFormCopy").style.display = "block";
		
		PopulateStatic(document.getElementById("movingForm"));
		
		return;
	}
	eltAnimateSection().style.display = "none";
	eltPageActivityMask().style.display = "none";
	eltFormSection().style.display = "block";
	updateFormMessage("Completed, unknown state, please try again");
	window.location.reload(true);
}

// this is the specific handler for moving g2b tracking
// This will almost always allow the form to submit.
function HandleCompletedTrackingTicket(oXmlHttp)
{
	switchInProcess = false;
	// alert("HandleCompletedTicket()");
	var sResults = oXmlHttp.responseText;
	// alert("HandleCompletedTicket() sResults=" + sResults);
	var aResults = sResults.split("|");
	if (aResults.length > 0)
	{
		sStatus = aResults[0];	// status is in slot 0
		// Check for zip fall back
		var aStatusValue = aResults[0].split("^");
		var sRedirect = "";
		
		for (var i = 1; i < aResults.length; i++)
		{	// remaining slots are name/value pairs
			var aNameValue = aResults[i].split("^");
			if (aNameValue[0] == "redirectUrl")
			{
				//alert("redirect to " + aNameValue[1]);
				sRedirect = aNameValue[1];
			}
			if (aNameValue[0] == "ConfirmationNumber")
			{
				var input = document.createElement("input");
				input.setAttribute("type","hidden");
				input.value = aNameValue[1];
				input.id = "ConfirmationNumber";
				input.name = "ConfirmationNumber";
				document.getElementById("transferParameters").appendChild(input);
			}
		}
		if (sRedirect != "")
		{
			//alert("about to redirect to " + sRedirect);
			window.location.href = sRedirect;
			return;
		}
		eltAnimateSection().style.display = "none";
		eltFormMessage().style.display = "none";
		eltPageActivityMask().style.display = "none";
		eltGetTrackingForm().submit();
		return ;
	}
	eltAnimateSection().style.display = "none";
	eltPageActivityMask().style.display = "none";
	// updateFormMessage("Completed, unknown state, please try again");
	eltGetTrackingForm().submit();
}

