var oValidator = {
	alertObject: null,
	doAlert : function(obj){
		$(obj).addClass('validate_alert');
		this.alertObject = obj;
		setTimeout(oValidator.stopAlert, 100);
	},
	stopAlert: function(){
		if(oValidator.alertObject){
			$(oValidator.alertObject).removeClass('validate_alert');
			oValidator.alertObject = null;
		}
	},
	keypressNumber : function(e){
		var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);
		if (e.ctrlKey || e.altKey || key < 32) return true;
		key = String.fromCharCode(key);
		var res = /\d/.test(key);
		if(!res){oValidator.doAlert(this)};
		return res;
	},
		
	blurNumber : function(){
		if(this.value==''){this.value='0'}
	},
	
	keyupLatin : function(e){
		var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);
		if (e.ctrlKey || e.altKey || key < 32) return true;
		key = String.fromCharCode(key);
		var res = /[0-9A-Za-z_]/.test(key);
		if(!res){oValidator.doAlert(this)};
		return res;
	},
	
	blurLatin : function(){
//		if(this.value==''){this.value=''}
	},
	
	checkEmail : function(){
		var re = /^(?:[-a-z\d\+\*\/\?!{}`~_%&'=^$#]+(?:\.[-a-z\d\+\*\/\?!{}`~_%&'=^$#]+)*)@(?:[-a-z\d_]+\.){1,60}[a-z]{2,6}$/i;
		if (this.value=='' || re.test(this.value)){
			$(this).removeClass('validate_alert');
		} else {
			$(this).addClass('validate_alert');
		}
		//$(this).keyup(oValidator.checkEmail);
	},
	
	onCheckRequired : function(){
		oValidator.checkRequired($(this));		
	},
	
	checkRequired : function(jObj){
		if (jObj.val()!=''){
			jObj.removeClass('validate_required');
		} else {
			jObj.addClass('validate_required');
		}
	},
	
	validateAll: function(){
		var j = $("input[validate], textarea[validate]");
		j.each(function(i){
			jThis = $(this);
			
			switch(jThis.attr('validate')){
				case 'number':
					jThis.keypress(oValidator.keypressNumber);
					jThis.change(oValidator.blurNumber);
				break;
				case 'latin':
					jThis.keypress(oValidator.keyupLatin);
					jThis.change(oValidator.blurLatin);
				break;
				case 'email':
					jThis.change(oValidator.checkEmail);					
				break;				
				break;
			}
		});
		
		var j = $("input[req], textarea[req]");
		j.each(function(i){
			jThis = $(this);			
			jThis.keyup(oValidator.onCheckRequired);
			oValidator.checkRequired(jThis);
		});		
				
	},
	
	checkSubmit : function(context){
		var j1 = $('.validate_required', context);
		var j2 = $('.validate_alert', context);		
		var s = '';
		if(j1.length>0){
			s = 'Не заполнены обязательные поля';
			if(j2.length>0){
				s = s + ' и некоторые поля заполнены неправильно';
			}
		} else {
			if(j2.length>0){
				s = s + 'Некоторые поля заполнены неправильно';
			}
		}
		return s;
	}
}