/**
 * Cake time Javascript functions
 *
 * For registration form
 **/
var emailRegExp = "^([\\da-zA-Z-_+][\\da-zA-Z-_+.\w']*[\\da-zA-Z-_+]@[\\da-zA-Z]['-.\\w]*[\\da-zA-Z]\\.[a-zA-Z]{2,7})$";
var postcodeRegExp = "^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$";
var phoneRegExp = "^[\\d]{1,20}$";

// Add scroller function
jQuery.fn.extend({
	scrollTo : function(speed, easing) {
		return this.each(function() {
		var targetOffset = $(this).offset().top;
		$('html,body').animate({scrollTop: targetOffset}, speed, easing);
		});
	}
});

var inlineFormValidate = {
	/**
	 * Checks for valid input based on reg expression
	 *
	 * field - The id of the field
	 * regExCheck - regular expression to check against
	 * message - message to display if it doesn't pass a check
	 * required - 1/0 Whether the field is required, ie if you can have a blank value in it
	 */
	checkField: function (field, regExCheck, message, required) {
		var regExLine = new RegExp(regExCheck, "i");
		var fieldID = "#" + field;
		var fieldVal = jQuery.trim($(fieldID).val());

		if (regExLine.test(fieldVal)) {
			if (fieldVal != "" || (fieldVal == "" && required == 1)) {
				$(fieldID).parent().removeClass("requiredError").addClass("requiredOkay");
			} else {
				$(fieldID).parent().removeClass("requiredError").removeClass("requiredOkay");
			}
			if ($(fieldID + "_reqMsg").length > 0) {
				$(fieldID + "_reqMsg").hide();
			}
		} else {
			if (fieldVal != "" || (fieldVal == "" && required == 1)) {
				$(fieldID).parent().removeClass("requiredOkay").addClass("requiredError");
				if ($(fieldID + "_reqMsg").length > 0) {
					$(fieldID + "_reqMsg").show();
				} else {
					$(fieldID).after("<div id=\"" +  field + "_reqMsg\" class=\"requiredMsg\">" + message + "</div>")
				}
			}
		}

		// replace value with whitespace trimmed version
		$(fieldID).val(fieldVal);
	}, // checkField

	/** 
	 * Check for a valid selection in a drop down
	 * field - dropdown box select id
	 * emptyValue - value to check against
	 * message - message to display if it doesn't pass a check
	 * required - 1/0 Whether the field is required, ie if you can have a blank value in it
	 */
	checkDropDown: function (field, emptyValue, message, required) {
		var fieldID = "#" + field;
		var fieldVal = $(fieldID + " option:selected").val();

		if (fieldVal != emptyValue) {
			if (fieldVal != "" || (fieldVal == "" && required == 1)) {
				$(fieldID).parent().removeClass("requiredError");
				$(fieldID).parent().addClass("requiredOkay");
			} else {
				$(fieldID).parent().removeClass("requiredError");
				$(fieldID).parent().removeClass("requiredOkay");
			}
			if ($(fieldID + "_reqMsg").length > 0) {
				$(fieldID + "_reqMsg").hide();
			}
		} else {
			if (fieldVal != "" || (fieldVal == "" && required == 1)) {
				$(fieldID).parent().removeClass("requiredOkay");
				$(fieldID).parent().addClass("requiredError");
				if ($(fieldID + "_reqMsg").length > 0) {
					$(fieldID + "_reqMsg").show();
				} else {
					$(fieldID).after("<div id=\"" +  field + "_reqMsg\" class=\"requiredMsg\">" + message + "</div>")
				}
			}
		}
	}, // end checkDropDown

	/**
	 * Check radio button  fields
	 **/
	checkRadioField: function (field, wrapperID, message) {
		var fieldID = "input[name='" + field + "']";
		var fieldVal = $(fieldID + ":checked");
		
		if (fieldVal.length > 0) {
			if ($("#" + field + "_reqMsg").length > 0) {
				$("#" + field + "_reqMsg").hide();
			}
		} else {
			if ($("#" + field + "_reqMsg").length > 0) {
				$("#" + field + "_reqMsg").show();
			} else {
				$(wrapperID).after("<div id=\"" +  field + "_reqMsg\" class=\"requiredMsgWide\">" + message + "</div>")
			}
		}
	} // checkRadioField

} // end inlineFomValidate object

function doInlineCheck(fieldname) {
	switch (fieldname) {
		case "title": 
			inlineFormValidate.checkField(fieldname, "^.{1,50}$", "Please enter your title", 1);
			break;
		case "firstname":
			inlineFormValidate.checkField(fieldname, "^.{1,50}$", "Please enter your first name", 1);
			break;
		case "surname":
			inlineFormValidate.checkField(fieldname, "^.{1,300}$", "Please fill in your surname", 1);
			break;
		case "address1":
			inlineFormValidate.checkField(fieldname, "^.{1,300}$", "Please enter your address", 1);
			break;
		case "towncity":
			inlineFormValidate.checkField(fieldname, "^.{1,300}$", "Please enter your town/city", 1);
			break;
		case "postcode":
			inlineFormValidate.checkField(fieldname, "^.{1,300}$", "Please enter your postcode", 1);
			break;
		case "email":
			inlineFormValidate.checkField(fieldname, emailRegExp, "Please enter a valid email address", 1);
			break;
		case "telephone":
			inlineFormValidate.checkField(fieldname, phoneRegExp, "Please enter a valid phone number without spaces", 1);
			break;
		case "location":
			inlineFormValidate.checkDropDown(fieldname, "", "Please select a location", 1);
			break;
		case "locationOther":
			if($('#location').val()=="Other") {
				inlineFormValidate.checkField(fieldname, "^.{1,300}$", "Please specify a location", 1);
			}
			break;
		case "findOut":
			inlineFormValidate.checkDropDown(fieldname, "", "Please select where you heard about Cake Time", 1);
			break;
		case "findOutAbout":
			$tfv = $('#findOut').val();
			if($tfv=="Poster" || $tfv=="Website" || $tfv=="Magazine/Newspaper" || $tfv=="Internet Search Engine" || $tfv=="e-newsletter" || $tfv=="Other") {
				inlineFormValidate.checkField(fieldname, "^.{1,300}$", "Please specify where you heard about Cake Time", 1);
			}
			break;
		case "delivery_download":
			inlineFormValidate.checkRadioField($("#" + fieldname).attr("name"), "#packOption", "Please select how you wish to receive your Cake Time pack", 1);
			break;
	}
} // end doInlineCheck

$(document).ready(function() {
	// generic all form elements bind
	$("form#register :input").blur(function() {
		doInlineCheck($(this).attr("id"));
	});

	// submit - recheck everything
	$("#register").submit(function () {
		$("form#register :input").each(function () {
			doInlineCheck($(this).attr("id"));
		});

		if ($("form div").hasClass("requiredError")) {
			if ($("#errorMsg").length < 1) {
				$("#register").prepend("<div id=\"errorMsg\">Please correct the errors highlighted in the form</div>");
			}
			$("#errorMsg").scrollTo();
			return false;
		}
	});
	
	//Hide specify boxes
	$('#specify_location').hide();
	$('#specify_find').hide();
	//Show specify boxes
	$('#findOut').change(function() {
		$tfv = $('#findOut').val();
		if($tfv=="Poster" || $tfv=="Website" || $tfv=="Magazine/Newspaper" || $tfv=="Internet Search Engine" || $tfv=="e-newsletter" || $tfv=="Other") {
			$('#specify_find').slideDown('fast');
		} else {  
			$('#specify_find').slideUp();
		}
	});
	$('#location').change(function() {
		if($('#location').val()=="Other") {
			$('#specify_location').slideDown('fast');
		} else {  
			$('#specify_location').slideUp();
		}
	});
});
