(function($) {
    
    
    
   $.testObj={a: "aa",
   b: function(){return "function b!!!";}
}
    
    
    
    
    
    
    
    
    
    
    
    
    $.validator=function() {};
    var form ;
    //init init
   // jQuery(document).ready(function() { $.validator.form = jQuery("#form");}); 
 

 $.validator.required= function(value, element, param) {

        switch( element.nodeName.toLowerCase() ) {
        case 'select':
                var options = jQuery("option:selected", element);
                return options.length > 0 && ( element.type == "select-multiple" || (jQuery.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
        case 'input':
                if (checkable(element) )
                        return validator.getLength(value, element) > 0;
        default:
                return value.length > 0;
        }
}

 $.validator.minlength= function(value, element, param) {return getLength(value, element) >= param;}
		

		
	
		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
 $.validator.maxlength= function(value, element, param) {return validator.getLength(value, element) <= param;}
		

		
		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
 $.validator.rangelength= function(value, element, param) {
			var length = validator.getLength(value, element);
			return  ( length >= param[0] && length <= param[1] );
		}
		

	
		// http://docs.jquery.com/Plugins/Validation/Methods/min
 $.validator.min= function( value,  param ) {return  value >= param;	}  
		

		
		// http://docs.jquery.com/Plugins/Validation/Methods/max
 $.validator.max= function( value,  param ) {return  value <= param;	}
		

		// http://docs.jquery.com/Plugins/Validation/Methods/range
 $.validator.range= function( value,  param ) {return  ( value >= param[0] && value <= param[1] );}
		
		// http://docs.jquery.com/Plugins/Validation/Methods/email
 $.validator.email= function(value ) {
			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
			return  /^((([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);
		}
                 
	
		// http://docs.jquery.com/Plugins/Validation/Methods/url
 $.validator.url= function(value) {
			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
			return  /^(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);
		}
        
		// http://docs.jquery.com/Plugins/Validation/Methods/date
 $.validator.date= function(value) {
			return  !/Invalid|NaN/.test(new Date(value));
		}
	
		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
 $.validator.dateISO= function(value) {
			return  /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
		}
	
		// http://docs.jquery.com/Plugins/Validation/Methods/dateDE
 $.validator.dateDE= function(value) {
			return  /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
		}
	
		// http://docs.jquery.com/Plugins/Validation/Methods/number
 $.validator.number= function(value) {
			return  /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
		}
	
		// http://docs.jquery.com/Plugins/Validation/Methods/numberDE
 $.validator.numberDE= function(value) {
			return  /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
		}
		
		// http://docs.jquery.com/Plugins/Validation/Methods/digits
 $.validator.digits= function(value) {
			return  /^\d+$/.test(value);
		}
		
		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
		// based on http://en.wikipedia.org/wiki/Luhn
 $.validator.creditcard= function(value) {
			var nCheck = 0,
				nDigit = 0,
				bEven = false;

			value = value.replace(/\D/g, "");

			for (n = value.length - 1; n >= 0; n--) {
				var cDigit = value.charAt(n);
				var nDigit = parseInt(cDigit, 10);
				if (bEven) {
					if ((nDigit *= 2) > 9)
						nDigit -= 9;
				}
				nCheck += nDigit;
				bEven = !bEven;
			}

			return (nCheck % 10) == 0;
		}
		

 $.validator.accept= function(value, param) { 
    param = typeof param == "string" ? param : "png|jpe?g|gif";
    
    return  value.match(new RegExp(".(" + param + ")$", "i")); 	
}
 $.validator.equalTo= function(value, param) {return (value == jQuery(param).val());}
		





















 $.validator.maxWords= function(value, element, params) { 
    return  value.match(/\b\w+\b/g).length < params; 
}
// "Please enter {0} words or less."); 
 
 $.validator.minWords= function(value, element, params) { 
    return  value.match(/\b\w+\b/g).length >= params; 
}
// "Please enter at least {0} words."); 
 
 $.validator.rangeWords= function(value, element, params) { 
    return  value.match(/\b\w+\b/g).length >= params[0] && value.match(/bw+b/g).length < params[1]; 
}
// "Please enter between {0} and {1} words.");


 $.validator.letterswithbasicpunc= function(value, element) {
	return  /^[a-z-.,()'\"\s]+$/i.test(value);
}
// "Letters or punctuation only please");  

 $.validator.alphanumeric= function(value, element) {
	return  /^\w+$/i.test(value);
}
// "Letters, numbers, spaces or underscores only please");  

 $.validator.lettersonly= function(value, element) {
	return  /^[a-z]+$/i.test(value);
}
// "Letters only please"); 

 $.validator.nowhitespace= function(value, element) {
	return  /^\S+$/i.test(value);
}
// "No white space please"); 

 $.validator.ziprange= function(value, element) {
	return  /^90[2-5]\d\{2}-\d{4}$/.test(value);
}
// "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx");










 $.validator.getLength= function(value, element) {
        switch( element.nodeName.toLowerCase() ) {
        case 'select':
                return jQuery("option:selected", element).length;
        case 'input':
                if( this.checkable( element) )
                        return validator.findByName(element.name).filter(':checked').length;
        }
        return value.length;
}
 $.validator.checkable= function(element) { return /radio|checkbox/i.test(element.type);}
 $.validator.findByName= function( name ) {
        // select by name and filter by form for performance over form.find("[name=...]")
        
        return jQuery(document.getElementsByName(name)).map(function(index, element) {
                return element.form == form && element || null;
                //  && element.name == name
        });
}

})(jQuery)
   
