(function($) {	
	jQuery.validate=function(options) {	
		var vflag = true;		
		var errArr = [];
		var i = 0;
		jQuery.each(options, function(id, req) {
			var flag = true;	
			var types = "";	
			var bools = "";					
			jQuery.each(req, function(type, bool) {	
				var value = $("#"+id).val();											
				if((value || type == "required" || type == "files") && bool) {
					if(flag) {
						flag = validation();					
						flag ? $("#"+id).removeClass("err") : $("#"+id).addClass("err");	
						if(type == "compare") {
							flag ? $("#"+bool).removeClass("err") : $("#"+bool).addClass("err");							
						}
						types = type;
						bools = bool;
					}
				}				
				function validation() {					
					switch(type) {
						case 'required':
							if(!value) {							
								return false;	
							}
							return true;
						break;
						case 'email':
							if(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(value)) {
								return true;
							}
							return false;
						break;
						case 'compare':
						case 'compareMain':
							if(value!=$("#"+bool).val())  {
								return false;	
							}
							return true;
						break;						
						case 'minLength':
							if(value.length < bool) {
								return false;	
							}
							return true;
						break;
						case 'url':
							if(/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:)*@)?(((\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})|[!\$&amp;'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value)) {
								return true;									
							}
							return false;
						break;
						case 'telephone':
							if(bool == "string") {
								if(/^(([a-z])*([A-Z])*([0-9])*([-#()+ ])*)+$/.test(value)) {
									return true;
								}
								return false;	
							} else {
								if (/^(([0-9])*([-#()+ ])*)+$/.test(value)) {
									return true;
								}
								return false;	
							}
						break;
						case 'zipcode':
							if (/^(([a-z])*([A-Z])*([0-9])*)+$/.test(value)) {
								return true;
							}
							return false;
						break;
						case 'username':
							if (/^(([a-zA-Z])+([._])*([0-9])*)+$/.test(value)) {
								return true;
							}
							return false;
						break;
						case 'files':
							return $.checkFile(id);
						break;
					}
				}				
			});			
			if(!flag) {				
				var value = $("#"+id).val();				
				$(".replaceTemp").html($("#"+id).parents("li").children("label").html());
				$(".replaceTemp em").remove();
				var errContent = $(".replaceTemp").html();
				if(!value && types!="files") {
					errContent = "Enter the "+errContent;
				} else if(types == "email") {
					errContent = "Enter email address correctly in the "+errContent+" field";
				} else if(types == "compare") {
					errContent = errContent+" mismatched. Enter correctly";	
				} else if(types == "minLength") {
					errContent = "Enter minimum of "+bools+" character in "+errContent+" field";	
				} else if(types == "url") {
					errContent = "Enter the valid url with http or ftp in "+errContent+" field";	
				} else if(types == "telephone") {					
					if(bools == true) {
						errContent = "Enter the valid telephone no. without using string in "+errContent+" field";	
					} else {
						errContent = "Enter the valid telephone no. in "+errContent+" field";		
					}
				} else if(types == "url") {
					errContent = "Enter the valid zipcode in "+errContent+" field";	
				} else if(types == "username") {
					errContent = "Enter the valid username in "+errContent+" field";	
				} else if(types == "files") {
					errContent = "Upload the "+errContent;	
				} else {
					errContent = "";	
				}
				if(errContent) {
					errArr[i] = errContent;	
					i++;
				}
			}
		});
		if(errArr && i) {
			vflag = false;
			errArr = errArr.join(", ");
			$(".middle").html(ajax_misfield);
			$(".middle span").append(" <span class='errLabel'>"+errArr+"</span>");
			$(".middle").fadeIn(2000,function(){
				setHeight();
			});
		}
		return vflag;
	}
})(jQuery);



