var aCityStates = sCityStates.split('|');

SubmitCounter = 0;

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 == 6 || 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 initState( formName, stateDropName, cityDropName, initialStateCode, initialCityId )
{
                var objForm = document.forms[formName];
                var stateDrop = objForm.elements[stateDropName];
                var cityDrop = objForm.elements[cityDropName];
                var selState;

                if (initialStateCode > 0)
                {
                        selState = initialStateCode-1;
                }
                else
                {
                        selState = stateDrop.selectedIndex;
                }
                for (i=0;i<aCityStates.length/3;i++)
                {
                        var stateName = aCityStates[i*3];
                        var stateCode = aCityStates[i*3+1];
                        stateDrop.options[i+1]=new Option(stateName,stateCode);
                        if (stateCode == initialStateCode)
                                {
                                        selState = i + 1;
                                }
                }
                stateDrop.selectedIndex=selState;
                if (selState>0)
                {
                        selCity = cityDrop.selectedIndex;
                        changedState( formName, stateDropName, cityDropName, selCity, initialCityId );
                }
                else
                {
                        stateDrop.selectedIndex=0;
                        cityDrop.selectedIndex=0;
                }
}

function changedState( formName, stateDropName, cityDropName, selCity, initialCityId )
{
                var objForm = document.forms[formName];
                var aCities
                stateDrop = objForm.elements[stateDropName];
                cityDrop = objForm.elements[cityDropName];
                selState = stateDrop.selectedIndex;

                if(selState>0)
                {
                        aCities=(aCityStates[(selState-1)*3+2]).split('/');
                        cityDrop.options.length=0;
                        cityDrop.options[0]=new Option('-- Select a City --','');
                        cityDrop.options[1]=new Option('-----------------','');
                        for (i=0;i<aCities.length/2;i++)
                        {
                                var cityName = aCities[i*2];
                                var cityId = aCities[i*2+1];
                                cityDrop.options[i+2]=new Option(cityName,cityId);
                                if ( cityId == initialCityId )
                                {
                                        selCity = i+2;
                                }
                        }
                }
                cityDrop.selectedIndex=selCity;
}

var swear_words_arr=new Array("piss","fuck","cunt","cocksucker","motherfucker","tits","asshole","penis","breast","dickhead","bastard");
var swear_alert_arr=new Array();
var swear_alert_count=0;

function reset_alert_count()
{
swear_alert_count=0;
}

function wordFilter(form,fields)
{
reset_alert_count();
var compare_text;
var fieldErrArr=new Array();
var fieldErrIndex=0;
for(var i=0; i<fields.length; i++)
{
eval('compare_text=document.' + form + '.' + fields[i] + '.value;');
for(var j=0; j<swear_words_arr.length; j++)
{
for(var k=0; k<(compare_text.length); k++)
{
if(swear_words_arr[j]==compare_text.substring(k,(k+swear_words_arr[j].length)).toLowerCase())
{
swear_alert_arr[swear_alert_count]=compare_text.substring(k,(k+swear_words_arr[j].length));
swear_alert_count++;
fieldErrArr[fieldErrIndex]=i;
fieldErrIndex++;
}
}
}
}
var alert_text="";
for(var k=1; k<=swear_alert_count; k++)
{
alert_text+="\n" + "(" + k + ") " + swear_alert_arr[k-1];
eval('compare_text=document.' + form + '.' + fields[fieldErrArr[0]] + '.focus();');
eval('compare_text=document.' + form + '.' + fields[fieldErrArr[0]] + '.select();');
}
if(swear_alert_count>0)
{
alert("The form cannot be submitted.\nThe following illegal words were found:\n_______________________________\n" + alert_text + "\n_______________________________");
return false;
}
else
{
return ValidateForm();
return true;
}
}


function wordFilter2(form,fields)
{
reset_alert_count();
var compare_text;
var fieldErrArr=new Array();
var fieldErrIndex=0;
for(var i=0; i<fields.length; i++)
{
eval('compare_text=document.' + form + '.' + fields[i] + '.value;');
for(var j=0; j<swear_words_arr.length; j++)
{
for(var k=0; k<(compare_text.length); k++)
{
if(swear_words_arr[j]==compare_text.substring(k,(k+swear_words_arr[j].length)).toLowerCase())
{
swear_alert_arr[swear_alert_count]=compare_text.substring(k,(k+swear_words_arr[j].length));
swear_alert_count++;
fieldErrArr[fieldErrIndex]=i;
fieldErrIndex++;
}
}
}
}
var alert_text="";
for(var k=1; k<=swear_alert_count; k++)
{
alert_text+="\n" + "(" + k + ") " + swear_alert_arr[k-1];
eval('compare_text=document.' + form + '.' + fields[fieldErrArr[0]] + '.focus();');
eval('compare_text=document.' + form + '.' + fields[fieldErrArr[0]] + '.select();');
}
if(swear_alert_count>0)
{
alert("The form cannot be submitted.\nThe following illegal words were found:\n_______________________________\n" + alert_text + "\n_______________________________");
return false;
}
else
{

return true;
}
}


var aCityStates = sCityStates.split('|');

var aBadWords = decodeWords(sBadWords).split(",");

SubmitCounter = 0;
window.onError = handleError;

function handleError(sError, sURL, nLineNum) {
        alert("Error:" + sError + " at line " + nLineNum);
        return false;
}

function decodeWords(sWords) {
        var i;
        var nCharCode;
        var sReturn = "";

        for (i=0; i<sWords.length; ++i)
        {        if (sWords.charAt(i) != ",") {
                        nCharCode = sWords.charCodeAt(i) - 1;
                        sReturn += unescape('%' + nCharCode.toString(16));
                }
                else
                        sReturn += sWords.charAt(i);
        }

        return sReturn;
}

function addDays(myDate,days) {
    return new Date(myDate.getTime() + days*24*60*60*1000);
}

function setfutureDate() {
    if ( document.formContact.MoveMonth.selectedIndex ) {
      var futureDate = addDays(new Date(),07);
      document.formContact.MoveMonth.selectedIndex = futureDate.getMonth();
      document.formContact.MoveDay.selectedIndex = futureDate.getDate() -1;
      var sYear = futureDate.getYear();
      if (sYear < 1900)
        sYear+=1900;
      document.formContact.MoveYear.options[document.formContact.MoveYear.selectedIndex].value = sYear;
    }
}

function setMoveType()
{

        var nMType = document.formContact.MType.value;

        if ( document.getElementById("divAuto") ) {
          if(nMType == '3' ){
                  document.getElementById("divAuto").style.display='block';
                  document.getElementById("divAuto").style.visibility='visible';
          }
          else{
                  document.getElementById("divAuto").style.display='none';
                  document.getElementById("divAuto").style.visibility='hidden';
          }
        }

        if (document.getElementById("idMSize")) {
          if (nMType == '1' || nMType == '2') {
                  document.getElementById("idMSize").style.display = 'block';
                  document.getElementById("idMSize").style.visibility = 'visible';
          }
          else {
                  document.getElementById("idMSize").style.display = 'none';
                  document.getElementById("idMSize").style.visibility = 'hidden';
          }
        }
}

function setDefaults()
{
  setMoveType();
  setfutureDate();
}


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 (sAreaCodes.indexOf(phonenumber.substring(0,3)) < 1) {
                alert("Please enter valid "+ lblPhone +" Phone Area code.");
                return false;
        }
        else if (phonenumber.substring(3,6) == "555") {
                alert("Please enter valid "+ lblPhone +" Phone Number");
                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.formContact;
        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 validate(objForm) {
        var nOpt;
    var isSelected = ""
    var objForm = document.formContact;
    var sErrorMsg = "";

    // Prevent multiple submissions
    if (countSubmit() == false) {
        return false
    }

    if ( objForm.step.value == 1 ) {
        if (!isFieldValid(objForm.MType, 1, "Move Type"))
                return false;

        var now = new Date();
        var currDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
        var moveDate = getMoveDate();
        sYear = parseInt(objForm.MoveYear.options[document.formContact.MoveYear.selectedIndex].value);
        if (sYear < 1900)
          sYear+=1900;

        objForm.MDate.value = objForm.MoveMonth.options[objForm.MoveMonth.selectedIndex].value + '/' + objForm.MoveDay.options[objForm.MoveDay.selectedIndex].value + '/' + sYear;
        objForm.MoveYear.options[objForm.MoveYear.selectedIndex].value = sYear;

        if (moveDate - currDate < 0)
         {
                alert ("Sorry we can't accept move dates earlier than current date. Please try again.");
                SubmitCounter = 0
            return false;
        }

        if (objForm.MType.value == 1 && moveDate.getTime()/(1000*60*60*24) - currDate.getTime()/(1000*60*60*24) < 1)
         {
                alert ("Please enter a date at least 3 days from the current date or select our Last Minute Move!.");
                SubmitCounter = 0
            return false;
        }

        if (moveDate.getTime()/(1000*60*60*24) - currDate.getTime()/(1000*60*60*24) > 6*31)
         {
                alert ("Sorry we can't accept move dates older than 6 months after current date. Please try again.");
                SubmitCounter = 0
            return false;
        }

        if (sErrorMsg.length > 0) {
                objForm.MoveMonth.focus();
                alert(sErrorMsg);
                SubmitCounter = 0;
                return false;
        }

        // If full service or self service, require move size
        if (objForm.MType.value == 1 || objForm.MType.value == 2) {

                if (!isFieldValid(objForm.ApproxWeight, 1,"Move Size"))
                        return false;
        }

        if (!isFieldValid(objForm.Zip, 5, "From Zip"))
                return false;

        if (!isFieldValid(objForm.ToState, 1, "To State"))
                return false;

        if (!isFieldValid(objForm.ToCity, 1, "To City"))
                return false;
    }

    if ( objForm.step.value == 2 ) {

        if (!isFieldValid(objForm.FirstName, 1, "First Name"))
                return false;

        if (!isFieldValid(objForm.LastName, 1, "Last Name"))
                return false;

        if(isValidEmail(objForm.EmailAddr.value) == false) {
                objForm.EmailAddr.focus();
                alert ("Please enter a valid Email address.")
                SubmitCounter = 0
                return false;
        }

        var strWorkPhone = objForm.txtWorkPhone1.value + objForm.txtWorkPhone2.value + objForm.txtWorkPhone3.value;
        var strHomePhone = objForm.txtHomePhone1.value + objForm.txtHomePhone2.value + objForm.txtHomePhone3.value;

        if ((strWorkPhone.length == 0) && (strHomePhone.length == 0)) {
                objForm.txtWorkPhone1.focus();
                alert ("Please enter at least one phone number.")
                SubmitCounter = 0
                return false;
        }
        if (checkPhone(strWorkPhone, "Work")==false) {
                objForm.txtWorkPhone1.focus();
                SubmitCounter = 0
                return false;
        }
        if (checkPhone(strHomePhone, "Home")==false) {
                objForm.txtHomePhone1.focus();
                SubmitCounter = 0
                return false;
        }
        if (!isFieldValid(objForm.ContactPref, 1, "Best Time To Call"))
                return false

        if (findBadWord(objForm.txtComment.value)) {
                alert("The contents of 'Additional Requests' cannot be accepted");
                objForm.txtComment.focus();
                SubmitCounter = 0;
                return false;
        }
        if (objForm.txtComment.value.length > 255) {

                alert ("Please enter less than 255 characters in 'Additional Requirements'. Please remove " + (document.formContact.txtComment.value.length - 255) + " characters.")
                objForm.txtComment.focus();
                SubmitCounter = 0;
                return false;
        }
        if (objForm.MType.value == "3"){
                if (!isFieldValid(objForm.txtMake1, 1, "Please enter vehicle make ."))
                        return false;

                if (!isFieldValid(objForm.txtModel1, 1, "Please enter vehicle model ."))
                        return false;

                if (!isValidAutoYear(objForm.txtYear1, "Please enter a valid four digit vehicle year ."))
                        return false;

                if (objForm.txtMake2.value.length > 0) {
                        if (!isFieldValid(objForm.txtModel2, 1, "Please enter vehicle model (#2)."))
                                return false;

                        if (!isValidAutoYear(objForm.txtYear2, "Please enter valid four digit vehicle year (#2)."))
                                return false;
                }
        }


        if(objForm.ToState.value > 0){
                objForm.GeoID.value = objForm.ToState.value
        }
        if(objForm.ToCity.value > 0){
                objForm.GeoID.value = objForm.ToCity.value
        }
    }

    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 + "'");

                SubmitCounter = 0;
                return false;
        }

        if (!bSelectField && findBadWord(objField.value)) {
                alert("Contents of '" + sFieldName + "' cannot be accepted");
                objField.focus();
                SubmitCounter = 0;
                return false;
        }
        return true;
}

function findBadWord(sText) {
        var nIndex;

        sText = sText.toLowerCase();
        for (nIndex=0; nIndex<aBadWords.length; ++nIndex) {
                if (sText.indexOf(aBadWords[nIndex]) >= 0)
                        return true;
        }

        return false;
}

function isValidAutoYear(objField, sErrorMsg) {
        if (objField.value.length != 4 || !isInteger(objField.value)
            || objField.value < 1900 || objField.value > 2100) {
                objField.focus();
                alert(sErrorMsg);
                SubmitCounter = 0;
                return false;
        }
        return true;
}

function countSubmit() {
    SubmitCounter++;
    if(SubmitCounter > 1) {
      return false;
    }
  return true;
}

function initState( formName, stateDropName, cityDropName, initialStateCode, initialCityId )
{
                var objForm = document.forms[formName];
                var stateDrop = objForm.elements[stateDropName];
                var cityDrop = objForm.elements[cityDropName];
                var selState;

                if (initialStateCode > 0)
                {
                        selState = initialStateCode-1;
                }
                else
                {
                        selState = stateDrop.selectedIndex;
                }
                for (i=0;i<aCityStates.length/3;i++)
                {
                        var stateName = aCityStates[i*3];
                        var stateCode = aCityStates[i*3+1];
                        stateDrop.options[i+1]=new Option(stateName,stateCode);
                        if (stateCode == initialStateCode)
                                {
                                        selState = i + 1;
                                }
                }
                stateDrop.selectedIndex=selState;
                if (selState>0)
                {
                        selCity = cityDrop.selectedIndex;
                        changedState( formName, stateDropName, cityDropName, selCity, initialCityId );
                }
                else
                {
                        stateDrop.selectedIndex=0;
                        cityDrop.selectedIndex=0;
                }
}

function changedState( formName, stateDropName, cityDropName, selCity, initialCityId )
{
                var objForm = document.forms[formName];
                var aCities
                stateDrop = objForm.elements[stateDropName];
                cityDrop = objForm.elements[cityDropName];
                selState = stateDrop.selectedIndex;

                if(selState>0)
                {
                        aCities=(aCityStates[(selState-1)*3+2]).split('/');
                        cityDrop.options.length=0;
                        cityDrop.options[0]=new Option('-- Select a City --','');
                        cityDrop.options[1]=new Option('-----------------','');
                        for (i=0;i<aCities.length/2;i++)
                        {
                                var cityName = aCities[i*2];
                                var cityId = aCities[i*2+1];
                                cityDrop.options[i+2]=new Option(cityName,cityId);
                                if ( cityId == initialCityId )
                                {
                                        selCity = i+2;
                                }
                        }
                }
                cityDrop.selectedIndex=selCity;
}

