$.fn.validate=function() {  
	var form=$(this),valid=1;
	$(".email",form).each(function(){
		var $this=$(this);
		$this.check_email(
			function(){$this.noerror();},
			function(){$this.error2();valid=0;}
		);
	});
	$(".required",form).each(function(){
		var $this=$(this);
		$this.check_req(
			function(){$this.noerror();},
			function(){$this.error2();valid=0;}
		);
	});
	return valid;
};

$.fn.validate2=function() {  
	var form=$(this),valid=1;
	$("input.email",form).each(function(){
		var $this=$(this);
		$this.check_email(
			function(){},
			function(){$this.error2();valid=0;}
		);
	});
	$(".required",form).each(function(){
		var $this=$(this);
		$this.check_req(
			function(){},
			function(){$this.error2();valid=0;}
		);
	});
	$(".latin",form).each(function(){
		var $this=$(this);
		//if($this.hasClass("hiderequired")&&$this.parent().is(":visible")||!$this.hasClass("hiderequired"))
		$this.check_latin(
			function(){},
			function(){$this.error2();valid=0;}
		);
	});
	$(".hiderequired",form).each(function(){
		var $this=$(this);
		if($this.parent().is(":visible"))
			$this.check_req(
				function(){},
				function(){$this.error2();valid=0;}
			);
	});
	$(".length",form).each(function(){
		var $this=$(this);
		$this.check_length(
			function(){},
			function(){$this.error2();valid=0;}
		);							
	});
	return valid;
};


$.fn.validate_change=function(t,f){  
	var form=$(this);
	var check=function(){
		var valid=1;
		$("input.email,.required,.length",form).each(function(){if(!parseInt($(this).attr("valid")))valid=0;});
		$(".hiderequired",form).each(function(){if($(this).parent().is(":visible")&&!parseInt($(this).attr("valid")))valid=0;});
		if(valid) t(); else f();
	}
	$("input.email",form).change(function(){
		var $this=$(this);
		$this.check_email(
			function(){$this.noerror();},
			function(){$this.error('Wrong mail address');}
		);
		check();
	});
	$(".required",form).change(function(){
		var $this=$(this);
		$this.check_req(
			function(){$this.noerror();},
			function(){$this.error('Required');}
		);
		check();
	});
	$(".hiderequired",form).change(function(){
		var $this=$(this);
		if($this.parent().is(":visible"))
			$this.check_req(
				function(){$this.noerror();},
				function(){$this.error('Required');valid=0;}
			);
		check();
	});
	$(".latin",form).change(function(){							 
		var $this=$(this);
		//if($this.hasClass("hiderequired")&&$this.parent().is(":visible")||!$this.hasClass("hiderequired"))
		$this.check_latin(
			function(){$this.noerror();},
			function(){$this.error('Only latin characters');}
		);
		check();
	});
	$(".length",form).change(function(){
		var $this=$(this);
		$this.check_length(
			function(){$this.noerror();},
			function(){$this.error('3 - 10 characters');}
		);		
		check();
	});
};


$.fn.check_email=function(t,f){
	var filter=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	if(filter.test($(this).val())){ t(); return true; }else{ f(); return false; }
};
$.fn.check_req=function(t,f){
	if($(this).val()&&!($(this).attr('val')&&($(this).attr('val')==$(this).val()))){ t(); return true; }else{ f(); return false; }
};
$.fn.check_length=function(t,f){
	var $this=$(this), l=$this.attr("id").split('|'),vl=$this.val().length;
	if(vl>=l[0]&&vl<=l[1]){ t(); return true; }else{ f(); return false; }
};
$.fn.check_latin=function(t,f){
	var $this=$(this), val=$this.val(), filter=/^([a-zA-Z0-9_\-])+$/;
	if((val&&filter.test(val))||!val){ t(); return true; }else{ f(); return false; }
};
$.fn.error=function(t){
	var $this=$(this);
	$this.attr('valid',0).parent().removeClass("valid");
	$this.next().text(t);
};
$.fn.noerror=function(){
	var $this=$(this);
	$this.attr('valid',1).parent().addClass("valid");
	$this.next().text('');
};

$.fn.error2=function(t){
	var $this=$(this);
	$this.addClass('error');
	$this.change(function(){		
		$this.removeClass('error');
	});
};




