function FormChecker(form){
	this.root = jQuery(form);
	this.submit_btn = this.root.find('input:submit');
	this.required_fields = this.root.find('.need');

	this.attachEvents();
	this.check();
};
FormChecker.prototype = {
	attachEvents: function(){
		var me = this;
		var f = function(){
			return me.check();
		};
		this.root.submit(f);
	   	this.required_fields.keyup(f).click(f).change(f);//.change(f);     .blur(f)
	},
	check: function(){
		var ok_fields = 0;
		var me = this;
		this.required_fields.each(function(){
			var obj = jQuery(this), fld = obj;//.find('input, textarea');
			var result = false;

			if(obj.is('.check-email')){
				result = me.checkEmail(fld);
			}
            else if(obj.is('.sameas')){
                result=me.checkSame(fld);
            }
			else{
				result = me.checkField(fld);
			}
            if(obj.is('.check-phone')){
				result = me.checkPhone(fld);
			}
            if(obj.is(':checkbox')){
                result = me.checkBox(fld);
            }
			if(obj.is('.checkrus')){
                result = me.checkRus(fld);
            }
			if(obj.is('.pasconfirm')){
                result = me.pasConfirm(fld);
            }
			if(result)
				obj.addClass('required-ok');
			else
				obj.removeClass('required-ok');

			ok_fields += Number(result);
		});

		var is_ok = (ok_fields == this.required_fields.length);
	   	this.submit_btn.attr('disabled', !is_ok);
		return true;
	},
	checkField: function(fld){
		return Boolean(jQuery.trim( fld.val() ));
	},
    checkBox: function(fld){
		return jQuery(fld).is(":checked");
	},
	checkPhone: function(fld){  //+0 (000) 0000000
		var re = /^\s*\+[1-9]{1,1} \([0-9]{3,3}\) [0-9]{7,7}\s*$/i;
		if(this.checkField(fld)){
			var is_correct = re.test(fld.val());
			if(is_correct)
				fld.removeClass('error');
			else
				fld.addClass('error');
			return is_correct;
		}
		return false;
	},
    checkEmail: function(fld){
		var re = /^\s*[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\s*$/i;
		if(this.checkField(fld)){
			var is_correct = re.test(fld.val());
			if(is_correct)
				fld.removeClass('error');
			else
				fld.addClass('error');

			return is_correct;
		}
		return false;
	},
    checkRus: function(fld){
		var re = /^\s*[А-Яа-я-]+\s*$/i;
		if(/data(.)*\[nic\]/.test(fld.attr("name")))
			re = /^[A-Za-z0-9А-Яа-я-]+$/i;
		
		if(this.checkField(fld)){
			var is_correct = re.test(fld.val());
			if(is_correct)
				fld.removeClass('error');
			else
				fld.addClass('error');

			return is_correct;
		}
		return false;
	},
	pasConfirm: function(fld){
		if(this.checkField(fld)){
			fld1 = jQuery('#ferstpas');
			var is_correct = (fld.val()==fld1.val());
			if(is_correct) {
				fld.removeClass('error');
				jQuery('#pass_no_correct').css('display', 'none');
			} else {
				fld.addClass('error');
				jQuery('#pass_no_correct').css('display', 'block');
			}
			return is_correct;
		}
		return false;
	},
    checkSame: function(fld){
		if(this.checkField(fld)){
            var obj = jQuery('.same'), fld1 = obj.find('input, textarea');
			var is_correct = (fld.val()==fld1.val());
			if(is_correct)
				fld.removeClass('error');
			else
				fld.addClass('error');

			return is_correct;
		}
		return false;
	}
};

jQuery(function(){
    jQuery('form').each(function(){
		new FormChecker(this);
    })
});
