window.onError = handleError;

function handleError(sError, sURL, nLineNum) {
	alert("Error:" + sError + " at line " + nLineNum);
	return false;
}


var dtCh= "/";
var minYear=1900;
var maxYear=3000;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if ((c < "0") || (c > "9")) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}



// Validate a phone number
// Expects a phone number. Makes sure the user doesn't just enter sequential numbers or identical characters
function checkPhone(phonenumber, lblPhone){
	var lastpart=phonenumber.substring(0,10);
	var sample=lastpart.substring(0,1);
	var sPhone = stripCharsInBag(phonenumber, "-");


	if (sPhone.length == 0)
		return true;

	if (sPhone.length < 10)
	{	alert("Please enter a valid 10 digit " + lblPhone + " Phone Number.");
		return false;
	}

	if ((sPhone=="0123456789") || (sPhone=="1234567890"))
	{
		alert("Please enter valid "+ lblPhone +" Phone Number.0123456789 and 1234567890 not allowed");
		return false;
	}
	else if (!isInteger(sPhone)) {
		alert("Please use only numbers in " + lblPhone + " Phone");
		return false;
	}
	else if (phonenumber.substring(3,6) == "555") {
		alert("Please enter valid "+ lblPhone +" Phone Number. Invalid Due To The 555 Exchange");
		return false;
	}
	else {
		for(i=1;i<lastpart.length;i++)
		{
			if ((lastpart.substring(i,i+1))!=sample) return true;
		}
		alert("Please enter valid "+ lblPhone +" Phone Number")
		return false;
	}
	return true;
}

function isValidEmail (strEmail) {
	return (strEmail.match(/^[^\/\#\,\^\*\\]+\@([A-Za-z0-9\-]{1,}\.)+([A-Za-z]{2,3})$/) ? true:false);
}

function setMonthDays()
{
	var optDay = document.formContact.MoveDay.options;
	var nMonth = document.formContact.MoveMonth.options[document.formContact.MoveMonth.selectedIndex].value;
	var nYear = document.formContact.MoveYear.options[document.formContact.MoveYear.selectedIndex].value;
	var nMaxDay;
	var i;
	var nCurrentDay = optDay.selectedIndex + 1;

	if (nMonth == 2)
	{	if (((nYear % 4 == 0) && (nYear % 100 != 0)) || (nYear % 400 == 0))
			nMaxDay = 29;
		else
			nMaxDay = 28;
	}
	else if (nMonth == 4 || nMonth == 30 || nMonth == 9 || nMonth == 11)
		nMaxDay = 30
	else
		nMaxDay = 31;

	if (nCurrentDay > nMaxDay)
		nCurrentDay = nMaxDay;

	optDay.length = 0;
	for (i=1; i<=nMaxDay; ++i)
	{	optDay[i-1] = new Option;
		optDay[i-1].text = i;
		optDay[i-1].value = i;
	}
	optDay.selectedIndex = nCurrentDay - 1;
}
//-->

function getMoveDate()
{
	var dMDate;
	var objForm;
	var nMonth;
	var nDay;
	var nYear;

	objForm = document.Form1;
	nYear = objForm.moveYear.options[objForm.moveYear.selectedIndex].value;
	nMonth = objForm.moveMonth.options[objForm.moveMonth.selectedIndex].value;
	nDay = objForm.moveDay.options[objForm.moveDay.selectedIndex].value;
	dMDate = new Date(nYear, nMonth - 1, nDay);
	return dMDate;
}

// Verify required fields
function validateForm() {
    var objForm = document.Form1;

	if (!isFieldValid(objForm.FirstName, 1, "First Name"))
		return false;

	if (!isFieldValid(objForm.LastName, 1, "Last Name"))
		return false;

	if(isValidEmail(objForm.Email.value) == false) {
		objForm.Email.focus();
		alert ("Please enter a valid Email address.")
		return false;
	}

	var strDayPhone = objForm.DayPhone1.value + objForm.DayPhone2.value + objForm.DayPhone3.value;
	var strEvePhone = objForm.EvePhone1.value + objForm.EvePhone2.value + objForm.EvePhone3.value;
	objForm.DayPhone.value = strDayPhone;
	objForm.EvePhone.value = strEvePhone;

	if (strDayPhone.length == 0) {
		objForm.DayPhone1.focus();
		alert ("Please enter phone number.")
		return false;
	}
	if (checkPhone(strDayPhone, "Day")==false) {
		objForm.DayPhone1.focus();
		return false;
	}


	if (!isFieldValid(objForm.Zip, 5, "Zip"))
		return false;

	var now = new Date();
	var currDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
	var moveDate = getMoveDate();
	objForm.StartDate.value = objForm.moveMonth.options[objForm.moveMonth.selectedIndex].value + '/' + objForm.moveDay.options[objForm.moveDay.selectedIndex].value + '/' + objForm.moveYear.options[objForm.moveYear.selectedIndex].value;

	if (moveDate - currDate < 0)
	{
		alert ("The date you entered is in the past!.")
		return false;
	}


	if (!isFieldValid(objForm.EstimatedTime, 1, "Estimated Time"))
		return false;

	if (!isFieldValid(objForm.EstimatedSize, 1, "Estimated Size"))
		return false;


	if (objForm.Comments.value.length > 255) {

		alert ("Please enter less than 255 characters in 'Comments'. Please remove " + (document.Form1.Comments.value.length - 255) + " characters.")
		objForm.Comments.focus();
		return false;
	}

	return true;
}

function isFieldValid(objField, nMinLen, sFieldName) {
	var bSelectField = false

	if (objField.type == 'select-one')
		bSelectField = true;

	if ((bSelectField && objField.value < 1)
	     || objField.value.length < nMinLen) {
		objField.focus();
		if (bSelectField)
			alert("Please select a '" + sFieldName + "'");
		else
			alert("Please enter '" + sFieldName + "'");
		return false;
	}

	return true;
}