var Forms = {
	
	initialize: function() {
		this.addValidationRules();
		this.formValidate();
	},
	
	addValidationRules: function() {

	 	jQuery.validator.addMethod("title", function(value, element, params) { 
	   		return value != 0;
	 	}, "Please select your Title");

	 	jQuery.validator.addMethod("telephone", function(value, element, params) { 
	   		return !isNaN(value.toString().replace(/ /g,"").replace(/-/g,"").replace(/\+/g,""));
	 	}, "Please enter a valid telephone number");

	 	jQuery.validator.addMethod("postcode", function(value, element, params) { 
	   		return PostcodeValidation.checkPostCode(value);
	 	}, "Please enter a valid postcode");
		
	},
	
	formValidate: function() {
		jQuery("form").each(function() { 
                       if (this.id !== "search-form") {
                                  jQuery(this).validate(); 
                       }
                });
	}
	
}

Forms.initialize();

var TheSource = {
	
	initialize: function() {

		var param = this.getParam("theSource");
		var hear = jQuery("#hear-about-us");
		var self = TheSource;

		if (param != "") {
			this.setCookie("theSource", param, 90);
		}
		
		var cookie = this.getCookie("theSource");

		if (cookie != "") {
			jQuery("#hear-about-us").hide();
		 	//jQuery(".theSource_1 option:last").attr("selected", "true");
		 	//jQuery(".theSource_2").val(cookie);
                        jQuery(".theSource_1").append("<option value='" + cookie + "'>" + cookie + "</option>");
                        jQuery(".theSource_1 option:last").attr("selected", "true");

		}
		
		if (hear.length !== 0) {
			var form = hear.parents("form:first");
			form.submit(function() {
				if (jQuery(".theSource_1").val() === "OT") {
					self.setCookie("theSource", jQuery(".theSource_2").val(), 90);
				}
				else {
					self.setCookie("theSource", jQuery(".theSource_1").val(), 90);
				}
			});
		}

	},
	
	setCookie: function(c_name, value, expiredays) {
		var exdate = new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		document.cookie=c_name+ "=" +escape(value)+
		((expiredays==null) ? "" : ";expires="+exdate.toGMTString());		
	},
	
	getCookie: function(c_name) {
		if (document.cookie.length > 0) {
		  	c_start=document.cookie.indexOf(c_name + "=");
		  	if (c_start != -1) { 
		    	c_start = c_start + c_name.length + 1; 
		    	c_end = document.cookie.indexOf(";",c_start);
		    	if (c_end == -1) {
			 		c_end = document.cookie.length;
				}
		    	return unescape(document.cookie.substring(c_start, c_end));
		    } 
		}
		return "";
	},
	
	getParam: function(param) {
		var value = "";
	  	var param_list = location.toString().split("&");
	  	for(i=0; i<param_list.length; i++) {
	  		if(param_list[i].search(param) != -1) {
	   			value = param_list[i].split("=")[1];
			}
		}
	  	return value;
	}
	
}

TheSource.initialize();

var PostcodeChecker = {
	
	pc_label: jQuery("#address-container-label"),
	pc_input: jQuery(".address_postcode"),
	pc_container: jQuery("#postcode-container"),
	pc_button: jQuery("#postcode-checker"),
	pc_info: jQuery("#postcode-info"),
	address_details: jQuery("#address-details"),
	address_details_manual: jQuery("#address-details-manual"),
	additional_details: jQuery("#additional-details"),
	address_container_info: jQuery("#address-container-info"),
    postcode_info: jQuery("#postcode-info"),
    form_submit: jQuery("#form-submit"),
	
	initialize: function() {
		
		var self = PostcodeChecker;

	 	self.address_details_manual.hide();
		self.additional_details.hide();
        self.form_submit.hide();
	 	self.pc_button.css("display", "inline");
		self.pc_input.css("float", "left");
		self.pc_info.css("display", "block");
		self.pc_button.click(self.pc_click);
		self.pc_container.change(self.pc_change);
		self.address_container_info.click(self.pc_manual_click);
        self.postcode_info.children("span").click(self.pc_manual_click);
		
	},
	
	pc_click: function() {
		
		var self = PostcodeChecker;

                self.address_fill_with("#######".split("#"));		

		if(!PostcodeValidation.checkPostCode(self.pc_input.val())) {
			self.pc_input.val("X").blur().val("");
			return false;
		}
		
		self.pc_input.addClass("ac_loading");
		self.pc_label.text("Please wait, loading...");
		self.pc_container.animate({opacity: 0.5});
		self.pc_container.children("option").click(function() { jQuery(this).removeAttr("selected").blur(); return false; });
		self.postcode_info.slideUp(500);
		self.address_details_manual.slideUp(500);
		
		self.call_ajax(self.pc_input.val());
		
	},
	
	pc_change: function() {
		
		var self = PostcodeChecker;
		self.address_fill_with(self.pc_container.val().toString().split(", "));
		self.additional_details.slideDown(500, function() {
                        self.form_submit.slideDown(500);
                });
		
	},
	
	call_ajax: function(value) {
		
		var self = PostcodeChecker;
		
		jQuery.ajax({
                    url: postcode_checker_url + "?postcode=" + value,
                    dataType: "json",
                    success: function(data) {

			var i = 0;
			
			self.pc_container.empty();
			
			if (data.SStatus == "N") {
				self.pc_label.text("Postcode not found");
			}
			else {
				while((typeof(data[i])!="undefined")) {
					var address = data[i].PartialAddress.split(", ");
					address.pop();
					address = address.toString().replace(/,/g, ", ");
					self.pc_container.append('<option value="'+address+'">'+address+'</option>');
					++i;
				}		
				self.pc_label.text("Select your address below");	
			}
			

			
			self.pc_input.removeClass("ac_loading");
			self.pc_container.animate({opacity: 1});
			self.address_details.slideDown(500);
                    },
                    error: function() {
                        self.pc_input.removeClass("ac_loading");
                        self.pc_manual_click();
                    }
			
		});
		
	},
	
	pc_manual_click: function() {
		
		var self = PostcodeChecker;
		
		self.address_fill_with("#######".split("#"));

		self.postcode_info.slideUp(500);
		self.address_details.slideUp(500, function() {
			self.address_details_manual.slideDown(500, function() {
				self.additional_details.slideDown(500, function() {
                                          self.form_submit.slideDown(500);
                                });
			});
		});
		
	},
	
	address_fill_with: function(values) {
		
		jQuery(values).each(function(i) {
			jQuery("#address_line" + (i + 1)).val(this);
		});
		
	}
	
}

PostcodeChecker.initialize();




