(function($) {
	var array = new Array(), ivalue = 0;
	$.fn.extend({
		validate: function(options) {
			var defaults = { 
				eventClick: "#enviar",
				vfunction: null
			};
			var options = $.extend(defaults, options);
			return this.each(function() {
				array[ivalue++] = new Array($(this),$(options.eventClick).attr("id"));
				// Find all elements type input but not submit
				$inputs = $(this).find(":input,:text").filter(":not(:submit,:button,:reset)");
				var itemControl = $($(options.eventClick), $(this));
				itemControl.click(function() { 
					// Find all elements type input but not submit
					for(var i=0;i<array.length;i++){
						if($(this).attr("id")==array[i][1]){
							return options.vfunction($.fn.validateForm(array[i][0].find(":input,:text").filter(":not(:submit,:button)")));
						}
					}
				});
				$inputs.bind("keyup",$.fn.validateItem);
				$inputs.filter("select").bind("change",$.fn.validateItem);
			}); 
        },
		validateForm : function($inputs) {
			$inputs.filter(":not(.not_required)").each($.fn.validateItem);
			return $inputs.filter(":not(.not_required)").hasClass("invalid")?false:true;
		},
		validateItem: function(){
			var $val = $(this).val();
			var isValid = true;
			//Regex for DATE
			if($(this).hasClass('vdate')){
				var Regex = /^([\d]|1[0,1,2]|0[1-9])(\-|\/|\.)([0-9]|[0,1,2][0-9]|3[0,1])(\-|\/|\.)\d{4}$/;
				isValid = Regex.test($val);
			//Regex for Email
			}else if($(this).hasClass('vemail')){
				var Regex =/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
				if(!Regex.test($val)){isValid = false;};
			}else if($(this).hasClass('vplaca')){
				var Regex =/^[a-zA-Z]{3,3}\d{3}/;
				if(!Regex.test($val)){isValid = false;}
			}else if($(this).hasClass('vcedula')){
				var Regex =/^[0-9]{4,30}/;
				if(!Regex.test($val)){isValid = false;}
			//Regex for Phone
			}else if($(this).hasClass('vphone')){
				var Regex =/^([0-9a-zA-Z]+([_+.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/;
				if(!Regex.test($val)){isValid = false;}
			//Check for empty
			}else if($(this).hasClass('is_required')){
				if($val.length==0||$val==0){isValid=false;}
			}
			if(isValid){
				$(this).removeClass("invalid");
				$(this).addClass("valid");
			}else{
				$(this).removeClass("valid");
				$(this).addClass("invalid");
			}
			return isValid;
		},
		serialize : function(){
			var data = new Object();
			$(this).find(":input").filter(":not(:submit,:button)").each(function(){
				eval("data."+($(this).attr("name"))+" = $(this).attr(\"value\");");
			});
			return data;
		}
    }); 
})(jQuery);
