var ck_zipcode = /^[0-9-\s]{5,11}$/;
var ck_sname = /^[A-Za-z\'\-\s.]{3,50}$/;
var ck_email = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var ck_TEL = /^[0-9]{10,10}$/;
var ck_EXT = /^[0-9]{0,6}$/;
var ck_number = /[0-9]/;

var request = createXMLHTTPObject();

var form_errors = [];
var form_object = undefined;
var form_values = undefined;

function moveOnMax(field,nextFieldID){
  if(field.value.length >= field.maxLength){
    document.getElementById(nextFieldID).focus();
  }
}

function validate_this_zip(){
	var zipcode = document.getElementById('mfield').value;
	if(!ck_zipcode.test(zipcode)){
		alert('The zipcode you entered is not valid');
		return false;
	}else{
		return true;
	}
}

function upon_window_load(){
	document.very_first_form.pickup.value = '';
	document.very_first_form.delivery.value = '';
	document.form.moving_from_zip.value = '';
	document.form.moving_to_zip.value = '';
	document.form.fname.value = 'First';
	document.form.lname.value = 'Last';
	document.form.email.value = '';
	document.form.area_code.value = '';
	document.form.xxx.value = '';
	document.form.xxxx.value = '';
	document.form.ext.value = '';
	document.form.area_code_2.value = '';
	document.form.xxx_2.value = '';
	document.form.xxxx_2.value = '';

	document.form.month.value = '';
	document.form.day.value = '';
	document.form.year.value = '';
	document.form.datewrite.value = novalueDate;

	document.form.phonewrite.value = '';
	document.form.phonewrite2.value = '';

	document.form.number_of_rooms.value = '';

	//lit_box_height = document.getElementById('lit_box').offsetHeight;
	//document.getElementById('lit_box').style.marginTop = '-' + lit_box_height/2 + 'px';
	document.getElementById('lit_box').style.marginTop = '-260px';
	//alert(lit_box_height/2 + ',' + lit_box_height);
	document.getElementById('lit_box').style.top = '50%';
	document.getElementById('lit_box').style.marginLeft = '-207px';
	document.getElementById('lit_box').style.left = '50%';

	var two_weeks_from_now = new Date();
	two_weeks_from_now.setDate(two_weeks_from_now.getDate()+1);
	
	//alert(two_weeks_from_now.getDate());
	
	day = new String(two_weeks_from_now.getDate());
	month = new String(two_weeks_from_now.getMonth()+1);
	year = new String(two_weeks_from_now.getFullYear());

	if(day.length < 2){
		day = '0' + day;
	}
	
	if(month.length < 2){
		month = '0' + month;
	}

	//document.getElementById('span_tomorrow').innerHTML = month + '/' + day + '/' + year;
}

function getFormValues(form) {
	var form_values = new Array();
	form_values["SZIP"] = form.moving_from_zip.value;
	form_values["RZIP"] = form.moving_to_zip.value;
	form_values["SNAME"] = form.fname.value + ' ' + form.lname.value;
	form_values["EMAIL"] = form.email.value;
	
	form_values["STELH_AREA"] = trim(form.area_code.value);
	form_values["STELH_FIRST3"] = trim(form.xxx.value);
	form_values["STELH_LAST4"] = trim(form.xxxx.value);
	form_values["STELH"] = form_values["STELH_AREA"] + form_values["STELH_FIRST3"] + form_values["STELH_LAST4"];
	
	form_values["STELHEXT"] = trim(form.ext.value);

	form_values["STELO_AREA"] = trim(form.area_code_2.value);
	form_values["STELO_FIRST3"] = trim(form.xxx_2.value);
	form_values["STELO_LAST4"] = trim(form.xxxx_2.value);
	form_values["STELO"] = form_values["STELO_AREA"] + form_values["STELO_FIRST3"] + form_values["STELO_LAST4"];

	form_values["DD"] = form.day.value;
	form_values["MM"] = form.month.value;
	form_values["YY"] = form.year.value;
	form_values["ROOMS"] = form.number_of_rooms.value;
	form_values["SID"] = form.sid.value;
	return form_values;
}

function createHttpQuery(array) {
	var query = "";
	for(var parameter in array) {
		if(array[parameter].length > 0) {
			query += "&" + encodeURIComponent(parameter) + "=" + encodeURIComponent(array[parameter]);
		}
	}
	query = query.substr(1);
	return query;
}

function getFormErrors(response) {
	fname = document.form.fname.value;
	lname = document.form.lname.value;
	
	if (!ck_zipcode.test(form_values["SZIP"])) {
	form_errors[form_errors.length] = "Enter valid zipcode moving from";
	}
	
	if (!ck_zipcode.test(form_values["RZIP"])) {
	form_errors[form_errors.length] = "Enter valid zipcode moving to";
	}
	
	if (!ck_sname.test(form_values["SNAME"]) || (fname.toLowerCase() == 'first' || lname.toLowerCase() == 'last')) {
	form_errors[form_errors.length] = "Enter your complete First and Last name";
	}
	
	if (!ck_email.test(form_values["EMAIL"])) {
	form_errors[form_errors.length] = "Enter valid e-mail address";
	}
	
	if (form_values["STELH"].length != 0) {
		var new_STELH=/\d/g;
		var new_STELH_1 = form_values["STELH"].match(new_STELH);
		var new_STELH_2 = new_STELH_1.join('');

		if(new_STELH_2.length == 10){
            if(!response.isValid) {
	            form_errors[form_errors.length] = "Your phone number must be real";
            }
		}else{
			form_errors[form_errors.length] = 'Your phone number must be 10 digits';
		}
	}else{
		form_errors[form_errors.length] = 'Please provide your contact number';
	}
	
	if (!form_values["STELHEXT"].length == 0) {
		if (!ck_EXT.test(form_values["STELHEXT"])) {
		form_errors[form_errors.length] = "Valid primary phone extention";
		}
	}

	if (form_values["STELO"].length != 0) {
		var new_STELH=/\d/g;
		var new_STELH_1 = form_values["STELO"].match(new_STELH);
		var new_STELH_2 = new_STELH_1.join('');

		if(!ck_TEL.test(new_STELH_2)){
            form_errors[form_errors.length] = "Your additional phone number does not seem to be real";
		}
	}

	//date check
	if( form_values["MM"] == "" || form_values["YY"] == "" || form_values["DD"] == ""){
	    form_errors[form_errors.length] = "Please enter valid date";
	}else if( checkDate( form_values["DD"], form_values["MM"], form_values["YY"] ) === false ){
	    form_errors[form_errors.length] = "That is not a valid date";
	}
	else{
	    var InputDate = new Date();
	    var CurrentDate = new Date();
	
	    InputDate.setDate(form_values["DD"]);
	    InputDate.setMonth(form_values["MM"]-1);
	    InputDate.setFullYear(form_values["YY"]);
	
	    if(InputDate < CurrentDate){
	        form_errors[form_errors.length] = "Date entered has already passed"
	    }
	    else{
	    var SixMonthsAheadDateTime = new Date();
	    SixMonthsAheadDateTime.setDate(SixMonthsAheadDateTime.getDate()+180);
	
	    if(SixMonthsAheadDateTime < InputDate){
	        form_errors[form_errors.length] = "We only accept dates that are within 6 months"
	    }else{
	        //form_errors[form_errors.length] = InputDate;
	    }
		}
	}
	//end of date check
	
	if (form_values["ROOMS"] == "") {
	form_errors[form_errors.length] = "Please select number of rooms";
	}
	
	/*
	if(CMT.length > 140){
	form_errors[form_errors.length] = "Too much data in the comment box! Please remove "+
	    (CMT.length - 140)+ " characters";
	}
	*/
	if (form_errors.length > 0) {
		reportErrors(form_errors);
		form_errors = [];
		return false;
	}
	
	form_object.submit();
}

// Will be executed if submit button is pressed in Lightbox
function validate_form(form){
	form_object = form;
	// Pull relevant values in form to variables
	form_values = getFormValues(form);
	// Make a request to validate phone number
	var post_string_values = {
		"name" : form_values["SNAME"],
		"email" : form_values["EMAIL"],
		"phone_number" : form_values["STELH"],
		"from_zip" : form_values["SZIP"],
		"to_zip" : form_values["RZIP"],
		"move_date" : form_values["YY"] + "-" + form_values["MM"] + "-" + form_values["DD"],
		"rooms" : form_values["ROOMS"],
		"sid" : form_values["SID"]		
	};
	var post_string = createHttpQuery(post_string_values);
	var ajax_url = "http://www.1waytruckrental.com/inc/p_validator.php";
	request.open("POST",ajax_url,true);
	request.onreadystatechange = function() {
		if(request.readyState == 4) {
			getFormErrors(eval("("+request.responseText+")"));
		}
	}
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	request.send(post_string);
	// Set an alternative function that will be executed if we don't have
	// phone number results within specified milliseconds.
	window.setTimeout("byPassPhoneValidation()", "1000");
	// Return false, so we won't close lightbox just yet
	return false;
}

// Will be executed 2 seconds after HTTP Request is made
function byPassPhoneValidation() {
	// Make sure we already don't have HTTP response
	if(request.readyState == 4) {
		return false;
	}
	request.abort();
	// If we don't, mock a response and continue process
	getFormErrors(new function() {
		this.isValid = true;
		this.isValid2 = true;
		this.isSaved = false;	
	});
}

function fixDate(MM){
if(MM == "January"){MM = 0;}
if(MM == "February"){MM = 1;}
if(MM == "March"){MM = 2;}
if(MM == "April"){MM = 3;}
if(MM == "May"){MM = 4;}
if(MM == "June"){MM = 5;}
if(MM == "July"){MM = 6;}
if(MM == "August"){MM = 7;}
if(MM == "September"){MM = 8;}
if(MM == "October"){MM = 9;}
if(MM == "November"){MM = 10;}
if(MM == "December"){MM = 11;}

return MM;
}

function reportErrors(errors){
 var msg = "Please Enter Valid Data for:\n";
 for (var i = 0; i<errors.length; i++) {
  var numError = i + 1;
  msg += "\n" + numError + ". " + errors[i];
 }
 alert(msg);
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function checkDate(day,month,year){
	days_in_month = new Date(year, month, 0).getDate();
	
	if(day > 0 && day <= days_in_month){
		return true;
	}else{
		return false;
	}
}

