var counter;
var sparam;
var svalue;

$(document).ready(function(){

var pageload = function(hash)
{
	if(hash)
	{
		var rand = Math.random();
		$("#search-list-block").html("<img src='/images/ajax-loader3.gif' alt='' style='margin:150px 180px'/>");
		if (sparam != undefined && svalue != undefined)
		{
			$("#body_type_F, #contract_term_F, #co2_emissions_F, #fuel_type_F, #transmission_F")
			.ajaxAddOption('/ajax/get-refine-search-params', {"param" : sparam, "value" : svalue, "counter" : hash, "rand" : rand}, true, 
			function(data){
				$("#search-list-block").html(data.contract_hire_list.content);
			});
			sparam = undefined;
			svalue = undefined;
		}
		else
		{
			$("#body_type_F, #contract_term_F, #co2_emissions_F, #fuel_type_F, #transmission_F")
			.ajaxAddOption('/ajax/history', {"counter" : hash, "rand" : rand}, true, 
			function(data){
				$("#search-list-block").html(data.contract_hire_list.content);
			});
		}
	}
	else
	{
	}
}
$.historyInit(pageload);

$.getJSON("/ajax/session?r="+Math.random(), function(data)
{
	dataS = data.search_results;
	dataC = data.car_lease_directory;
	dataR = data.refine_search;

	if(data != undefined){
		//Default Search block options
		if(dataS != undefined){
			$("#manufacturer_F").ajaxAddOption('/ajax/manufacturers', {vehicle_type_F : dataS.vehicle_type}, true,  function(){$(this).selectOptions(dataS.man)});
			if(dataS.man!=''){
				$("#model_F").ajaxAddOption('/ajax/models', {vehicle_type_F : dataS.vehicle_type, manufacturer_F: dataS.man}, true,  function(){$(this).selectOptions(dataS.model)});
			}
			$("#payment_range_F").ajaxAddOption('/ajax/range', {vehicle_type_F : dataS.vehicle_type, manufacturer_F: dataS.man, model_F : dataS.model}, true, function(){$(this).selectOptions(dataS.price_range)});
			$("input[@name='vehicle_type_F'][@value='"+dataS.vehicle_type+"']:radio").attr("checked", true);
			$("input[@name='sort_order_F'][@value='"+dataS.sort_order+"']:radio").attr("checked", true);
			if(dataS.email != '') $("#email_F").attr('value',dataS.email);
		}
		
		//Default Car Lease Directory options
		if(dataC != undefined){
			$("#car_make_F").ajaxAddOption('/ajax/manufacturers', {vehicle_type_F : 'C', page_F : 'car-lease-directory'}, true,  function(){$(this).selectOptions(dataC.man)});
			/*
			if(dataC.man !=''){
				$("#car_model_F").ajaxAddOption('/ajax/models', {vehicle_type_F : 'C', manufacturer_F: dataC.man}, false,  function(){$(this).selectOptions(dataC.model)});
			}
			*/
			$("input[@name='search_by_F'][@value='"+dataC.location+"']:radio").attr("checked", true);
			if(dataC.postcode != '') $("#postcode_F").attr('value',dataC.postcode);
		}

		//Refine Search block options
		if($("#body_type_F")){
			$("#body_type_F, #contract_term_F, #co2_emissions_F, #fuel_type_F, #transmission_F").ajaxAddOption('/ajax/default-refine-search-params', {}, true);
		}
		
		counter = data.history.counter;
	}
});

$("#body_type_F, #contract_term_F, #co2_emissions_F, #fuel_type_F, #transmission_F")
.change(function(){
	counter++;
	var hash = counter;
	sparam = $(this).attr("name");
	svalue = $(this).attr("value");
	$.historyLoad(hash);

	location.replace("#"+counter);
});

$("#vehicle_type_car, #vehicle_type_van")
.change(function(){
	$("#model_F").defaultStatus("ANY", "Select Model");
	$("#manufacturer_F").ajaxAddOption('/ajax/manufacturers', {vehicle_type_F : $(this).attr('value')}, true);
	$("#payment_range_F").ajaxAddOption('/ajax/range', {vehicle_type_F : $(this).attr('value'), manufacturer_F: $("#manufacturer_F").attr('value')}, true);
});

$("#manufacturer_F")
	.change(function(){
		$("#model_F").ajaxAddOption('/ajax/models', {vehicle_type_F : $("input[@name='vehicle_type_F'][type='radio']:checked").attr('value'), manufacturer_F: $(this).attr('value')}, true);
		$("#payment_range_F").ajaxAddOption('/ajax/range', {vehicle_type_F : $("input[@name='vehicle_type_F'][type='radio']:checked").attr('value'), manufacturer_F: $(this).attr('value')}, true);
});

$("#model_F")
	.change(function(){
		$("#payment_range_F").ajaxAddOption('/ajax/range', {vehicle_type_F : $("input[@name='vehicle_type_F'][type='radio']:checked").attr('value'), manufacturer_F: $("#manufacturer_F").attr('value'), model_F : $(this).attr('value')}, true);
});

/*$("#car_make_F")
	.change(function(){
		$("#car_model_F").ajaxAddOption('/ajax/models', {vehicle_type_F : 'C', manufacturer_F: $(this).attr('value')}, true);
});*/

$("#email_F, #user_email_F, #user_telephone_F, #q, #postcode_F, #user_name_F, #user_mail_F, #user_phone_F, #user_message_F")
	.blur(function(){
		var text =$(this).attr('value');
		var title = $(this).attr('title');
		if(text == '')
		 $(this).attr('value',title);
});

$("#email_F, #user_email_F, #user_telephone_F, #q, #postcode_F, #user_name_F, #user_mail_F, #user_phone_F, #user_message_F")
	.focus(function(){
		var title = $(this).attr('title');
		var text = $(this).attr('value');
		if(text == title)
			$(this).attr('value','');
});

var isValidPhoneNumber = function(e)
{
	var c = (e.which) ? e.which : e.keyCode;
	if ( (c >= 48 && c <= 57) || c == 32 || c == 8 || c == 37 || c == 39 || c == 46 || c == 13 )
	{
		return true;
	}
	else
	{
		return false;
	}
}

var isValidPhone = function(field) 
{
	field=trim(field); 
	
	if (field.search(/^[0]{1}\d{10}$/)==-1 && field.search(/^[0]{1}\d{4}\s{1}\d{6}$/)==-1) {
		return 0;
	} else {
		return 1;
	}
};

var isValidEmail = function(field) 
{
	field=trim(field); 
	var emailFilter=/^.+@.+\..{2,3}$/;
	var illegalChars= /[\!\"\?\$\%\^\&\*\+\=\{\}\~\#\?\(\)\<\>\,\;\:\\\/\"\[\]\ ]/;
	
	if ((!(emailFilter.test(field))) || (field.match(illegalChars))) {
		return 0;
	} else {
		return 1;
	}
};

var isValidPostcode = function(value)
{
	// Load up the string to check
	var postCode = trim(value);
	
	// Permitted letters depend upon their position in the postcode.
	var alpha1 = "[abcdefghijklmnoprstuwyz]";                       // Character 1
	var alpha2 = "[abcdefghklmnopqrstuvwxy]";                       // Character 2
	var alpha3 = "[abcdefghjkstuw]";                                // Character 3
	var alpha4 = "[abehmnprvwxy]";                                  // Character 4
	var alpha5 = "[abdefghjlnpqrstuwxyz]";                          // Character 5

	// Array holds the regular expressions for the valid postcodes
	var pcexp = new Array ();

	// Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA
	pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1,2})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));

	// Expression for postcodes: ANA NAA
	pcexp.push (new RegExp ("^(" + alpha1 + "{1}[0-9]{1}" + alpha3 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));

	// Expression for postcodes: AANA  NAA
	pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1}" + alpha4 +"{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));

	// Exception for the special postcode GIR 0AA
	pcexp.push (/^(GIR)(\s*)(0AA)$/i);

	// Standard BFPO numbers
	pcexp.push (/^(bfpo)(\s*)([0-9]{1,4})$/i);

	// c/o BFPO numbers
	pcexp.push (/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);

	// Assume we're not going to find a valid postcode
	var valid = false;

	// Check the string against the types of post codes
	for (var i=0; i<pcexp.length; i++)
	{
		if (pcexp[i].test(postCode))
		{
			// The post code is valid - split the post code into component parts
			pcexp[i].exec(postCode);

			// Copy it back into the original string, converting it to uppercase and
			// inserting a space between the inward and outward codes
			postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();

			// If it is a BFPO c/o type postcode, tidy up the "c/o" part
			postCode = postCode.replace (/C\/O\s*/,"c/o ");

			// Load new postcode back into the form element
			valid = true;

			// Remember that we have found that the code is valid and break from loop
			break;
		}
	}

	if (postCode == 'Postcode')
	{
		valid = true;
	}
  
	// Return with either the reformatted valid postcode or the original invalid 
	// postcode
	if (valid)
	{
		return true;
	}
	else
	{
		return false;
	}
}

var trim = function(str) {
	str = this != window? this : str;
	return str.replace(/^\s+|\s+$/g,"");
};

$('#user_phone_F')
	.keypress(isValidPhoneNumber);

$(".btn","#subscribe")
	.click(function(){
		var email = $("#user_email_F", "#subscribe").val(); 
		if(email==$('#user_email_F').attr('title'))
		{
			alert('Please enter your email address.');
			return;
		}

		if(!isValidEmail(email))
		{
			alert('Please enter a valid email address.');
			return;
		}

		var phone_number = $("#user_telephone_F","#subscribe").val();
		
		if (phone_number != $('#user_telephone_F', '#subscribe').attr('title')){
			if (!isValidPhone(phone_number)){
				alert('Please enter a valid telephone number.');
				return;
			}
		}

		var parse = parseInt(phone_number,10);
		phone_number = phone_number ==$("#user_telephone_F","#subscribe").attr('title') ? "" : phone_number; 
		var s_url ="http://" + window.location.hostname + "/ajax/email-to-user";
		var s_data = "user_email_F="+email+"&user_telephone_F="+phone_number;
		$("h3","#subscribe").text("");
		$(this).hide();
		$(".preload","#subscribe").show();
		$.ajax({type:'POST',url:s_url,data:s_data,success:onSuccessSave});
});

$(".btn","#sendmail")
	.click(function(){
		var user_email = $("#user_mail_F", "#sendmail").val(); 
		if (user_email==$('#user_mail_F', "#sendmail").attr('title'))
		{
			alert('Please enter your email address.');
			return;
		}

		if (!isValidEmail(user_email))
		{
			alert('Please enter a valid email address.');
			return;
		}

		var user_name = $("#user_name_F", "#sendmail").val(); 
		if (user_name==$('#user_name_F', "#sendmail").attr('title'))
		{
			user_name = '';
		}

		var user_message = $("#user_message_F", "#sendmail").val(); 
		if (user_message==$('#user_message_F', "#sendmail").attr('title'))
		{
			user_message = '';
		}

		if (user_message == '')
		{
			alert('Please enter your message.');
			return;
		}

		var contract_hire_id = $("#contract_hire_id_F","#sendmail").val();
		var dealer_department_email = $("#dealer_department_email_F","#sendmail").val();
		var user_phone = $("#user_phone_F","#sendmail").val();
		var parse = parseInt(user_phone,10);
		user_phone = user_phone ==$("#user_phone_F","#sendmail").attr('title') ? "" : user_phone; 
		var s_url ="http://" + window.location.hostname + "/ajax/email-to-dealer";
		var s_data = "user_name_F="+user_name+"&user_message_F="+user_message+"&user_email_F="+user_email+"&user_telephone_F="+user_phone+"&car_id_F="+contract_hire_id+"&dealer_department_email_F="+dealer_department_email;
		$("h3","#sendmail").text("");
		$(this).hide();
		$(".preload","#sendmail").show();
		$.ajax({type:'POST',url:s_url,data:s_data,success:onSuccessSaveDetails});
});

$(".btn","#refine")
	.click(function(){
		if ($("#refine-plus", "#refine").css("display") == "none"){
			$("#refine-plus", "#refine").css("display",  "block");
		} else {
			$("#refine-plus", "#refine").css("display",  "none");
		}
});

$("#finder")
	.submit(function(){

		var msg = "";
		var femail = $("#email_F", this).val();
		if ($("#manufacturer_F", this).val() == "ANY")
		{
			msg += "Please select a manufacturer. \n";
		}

		if ($("#model_F", this).val() == "ANY")
		{
			if ($("#manufacturer_F", this).val() == "ANY")
			{
				msg += "Please select a model. \n";
			}
			else
			{
				msg += "Please specify the "+$("#manufacturer_F", this).val()+" model that you are interested in \n";
			}
		}

		if(femail != 'Enter your Email')
		{
			if (!isValidEmail(femail))
			{
				msg += "Please enter a valid email address. \n";
			}
		}

		if (msg == "")
		{
			return true;
		}
		else
		{
			alert(msg);
			return false;
		}
	}
);

$("#f3", "#nav-top")
	.submit(function(){

		if ($("#q", this).val() == "Keyword Search...")
		{
			alert('Please enter a keyword.');
			return false;
		}
		else
		{
			return true;
		}
	}
);

$.fn.def =function()
{
	$(this).attr("value",$(this).attr('title'));
};

var onSuccessSave = function(response) 
{
	$("#user_email_F").def();
	$("#user_telephone_F").def();
	$(".btn","#subscribe").show();
	$(".preload","#subscribe").toggle();
	$("p.subtitle","#subscribe").text("Thank you for signing up with Car Leasing Web");

};
var onSuccessSaveDetails = function(response) 
{
	$("#user_mail_F").def();
	$("#user_phone_F").def();
	$(".btn","#sendmail").show();
	$(".preload","#sendmail").toggle();
	$("h3","#sendmail").text("Thanks for your message, it has been sent our dealer");

}
var onSuccessSaveDL = function(response)
{
	$(".btn", "#loading-block").css({display:"block"});
	$(".preload", "#loading-block").css({display:"none"});

	if (response == '')
	{
		$("#add-dir-form-elements").hide();
		$("#add-dir-complete").show();
		scroll(0, 151);
	}
}

$("#add-directory-leasing-block-bg").css("display", "none");

$("#add-dir-tel, #add-dir-fax", "#add-dir-form-elements")
	.keypress(isValidPhoneNumber);

// Show "Add Directory Leasing" block
function showADLBlock()
{
	showMask();
	document.onkeydown = function(e){
		if (e == null) // ie
		{
			keycode = event.keyCode;
		}
		else // mozilla
		{
			keycode = e.which;
		}

		if(keycode == 27) // close
		{
			hideADLBlock();
		}
	};

	$("#add-directory-leasing-block").css("display", "block");
	$("#add-dir-form-elements").show();
	$("#add-dir-form-complete").hide();
	scroll(0, 151);
}

// Hide "Add Directory Leasing" block
function hideADLBlock()
{
	removeMask();
	$("#add-directory-leasing-block").css({display:"none"});
	$("#add-dir-form-elements form")[0].reset();
	$("#add-dir-complete").hide();
}

if ($("#add-directory-leasing-block"))
{
	if ($("#add-dir-makers-list"))
	{
		$("#add-dir-makers-list").load('/ajax/client-categories');
	}

	//JSFX_FloatTopLeft('add-directory-leasing-block');
	$("#add-dir a").click(showADLBlock);
	$("#add-directory-leasing-block a.close").click(hideADLBlock);

	$("#add-dir-form p.submit input:button").click(function(){
		var msg = '';
		var cat_query = '';

		var s_url ="http://" + window.location.hostname + "/ajax/add-directory-leasing";
		var dlr_name = $("#add-dir-form #add-deal-name").val();
		var dlr_logo = $("#add-dir-form #add-dir-logo").val();
		var address = $("#add-dir-form #add-dir-address").val();
		var address2 = $("#add-dir-form #add-dir-address2").val();
		var town = $("#add-dir-form #add-dir-city").val();
		var postcode = $("#add-dir-form #add-dir-pcode").val();
		var telephone = $("#add-dir-form #add-dir-tel").val();
		var fax = $("#add-dir-form #add-dir-fax").val();
		var description = $("#add-dir-form #add-dir-text").val();
		var email = $("#add-dir-form #add-dir-email").val();

		var s_data = "dlr_name_F="+dlr_name+"&address_F="+address+"&address2_F="+address2+"&town_F="+town+"&postcode_F="+postcode+"&description_F="+description+"&email_F="+email+"&telephone_F="+telephone+"&fax_F="+fax;

		var cat_query = '';

		$("input[@type='checkbox'][@name='client_category_ids_F']").each(function() {
			if (this.checked) 
			{
				cat_query += "&cc_ids_F[]=" + this.value; 
			}
		});

		s_data += cat_query;

		if (dlr_name == '')
		{
			msg += "Please enter the Company Name. \n";
		}

		if (email != '' && !isValidEmail(email))
		{
			msg += "Please enter a valid email address. \n";
		}

		if (postcode != '' && !isValidPostcode(postcode))
		{
			msg += "Please enter a valid postcode. \n";
		}

		if (description.length > 600)
		{
			msg += "You can not write more than 600 characters for description";
		}

		/*
		if (dlr_logo && dlr_logo != '') {
			s_data += "&ldlr_logo_F="+dlr_logo;
		}
		*/

		if (msg != '')
		{
			alert(msg);
		}
		else
		{
			$(".btn", "#loading-block").css({display:"none"});
			$(".preload", "#loading-block").css({display:"block"});
			$.ajax({type:'POST',url:s_url,data:s_data,success:onSuccessSaveDL});
		}
	});
	
}

})

function checkMaxChar(obj, field)
{
	var maxDescpLen = 600;

	if (obj.val().length > maxDescpLen)
	{
		obj.val() = obj.val().substring(0, maxDescpLen);
	}
	else
	{
		var remain = maxDescpLen - obj.val().length;

		if (remain > 1)
		{
			field.html("<b>"+remain+"</b> characters remaining.");
		}
		else
		{
			field.html("<b>"+remain+"</b> character remaining.");
		}
	}
}
