var Zend = Zend || { };
Zend.Form = Zend.Form || { };

Zend.Form.isValidElement = function(el)
{
	//alert('valid element');
	var form = el.form;	
	
	var formName = (form.getAttribute('name'))
	             ? form.getAttribute('name')
	             : 'form';

	var rules = Forms[formName]; //Forms.{Имя формы}
	
	//alert(rules);
	var formValidates = true;
		
	this.element = el;
	var element_validators = rules[this.element.id.replace(/-/, "__")];
	
	
	var form_els = $(form).getElements();
	for(var item=0; item<form_els.length;item++){
		if(form_els[item] == el) break;
	}	
	//alert(item);	
	//alert(element_validators);
	try{
		//alert(element_validators.length);
		for(var i=0; i<element_validators.length;i++){
			try{
				var validator_name = element_validators[i].name;				
				this.validator_parameters = element_validators[i].parameters;
				//alert(this.element.name+': Validator name: '+validator_name);
				//Вызов валидатора по его имени с передачей обекта элемента и параметров валидации
				var validator = Zend['Validate'];
				var validator = validator[validator_name];
				var status = validator(this.element,this.validator_parameters);  //Zend.Validate.{Имя валидатора}(Элемент и параметры валидации)

				//this.id = $(this.element).name+'_'+formName;
				this.id = $(this.element).id+'_'+item;

				if(status){
					//alert('Поле валидно. продолжить авлидацию другими валидаторами');
					this.hideError();
					if(validator_name == 'Required' && this.element.value.length==0)break;
				}
				else{
					//alert('Поле не валидно. Прекратить валтдацию этого поля');
					this.showError();
					formValidates = false;
					break;
				}
			}
			catch(exception)
			{
				alert(element.name+': not set validators');
				continue;
			}
		}
	}
	catch(exc){
		//alert(exc);
		//continue;
	}	
	return formValidates;
}


Zend.Form.isValid = function(form)
{
	//var c = form.elements;
	
	var formName = (form.getAttribute('name'))
	             ? form.getAttribute('name')
	             : 'form';

	var rules = Forms[formName]; //Forms.{Имя формы}	
	var formValidates = true;

	var form_els = $(form).getElements();
	this.element = null;
	

	for(var item=0; item<form_els.length;item++){
		//alert(form_els[item]);
		this.element = form_els[item];
		//alert(this.element.id.replace(/-/, "__"));
		var element_validators = rules[this.element.id.replace(/-/, "__")];
		
		//alert('элемент '+this.element.id);

		//alert(element_validators[0]);
		try{
			//element_validators.length;

		for(var i=0; i<element_validators.length;i++){
			try{

				var validator_name = element_validators[i].name;
				this.validator_parameters = element_validators[i].parameters;


				//alert(this.element.name+': Validator name: '+validator_name);

				//Вызов валидатора по его имени с передачей обекта элемента и параметров валидации
				var validator = Zend['Validate'];
				var validator = validator[validator_name];
				var status = validator(this.element,this.validator_parameters);  //Zend.Validate.{Имя валидатора}(Элемент и параметры валидации)

				//this.id = $(this.element).name+'_'+formName;
				//alert($(this.element).name+'  '+$(this.element).id);
				this.id = $(this.element).id+'_'+item;
		
				//alert($(this.element).id+'_'+item);
				//alert(status);

				if(status){
					//alert('Поле валидно. продолжить авлидацию другими валидаторами');
					this.hideError();
					if(validator_name == 'Required' && this.element.value.length==0)break;
				}
				else{
					//alert('Поле не валидно. Прекратить валтдацию этого поля');
					this.showError();
					formValidates = false;
					break;
				}
			}
			catch(exception)
			{
				//alert(element.name+': not set validators');
				continue;
			}
		}
		}
		catch(exc){
			//alert(exc);
			continue;
		}

	}
	return formValidates;
}

Zend.Form.showError = function(){
	//alert('показать ошибку для поля '+this.element.name);
	
	var msg = this.validator_parameters.msg;
	if(!$(this.element).hasClassName('element_error'))
		$(this.element).addClassName('element_error');

	if($(this.id)) $(this.id).remove();	
	//alert('нет елемента ul с id='+id+'\n создаем этот элемент');
	var ul = new Element('ul',{'class':'errors','id':this.id});
	var li = '<li>'+msg+'</li>';
	ul.innerHTML = li;
	//new Insertion.After(this.element, ul);
	//alert($(this.element).id);
	new Insertion.After($(this.element).next('.errors'), ul);
	
	
	//****************************************************//
	/*
	if(!$(this.element).hasClassName('element_error'))
		$(this.element).addClassName('element_error');	
	//var msg = this.validator_parameters.msg;
	var li = '<li>'+this.validator_parameters.msg+'</li>';
	//alert($(this.element).next('ul').innerHTML);
	$(this.element).next('ul').show();
	$(this.element).next('ul').innerHTML = li;
	*/	
}

Zend.Form.hideError = function(){
	
	//alert('убрать ошибку для поля '+this.element.name);
	if($(this.element).hasClassName('element_error'))
		$(this.element).removeClassName('element_error');	
	if($(this.id)) $(this.id).remove();
	
	/******************************************************/
	/*
	if($(this.element).hasClassName('element_error'))
		$(this.element).removeClassName('element_error');
	//if($(this.id)) $(this.id).remove();
	$(this.element).next('ul').hide();
	$(this.element).next('ul').innerHTML = '';
	*/
}

var Forms;