

function PopulateFormFromCookie()
{
	var moveCookie = GetCookie("Moving");
	var franchiseMapId = GetCookie("Serviceability","FranchiseMapId");
	
	var promoReg = new RegExp("[Pp]romo[Cc]ode=([^&]*)");
	var queryString = window.location.search;
	var match = promoReg.exec(queryString);
	if(match != null)
	{
		document.getElementById("PromoCode").value = match[1];
	}
	if(moveCookie != null && moveCookie != "" && franchiseMapId != null && franchiseMapId != "")
	{
		var movingForm = document.getElementById("movingForm");
		var aNameValuePairs = moveCookie.split("&");
		for(var i = 0; i < aNameValuePairs.length; i++)
		{
			var pair = aNameValuePairs[i].split("=");
			var Field = document.getElementById(pair[0]);
			var reg = /\+/g;
			var value = unescape(pair[1]).replace(reg, " ");
			Field.value = value;
			DeleteCookie("Moving",pair[0]);
		}
		
		// Last check: Make certain the localized zipcode matches the new address zip code
		var newAddressZip = movingForm.elements["NewZip"];
		var localizedZip = GetCookie("Serviceability","Zip");
		if(newAddressZip.value.trim() == localizedZip.trim())
		{
			// Hide address form
			document.getElementById("addressParameters").style.display = "none";
			document.getElementById("transferParameters").style.display = "block";
			document.getElementById("DFCMSave1").style.display = "none";
			document.getElementById("transferFormCopy").style.display = "block";
			document.getElementById("NewFranchiseMapId").value = franchiseMapId;
			
			PopulateStatic(movingForm);
		}
		else
		{
			document.getElementById("addressParameters").style.display = "block";
		}
	}
	else
	{
		document.getElementById("addressParameters").style.display = "block";
	}
	
/*	Fields are now defaulted to blank
// Set date fields
	SetMonthToNow(document.getElementById("ConnectionMonth"))
	SetMonthToNow(document.getElementById("DisconnectionMonth"))
   	
	*/
}

/*
 Fields are now defaulted to blank
function SetMonthToNow(MonthField)
{
	var date = new Date();
	MonthField.selectedIndex = date.getMonth();
}
*/

function ValidateForm(MovingForm)
{
//		alert("validate");

	ClearErrorMessages(MovingForm);
	
	// define required and validating fields
	var inputCurrentAddress = MovingForm.elements["CurrentAddress"];
	var inputCurrentCity = MovingForm.elements["CurrentCity"];
	var inputCurrentAptNum = MovingForm.elements["CurrentAptNum"];
	var inputCurrentState = MovingForm.elements["CurrentState"];
	var inputCurrentZip = MovingForm.elements["CurrentZip"];
	var inputNewAddress = MovingForm.elements["NewAddress"];
	var inputNewAptNum = MovingForm.elements["NewAptNum"];
	var inputNewCity = MovingForm.elements["NewCity"];
	var inputNewState = MovingForm.elements["NewState"]
	var inputNewZip = MovingForm.elements["NewZip"];
	var inputIsCurrentCust = MovingForm.elements["currentCustomer"];
	var inputTransferOrShop = MovingForm.elements["Operation"];
	var bErrorFocus = false;
	
	// check for required fields
	if(CheckRequired(inputCurrentAddress, bErrorFocus))
		bErrorFocus = true;
	if(CheckRequired(inputCurrentCity, bErrorFocus))
		bErrorFocus = true;
	if(CheckRequired(inputCurrentState, bErrorFocus))
		bErrorFocus = true;
	if(CheckRequired(inputCurrentZip, bErrorFocus))
		bErrorFocus = true;
	else
	{
		if(!checkZip(inputCurrentZip, false))
		{
			if(!bErrorFocus)
				inputCurrentZip.focus();
			bErrorFocus = true;
			document.getElementById("zipFormatError").style.display = "block";
			ShowError(inputCurrentZip, "errorInField");
		}
	}
	
	if(CheckRequired(inputNewAddress, bErrorFocus))
		bErrorFocus = true;
	if(CheckRequired(inputNewCity, bErrorFocus))
		bErrorFocus = true;
	if(CheckRequired(inputNewState, bErrorFocus))
		bErrorFocus = true;
	if(CheckRequired(inputNewZip, bErrorFocus))
		bErrorFocus = true;
	else
	{
		if(!checkZip(inputNewZip, false))
		{
			if(!bErrorFocus)
				inputNewZip.focus();
			bErrorFocus = true;
			document.getElementById("zipFormatError").style.display = "block";
			ShowError(inputNewZip, "errorInField");
		}
	}
	if(CheckRequired(inputIsCurrentCust, bErrorFocus))
		bErrorFocus = true;
	var transferOrShopDiv = document.getElementById("transferOrShop")
	if(transferOrShopDiv != null && transferOrShopDiv.style.display == "block")
	{
		if(CheckRequired(inputTransferOrShop, bErrorFocus))
			bErrorFocus = true;
	}
	
	// Check that the same address is not entered twice
	if(	inputCurrentAddress.value.toLowerCase() == inputNewAddress.value.toLowerCase() &&
		inputCurrentCity.value.toLowerCase() == inputNewCity.value.toLowerCase() &&
		inputCurrentAptNum.value.toLowerCase() == inputNewAptNum.value.toLowerCase() &&
		inputCurrentState.value.toLowerCase() == inputNewState.value.toLowerCase() &&
		inputCurrentZip.value.toLowerCase() == inputNewZip.value.toLowerCase())
	{
		if(!bErrorFocus)
			inputNewAddress.focus()
		bErrorFocus = true;
		document.getElementById("duplicateAddressError").style.display = "block";
		ShowError(inputNewAddress, "errorInField");
		ShowError(inputNewAptNum, "errorInField");
		ShowError(inputNewCity, "errorInField");
		ShowError(inputNewState, "errorInField");
		ShowError(inputNewZip, "errorInField");
	}
	
	if(bErrorFocus)
	{
		var errorMessages = document.getElementById("addressErrorMessages");
		errorMessages.style.display = "block";
		errorMessages.scrollIntoView(true);
	}
	
	return !bErrorFocus;
}

function PopulateStatic(MovingForm)
{
	for(var i = 0; i < MovingForm.elements.length; i++)
	{
		var field = MovingForm.elements[i];
		var fieldName = field.name;
		var staticField = document.getElementById("Static" + fieldName);
		var transferField = document.getElementById(fieldName + "Transfer");
		if(staticField != null)
		{
			if(field.value && field.value.length > 0)
			{
				staticField.innerHTML = field.value;
				if(staticField.tagName == "DIV")
					staticField.style.display = "block";
				else
					staticField.style.display = "inline";
				
				transferField.value = field.value;
			}
			else
			{
				staticField.style.display = "none";
			}
		}
	}
}

function ValidateTransfer(TransferForm)
{
	ClearErrorMessages(TransferForm);
	
	var inputFirstName = TransferForm.elements["FirstName"];
	var inputLastName = TransferForm.elements["LastName"];
	
	var inputDayPhoneArea = TransferForm.elements["DayTimePhoneArea"];
	var inputDayPhonePrefix = TransferForm.elements["DayTimePhonePrefix"];
	var inputDayPhoneBody = TransferForm.elements["DayTimePhoneBody"];
	
	var inputServiceAddressPhoneArea = TransferForm.elements["ServiceAddressPhoneArea"];
	var inputServiceAddressPhonePrefix = TransferForm.elements["ServiceAddressPhonePrefix"];
	var inputServiceAddressPhoneBody = TransferForm.elements["ServiceAddressPhoneBody"];
	
	var inputEmailAddress = TransferForm.elements["E-mailAddress"];
	
	var inputServices = TransferForm.elements["Services"];
	var inputCableServices = TransferForm.elements["CableServices"];
	
	var inputConnectMonth = TransferForm.elements["ConnectionMonth"];
	var inputConnectDay = TransferForm.elements["ConnectionDay"];
	var inputConnectYear = TransferForm.elements["ConnectionYear"];
	var inputConnectTime = TransferForm.elements["ConnectionTime"];
	
	var inputTVsToConnect = TransferForm.elements["NumberOfTVsToConnect"];
	
	var inputDisconnectMonth = TransferForm.elements["DisconnectionMonth"];
	var inputDisconnectDay = TransferForm.elements["DisconnectionDay"];
	var inputDisconnectYear = TransferForm.elements["DisconnectionYear"];
	var inputDisconnectTime = TransferForm.elements["DisconnectionTime"];
	
	var requiredElements = new Array( inputFirstName, inputLastName, inputDayPhoneArea, inputDayPhonePrefix, inputDayPhoneBody, inputServiceAddressPhoneArea, inputServiceAddressPhonePrefix, inputServiceAddressPhoneBody, inputEmailAddress, inputServices, inputTVsToConnect, inputConnectTime, inputDisconnectTime );
	var bErrorFocus = false;
	
	for(var i = 0; i < requiredElements.length; i++)
	{
		if(CheckRequired(requiredElements[i],  bErrorFocus))
		{
			bErrorFocus = true;
		}
	}
	
	// test for required cable type if cable selected
	for(var i = 0; i < inputServices.length; i++)
	{
		if(inputServices[i].value == "Cable" && inputServices[i].checked == true)
		{
			if(CheckRequired(inputCableServices, bErrorFocus))
			{
				bErrorFocus = true;
			}
		}
	}
	
	// Validate Phone Numbers
	
	if(!(checkNumberLength(inputDayPhoneArea, 3) && checkNumberLength(inputDayPhonePrefix, 3) && checkNumberLength(inputDayPhoneBody, 4)))
	{
		// field area focused
		bErrorFocus = true;
		var errorPhoneMessage = document.getElementById("errorPhoneMessage");
		errorPhoneMessage.style.display = "block";
		ShowError(inputDayPhoneArea, "errorInField");
		ShowError(inputDayPhonePrefix, "errorInField");
		ShowError(inputDayPhoneBody, "errorInField");
	}
	
	if(!(checkNumberLength(inputServiceAddressPhoneArea, 3) && checkNumberLength(inputServiceAddressPhonePrefix, 3) && checkNumberLength(inputServiceAddressPhoneBody, 4)))
	{
		// field area focused
		bErrorFocus = true;
		var errorPhoneMessage = document.getElementById("errorPhoneMessage");
		errorPhoneMessage.style.display = "block";
		ShowError(inputServiceAddressPhoneArea, "errorInField");
		ShowError(inputServiceAddressPhonePrefix, "errorInField");
		ShowError(inputServiceAddressPhoneBody, "errorInField");
	}
	
	// Validate Email
	var emailError = new Object();
	emailError.errorString = "";
	if(!checkEmailNoAlert (inputEmailAddress, emailError))
	{
		// checkEmailNoAlert sets focus
		bErrorFocus = true;
		var emailErrorMessage = document.getElementById("emailErrorMessage");
		emailErrorMessage.innerHTML = emailError.errorString;
		emailErrorMessage.style.display = "block";
		ShowError(inputEmailAddress, "errorInField");
	}
	
	// Validate Addresses
	var startingDay = new Date();
	startingDay.setDate(startingDay.getDate() + 3);
	var startingDay5 = new Date();
	startingDay5.setDate(startingDay5.getDate() + 5);
	
	var connectDate;
	var disconnectDate;
	
	
	if(inputConnectMonth.selectedIndex == 0)
	    connectDate = new Date (1900, 12, 12);
	else
	    connectDate  = new Date(inputConnectYear.value, inputConnectMonth.selectedIndex - 1 , inputConnectDay.value);
	    
	if(inputDisconnectMonth.selectedIndex == 0)    
	    disconnectDate = new Date (1900, 12, 12);
	else
	    disconnectDate = new Date(inputDisconnectYear.value, inputDisconnectMonth.selectedIndex - 1, inputDisconnectDay.value);
	// Connect date at least 5 days from today?
	if(!DateCompare(connectDate, startingDay5))
	{
		if(!bErrorFocus)
			inputConnectMonth.focus();
		bErrorFocus = true;
		document.getElementById("futureDateFieldsError").style.display = "block";
		ShowError(inputConnectMonth, "errorInField")
		ShowError(inputConnectYear, "errorInField")
	}
	// Disconnect date at least 3 days from today?
	if(!DateCompare(disconnectDate, startingDay))
	{
		
		if(!bErrorFocus)
			inputDisconnectMonth.focus();
		bErrorFocus = true;
		document.getElementById("futureDateFieldsError").style.display = "block";
		ShowError(inputDisconnectMonth, "errorInField")
		ShowError(inputDisconnectYear, "errorInField")
	}
	/*
	var disconnectDateOffset = disconnectDate;
	disconnectDateOffset.setDate(disconnectDateOffset.getDate() + 2);
	if(!DateCompare(connectDate, disconnectDateOffset))
	{
		if(!bErrorFocus)
			inputConnectMonth.focus();
		bErrorFocus = true;
		document.getElementById("futureDateFieldsError").style.display = "block";
		ShowError(inputConnectMonth, "errorInField")
		ShowError(inputConnectYear, "errorInField")
	}*/
	
	
	// Number Of TVs
	if(!checkNumber(inputTVsToConnect,""))
	{
		// focus already taken care of
		bErrorFocus = true;
		document.getElementById("numberOfTVsError").style.display = "block";
		ShowError(inputTVsToConnect, "errorInField");
	}
	
	
	
	// populate hidden fields
//	var currentAddressReviewElement = document.getElementById("CurrentAddressReview");
//	var newAddressReviewElement = document.getElementById("NewAddressReview");
//	
//	TransferForm.elements["CurrentAddress"].value = ParseAddress(currentAddressReviewElement);
//	TransferForm.elements["NewAddress"].value = ParseAddress(newAddressReviewElement);
	
	TransferForm.elements["TransferPromoCode"].value = document.getElementById("PromoCode").value;
	
	if(bErrorFocus)
	{
		var errorMessages = document.getElementById("transferErrorMessages");
		errorMessages.style.display = "block";
		errorMessages.scrollIntoView(true);
	}
	
	return !bErrorFocus;
}

// returns true if FirstDate >= SecondDate otherwise false
function DateCompare (FirstDate, SecondDate)
{
	var firstYear = FirstDate.getFullYear();
	var firstMonth = FirstDate.getMonth();
	var firstDay = FirstDate.getDate();
	
	var secondYear = SecondDate.getFullYear();
	var secondMonth = SecondDate.getMonth();
	var secondDay = SecondDate.getDate();
	
	if(firstYear > secondYear)
		return true;
		
	if(firstYear >= secondYear && firstMonth > secondMonth)
		return true;
		
	if(firstYear >= secondYear && firstMonth >= secondMonth && firstDay >= secondDay)
		return true;
	
	return false;
}

function ParseAddress(AddressElement)
{
	var divList = AddressElement.getElementsByTagName("div");
	var returnValue = "";
	for(var i in divList)
	{
		var addressPart = divList[i];
		if(typeof addressPart == 'object')
		{
			var text = (addressPart.innerText) ? addressPart.innerText : addressPart.textContent;
			returnValue += text.trim() + " ";
		}
	}
	return returnValue;
}

function ClearErrorMessages(Form)
{
	var addressErrorMessages = document.getElementById("addressErrorMessages");
	var transferErrorMessages = document.getElementById("transferErrorMessages");
	
	ClearMessage(addressErrorMessages);
	ClearMessage(transferErrorMessages);
	
	var mainDiv = document.getElementById("main");
	
	var listFields = mainDiv.getElementsByTagName("input");
	var listLabels = document.getElementsByTagName("label");
	var listSelect = document.getElementsByTagName("div");
	ClearList(listFields);
	ClearList(listLabels);
	ClearList(listSelect);
}

function ClearMessage(MessageContainer)
{
	var list = MessageContainer.getElementsByTagName("DIV");
	for(var i = 0; i < list.length; i++)
	{
		list[i].style.display = "none";
	}
	MessageContainer.style.display = "none";
}

function ClearList(List)
{
	for(var i in List)
	{
		if(typeof List[i] == 'object')
		{
			var Field = List[i];
		
			var sClass = new String(Field.className);
			if(sClass.indexOf("errorInField") > -1)
			{
				sClass = sClass.replace(new RegExp(" errorInField\\b"), "");
				UpdateClassAttribute(Field, sClass);
			}
		}
	}
}

function CheckRequired(Field, ErrorFocused)
{
	if(Field.length && !Field.type)
	{
		for(var i = 0; i <Field.length; i++)
		{
			var Item = Field[i];
			if(Item.checked == true)
			{
				return false;
			}
				
		}
		Field[0].focus();
		ShowError(Field, "errorInField");
		return true;
	}
	if(!Field.value || Field.value.trim() == null || Field.value.trim().length == 0)
	{
		ShowError(Field, "errorInField");
		Field.value = "";
		if(!ErrorFocused)
		{
			document.getElementById("requiredFieldsError").style.display = "block";
			document.getElementById("requiredTransferFieldError").style.display = "block";
			Field.focus();
		}
		return true;
	}
	else
		return false;
}

function ShowError(Field, ErrorClassName)
{
	if(Field.length && !Field.type)
	{
		for(var i = 0; i < Field.length; i++)
		{
			
			var Item = Field[i];
			var Label = GetLabelNodeForField(Item);
			if(Label != null)
			{
				var sClass = new String(Label.className);
				if ( sClass.indexOf(ErrorClassName) == -1 )
				{
					sClass += " " + ErrorClassName;
					UpdateClassAttribute(Label, sClass);
				}	
			}	
		}
	}
	else if (Field.tagName == "SELECT")
	{
		Field = Field.parentNode;
		var sClass = new String(Field.className);
		if ( sClass.indexOf(ErrorClassName) == -1 )
		{
			sClass += " " + ErrorClassName;
			UpdateClassAttribute(Field, sClass);			
		}
	}
	else
	{
		var sClass = new String(Field.className);
		if ( sClass.indexOf(ErrorClassName) == -1 )
		{
			sClass += " " + ErrorClassName;
			UpdateClassAttribute(Field, sClass);
		}
	}
}

function ShowTransferOption()
{
	document.getElementById("transferOrShop").style.display = "block";
}

function HideTransferOption()
{
	document.getElementById("transferOrShop").style.display = "none";
}

function UpdateClassAttribute(Field, Value)
{
	Field.className = Value;
}

function GetLabelForField(Field)
{
	var labels = document.getElementsByTagName("label");
	var fieldId = Field.id;
	if(fieldId != null)
	{
		for(var l = 0; l < labels.length; l++)
		{
			var label = labels[l];
			if(label.htmlFor == fieldId)
			{
				return label.innerHTML;
			}
		}
	}
	return null;
}

function GetLabelNodeForField(Field)
{
	var labels = document.getElementsByTagName("label");
	var fieldId = Field.id;
	if(fieldId != null)
	{
		for(var l = 0; l < labels.length; l++)
		{
			var label = labels[l];
			if(label.htmlFor == fieldId)
			{
				return label;
			}
		}
	}
	return null;
}

function EditAddresses()
{
	ClearErrorMessages(document.getElementById("TransferForm"));
	document.getElementById("addressParameters").style.display = "block";
	document.getElementById("transferParameters").style.display = "none";
	document.getElementById("DFCMSave1").style.display = "block";
	document.getElementById("transferFormCopy").style.display = "none";
	document.getElementById("CurrentAddress").focus();
}

function ShowInternetOption()
{
	var inputInternetService = document.getElementById("hsiService");
	var transferEmailField = document.getElementById("TransferEmailField");
	
	if (inputInternetService.checked == true)
		transferEmailField.style.display = "block";
	else
		transferEmailField.style.display = "none";
}

function ShowCableTypes()
{
	var inputCableService = document.getElementById("cableService");
	var inputCableServiceTypes  = document.getElementById("cableServiceTypes");
	
	if (inputCableService.checked == true)
	{
		inputCableServiceTypes.style.display = "block";
	}
	else
	{
		inputCableServiceTypes.style.display = "none";
	}
}

var DateChanged = function(dateObject) {
    var year = document.getElementById(dateObject + "Year");
    var days = document.getElementById(dateObject + "Day");
    var month = document.getElementById(dateObject + "Month"); 
    
    //Need a month and year to generate the correct set of days  (ex. February 2008 has 29 days)
    //if the year box is blank when the Month dropdown changes, use a default year that is not a leap year for the set of days
    var defaultYear = "2001";
    if(year.value != "")
    {
        defaultYear = year.value;
    } 
    
    var d = Date.parse(month.value + " 1, " + defaultYear);
    var date = new Date(d);
    date.setDate(32);
    var s = 32 - date.getDate();
    //alert(evt.value + " " + s);
    
    //Grab the current selected index for the days field
    var selectedDay = days.options.selectedIndex;
    days.options.length = 0;
    for(var i = 0; i < s; i++)
    {
        days.options[i] = new Option(i + 1 , i + 1);
    }
    if(selectedDay > days.options.length - 1)
        days.options.selectedIndex = days.options.length - 1;
    else
    {
        if(selectedDay > 0)
            days.options.selectedIndex = selectedDay;
    }
    //Redisplay the dropdown for Safari to get rid of extra days that may display in the list
		DF.Dom.forceRedisplay(days.parentNode, "Safari");
		days.scrollIntoView(true);
}

function SetupOptions()
{
          var currentDate = new Date();
          var disconnectYear = document.getElementById("DisconnectionYear");
          var connectYear = document.getElementById("ConnectionYear");

          var eltCurrentYear = document.createElement('option');
          eltCurrentYear.text = currentDate.getFullYear();
          eltCurrentYear.value = currentDate.getFullYear();
          
          var eltNextYear = document.createElement('option');
          eltNextYear.text = currentDate.getFullYear() + 1;
          eltNextYear.value = currentDate.getFullYear() + 1;
          
          var eltCYearClone = document.createElement('option');
          eltCYearClone.text = currentDate.getFullYear();
          eltCYearClone.value = currentDate.getFullYear();
          
          var eltNYClone = document.createElement('option');
          eltNYClone.text = currentDate.getFullYear() + 1;
          eltNYClone.value = currentDate.getFullYear() + 1;
          
          try  
            {   //Non IE browsers
              connectYear.add(eltCYearClone, null);
              connectYear.add(eltNYClone, null);
              disconnectYear.add(eltCurrentYear, null);
              disconnectYear.add(eltNextYear, null);
            }
          catch(err)
            {    // IE Browsers
              connectYear.add(eltCurrentYear);
              connectYear.add(eltNextYear);
              disconnectYear.add(eltCYearClone);
              disconnectYear.add(eltNYClone);
            }
}
