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;
//			$('#input_botton').attr('disabled','disabled');
//		}else{
//			$('#input_botton').removeAttr('disabled');
		}
	},
	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');
			$('#input_botton').attr('disabled','disabled')
		} else {
			$(this).addClass('validate_alert');
		}
		button_disabled();
//		$(this).keyup(oValidator.checkEmail);
	},
	
	onCheckRequired : function(){
		oValidator.checkRequired($(this));
	},
	
	onCheckRequiredSelect : function(){
		oValidator.checkRequiredSelect($(this));
	},
	
	checkRequired : function(jObj){
		if (jObj.val()!=''){
			jObj.removeClass('validate_required');
		} else {
			jObj.addClass('validate_required');
		}
		button_disabled();
	},
	
	checkRequiredSelect : function(jObj){
		if (jObj.val()!='0'){
			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.keyup(oValidator.checkEmail);
					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);
		});
		
		var j = $('select[req]');
		j.each(function(i){
			jThis = $(this);
			jThis.change(oValidator.onCheckRequiredSelect);
			oValidator.checkRequiredSelect(jThis);
		});
		
		
				
	},
	
	checkSubmit : function(){
		var j1 = $('.validate_required');
		var j2 = $('.validate_alert');
		var s = '';
		if(j1.length>0){
			s = 'Не заполнены обязательные поля';
			if(j2.length>0){
				s = s + ' и некоторые поля заполнены неправильно';
			}
		} else {
			if(j2.length>0){
				s = s + 'Некоторые поля заполнены неправильно';
			}
		}
		return s;
	},
	
	checkLocalSubmit : function(where){
		var j1 = $('.validate_required:visible', where);
		var j2 = $('.validate_alert:visible', where);
		var s = '';
		if(j1.length>0){
			s = 'Не заполнены обязательные поля';
			if(j2.length>0){
				s = s + ' и некоторые поля заполнены неправильно';
			}
		} else {
			if(j2.length>0){
				s = s + 'Некоторые поля заполнены неправильно';
			}
		}
		return s;
	}
}

function button_disabled(){
	var sError = oValidator.checkLocalSubmit();
		if(sError != '' || this.value==''){
			$('#input_botton').attr('disabled','disabled');
//		alert(sError);
//		return false;
		}else{
			$('#input_botton').removeAttr('disabled');
		}
}