$(function() {
    function isInteger(s) {
        var i;
        for (i = 0; i < s.length; i++) { // Check that current character is number.
            var c = s.charAt(i);
            if (((c < "0") || (c > "9"))) return false;
        } // All characters are numbers.
        return true;
    }
    function stripCharsInBag(s, bag) {
        var i;
        var returnString = ""; // Search through string's characters one by one.
        // If character is not in bag, append to returnString.
        for (i = 0; i < s.length; i++) { // Check that current character isn't whitespace.
            var c = s.charAt(i);
            if (bag.indexOf(c) == -1) returnString += c;
        }
        return returnString;
    }

    $.validator.addMethod("phone",
    function(phone_number, element) {
        var digits = "0123456789";
        var phoneNumberDelimiters = "()- ext.";
        var validWorldPhoneChars = phoneNumberDelimiters + "+";
        var minDigitsInIPhoneNumber = 10;
        s = stripCharsInBag(phone_number, validWorldPhoneChars);
        return this.optional(element) || isInteger(s) && s.length >= minDigitsInIPhoneNumber;
    },
    "Please enter a valid phone number");

    $('#register-cj-form').validate({
	rules: {
		emailAddress: {
			required: true,
			email: true,
			maxlength: 64
		},
		phoneNumber:{
			required: true,
			phone: true,
			maxlength: 16
		},
		password: {
			required: true,
			minlength: 6,
			maxlength: 32
		},
		confirmPassword: {
			required: true,
			equalTo: "#password"
		},
		firstName: {
			required: true,
			maxlength: 32
		},
		lastName: {
			required: true,
			maxlength: 32
		},
		companyName: {
			required: true,
			maxlength: 32
		},
		websiteURL: {
			required: true,
			url: function(element){
			    var regexp = new RegExp('([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+([a-zA-Z]{2,9})(:\d{1,4})?([-\w\/#~:.?+=&%@~]*)', 'i');
			    return regexp.test($(element).attr('value'));
			}
		},
		terms: {
			required: true
		},
		address1: {
			required: true,
			maxlength: 64
		},
		city: {
			required: true,
			maxlength: 32
		},
		state: {
			required: true,
			maxlength: 32
		},
		postalCode: {
			required: true,
			digits: true,
			minlength:5,
			maxlength: 12
		},
		"00N40000001uurs": {
			required: true
		},
		"00N40000001uus2": {
			required: true
		}
	},
	messages: {
		emailAddress: {
			required: "Your email address is required",
			email: "Please enter a valid email address to continue.<br/>For example: info@jivox.com",
			maxlength: "Your email address cannot exceed 64 characters"
		},
		phoneNumber: {
			required: "Please enter a valid phone number to continue.<br/>For example: For US: 1-650-577-7800<br/>or for outside of US: +91 80 40487000.",
			phone: "Please enter a valid phone number to continue.<br/>For example: For US: 1-650-577-7800<br/>or for outside of US: +91 80 40487000."
		},
		password: {
			required: "Please enter a password to continue.",
			minlength: "Passwords are Case Sensitive.<br/>Use 6 to 32 characters, no spaces.",
			maxlength: "Passwords are Case Sensitive.<br/>Use 6 to 32 characters, no spaces."
		},
		confirmPassword: {
			required: "Please confirm your password to continue.",
			equalTo: "Passwords do not match"
		},
		terms: {
			required: "Please read the Jivox Terms and Conditions. You must check the box and accept Terms and Conditions to continue."
		},
		firstName: {
			required: "Please enter your name."
		},
		lastName: {
			required: "Please enter your full name."
		},
		companyName: {
			required: "Please enter the name of your company."
		},
		websiteUrl: {
			required: "Please enter the website url of your company.",
			url: "Please enter a valid url. Example: http://www.company.com"
		},
		address1:{
			required: "Please enter your company address."
		},
		city: {
			required: "Please enter your company's city."
		},
		state: {
			required: "Please select a state."
		},
		postalCode: {
			required: "Please enter a zip/postal code.",
			minlength: $.format("Minimum {0} numbers required.")
		},
		"00N40000001uurs": {
			required: "Please select 'Yes' or 'No'."
		},
		"00N40000001uus2": {
			required: "Please select 'Yes' or 'No'."
		}
	},
	highlight: function(element, errorClass) {
		$(element).addClass(errorClass);
	},
	unhighlight: function(element, errorClass) {
		$(element).removeClass(errorClass);
	},
	focusInvalid: true
    });
});