﻿jQuery.validator.addMethod("numbersLettersAndSpace", function(value, element) {
    return this.optional(element) || /^[a-zA-Z0-9\040]+$/.test(value);
}, "Only numbers, letters, and spaces are permitted.");
jQuery.validator.addMethod("phonePermissive", function(value, element) { //this regex is meant to permit pretty much anything that can go into any international phone number including specifying extension with x.
    return this.optional(element) || /^[0-9\+\-() x]+$/.test(value);
}, "Only 0-9, +, -, parentheses, spaces, and the letter x (to specify extension) are permitted.");
jQuery.validator.addMethod("mmddyyyy", function(value, element) { // for mm/dd/yyyy format
    return this.optional(element) || /^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$/.test(value);
}, "Date should be in mm/dd/yyyy format.");
jQuery.validator.addMethod("numbersAndLetters", function(value, element) {
    return this.optional(element) || /^[a-zA-Z0-9]+$/.test(value);
}, "Only numbers and letters are permitted.");

$.fn.vAlign = function() {
  return this.each(function() {
    var h = $(this).height();
    if (h < 1) return false;
    var pih = $(this).parent().innerHeight();
    var top = (pih - h) / 2;
    $(this).css("position", "absolute");
    $(this).css("top", top +"px");
  });
};

$(function() {
	$("#divNoJS").hide();
	$("#divRegistrationForm").show();
	$("#ddlProdType").change(function() {
		switch ($(this).val()) {
			case "Tables and Chairs":
				$("#ddlInfTabCha").show().siblings("select").hide();
				$("#productCharacteristics").show(300);
				break;
			case "Outdoor Storage":
				$("#ddlInfOutStor").show().siblings("select").hide();
				$("#productCharacteristics").show(300);
				break;
			case "Trailers":
				$("#pVIN").show(300);
				$("#txtVIN").rules("add", {
					required: true,
					messages: { required: "VIN is required." }
				});
				$("#ddlInfTrail").show().siblings("select").hide();
				$("#productCharacteristics").show(300);
				break;
			case "Basketball":
				$("#ddlInfSportGoods").show().siblings("select").hide();
				$("#productCharacteristics").show(300);
				break;
			default:
				$("#productCharacteristics").hide(300);
				$("#pVIN").hide(300);
				$("#txtVIN").rules("remove");
		}
	});

	$("#txtEmail").keyup(function() {
		if ($(this).val()) {
			$("#emailConfirm").show(300);
			$("#txtEmail2").rules("add", {
				equalTo: "#txtEmail"
			});
		} else {
			$("#emailConfirm").hide(300);
			$("#txtEmail2").rules("remove");
		}
	});

	$("#cbxBusOrg").change(function() {
		if ($(this).is(":checked")) {
			$("#divBusOrg").show(300);
			$("#txtNameBusiness").rules("add", {
				required: true,
				numbersLettersAndSpace: true,
				messages: {
					required: "Organization Name is required."
				}
			});
			$("#ddlBusOrg").rules("add", {
				required: true,
				messages: {
					required: "Organization type is required."
				}
			});
		} else {
			$("#divBusOrg").hide(300);
			$("#divBusOrg").find('input, select').each(function() {
				$(this).rules("remove");
			});
		}
	});

	function IsOther(text) {
//		console.log("text: " + text);
//		console.log(translatedOthers);
		if (translatedOthers != null && typeof (translatedOthers) != "undefined") {
			var result;
			$.each(translatedOthers.OtherText, function(idx, item) {
				for (var i = 0; i < item.length; i++) {
					if (item[i] == text) {
						result = true;
						return true;
					}
				}
			})
			return result;
		}
	}

	$(".ddlWithOther").change(function() {
		var o = IsOther($(this).val());
//		console.log("o: " + o);
		if (typeof (o) != "undefined" && o == true) {
			$(this).siblings("span.hiddenDynamic")
                .show(300)
                .children("input")
                    .rules("add", {
                    	required: true,
                    	messages: { required: "Please specify." }
                    });
		} else {
			$(this).siblings("span.hiddenDynamic")
                .hide(300)
                .children("input")
                    .rules("remove");
		}
	});

	$("#registerForm").validate({
		rules: { txtEmail: "email" },
		messages: {
			txtZip: {
				required: "Postal/Zip Code is required."
			},
			ddlState: {
				required: "State/Province is required."
			},
			txtCity: {
				required: "City is required."
			},
			txtAddress1: {
				required: "Street Address is required."
			},
			txtLastName: {
				required: "Last Name is required."
			},
			txtFirstName: {
				required: "First Name is required."
			},
			txtModelNumber: {
				required: "Model Number is required."
			},
			txtQuantity: {
				required: "Quantity is required."
			},
			txtDatePurch: {
				required: "Date Purchased is required."
			},
			ddlCountry: {
				required: "Country is required."
			}
		},
		submitHandler: function(form) {
			if (!$("#cbxBusOrg").is(":checked")) $("input, select", "#divBusOrg").val("");
			if ($("#ddlProdType").val() != "Trailers") $("#txtVIN").val("");
			$(".ddlWithOther").each(function() {
				if ($(this).val() != "Other") $(this).siblings("span.hiddenDynamic").children("input").val("");
			});

			$("#divUpdater").show().vAlign();
			$.ajax({
				url: "/Page/RegisterProductAjax",
				type: "POST",
				data: $(form).serialize(),
				success: function(data, textStatus, XMLHttpRequest) {
					if (data) $("#formSuccess").show();
					else $("#formError").show();
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					$("#formError").show();
				},
				complete: function() {
					if ($("#txtVIN").val()) $("#divRegisterTrailerDMV").show();
					$("#divRegistrationForm").hide();
					$("#divRegistrationProcessed").show();
					$("#divUpdater").hide();
				}
			});
		}
	});
});
