function formValidation(){
	this.getNoun = function(number, one, two, five){
		number = Math.abs(number);
		number %= 100;
		if (number >= 5 && number <= 20) {
			return five;
		}
		number %= 10;
		if (number == 1) {
			return one;
		}
		if (number >= 2 && number <= 4) {
			return two;
		}
		return five;
	}
	
	this.hideTip = function(id){
		var mb = document.getElementById(id+'_error');
		mb.innerHTML = '';
		mb.style.display = 'none';
	}
	
	this.showTip = function(id, message){
		var message_box = document.getElementById(id+'_error');
		message_box.innerHTML = message;
		message_box.style.display = 'block';

	}
	
	this.disableSubmit = function(){
		if(document.getElementById('sbmt')){
			document.getElementById('sbmt').disabled='disabled';
			document.getElementById('sbmt').className='sbmt_disabled';
		}
	};
	
	this.enableSubmit = function(){
		if(document.getElementById('sbmt')){
			document.getElementById('sbmt').disabled='';
			document.getElementById('sbmt').className='submit';
		}
	};
	
	
	this.regExpEmail = function(value){
        var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
		return pattern.test(value);
    };
	
	this.regExpDigitsOnly = function(value, limit){
		var pattern = new RegExp(/^[0-9]+$/);
		return pattern.test(value);
    };
	
	this.digits = function(field_obj, limit, required){
		var messages = new Array(
			'Можно вводить только цифры', //0
			'Максимум '+limit+' '+this.getNoun(limit, 'символ', 'символа', 'символов'), //1
			'Обязательное поле' //2
		);
		
		if(field_obj.value && required){								
			if(!this.regExpDigitsOnly(field_obj.value)){
				this.showTip(field_obj.id, messages[0]);
			}else{
				if(field_obj.value.length > limit && limit != 0){
					this.showTip(field_obj.id, messages[1]);
				}else{
					this.hideTip(field_obj.id);
				};
			};
		}else{
			this.showTip(field_obj.id, messages[2]);
		};
	}
	
	
	this.zip = function(field_obj, required){
		var messages = new Array(
			'Можно вводить только цифры', //0
			'Длина поля должна составлять 6 знаков', //1
			'Обязательное поле' //2
		);
		
		if(field_obj.value && required){
			if(!this.regExpDigitsOnly(field_obj.value)){
				this.showTip(field_obj.id, messages[0]);
			}else{
				if(field_obj.value.length != 6){
					this.showTip(field_obj.id, messages[1]);
				}else{
					this.hideTip(field_obj.id);
				};
			};
		}else{
			this.showTip(field_obj.id, messages[2]);
		};
	}
	
	
	
	this.string = function(field_obj, limit, required){
		var messages = new Array(
			'Максимум '+limit+' '+this.getNoun(limit, 'символ', 'символа', 'символов'), //0
			'Обязательное поле' //1
		);
		
		if(field_obj.value){
			if(field_obj.value.length > limit && limit != 0){
				this.showTip(field_obj.id, messages[0]);
			}else{
				this.hideTip(field_obj.id);
			};
		}else{
			if(required){
				this.showTip(field_obj.id, messages[1]);
			}else{
				this.hideTip(field_obj.id);
			}
		};
	}
	
	this.email = function(field_obj, required){
		var messages = new Array(
			'Введите правильный e-mail', //0
			'Обязательное поле', //1
			'Максимум 50 символов'
		);
		
		if(field_obj.value){
			if(!this.regExpEmail(field_obj.value)){
				this.showTip(field_obj.id, messages[0]);
			}else{
				this.hideTip(field_obj.id);
				if(field_obj.value.length > 50){
					this.showTip(field_obj.id, messages[2]);
				}else{
					this.hideTip(field_obj.id);
				}
			};
		}else{
			if(required){
				this.showTip(field_obj.id, messages[1]);
			}else{
				this.hideTip(field_obj.id);
			}
		};
	}
	
	this.required = function(field_obj){
		var messages = new Array(
			'Обязательное поле' //0
		);
		
		if(!field_obj.value){							
			this.showTip(field_obj.id, messages[0]);
		}else{
			this.hideTip(field_obj.id);
		};
	}
};

var checkForm = new formValidation();
