function FormValidator_Check(form){
	var Radio= new Array();
	for (i=0; i<form.elements.length; i++){
		if (form.elements[i].getAttribute('req')){
			switch(form.elements[i].type){
				case 'checkbox':
					if (rel=form.elements[i].getAttribute('rel')){
						if (!Radio[rel]) {
							Radio[rel]=form.elements[i].checked;																
						}
					}
					else {
						if (!form.elements[i].checked){
							return FormValidator_Alert('Поле "$" не отмечено',form.elements[i]);				
						}
					}
				break;
				case 'radio':
					if (!Radio[form.elements[i].name]) {
						Radio[form.elements[i].name]=form.elements[i].checked;																
					}
				break;
				case 'password':
					if (!form.elements[i].value){
						return FormValidator_Alert('Поле "$" не заполнено',form.elements[i]);				
					}
					if (re=form[form.elements[i].name+'_confirm']){
						if (form.elements[i].value!=re.value){
							return FormValidator_Alert('Поле "'+form.elements[i].title+'" не совпадает с подтверждением',re);				
						}
					}
				break;			
				default:
					if (!form.elements[i].value){
						if (rel=form.elements[i].getAttribute('rel')){
							if (form[rel].value) rel=true;
							else rel=false;
						}
						else rel=false;
						if (!rel){
							return FormValidator_Alert('Поле "$" не заполнено',form.elements[i]);				
						}
					}
					if (maxlength=form.elements[i].getAttribute('maxlength')){
						if (form.elements[i].value.length>maxlength){
							return FormValidator_Alert('Длина поля "$" не может быть больше '+maxlength, form.elements[i]);
						}
					}
					if (minlength=form.elements[i].getAttribute('minlength')){
						if (form.elements[i].value.length<=minlength){
							return FormValidator_Alert('Длина поля "$" должна быть больше '+minlength, form.elements[i]);
						}
					}
					if (minimum=form.elements[i].getAttribute('min')){
						min_value=parseInt(minimum);
						int_value=parseInt(form.elements[i].value);
						if (!int_value){
							return FormValidator_Alert('Значение поля "$" должно быть числом', form.elements[i]);
						}						
						if (min_value>int_value){
							return FormValidator_Alert('Значение поля "$" должно быть больше '+minimum, form.elements[i]);
						}
					}
					if (maximum=form.elements[i].getAttribute('max')){
						max_value=parseInt(maximum);
						int_value=parseInt(form.elements[i].value);
						if (!int_value){
							return FormValidator_Alert('Значение поля "$" должно быть числом', form.elements[i]);
						}
						if (int_value>max_value){
							return FormValidator_Alert('Значение поля "$" должно быть меньше '+maximum, form.elements[i]);
						}
					}
				break;
			}						
		}

		if (form.elements[i].getAttribute('regexp')){
			reg= new RegExp(form.elements[i].getAttribute('regexp'));			
			if (!reg.test(form.elements[i].value)){
				return FormValidator_Alert('Поле "$" заполнено неверно', form.elements[i]);
			}
		}
	}
	for (name in Radio){
		if (!Radio[name]){
			label=FormValidator_GetLabel(form, name);
			if (label){
				title=(label.textContent)?label.textContent:label.innerText;
			}
			else {
				title=name;
			}
			OpAlert(title+' необходимо отметить хотя-бы один элемент');			
			return false;
		}		
	}
	
	if (form.id){
		return DOM_Event(form.id+'.submit', form);
	}
	return true;
}

function FormValidator_Alert(Message, input){
	if (input){		
		if (input.style.display!='none'&&input.type!='hidden'){		
			input.focus();
			input.select();
			OpAlert(Message.replace('$',input.title));
		}
		else {
			if (rel=input.getAttribute('rel')){
				if (irel=DOM(rel)){		
				return FormValidator_Alert(Message, irel);
				}
			}			
			OpAlert(Message.replace('$',input.title));			
		}
	}
	return false;
}

function FormValidator_GetLabel(form, htmlFor){

	labels=form.getElementsByTagName('label');
	for (i=0; i<labels.length; i++){
		label=labels[i];
		if (label.htmlFor==htmlFor) return label;
	}
}

function FormValidator_AjaxCheck(input){
	if (!input.value) return;
		if (url=input.getAttribute('AjaxCheck')){
			req = new JsHttpRequest();
			req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.responseJS) {			
					if (req.responseJS.Status){
						label=document.getElementById('AjaxCheck_'+input.id);
						if (!label){
							label=document.createElement('label');
							label.id='AjaxCheck_'+input.id;
							if (input.nextSibling){
								input.parentNode.insertBefore(label, input.nextSibling);
							}
							else {
								input.parentNode.appendChild(label);
							}
						}
						label.className=req.responseJS.Status;
						label.innerHTML=input.getAttribute('AjaxCheck_'+req.responseJS.Status);
					}
				}
			}
		}
		req.caching = false;
		req.loader='script';
		// Prepare request object.
		req.open('get', url, true);
		POST=new Array();
		POST[input.id]=input.value;	
		req.send(POST);
	}
}

function Input_TitleAsValue(id){
	var input=DOM(id);
	
	if (!input) return false;
	var value=input.value;
	var type='text';
	
	if (input.type=='password'){
//		
		type='password';
		//input['type']='text';
	}
	
	AttachEvent(input, 'focus', function(event){if (input.value==value) input.value='';if (type) input.type=type})
}