
function CheckForm(){
	var error_buble_node;
	var form_name;
	var buble_text_node;
	this.check=function (fields, vals, _form_name){
	  try {
	  	
		if (typeof vals!='object' || typeof fields!='object'){
		 	return true;  // пусть пхп работает
		}
		form_name=_form_name;
		var el='';
		var _el=''; 
		var val=''; 
		var el_error='';
		for (var i in fields){
		 	_el=fields[i];
			el_id=i;

			val=vals[el_id];
			
			el_error='Неверно заполнено поле "'+_el.ru_name+'"! ';
			
			if (!this.uIsNoEmpty(val,_el.required)){ 
				return this.wrong('Пожалуйста, заполните поле "'+_el.ru_name+'" и продолжите!', el_id);
				//pr(form_name+'.'+el_id);
				//$(form_name+'.'+el_id).focus();
				
				//return false;
			}
			//alert(el_name+el.value.length+" "+required[i]);
			
			if (_el.required=='1' || (val.length!=0 && _el.required!='1')){
		    	var res=true;
		    	//pr(_el.type2);
				switch(_el.type2){
					
					case 'select':
						if (typeof val=='object'){
							for (var i in val){
								if (val==_el.slct_not_accept_value){
									res=false;
									break;
								}		
							}
						}else
							if (val==_el.slct_not_accept_value){
								res=false;
						}
						el_error+='Выберите значение поля "'+_el.ru_name+'"!';
						break;
						
					case 'int':
						var reg='^[\\d]*$'; 
						res=this.uRegExp(val,reg);
						el_error+=' Поле должно быть числом! ';
						break;
						
					case 'telephone':
						var reg='^[\\d\\-\\s\\)\\(\\+\\,]*$';
						res=this.uRegExp(val,reg);
						el_error+=' Телефон может состоять из цифр, круглых скобок, тире и знака плюс! ';
						//res=this.uCheckTel(val);
						break;
		
					case 'regexp': case 'img_code':
						res=this.uRegExp(val,_el.regexp);
						//el_error+=' Телефон может состоять из цифр, крыглых скобок, тире и знака плюс! ';
						break;
					case 'email':
						var reg ='^([a-zA-Z0-9\\._-]+@+[a-zA-Z0-9\\._-]+\\.[a-zA-Z0-9._-]+)$';
						res=this.uRegExp(val,reg);
						el_error+=' Некорректный email!';
						break;
		            case 'name':
						reg='^[a-zA-Zа-яА-Я\\s\\-]{3,300}$';
						res=this.uRegExp(val,reg);
						el_error+=' Поле должно содержать от 3 до 300 символов. Можно использовать буквы русского и латинского алфавитов, пробел и тире!';
						break;
					
					default :
						//pe(_el.min_len+' '+_el.max_len);
						
						if (_el.min_len!=0 || _el.max_len!=0){
							el_error+='Поле должно содержать';
							if (_el.min_len){
								el_error+=' от '+_el.min_len;
							}
							if (_el.max_len){
								el_error+=' до '+_el.max_len;
							}
							el_error+=' символов!';
							res=this.uCheckLength(val,_el.min_len,_el.max_len);
						}
						
							
					  break	
				}
				if (!res){
					//pr(form_name+'.'+el_id);
					$(form_name+'.'+el_id).focus();
					return this.wrong(el_error,el_id);
					
					//return false;
					//return true;
					
				}
			}
		}

		return true;
	  }catch(e){
	  		return true;
	  		//this.wrong('ошибка проверки значений формы', e);
	  }
	};
	this.uIsNoEmpty=function(val,no_empty,err){
	if (no_empty==1){
		if (val.length==0){
			return false;
		}
	}
	return true;
	};
	this.uRegExp=function (val,reg_exp,err){
		var reg=new RegExp(reg_exp);
		
		if (!(reg.test(val)))
			return false;
		return true;
	};
   this.uCheckLength=function (val,min,max, err){
	if(val.length<min){
			return false;
		}
	if(val.length>max){
			return false
		}
	return true;
	};
	this.wrong=function(err, el_id){
		try{
		//alert(err);
		if (!error_buble_node)
			error_buble_node=$('error_bubble');
		if (!buble_text_node)
			buble_text_node=$('buble_text');
		buble_text_node.innerHTML=err;
		el_node=$(form_name+'.'+el_id);
		if (!el_node)
			return true;
		
		//pr(el_node.id);
		var crds=getAbsCrds(el_node);
		if (crds.top==-1 || crds.left==-1)
			return true;
		//pr(crds);
		//pr(crds.top+' '+crds.left);
		error_buble_node.style.top=parseInt(crds.top)-15+'px';
		error_buble_node.style.left=parseInt(crds.left)+el_node.offsetWidth+20+'px';
		
		
		error_buble_node.style.display='block';
		el_node.focus();
		//addEvent(el_node, , function a (){error_buble_node.style.display='none' ; delEvent(el_node, 'keyup', a) });
		
		var prop;
		//alert(el_node.type+' '+el_node['type'])
		if (el_node.type=='select-one')
			prop='onchange';
		else
			prop='onkeyup';
		
		setFunctAttribute(el_node, prop, '$("error_bubble").style.display="none"');
		
		}catch(e){
			return true;
			//alert(e);
		}
		return false;
		//$(form_name+'.'+el_id).focus();
	} 
}


var checkF=new CheckForm(); 

function UCheckForm(form_node){
	try{
		//pr(register_fields);
		var fields=eval(form_node.name+'_fields');
		if (typeof fields!== 'object'){
			//alert('as');
			return true;
		}
		var vals=new Array();
		var val='';
		var node_name='';
		for (var fld in fields){
			node_name=form_node.name+'.'+fld;
			//pr(node_name);
			switch (fields[fld]['type']){
				case 'select':
					val=Slct.getSlctd(node_name);
					break;
				default:
					val=trim($(node_name).value);
			}
			//pr(val);
			vals[fld]=val;
			
		}
		//pr(vals);
		if (checkF.check(fields, vals,form_node.name)){
			return true;
		}
		return false;
	}
	catch (e){
		//wrong(e);	
		return true;
	}

}




