jQuery.validator.rules = {
	required: function(value, element, parameters, utility) {
		switch( element.nodeName.toLowerCase() ) {
		case 'select':
			var options = utility.getSelectedOptions(element);
			return options[0].value == "0" || options.length == 0 || options[0].value.length == 0;
		case 'input':
			switch( element.type.toLowerCase() ) {
			case 'checkbox':
				return !element.checked;
			case 'radio':
				return utility.countChecked(element) == 0;
			default:
				return value.length == 0;
			}
		default:
			return value.length == 0;
		}
	},
	length: function(value, element, parameters, utility) {
		var length = utility.getLength(value, element);
		return length < parameters[0] || length > parameters[1];
	},
	min: function(value, element, parameters, utility) {
		var length = utility.getLength(value, element);
		return length < parameters[0];
	},
	max: function(value, element, parameters, utility) {
		var length = utility.getLength(value, element);
		return length > parameters[0];
	},
	email: function(value) {
		return !value.match(/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i);
		//return !value.match(/^(\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+)?$/i);
	},
	date: function(value) {
		return /Invalid|NaN/.test(new Date(value));
	},
	dateCA: function(value) {
		return !value.match(/^\d\d?\/\d\d?\/\d{4}$/);
	},
	/*
	url: function(value) {
		return !value.match(/^(https?|ftp):\/\/[A-Z0-9](\.?[A-Z0-9ÄÜÖ][A-Z0-9_\-ÄÜÖ]*)*(\/([A-Z0-9ÄÜÖ][A-Z0-9_\-\.ÄÜÖ]*)?)*(\?([A-Z0-9ÄÜÖ][A-Z0-9_\-\.%\+=&ÄÜÖ]*)?)?$/i);
	},*/
	zipCA: function(value) {
		return !value.match(/^([a-zA-z]{1}\d{1}[a-zA-Z]{1}\s?-?\d{1}[a-zA-Z]{1}\d{1})?$/i);
	},
	number: function(value) {
		return isNaN(value);
	},
	numeric: function(value) {
		return !value.match(/^(\d+([\.]?\d+)?)?$/);
	},
	alpha: function(value) {
		return !value.match(/^([a-zA-Z\s]*)?$/);
	},
	phone: function(value) {
		return !value.match(/^((1)?(\s)?(\+)?(\s)?(\()?\d{3}(\))?\s?-?\d{3}\s?-?\d{4}((\s)+(ext|x|entension)?(\s)?(\d)+)?)?$/i);
	},
	FQDN: function(value) {
		return !value.match(/^(([a-zA-Z0-9]+([.\-_]?))*[a-zA-Z0-9]+([.]{1}[a-zA-Z]{2,3}){1})?$/);
	},
	confirm: function(element, parameters, utility) {
		return ((jQuery("#"+utility).val() != element));
	},
	valid: function(value, element) {
	   return (jQuery("#"+element.name+"_valid").val() == "1" || value == "" );
	},
	account_number: function(mField) { 
	    vLen = mField.length; 
        vlastNum =  Math.abs( mField.substr(vLen-1) ); 
        vSum = 0; 
        ( vLen % 2 == 0 ? evens=true : evens=false ); 
        Mod10Tbl = new Array ( 0,2,4,6,8,1,3,5,7,9 ); 
        if (evens) { 
            for ( i=0; i < vLen - 1; i++) { 
                if (i % 2 == 0 ) { 
                    j=Math.abs(mField.substr(i,1)); 
                    vSum += Mod10Tbl[j]; 
                } else { 
                    vSum += Math.abs(mField.substr(i,1)); 
                } 
            } 
        } else { 
            for ( i=0; i < vLen - 1; i++) { 
                if (i % 2 == 0 ) { 
                    vSum += Math.abs(mField.substr(i,1)); 
                } else { 
                    j=Math.abs(mField.substr(i,1)); 
                    vSum += Mod10Tbl[j]; 
                } 
            } 
        } 
        lastDigit = vSum.toString().length -1; 
        vTmp = Math.abs( vSum.toString().substr(lastDigit) ); 
        ( vTmp == 0 ? vBase = 0 : vBase=10 ); 
        
        return ( vBase-vTmp == vlastNum ? false : true); 
    }
};