// Form Validation
var submitClicked = false;
var errors = false;
var errorMsg = "";
var contentErrors = false;
var contentErrorMsg = "";
var emailFormatErrorMsg = "";
var alertMsg = "";
var alertRequiredMsg = "Please complete the following fields and resend.";
var alertInvalidEmail = "Your e-mail address is invalid. Please enter a valid e-mail.";
var alertInvalidField = "The following fields have invalid content. Please enter correct information.";
var formElement;
var messages_errors_text;
var passed_form_count = 1;

var valid_csc_form = false;
var new_aj_req;
var resp_xml_back;
var cur_loc_resp;

//ADDTL Variables defined below

function csc_prepend(input_val, char_to_add, ret_length){
	//var input_val = input_val.toString();
	var input_val = (input_val == null) ? " " : input_val.toString();
	var input_val = input_val.substring(0,ret_length);
	var prepend_string = "";
	var loop_length = ret_length - input_val.length;
	for (i=1;i<=loop_length;i++){
		prepend_string += char_to_add;
	}
	var ret_val = prepend_string + input_val;
	return ret_val;
}

function csc_append(input_val, char_to_add, ret_length){
	//var input_val = input_val.toString();
	var input_val = (input_val == null) ? " " : input_val.toString();
	var input_val = input_val.substring(0,ret_length);
	var append_string = "";
	var loop_length = ret_length - input_val.length;
	for (i=1;i<=loop_length;i++){
		append_string += char_to_add;
	}
	var ret_val = input_val + append_string;
	return ret_val;
}

function submit_handraiser_form(passed_form){
	if (passed_form_count == 1){
		messages_errors_text = $('messages_errors').innerHTML;
	}
	passed_form_count++;
	$('messages_errors').innerHTML = messages_errors_text;
	$('first_name_container').removeClass('required');
	$('last_name_container').removeClass('required');
	$('phone_container').removeClass('required');
	$('phone_container').removeClass('required');
	$('email_container').removeClass('required');
	valid_csc_form = validate_csc_form(passed_form);
	if(valid_csc_form){
		// building the data record
		/*
		CHRYSLER_SERVICE_CONTRACT_RECORD_BEGINS
		first_name|last_name|phone|email|vehicle_model|vehicle_year|offer_number|brand|call_back_time|submit_time
		CHRYSLER_SERVICE_CONTRACT_RECORD_ENDS
		*/
		
		var data_record = "CHRYSLER_SERVICE_CONTRACT_RECORD_BEGINS\n";
		data_record += passed_form.first_name.value+"|";
		data_record += passed_form.last_name.value+"|";
		data_record += passed_form.areaCode.value+"-"+passed_form.phoneLineExchange.value+"-"+passed_form.phoneLineNumber.value+"|";
		data_record += passed_form.email.value+"|";
		data_record += escape(passed_form.vehicle_model.value)+"|";
		data_record += passed_form.vehicle_year.value+"|";
		data_record += passed_form.offer_number.value+"|";
		data_record += brand+"|";
		data_record += passed_form.call_back_time.value+"|";
		var cur_date_time = new Date();
		var h=csc_prepend(cur_date_time.getHours(),"0", 2);
		var m=csc_prepend(cur_date_time.getMinutes(),"0", 2);
		var t=csc_prepend(cur_date_time.getMonth()+1,"0", 2);
		var d=csc_prepend(cur_date_time.getDate(),"0", 2);
		var s=csc_prepend(cur_date_time.getSeconds(),"0", 2);
		var y=csc_prepend(cur_date_time.getFullYear(),"0", 4);
		// YYYYMMDDhhmmss
		data_record += y+t+d+h+m+s+"\n";
		data_record += "CHRYSLER_SERVICE_CONTRACT_RECORD_ENDS";
		
		//TO EMAIL cschandraisers@budco.com
		var to_email = 'cschandraisers@budco.com';
		content_vars ="URLFail=%2Fcrossbrand%2Fshared%2Fjavascripts%2Fservice_contracts%2Fmail_fail.xml&URLOK=%2Fcrossbrand%2Fshared%2Fjavascripts%2Fservice_contracts%2Fmail_success.xml&URLTemplate=mailer%2Ftemplates%2Fsaf_by_parameters_nogreet.txt&MailFormat=text%2Fplain%3B+charset%3DUTF-8&Subject=csc_handraiser_record&bodytext="+data_record+"&FromName=cschandraisermailsend&ToName=cschandraisermailreceive&FromAddress=cschandraiser@organic.com&ToAddress="+to_email+"&x=25&y=11";		
		//   //new_aj_req = new Ajax('/mailer/oo_mailer_encoding.jsp', {postBody: content_vars,onComplete: parseXMLresp}).request(); //returns a string
		new_aj_req = new Ajax('/mailer/oo_mailer_encoding.jsp', {postBody: content_vars,onComplete: function(text, xml){ parseXMLresp(xml)}.bind(this),onFailure:function(text, xml){ parseXMLrespFail(xml)}.bind(this)}).request(); // returns an object
	}
}
	
function parseXMLresp(xml_back){
	resp_xml_back = xml_back; // for debuging
	if(xml_back.lastChild.lastChild.nodeValue == "success"){
		// FF and IE were counting the nodes different = fun
		window.location.href="/en/service_contracts/thank_you/";
	}else{
		parseXMLrespFail(xml_back);
	}
}

function parseXMLrespFail(xml_back){
	resp_xml_back = xml_back; // for debuging
	$('messages_errors').innerHTML = "<span class=\"required\">We're Sorry!<br />This application is currently not responding, please try again at a later time.<span>";
	$('first_name_container').addClass('form_hidden');
	$('last_name_container').addClass('form_hidden');
	$('phone_container').addClass('form_hidden');
	$('email_container').addClass('form_hidden');
	$('vehicle_model_container').addClass('form_hidden');
	$('vehicle_year_container').addClass('form_hidden');
	$('offer_number_container').addClass('form_hidden');
	$('csc_submit').addClass('form_hidden');
}
	
var year_arr = new Array();
var models_arr = new Array();

var models_option_string = "<select size=\"1\" name=\"vehicle_model\" tabindex=\"6\"><option value=\"Select\">--Select One--</option>";
var year_option_string = "<select size=\"1\" name=\"vehicle_year\" tabindex=\"7\"><option value=\"Select\">--Select One--</option>";

var timezone = []; //Used to create an array of timezones when init'ing the form
	
function setFormValidationRequirements( arg_formObj ) {
	
	$('visit_dealer').innerHTML = brand.capitalize();
	if ($defined($('dealer_market_to'))) { //LEGACY (Replacing with "each" on a class name)
		$('dealer_market_to').innerHTML = brand.capitalize();
	}
	$$('.brand_name').each(function(el){
		el.innerHTML = brand.capitalize();
	});
	
	
	arg_formObj.areaCode.subtype = "areacode";
	arg_formObj.email.subtype = "email";     //email_container
	arg_formObj.phoneLineExchange.subtype = "phone1";
	arg_formObj.phoneLineNumber.subtype = "phone2";
	arg_formObj.offer_number.subtype = "alphaNum";
	//
	arg_formObj.first_name.required = "First Name"; // id = first_name_container
	arg_formObj.last_name.required = "Last Name"; // last_name_container
	arg_formObj.areaCode.required = "Area Code"; // phone_container
	arg_formObj.phoneLineExchange.required = "Phone1"; // phone_container
	arg_formObj.phoneLineNumber.required = "Phone2"; // phone_container
	

	for (var iterator_i in vehicle_data){
		// no longer getting the year from form_menu_data
		//year_arr.include(iterator_i);
		//
		for (var iterator_j in vehicle_data[iterator_i]){
			if (brand == "dodge"){
				if (vehicle_data[iterator_i][iterator_j].display_form){
					models_arr.include(vehicle_data[iterator_i][iterator_j].display_form);
				}
			}else{
				if (vehicle_data[iterator_i][iterator_j].display_form){
					models_arr.include(vehicle_data[iterator_i][iterator_j].display_form);
				}
			}

		}
	}
	
	var cur_date_time = new Date();
	var cur_year=(cur_date_time.getFullYear()) + 1;
	//year_arr.include(cur_year);
	
	for( var n = 0; n < 12; n++ ) {
		year_arr.include(cur_year - n);
	}
	
	for( var n = 0; n < year_arr.length; n++ ) {
		year_option_string +="<option value=\""+year_arr[n]+"\">"+year_arr[n]+"</option>";
	}
	
	for( var n = 0; n < models_arr.length; n++ ) {
		//models_option_string +="<option>"+models_arr[n]+"</option>";
		models_option_string +="<option value=\""+models_arr[n]+"\">"+models_arr[n]+"</option>";
	}

	var timezone_index = 0;
	if ((new Date().getTimezoneOffset()/60) == 6) {
		timezone_index = 1; //CST
	} else if ((new Date().getTimezoneOffset()/60) == 7) {
		timezone_index = 2; //MST
	} else if ((new Date().getTimezoneOffset()/60) == 8) {
		timezone_index = 3; //PST
	}
	
	//Switch based on time zone
	timezone = [
		"<option value='EST'>--Select One--</option><option value='9a-12p'>9am - 12pm EST</option><option value='12p-5p'>12pm - 5pm EST</option><option value='5p-9p'>5pm - 9pm EST</option>", //-5
		"<option value='CST'>--Select One--</option><option value='9a-1p'>8am - 12pm CST</option><option value='1p-5p'>12pm - 4pm CST</option><option value='5p-9p'>4pm - 8pm CST</option>", //-6	
		"<option value='MST'>--Select One--</option><option value='10a-2p'>8am - 12pm MST</option><option value='2p-6p'>12pm - 4pm MST</option><option value='6p-9p'>4pm - 7pm MST</option>", //-7
		"<option value='PST'>--Select One--</option><option value='11a-2p'>8am - 11am PST</option><option value='2p-5p'>11am - 2pm PST</option><option value='5p-9p'>2pm - 6pm PST</option>" //-8
	]

	$('vehicle_year_container_select').innerHTML = year_option_string+"<option>Other</option></select>";
	$('vehicle_model_container_select').innerHTML = models_option_string+"<option>Other</option></select>";
	$('call_back_time_container_select').innerHTML = "<select size=\"1\" name=\"call_back_time\" tabindex=\"10\">"+timezone[timezone_index]+"</select>";
	
}
///////////////
// JS Object Definition of a Formbase Fulfillment Request
function configFormbase(argModel, argFormId, argMarketCode, argSource, argPoi, argModelYear, argVehicleName, argSuccessPg, argErrorPg)
{
   this.model = argModel;
   this.formId = argFormId;
   this.marketCode = argMarketCode;
   this.source = argSource;
   this.poi = argPoi;
   this.modelYear = argModelYear;
   this.vehicleName = argVehicleName;
   this.successPg = argSuccessPg;
   this.errorPg = argErrorPg;
}

// JS Function Definitions of a Formbase Fulfillment Request
function getFormbaseObj( argModel )
{
  var i = 0;
  var model_found = false;

  while ( i < fbaseModels.length ) {
    if ( argModel == fbaseModels[i].model ) {
      return fbaseModels[i];
    }
    i++;
  } 
  return null;
}

// JS Function Definitions of a Formbase Fulfillment Request
function alertFbaseModel( argModel )
{
  var tmp = "";

  if ( argModel != null ) {
      tmp =  "hr model:\t\t" + argModel.model + "\n";
      tmp += "formId:\t\t" + argModel.formId + "\n";
      tmp += "marketCode:\t" + argModel.marketCode + "\n";
      tmp += "poi:\t\t" + argModel.poi + "\n";
      tmp += "modelYear:\t" + argModel.modelYear + "\n";
      tmp += "vehicleName:\t" + argModel.vehicleName + "\n";
      tmp += "successPg:\t" + argModel.successPg + "\n";
      tmp += "errorPg:\t\t" + argModel.errorPg + "\n";
  } else {
      tmp = "Empty model object";
  }
  alert(tmp);
}


function isBlank( s ) {
// regEx = /[^\s]/;
//  if( s.length > 0 || !regEx1.test( argValue ) ) return false;

  if( s.length > 0 ) {
    for( var i = 0; i < s.length; i++ ) {
      var c = s.charAt( i );
      if( ( c != ' ') && ( c != '\n' ) && ( c != '\t' ) ) return false;
    }
  }
  return true;
}

function isValidChar( text ) {
  formtext = text.toString();
  for( var j = 0; j < formtext.length; j++ ) {
    var oneChar = formtext.charAt( j );
    if( oneChar > "~" || oneChar < " " ) {
      return false;
    }
  }
  return true;
}

function isCheckboxChecked( argFormObj, argFieldName ) {
  for( var x = 0; x < argFormObj.elements.length; x++ ) {
    formElem = argFormObj.elements[x];
    if ( formElem.type == "checkbox" && formElem.name == argFieldName && formElem.checked ) {
      return true;
    }
  }
  return false;
}

function isRadioChecked( argFormObj, argFieldName ) {
  for( var x = 0; x < argFormObj.elements.length; x++ ) {
    formElem = argFormObj.elements[x];
    if ( formElem.type == "radio" && formElem.name == argFieldName && formElem.checked ) {
      return true;
    }
  }
  return false;
}

function isValidEmail( argValue ) {
  regEx1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
  regEx2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
    if( ( argValue.length > 0 ) && ( !( !regEx1.test( argValue ) && regEx2.test( argValue ) ) ) ) {
      return false
  } else return true;
}

function isPostalCode( argValue ) {
  regEx1 = /(^[a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d$)|(^[a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d$)/;
  if( ( argValue.length > 0 ) && ( !regEx1.test( argValue ) ) ) {
    return false
  } else return true;
}

function isZipCode( argValue ) {
  regEx1 = /^\d{5}$|^\d{9}$|^\d{5}-\d{4}$/;
    if( ( argValue.length > 0 ) && ( !regEx1.test( argValue ) ) ) {
      return false
  } else return true;
}

function numeric( argValue ) {
    if( isNaN( argValue ) || argValue.match(" ")) {
        return false;
    } else return true;
}

function alphaNumeric( argValue ) {
  // regEx = /[^\u0000-\u017F\s0-9\-\'\.]/;
  regEx = /[^A-Za-z0-9\s\-\'\.]/;
  if( ( argValue.length > 0 ) && ( regEx.test( argValue ) ) ) {
    return false;
  } else return true;
}

function alpha( argValue ) {
  // regEx = /[^\u0000-\u017F\s\-\']/;
  regEx = /[^A-Za-z\s\-\']/;
  //regEx = /[^$A-Za-z]/;
  if( ( argValue.length > 0 ) && ( regEx.test( argValue ) ) ) {
    return false;
  } else return true;
}

function emailValid( argValue ) {
    regEx1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
    regEx2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
    if( ( argValue.length > 0 ) && ( !( !regEx1.test( argValue ) && regEx2.test( argValue ) ) ) ) {
        return false
    } else return true;
}

function validate_csc_form(arg_formObj) {
  contentErrors = false;
  emailFormatError = false;
  regExTransform = /\s/g;

  if( submitClicked == true ) return false;
    else submitClicked = true;

  // are required fields blank or do they contain non-english characters
  for( var i = 0; i < arg_formObj.elements.length; i++ ) {
    formElement = arg_formObj.elements[i];
	
      switch( formElement.type ) {
        case "text" :
          if( ( formElement.required ) && (( formElement.value == null ) || isBlank( formElement.value )) ) {
            errors = true;
            errorMsg += formElement.required + "\n";
          } else {
          formElement.value = formElement.value.replace(regExTransform, " ");
          // if( this is an email address or zipcode field )...
          switch( formElement.subtype ) {
            case "email" :
              if( !isValidEmail( formElement.value )) {
                emailFormatError = true;
              } 
              break;

            case "zipcode" :
			  // zipcode should be numeric, so we check for that
              if(  !isZipCode( formElement.value ) ) {
			    contentErrors = true;
		        contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
			
            case "postalandzip" :
			  // zipcode should be numeric, so we check for that
              if( ( !isPostalCode( formElement.value ) && !isZipCode( formElement.value )) ) {
			    contentErrors = true;
		        contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
			
            case "postalcode" :
              if( !isPostalCode( formElement.value )) {
			    contentErrors = true;
		        contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
			
            case "areacode" :
              // areacode should be numeric, so we check for that
              if( ( formElement.value.length != 0 ||  formElement.required ) && ( formElement.value.length != 3 || isNaN( formElement.value ) ) ) {
                contentErrors = true;
                contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
	
            case "phone1" :
              // phone should be numeric, so we check for that
              if( ( formElement.value.length != 0 ||  formElement.required ) && ( formElement.value.length != 3 || isNaN( formElement.value ) ) ) {
                contentErrors = true;
                contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;

			case "phone2" :
              // phone should be numeric, so we check for that
              if( ( formElement.value.length != 0 ||  formElement.required ) && ( formElement.value.length != 4 || isNaN( formElement.value ) ) ) {
                contentErrors = true;
                contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
			
            case "alphaNum" :
              if(  !alphaNumeric( formElement.value ) ) {
                contentErrors = true;
                contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
			
            default:
		      if( !alpha( formElement.value ) ) {
                contentErrors = true;
                contentErrorMsg += (formElement.required?formElement.required:formElement.label) + "\n";
              }
              break;
            }		  
          }		  
          break;
        case "select-one" :
          if( (formElement.required) && isBlank( formElement.options[formElement.selectedIndex].value ) ) {
            errors = true;
            errorMsg += formElement.required + "\n";
          }
          break;
        case "checkbox" : 
          if( (formElement.required) && !isCheckboxChecked( arg_formObj, formElement.name ) ) {
            errors = true;
            errorMsg += formElement.required + "\n";
          }
          break;
        case "radio" : 
          if( (formElement.required) && !isRadioChecked( arg_formObj, formElement.name )  ) {
            errors = true;
            errorMsg += formElement.required + "\n";
          }
          break;
	    }  // end switch required
  }   // end for loop

  if( errors  ) {
    alertMsg += alertRequiredMsg + "\n-------------------------------\n";
    alertMsg += errorMsg;
  }
  if( emailFormatError  ) {
    if( errors ) alertMsg += "\n";
    alertMsg += alertInvalidEmail + "\n-------------------------------\n";
    alertMsg += emailFormatErrorMsg;
  }
  if( contentErrors  ) {
    if( errors || emailFormatError ) alertMsg += "\n";
    alertMsg += alertInvalidField + "\n-------------------------------\n";
    alertMsg += contentErrorMsg;
  }
  if( errors || emailFormatError || contentErrors ) {
    //alert( alertMsg ); don't alert is any more!
	if (emailFormatError){
		$('messages_errors').innerHTML = "<span class=\"required\">We're Sorry!<br />Your e-mail address is invalid. Please enter a valid e-mail.<span>";
	}else{
		$('messages_errors').innerHTML = "<span class=\"required\">We're Sorry!<br />Please complete the following fields indicated in RED and resend.<span>";
	}
	if (alertMsg.test("First Name")){
		$('first_name_container').addClass('required');
	}
	if (alertMsg.test("Last Name")){
		$('last_name_container').addClass('required');
	}
	if (alertMsg.test("Area Code")){
		$('phone_container').addClass('required');
	}
	if (alertMsg.test("Phone1")){
		$('phone_container').addClass('required');
	}
	if (alertMsg.test("Phone2")){
		$('phone_container').addClass('required');
	}
	if (alertMsg.test("Your email address")){
		$('email_container').addClass('required');
	}
    submitClicked = false;
    errors = false;
    errorMsg = "";
	emailFormatError = false;
    emailFormatErrorMsg = "";
    contentErrors = false;
    contentErrorMsg = "";
    alertMsg = "";
    return false;
  } else {
    return true;
  }

}

function appendZip (arg_form) {

if (arg_form.success_pg.value.indexOf("zip=") != -1 ) {
    arg_form.error_pg.value = arg_form.error_pg.value.substring(0,arg_form.error_pg.value.indexOf("zip=")-1);
    arg_form.success_pg.value = arg_form.success_pg.value.substring(0,arg_form.success_pg.value.indexOf("zip=")-1);
}
  arg_form.error_pg.value += "&zip=" + arg_form.A19$3$zipcode.value;
  arg_form.success_pg.value += "&zip=" + arg_form.A19$3$zipcode.value;
}

function preSubmit (arg_form) {
  if ( validateForm( arg_form ) ) {
    appendZip(arg_form);
    return true;
  } else {
    return false;
  }
}



if(window.location.toString().indexOf("purchase_online") < 1){
	onload_register("setFormValidationRequirements($('csc_hand_raiser'))");
}

