jQuery.validator.addMethod("equalToString", function(value, element, param) {
	return this.optional(element) || value != param; 
}, "String is same as default value");

jQuery.validator.addMethod("equalToTitle", function(value, element, param) {
	return this.optional(element) || value != $(element).attr("title"); 
}, "String is same as default value");

jQuery.validator.addMethod("equalToTitleOnStep", function(value, element, param) {
	if($("#step-"+param).hasClass("selected")){
		return this.optional(element) || value != $(element).attr("title");
	} else {
		return true;
	}
}, "String is same as default value");

jQuery.validator.addMethod("atoz", function(value, element) {
	return this.optional(element) || /^[A-z| |.]+$/i.test(value);
}, 'Please enter only letters');

jQuery.validator.addMethod("phone", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
	return this.optional(element) || phone_number.length > 9 &&
		phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");


jQuery.validator.addMethod("phoneonchange", function(phone_number, element) {
	if(phone_number != $(element).attr("title")){
    	phone_number = phone_number.replace(/\s+/g, ""); 
		return this.optional(element) || phone_number.length > 9 &&
		phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
	} else {
		if(phone_number != '' && $(element).attr("title") != phone_number){
	    	phone_number = phone_number.replace(/\s+/g, ""); 
			return this.optional(element) || phone_number.length > 9 &&
			phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
		} else {
			return true;
		}
	}
}, "Please specify a valid phone number");


jQuery.validator.addMethod("requiredbasedonfield", function(value, element, param) {
	
	if(value == '' || value == $(element).attr("title")){
		if($("#"+param).attr("title") == $("#"+param).val() || $("#"+param).val() == ''){
			return false;
		} else {
			$("#"+param).removeClass("error");
			$("label[for="+param+"].error").remove();
			return true;
		}
	} else {
		$("#"+param).removeClass("error");
		$("label[for="+param+"].error").remove();
		return true;
	}
}, 'This field is required');

jQuery.validator.addMethod("requiredonstep", function(value, element, param) {
	if($("#step-"+param).hasClass("selected")){
		if ( !this.depend(param, element) )
			return "dependency-mismatch";
		switch( element.nodeName.toLowerCase() ) {
		case 'select':
			var options = $("option:selected", element);
			return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
		case 'input':
			if ( this.checkable(element) )
				return this.getLength(value, element) > 0;
		default:
			return $.trim(value).length > 0;
		}
	} else {
		return true;
	}
}, 'This field is required');

jQuery.validator.addMethod("zipcode", function(zip) {
	// matches US ZIP code
	// allow either five digits or nine digits with an optional '-' between
	zip = zip.replace(/^\s+/, "");
	zip = zip.replace(/\s+$/, "");

	if(zip.length == 0) {
		return true;
	}

	if(zip.match(/^\d{5}([- ]?\d{4})?$/)) {
		return true;
	}
	return false;
}, "Please specify a valid US ZIP code");

jQuery.validator.addMethod("zipcodeonchange", function(zip, element) {
	if(zip != $(element).attr("title")){
		// matches US ZIP code
		// allow either five digits or nine digits with an optional '-' between
		zip = zip.replace(/^\s+/, "");
		zip = zip.replace(/\s+$/, "");

		if(zip.length == 0) {
			return true;
		}

		if(zip.match(/^\d{5}([- ]?\d{4})?$/)) {
			return true;
		}
		return false;
	} else {
		if(zip != '' && zip != $(element).attr("title")){
			// matches US ZIP code
			// allow either five digits or nine digits with an optional '-' between
			zip = zip.replace(/^\s+/, "");
			zip = zip.replace(/\s+$/, "");

			if(zip.length == 0) {
				return true;
			}

			if(zip.match(/^\d{5}([- ]?\d{4})?$/)) {
				return true;
			}
			return false;
		} else {
			return true;
		}
	}
}, "Please specify a valid US ZIP code");


