/*

JavaScipt Lead Form for AboutSpecials promotion pages
Author : Mario Edgar
Date : May 2010

*/

jQuery(window).load(function() {
	
	jQuery('#leadForm').hide();
	
	var leadFormVals = {};
	if (isEmpty(leadFormParams.leadFormPromoName)) { 
		leadFormParams.leadFormPromoName = pageUrlUtility.getParameter("promo");
		if(isEmpty(leadFormParams.leadFormPromoName)){
			leadFormParams.leadFormPromoName = pageUrlUtility.getParameter("p");
		}
	}
	if (isEmpty(leadFormParams.leadFormPageName)) {
		leadFormParams.leadFormPageName="QuickQuoteForm";
	}
	if (isEmpty(leadFormParams.bizPersonal)) {
		leadFormParams.bizPersonal="1";
	}
	/* Build a clean landing page URL for social media linkbacks */
	leadFormParams.pageName = ContextManager.getPageName();
	leadFormParams.leadFormWebID = ContextManager.getWebId();
	leadFormParams.widgetName = leadFormParams.widgetName ? leadFormParams.widgetName : "quickQuote_widget";
	leadFormParams.dealerSite = ContextManager.getDealershipName();
	leadFormParams.leadFormLeadID = ContextManager.generateUid(32);
	leadFormParams.errBgCol = 'FED9DB';
	leadFormParams.errLbCol = 'FF0000';	


	/* if leadFormParams.custom is not defined in promo.xml then set to empty so nothing gets sent to leadSubmission.do */
	if(isEmpty(leadFormParams.customField)){leadFormParams.custom = '';}
	
	var validator = {};
	validator.email = /^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/;
	validator.zip = /^\d{5}$/;
	validator.phone = /^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$/;
	validator.state = /^((AL)|(AK)|(AS)|(AZ)|(AR)|(CA)|(CO)|(CT)|(DE)|(DC)|(FM)|(FL)|(GA)|(GU)|(HI)|(ID)|(IL)|(IN)|(IA)|(KS)|(KY)|(LA)|(ME)|(MH)|(MD)|(MA)|(MI)|(MN)|(MS)|(MO)|(MT)|(NE)|(NV)|(NH)|(NJ)|(NM)|(NY)|(NC)|(ND)|(MP)|(OH)|(OK)|(OR)|(PW)|(PA)|(PR)|(RI)|(SC)|(SD)|(TN)|(TX)|(UT)|(VT)|(VI)|(VA)|(WA)|(WV)|(WI)|(WY))$/;
	validator.string = /^.{1,30}$/;
	
	createForm();
	
	function createForm(){
		var lfModel,lfYear,titleText ="";
		if (leadFormParams.titleText != ""){
			titleText = "<p id='leadFormHeaderText'>"+leadFormParams.titleText+"</p>";
		}	
		var fields = "<div id='leadFormTitle'><img alt='"+leadFormParams.titleAlt+"' src='"+leadFormParams.titleURL+"'/>"+titleText+"</div><div id='leadFormFields'>";
		if (leadFormParams.model_drop_down){
			lfModel = "<p class='leadFormModels'><label>Model</label><br /><select id='leadFormModels'>";
			for (var i=0; i < leadFormParams.model.length; i++){
				lfModel += "<option value='"+leadFormParams.model[i]+"'>"+leadFormParams.model[i]+"</option>";
			}
			lfModel += "</select></p>";
		}
		else{
			lfModel = "<input type='hidden' id='leadFormModels' value='"+leadFormParams.model[0]+"'/>";
		}
		if (leadFormParams.year_drop_down){
			lfYear = "<p class='leadFormYears'><label>Year</label><br /><select id='leadFormYears'>";
			for (var i=0; i < leadFormParams.year.length; i++){
				lfYear += "<option value='"+leadFormParams.year[i]+"'>"+leadFormParams.year[i]+"</option>";
			}
			lfYear += "</select></p>";
		}
		else{
			lfYear = "<input type='hidden' id='leadFormYears' value='"+leadFormParams.year[0]+"'/>";
		}
		
	    fields += lfModel + lfYear + "<p class='leadFormFirstName'><label>First Name</label><br /><input type='text' rel='string' id='leadFormFirstName' /></p><p class='leadFormLastName'><label>Last Name</label><br /><input type='text' rel='string' id='leadFormLastName' /></p><p class='leadFormEmail' ><label>Email</label><br /><input type='text' rel='email' id='leadFormEmail' /></p><p class='leadFormPhone' ><label>Day Phone</label><br /><input type='text' rel='phone' id='leadFormPhone' /></p><p class='leadFormAddress' ><label>Address</label><br /><input type='text' rel='string' id='leadFormAddress' /></p><p class='leadFormCity' ><label>City</label><br /><input type='text' rel='string' id='leadFormCity' /></p><p class='leadFormState' ><label>State</label><br /><input type='text' rel='state' id='leadFormState' /></p><p class='leadFormZip' ><label>Zip</label><br /><input type='text' rel='zip' id='leadFormZip' /></p></div><img id='leadFormSubmit' alt='"+leadFormParams.buttonAlt+"' src='"+leadFormParams.buttonURL+"'/><span id='leadFormRequired'>*Required</span><div id='leadFormError' style='display:none;'><p></p></div><div id='thankYouMessage' style='display:none;'><p></p></div><div style='clear:both;'></div>";

		
		jQuery("#leadForm").append(fields).fadeIn().find('#leadFormFields').find('label').css("color", "#"+leadFormParams.labelColor);
		
		if (leadFormParams.abtest)abPixelTag();
		
		
		/* Check to see if fields are required [start] */
		if(isEmpty(leadFormParams.required)){
			leadFormParams.required = {fName : true, lName : true, email : true, phone : false, address : true, city : true, state : true, zip : true, year : true, model : true};
		}
		if(leadFormParams.required.model){
			addAst('leadFormModels');
		}
		if(leadFormParams.required.year){
			addAst('leadFormYears');
		}				
		if(leadFormParams.required.fName){
			addAst('leadFormFirstName');
		}
		if(leadFormParams.required.lName){
			addAst('leadFormLastName');
		}
		if(leadFormParams.required.email){
			addAst('leadFormEmail');
		}
		if(leadFormParams.required.phone){
			addAst('leadFormPhone');
		}
		if(leadFormParams.required.address){
			addAst('leadFormAddress');
		}
		if(leadFormParams.required.city){
			addAst('leadFormCity');
		}		
		if(leadFormParams.required.state){
			addAst('leadFormState');
		}
		if(leadFormParams.required.zip){
			addAst('leadFormZip');
		}									
		/* Check to see if fields are required [end] */
		
		leadFormEvents();
	}	
	
	function addAst(cla){
		jQuery('.'+cla+' label').prepend('<span>*</span>');
	}
	
	function abPixelTag(){
		var promoPixelTag = {
				pageLayout : 'aboutspecials_raq',
				pageName : leadFormParams.pageName,		
				pageLabel : 'px_'+ leadFormParams.leadFormPromoName +"_"+ leadFormParams.abVersion 
		};
		/* Publish the event */
		EventManager.publish({
			eventName:'com.cobaltgroup.ws.view.leadform.requestAQuote',
			publisherData:promoPixelTag
		});		
	}
	
	function leadFormEvents(){

		jQuery('#leadFormSubmit').click(function(){							 
			jQuery('#leadForm input').css("background","#fff").parent().find("label").css("color","#"+leadFormParams.labelColor);
			validate();								 								 										 
		});		
		
		/* If the inlineVal = true then use the on blur event. Instant validation output */
		if(leadFormParams.inlineVal){
			jQuery('#leadForm input').blur(function(){	
					var tmp = jQuery(this);
					var tmpVal = tmp.val();
					var inputExp = tmp.attr("rel");
					var inputID = tmp.attr("id");
					
					if(inputExp == "state")tmpVal = tmpVal.toUpperCase();
					if(inputExp == "phone" && tmpVal == "")tmpVal = "1111111111";
					
					/* If the temp value does not match the regular epression then highlight the label and input background as well as display a general error */	
					if(!tmpVal.match(validator[inputExp])){
						tmp.css("background-color",leadFormParams.errBgCol).parent().find("label").css("color",leadFormParams.errLbCol);	
						displayError("Complete required fields to get your quote.");
					}
					/* This particular input field passes inline validation, set the label and input colors back to default */
					else{
						tmp.parent().find("label").css("color","#"+leadFormParams.labelColor);
						tmp.css("background-color","FFFFFF");
					}
					
					if(checkAll()){
						jQuery("#leadFormError p").slideUp(200);
					}
					else{
						jQuery("#leadFormError p").slideDown(200);
					}
					
					function checkAll(){
						var t = true;
						jQuery("#leadFormFields label").each(function() {								  
								var tmp = jQuery(this).css("color").toLowerCase();
								if((tmp == "rgb(255, 0, 0)") || (tmp == "#ff0000")){
									t = false;
								}
						});
						return t;
					}
	
			});
		}
		
		/* Event for when form is loaded */
		jQuery('body').trigger("leadFormLoaded");

	}
	
	
	function validate(){		
			
		var leadFormErr = false;
		var errorOutput = "";
		var phoneNumber = jQuery('#leadFormPhone').val();
		/* Retrieve all the users input values and set them to the proper leadFormParams object */
				
		leadFormVals.vehModel = { "val" : jQuery('#leadFormModels').val(), "type" : "string", "error" : "Model, ", "id" : "leadFormModels", "required": leadFormParams.required.model};
		leadFormVals.vehYear = { "val" : jQuery('#leadFormYears').val(), "type" : "string", "error" : "Year, ", "id" : "leadFormYears", "required": leadFormParams.required.year };
		leadFormVals.firstName = { "val" : jQuery('#leadFormFirstName').val(), "type" : "string", "error" : "first name, ", "id" : "leadFormFirstName", "required": leadFormParams.required.fName };
		leadFormVals.lastName = { "val" : jQuery('#leadFormLastName').val(), "type" : "string", "error" : "last name, ", "id" : "leadFormLastName", "required": leadFormParams.required.lName };
		leadFormVals.email = { "val" : jQuery('#leadFormEmail').val(), "type" : "email", "error" : "email, ", "id" : "leadFormEmail", "required": leadFormParams.required.email };
		leadFormVals.phone = { "val" : phoneNumber, "type" : "phone", "error" : "phone, ", "id" : "leadFormPhone", "required": leadFormParams.required.phone };
		leadFormVals.address = { "val" : jQuery('#leadFormAddress').val(), "type" : "string", "error" : "address, ", "id" : "leadFormAddress", "required": leadFormParams.required.address };
		leadFormVals.city = { "val" : jQuery('#leadFormCity').val(), "type" : "string", "error" : "city, ", "id" : "leadFormCity", "required": leadFormParams.required.city };
		leadFormVals.state = { "val" : jQuery('#leadFormState').val().toUpperCase(), "type" : "state", "error" : "state, ", "id" : "leadFormState", "required": leadFormParams.required.state };
		leadFormVals.zip = { "val" : jQuery('#leadFormZip').val(), "type" : "zip", "error" : "zip, ", "id" : "leadFormZip", "required": leadFormParams.required.zip };
		
		for (var i in leadFormVals) {
			var tmp = leadFormVals[i];
			if(!tmp.required && tmp.val == ""){
				// Do nothing, leave the value empty and do not validate.
			}
			else if (!tmp.val.match(validator[tmp.type])) {
				leadFormErr = true;
				errorOutput += tmp.error;
				labelAndInputRed(tmp.id);
			}
		}
		
		if (leadFormErr == false){	
			jQuery("#leadForm").append("<img id='leadFormLoader' style='display:none; position:absolute;' src='images/leadForm/loader.gif' alt='' />");			
			sendVars();	
		}
		else{
			errorOutput = errorOutput.substring(0, errorOutput.length-2) + ".";
			if(leadFormParams.inlineVal){
				displayError("Complete required fields to get your quote.");
			}
			else{
				displayError("Please complete the following: <b>"+errorOutput+"</b>");
			}
			
		}
	}
	
	function displayError(errorVal){
     	if(jQuery.browser.msie && jQuery.browser.version=="6.0")jQuery("#leadFormError p").height("40px");
		jQuery("#leadFormError p").html(errorVal).css({"color":"#000", "margin":"0 11px", "padding":"5px 10px 5px 30px", "background":"#"+leadFormParams.errBgCol+" url('images/leadForm/error.png') left center no-repeat", "border":"1px solid #E7BFBF", "font-size":"11px"}).parent().slideDown(200);
	}
	
	function labelAndInputRed(id){
		jQuery("#"+id).css("background-color",leadFormParams.errBgCol).parent().find("label").css("color",leadFormParams.errLbCol);	
	}
	
	function sendVars(){
		var promo,dataString;
		if (leadFormParams.abtest){
			promo = 'px_'+leadFormParams.leadFormPromoName+"_"+leadFormParams.abVersion+'_submitted';
		}
		else{
			promo = 'px_'+leadFormParams.leadFormPromoName+'_submitted';
		}		
		dataString = 'contact:name:first='+leadFormVals.firstName.val+'&contact:name:last='+leadFormVals.lastName.val+'&contact:address:home:street='+leadFormVals.address.val+'&contact:address:home:city='+leadFormVals.city.val+'&contact:email='+leadFormVals.email.val+'&contact:address:home:regioncode='+leadFormVals.state.val+'&contact:address:home:postalcode='+leadFormVals.zip.val+'&contact:phone:phone:day='+leadFormVals.phone.val+'&web_id='+leadFormParams.leadFormWebID+'&lead_id='+leadFormParams.leadFormLeadID+'&vehicle_buy_for_business_or_personal_use='+leadFormParams.bizPersonal+'&vehicle:buy:make='+leadFormParams.make+'&vehicle:buy:model='+leadFormVals.vehModel.val+'&vehicle:buy:year='+leadFormVals.vehYear.val+'&pageName=QuickQuoteForm&formName='+leadFormParams.leadFormPageName+'&promoName='+promo+'&request:preferred_time=&productId=46.110.00&cellName=quick_quote&widgetName=quickQuote_widget&widgetType=emailforms&widgetContext=null&vehicle:buy:make_displaylabel=Make&vehicle:buy:model_displaylabel=Model&vehicle:buy:trim_displaylabel=Trim&vehicle:buy:trim=&vehicle:buy:option:optionname_displaylabel=CUSTOM INFO&vehicle:buy:option:optionname='+leadFormParams.customField+'&vehicle:buy:price:offer_displaylabel=My Offer Price&vehicle:buy:price:offer=&contact:name:first_displaylabel=First Name&contact:name:last_displaylabel=Last Name&contact:email_displaylabel=Email&contact:phone:phone:evening_displaylabel=Home Phone&contact:phone:phone:day_displaylabel=Phone Number&contact:phone:fax_displaylabel=Fax&contact:phone:cellphone_displaylabel=Cell Phone&preferred_contact_displaylabel=Preferred Contact&preferred_contact=email&contact:address:home:street_displaylabel=Address&contact:address:home:city_displaylabel=City&contact:address:home:regioncode_displaylabel=State&contact:address:home:postalcode_displaylabel=ZIP Code&number_of_vehicles_for_quote_displaylabel=&number_of_vehicles_for_quote=&quickQuoteSubmitButton=Send';
		if(isEmpty(secureSubmissionUrl)){
			secureSubmissionUrl = "leadSubmission.do";
		}
		if (secureSubmissionUrl.search("\\?") == -1){
			window.location = secureSubmissionUrl+"?"+dataString;
		}
		else{
			window.location = secureSubmissionUrl+"&"+dataString;
		}
	}

	function isEmpty(testVar) {
		if ((testVar == undefined) || (testVar == null) || (testVar == "null") || (testVar == "") || (testVar == "undefined")) {
			return true;
		}
		return false;
	}	
	
});
