(function() {
	
	function stripHtml(value) {
		// remove html tags and space chars
		return value.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' ')
		// remove numbers and punctuation
		.replace(/[0-9.(),;:!?%#$'"_+=\/-]*/g,'');
	}
	jQuery.validator.addMethod("maxWords", function(value, element, params) { 
	    return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length < params; 
	}, jQuery.validator.format("Please enter {0} words or less.")); 
	 
	jQuery.validator.addMethod("minWords", function(value, element, params) { 
	    return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params; 
	}, jQuery.validator.format("Please enter at least {0} words.")); 
	 
	jQuery.validator.addMethod("rangeWords", function(value, element, params) { 
	    return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params[0] && value.match(/bw+b/g).length < params[1]; 
	}, jQuery.validator.format("Please enter between {0} and {1} words."));

	// WD Added Range of Payment
	jQuery.validator.addMethod("rangePayment", function(value, element) { 
		//return this.optional(element) || /^(.*[^0-9]|)(1000|[1-9]\d{0,2})([^0-9].*|)$/i.test(value);
		return this.optional(element) || /^(.*[5-9][^0-9]|)(1000|[0-9]\d{0,2})$/i.test(value);
	}, "Please enter a value between &pound;5 and &pound;1000");

})();

jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) {
	return this.optional(element) || /^[a-z-.,()'\"\s]+$/i.test(value);
}, "Letters or punctuation only please");  

jQuery.validator.addMethod("alphanumeric", function(value, element) {
    //return this.optional(element) || /^\w+$/i.test(value);
    return this.optional(element) || /^[a-z0-9-.,()'\"\s]+$/i.test(value);
}, "Letters, numbers, spaces or underscores only please");  

jQuery.validator.addMethod("lettersonly", function(value, element) {
	return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only please"); 

jQuery.validator.addMethod("nowhitespace", function(value, element) {
	return this.optional(element) || /^\S+$/i.test(value);
}, "No white space please"); 

jQuery.validator.addMethod("ziprange", function(value, element) {
	return this.optional(element) || /^90[2-5]\d\{2}-\d{4}$/.test(value);
}, "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx");

jQuery.validator.addMethod("integer", function(value, element) {
	return this.optional(element) || /^-?\d+$/.test(value);
}, "A positive or negative non-decimal number please");

jQuery.validator.addMethod("ukpostcode", function(value, element) {
value = jQuery.trim(value);
//return value.match(/^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}$/);
return this.optional(element) || /^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}$/.test(value);
}, "Please enter a valid postcode");

/**
* Return true, if the value is a valid vehicle identification number (VIN).
*
* Works with all kind of text inputs.
*
* @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
* @desc Declares a required input element whose value must be a valid vehicle identification number.
*
* @name jQuery.validator.methods.vinUS
* @type Boolean
* @cat Plugins/Validate/Methods
*/ 
jQuery.validator.addMethod(
	"vinUS",
	function(v){
		if (v.length != 17)
			return false;
		var i, n, d, f, cd, cdv;
		var LL    = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"];
		var VL    = [1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9];
		var FL    = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];
		var rs    = 0;
		for(i = 0; i < 17; i++){
		    f = FL[i];
		    d = v.slice(i,i+1);
		    if(i == 8){
		        cdv = d;
		    }
		    if(!isNaN(d)){
		        d *= f;
		    }
		    else{
		        for(n = 0; n < LL.length; n++){
		            if(d.toUpperCase() === LL[n]){
		                d = VL[n];
		                d *= f;
		                if(isNaN(cdv) && n == 8){
		                    cdv = LL[n];
		                }
		                break;
		            }
		        }
		    }
		    rs += d;
		}
		cd = rs % 11;
		if(cd == 10){cd = "X";}
		if(cd == cdv){return true;}
		return false; 
	},
	"The specified vehicle identification number (VIN) is invalid."
);

/**
  * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
  *
  * @example jQuery.validator.methods.date("01/01/1900")
  * @result true
  *
  * @example jQuery.validator.methods.date("01/13/1990")
  * @result false
  *
  * @example jQuery.validator.methods.date("01.01.1900")
  * @result false
  *
  * @example <input name="pippo" class="{dateITA:true}" />
  * @desc Declares an optional input element whose value must be a valid date.
  *
  * @name jQuery.validator.methods.dateITA
  * @type Boolean
  * @cat Plugins/Validate/Methods
  */
jQuery.validator.addMethod(
	"dateITA",
	function(value, element) {
		var check = false;
		var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
		if( re.test(value)){
			var adata = value.split('/');
			var gg = parseInt(adata[0],10);
			var mm = parseInt(adata[1],10);
			var aaaa = parseInt(adata[2],10);
			var xdata = new Date(aaaa,mm-1,gg);
			if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
				check = true;
			else
				check = false;
		} else
			check = false;
		return this.optional(element) || check;
	}, 
	"Please enter a correct date"
);

jQuery.validator.addMethod("dateNL", function(value, element) {
		return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value);
	}, "Vul hier een geldige datum in."
);

jQuery.validator.addMethod("time", function(value, element) {
		return this.optional(element) || /^([01][0-9])|(2[0123]):([0-5])([0-9])$/.test(value);
	}, "Please enter a valid time, between 00:00 and 23:59"
);

/**
 * matches US phone number format 
 * 
 * where the area code may not start with 1 and the prefix may not start with 1 
 * allows '-' or ' ' as a separator and allows parens around area code 
 * some people may want to put a '1' in front of their number 
 * 
 * 1(212)-999-2345
 * or
 * 212 999 2344
 * or
 * 212-999-0983
 * 
 * but not
 * 111-123-5434
 * and not
 * 212 123 4567
 */
jQuery.validator.addMethod("phoneUS", 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('phoneUK', function(phone_number, element) {
return this.optional(element) || phone_number.length > 9 &&
phone_number.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{2,4}\s?\d{3,4})$/);
}, 'Please specify a valid phone number');

jQuery.validator.addMethod('mobileUK', function(phone_number, element) {
return this.optional(element) || phone_number.length > 9 &&
phone_number.match(/^((0|\+44)7(5|6|7|8|9){1}\d{2}\s?\d{6})$/);
}, 'Please specify a valid mobile number');

// TODO check if value starts with <, otherwise don't try stripping anything
jQuery.validator.addMethod("strippedminlength", function(value, element, param) {
	return jQuery(value).text().length >= param;
}, jQuery.validator.format("Please enter at least {0} characters"));

// same as email, but TLD is optional
jQuery.validator.addMethod("emailopt", function(value, element, param) {
    return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); 
}, jQuery.validator.messages.email);
jQuery.validator.addMethod("contact_email2", function(value, element) {
    return jQuery('#contact_email').val() == value;
},"Please enter the same email address");

// same as url, but TLD is optional
jQuery.validator.addMethod("url2", function(value, element, param) {
	return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); 
}, jQuery.validator.messages.url);

// NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
// Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
// Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
jQuery.validator.addMethod("creditcardtypes", function(value, element, param) {

	if (/[^0-9-]+/.test(value)) 
		return false;
	
	value = value.replace(/\D/g, "");
	
	var validTypes = 0x0000;
	
	if (param.mastercard) 
		validTypes |= 0x0001;
	if (param.visa) 
		validTypes |= 0x0002;
	if (param.amex) 
		validTypes |= 0x0004;
	if (param.dinersclub) 
		validTypes |= 0x0008;
	if (param.enroute) 
		validTypes |= 0x0010;
	if (param.discover) 
		validTypes |= 0x0020;
	if (param.jcb) 
		validTypes |= 0x0040;
	if (param.unknown) 
		validTypes |= 0x0080;
	if (param.all) 
		validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
	
	if (validTypes & 0x0001 && /^(51|52|53|54|55)/.test(value)) { //mastercard
		return value.length == 16;
	}
	if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
		return value.length == 16;
	}
	if (validTypes & 0x0004 && /^(34|37)/.test(value)) { //amex
		return value.length == 15;
	}
	if (validTypes & 0x0008 && /^(300|301|302|303|304|305|36|38)/.test(value)) { //dinersclub
		return value.length == 14;
	}
	if (validTypes & 0x0010 && /^(2014|2149)/.test(value)) { //enroute
		return value.length == 15;
	}
	if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
		return value.length == 16;
	}
	if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
		return value.length == 16;
	}
	if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
		return value.length == 15;
	}
	if (validTypes & 0x0080) { //unknown
		return true;
	}
	return false;
}, "Please enter a valid credit card number.");

/*WIPRO ADDITIONS BELOW */
//Method for validating the two text fields of the postcode in Water Quality form
jQuery.validator.addMethod("twopartpostcode", function(value, element) {
    var newval = jQuery("#postcode1").val()  +  jQuery("#postcode2").val() ;
    postcode1 = jQuery.trim(jQuery("#postcode1").val());
    postcode2 = jQuery.trim(jQuery("#postcode2").val());
    if (newval.match(/^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}?[0-9]{0,1}[A-Za-z]{2}$/)){
        jQuery("#postcode1").removeClass("error");
        return true;
    }
    else{
        jQuery("#postcode1").addClass("error");
        return false;
    }
}, "Postcode – please enter a valid UK postcode");
//Method to validate the length of account number - Online direct debit
jQuery.validator.addMethod('accnumber', function(value, element) {
    if(value.length < 8){
        return false;
    }else{
        return true;
    }
}, 'Please specify a valid account number');
//Method for validating the two account number fields 
jQuery.validator.addMethod("validateaccountnumber", function(value, element) {
  //  var newval = jQuery("#postcode1").val()  +  jQuery("#postcode2").val() ;
    account_part1 = jQuery.trim(jQuery("#account_accNo1").val());
    account_part2 = jQuery.trim(jQuery("#account_accNo2").val());
    newVal = account_part1 + account_part2;
    if (this.optional(element) || newVal.match(/^-?\d{10}/)){
        jQuery("#account_accNo1").removeClass("error");
        return true;
    }
    else{
        jQuery("#account_accNo1").addClass("error");
        return false;
    }
}, "Please enter your ten-digit account number - numbers only");

//Method for checking that the confirm email address is same as email address field
jQuery.validator.addMethod("email2", function(value, element) {
    return jQuery(element).parent().parent().parent().find('.email').val() == value;
},"Email address does not match address given above");
/* For py your quote online form */
jQuery.validator.addMethod("email2opt", function(value, element) {
    return jQuery(element).parent().parent().parent().find('.emailopt').val() == value;
},"Email address does not match address given above");
jQuery.validator.addMethod("contact_email2", function(value, element) {
    return jQuery('#contact_email').val() == value;
},"Email address does not match address given above");
/*
jQuery.validator.addMethod("groupreqvalidator", function(value, element) {
    value1 = jQuery.trim(jQuery('#consent_ref').val());
    value2 = jQuery.trim(jQuery('#site_name').val());
    value3 = jQuery.trim(jQuery('#site_street').val());
    value4 = jQuery.trim(jQuery('#site_post_code').val());
    
    if (value1 != '' || value2 != '' || value3 != '' || value4 != '' )    
    {
        jQuery('#consent_ref').removeClass("error");
        jQuery('#site_name').removeClass("error");
        jQuery('#site_street').removeClass("error");
        jQuery('#site_post_code').removeClass("error");
        return true;
    }else{
        jQuery('#consent_ref').addClass("error");
        jQuery('#site_name').addClass("error");
        jQuery('#site_street').addClass("error");
        jQuery('#site_post_code').addClass("error");
        return false;
    }
}, "Please enter either a consent reference number, company / site name, street name or postcode");*/
jQuery.validator.addMethod("firstname", function(value, element) {
    return /^[a-z-.,()'\"\s]+$/i.test(value);
}, "Please enter your first name");  
jQuery.validator.addMethod("lastname", function(value, element) {
    return /^[a-z-.,()'\"\s]+$/i.test(value);
}, "Please enter your last name");
  
jQuery.validator.addMethod("housenum", function(value, element) {
    return /^\w+$/i.test(value);
}, "Please enter building name / number");  
jQuery.validator.addMethod("address1", function(value, element) {
    return (jQuery.trim(value) != '');
}, "Please enter the first line of your address");  
jQuery.validator.addMethod("town", function(value, element) {
    return (jQuery.trim(value) != '');
}, "Please enter town");  
jQuery.validator.addMethod("county", function(value, element) {
    return (jQuery.trim(value) != '');
}, "Please enter county");  
jQuery.validator.addMethod('reqphoneUK', function(phone_number, element) {
return phone_number.length > 9 &&
phone_number.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/);
}, 'Please enter a valid contact number - numbers and spaces only ');
jQuery.validator.addMethod("titlefield", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please enter your title");
/* Added for the Trade effluent application enquiry form */
jQuery.validator.addMethod("methodofcontact", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select your preferred contact method");
/* Added for the Trade effluent application enquiry form */
jQuery.validator.addMethod("naturebusinss", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select nature of business");
/* Added for the Trade effluent application enquiry form */
jQuery.validator.addMethod("prefer_add", function(value, element) {
    return jQuery('input[name=preferred_address]').is(':checked');
},"Please select preferred address for correspondence");

/* Added for the  water saving device order form*/
jQuery.validator.addMethod("wheresave", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select where you are looking to save water");
/* Added for the  water saving device order form*/
jQuery.validator.addMethod("hippoquant", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select hippo water saver quantity required");
/* Added for the  water saving device order form*/
jQuery.validator.addMethod("flushquant", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select save a flush quantity required");
jQuery.validator.addMethod("enquirytype", function(value, element) {
    return (jQuery(element).parent().parent().find(":checked").length > 0);
},"Please tell us the nature of your enquiry by selecting one of the four options above.");
jQuery.validator.addMethod("requestservice", function(value, element) {
    if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select the service you require");


function validateAcc(fieldSet) {
       if ((jQuery(fieldSet).val() == ""))
           jQuery(fieldSet).valid();
       else{
            jQuery(fieldSet).removeClass("error") ;
       }
    }


jQuery.validator.addMethod("validaccount", function(value, element) {
        var myid = element.id;
        var otherid = '#' + myid.replace(2,1);
        if (value==""){
            jQuery(otherid).addClass("error");
            return false;
        }
        return validateAccount(value,element);
    }, "Please enter your ten-digit account number - numbers only"); 
    
    jQuery.validator.addMethod("validaccountorempty", function(value, element) {
        var myid = element.id;
        var otherid = '#' + myid.replace(2,1);
       if (value == "" && jQuery(otherid).val() == "")return true
    return validateAccount(value,element);
    }, "Please enter your ten-digit account number - numbers only");
    
    function validateAccount (value, element) {
               var myid = element.id;
            var delta = myid.length-1;
    
           while ((delta > 0) & (!IsNumeric(myid.substr(delta,1)))) {
                delta -= 1;
            }
            if (delta==0) { return false;}
            var lastchar = myid.substr(delta,1);
            var incdigit = lastchar - 1;
            var otherid = '#' + myid.replace(lastchar,incdigit);
            // var theCode = document.getElementById(otherid).value + ' ' + value;
            //alert(jQuery(otherid).val());
            var theCode = jQuery(otherid).val() + ' ' + value;
            theCode = theCode.replace(" ", "");
            if ((theCode.length < 10) | (theCode.length > 11) | (!IsNumeric(theCode))) {
                     jQuery(otherid).addClass("error");
					 jQuery(otherid).parent().addClass("error");
                    return false;
                } else {
                    var CheckSum = 0;
                    for (var i=1;i<=9;i++){
                        var Digit = theCode.substr(i-1,1) * i;
                        CheckSum = CheckSum + Digit;
                    }
                    var checkSubStr = '' + CheckSum;
                    var lastchar = checkSubStr.substr(checkSubStr.length-1,1);
                    if (!(lastchar == theCode.substr(9,1)))jQuery(otherid).addClass("error");
                    else jQuery(otherid).removeClass("error");
                    return (lastchar == theCode.substr(9,1));
                    }
    }
    
    function IsNumeric(sText) {
       var ValidChars = "0123456789";
       var IsNumber=true;
       var Char; 
       for (i = 0; i < sText.length && IsNumber == true; i++) 
          { 
          Char = sText.charAt(i); 
          if (ValidChars.indexOf(Char) == -1) 
             {
             IsNumber = false;
             }
          }
       return IsNumber;
       }
    
    function validateAcc(fieldSet) {
       if (!(jQuery(fieldSet).val() == ""))
           jQuery(fieldSet).valid();
       else
            jQuery(fieldSet).removeClass("error") 
    }

/* For OnlineDD sortcode validation */
jQuery.validator.addMethod("validsortcode", function(value, element) {
       var myid = element.id;
        var otherid2 = '#' + myid.replace(3,2);
        var otherid1 = '#' + myid.replace(3,1);
        //alert(otherid);
        if (value==""){
            jQuery(otherid2).addClass("error");
			jQuery(otherid2).parent().addClass("error");
            jQuery(otherid1).addClass("error");
			jQuery(otherid1).parent().addClass("error");
            return false;
        }
        return validateSortcode(value,element);
    }, "Please enter six-digit sort code"); 
    
function validateSortcode (value, element) {
            var myid = element.id;
            var delta = myid.length-1;
           while ((delta > 0) & (!IsNumeric(myid.substr(delta,1)))) {
                delta -= 1;
            }
            if (delta==0) { return false;}
            var lastchar = myid.substr(delta,1);
            var incdigit = lastchar - 1;
            var incdigit_first = lastchar - 2;
            
            var otherid = '#' + myid.replace(lastchar,incdigit);
            var otherid1 = '#' + myid.replace(lastchar,incdigit_first);
            // var theCode = document.getElementById(otherid).value + ' ' + value;
            //alert(jQuery(otherid).val());
            var sortCode_2 = jQuery(otherid).val();
            var sortCode_1 = jQuery(otherid1).val();
            
            
            if ((sortCode_2.length < 2) || (sortCode_1.length < 2)) {
                    
                     jQuery(otherid).addClass("error");
					 jQuery(otherid).parent().addClass("error");
                     jQuery(otherid1).addClass("error");
					 jQuery(otherid1).parent().addClass("error");
                    return false;
                } else {
                    
                    jQuery(otherid).removeClass("error");
					jQuery(otherid).parent().removeClass("error");
                    jQuery(otherid1).removeClass("error");
					jQuery(otherid1).parent().removeClass("error");
                    return true;
                }
    }


	//Private pumping station form validation

	jQuery.validator.addMethod("callback", function(value, element) {
      if (value == 'please-select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
}, "Please select your preferred time of contact");

jQuery.validator.addMethod("pshousenumber", function(value, element) {
       return (jQuery.trim(value) != '');
}, "Please enter building name / number");


jQuery.validator.addMethod("psaddress1", function(value, element) {
       return (jQuery.trim(value) != '');
}, "Please enter the first line of your address");

jQuery.validator.addMethod("pstown", function(value, element) {
       return (jQuery.trim(value) != '');
}, "Please enter town");

jQuery.validator.addMethod("pspostcode1", function(value, element) {
       return (jQuery.trim(value) != '');
}, "Please enter a valid postcode");


jQuery.validator.addMethod("pslocation", function(value, element) {
    if (value == 'Please select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"Please select your pumping station location");

jQuery.validator.addMethod("pstypeofproperty", function(value, element) {
    if (value == 'Please select' || jQuery.trim(value) == '')    {
        return false;
    }else
        return true;
},"please select type of property your pumping station serves");

//Water-saving devices product feedback form validations

jQuery.validator.addMethod("validate-checkbox", function(value, element) {
	if(jQuery('input[name=\'watersavingproducts\']:checked').length < 1){
	jQuery('p.warning-note').css('border','1px solid red');
	return false;
	} else{
	jQuery('p.warning-note').css('border','none');
		return true;
	}

},"Please select which water-saving devices you ordered");	

jQuery.validator.addMethod("checkshowersave", function(value, element) {
			
	if(jQuery('#showersave').is(':checked') && (jQuery('#showerhead').is(':checked'))){
		if(!jQuery('.shower_head').hasClass('hidden')){
			jQuery('.shower_head').addClass('hidden');
			jQuery('input[name=\'group1\']:checked').removeAttr("checked").trigger('change');
		}
		if(!jQuery('.shower_save').hasClass('hidden')){
			jQuery('.shower_save').addClass('hidden');
			jQuery('input[name=\'group2\']:checked').removeAttr("checked").trigger('change');
		}
		jQuery('p.warning-note').css('border','1px solid red');
	  return false; 
	} else{
		if(jQuery('#showersave').is(':checked')){
			if(jQuery('.shower_save').hasClass('hidden')){
				jQuery('.shower_save').removeClass('hidden');
			}
		}
		if(jQuery('#showerhead').is(':checked')){
			if(jQuery('.shower_head').hasClass('hidden')){
				jQuery('.shower_head').removeClass('hidden');
			}
		}
		jQuery('p.warning-note').css('border','none');
		return true;
	}
					
},"Please select which water-saving devices you ordered");	

jQuery.validator.addMethod("checkkitchenwash", function(value, element) {
			
	if(jQuery('#kitchen-swivel-tap').is(':checked') && (jQuery('#wash-basin-tap-inserts').is(':checked'))){
		if(!jQuery('.kitchen-swivel').hasClass('hidden')){
			jQuery('.kitchen-swivel').addClass('hidden');
			jQuery('input[name=\'group3\']:checked').removeAttr("checked").trigger('change');
		}
		if(!jQuery('.wash-basin').hasClass('hidden')){
			jQuery('.wash-basin').addClass('hidden');
			jQuery('input[name=\'group4\']:checked').removeAttr("checked").trigger('change');
		}
		jQuery('p.warning-note').css('border','1px solid red');
		return false; 
	} else{
		if(jQuery('#kitchen-swivel-tap').is(':checked')){
			if(jQuery('.kitchen-swivel').hasClass('hidden')){
				jQuery('.kitchen-swivel').removeClass('hidden');
			}
		}
		if(jQuery('#wash-basin-tap-inserts').is(':checked')){
			if(jQuery('.wash-basin').hasClass('hidden')){
				jQuery('.wash-basin').removeClass('hidden');
			}
		}
		jQuery('p.warning-note').css('border','none');
		return true;
	}
					
},"Please select which water-saving devices you ordered");
