/*
	Class: FormCheck.Evok
		Performs different tests on forms and indicates errors.
		
	Usage:
		Works like FormCheck
*/

FormCheck.Evok = new Class({
	Extends: FormCheck,
	
	/*
	Function: validate
		Private method
		
		Dispatch check to other methods
	*/
	validate : function(el) {
		el.errors = [];
		el.isOk = true;
		
		//skip validation and trim if specified
		if (!this.options.validateDisabled && el.get('disabled')) return true;
		if (this.options.trimValue && el.value) el.value = el.value.trim();
		
		el.validation.each(function(rule) {
			if(this.isChildType(el)) {
				if (this.validateGroup(el,rule) == false) {
					el.isOk = false;
				}
			} else {
				var ruleArgs = [];
				
				if(rule.match(/^.+\[/)) {
					var ruleMethod = rule.split('[')[0];
					ruleArgs = eval(rule.match(/^.+(\[.+\])$/)[1].replace(/([A-Z0-9\._-]+)/i, "'$1'"));
				} else var ruleMethod = rule;
				
				if (this.regex.contains(ruleMethod) && el.get('tag') != "select") {
					if (this.validateRegex(el, ruleMethod, ruleArgs) == false) {
						el.isOk = false;
					}
				}
				
				if (ruleMethod == 'confirm') {
					if (this.validateConfirm(el, ruleArgs) == false) {
						el.isOk = false;
					}
				}
				if (ruleMethod == 'differs') {
					if (this.validateDiffers(el, ruleArgs) == false) {
						el.isOk = false;
					}
				}
				if (el.get('tag') == "select" || (el.type == "checkbox" && ruleMethod == 'required')) {
					if (this.simpleValidate(el) == false) {
						el.isOk = false;
					}
				}
				if(rule.match(/%[A-Z0-9\._-]+$/i) || (el.isOk && rule.match(/~[A-Z0-9\._-]+$/i))) {
					if(eval(rule.slice(1)+'(el)') == false) {
						el.isOk = false;
					}
				}
			}
		}, this);
		
		if (el.isOk) 
			return true;
		else {
			return false;
		}
	},
	
	/*
	Function: validateGroup
		Private method
		
		Perform radios validations
	*/
	validateGroup : function(el,rule) {
		el.errors = [];
		var nlButtonGroup = this.form[el.getProperty("name")];
		el.group = nlButtonGroup;
		var cbCheckeds = false;
		var cbCheckedEl;
		
		if (!nlButtonGroup.length && nlButtonGroup.checked == true) {
			cbCheckeds = true;
			cbCheckedEl = nlButtonGroup;
		}
		else {
			for (var i = 0; i < nlButtonGroup.length; i++) {
				if (nlButtonGroup[i].checked) {
					cbCheckeds = true;
					cbCheckedEl = nlButtonGroup[i];
					break;
				}
			}
		}
		if(cbCheckeds == false) {
			el.errors.push(this.options.alerts.radios);
			return false;
		} else {
			if(rule.match(/%[A-Z0-9\._-]+$/i)) {
				eval(rule.slice(1)+'(cbCheckedEl)');
			}
			return true;	
		}
	},
	
	/*
	Function: prdDomain
		Private method		
		
		Perform check on submit action
	*/
	prdDomain: function(el) {
		el.getParent().getParent().getParent().getElements('input.domain').each(function(e) {
			this.dispose(e);
			if (el.value == 'external')
				this.register(e);
		},this);
	},
	
	/*
	Function: prdRadioGroup
		Private method		
		
		Perform check on submit action
	*/
	prdRadioGroup: function(el) {
		$(document.body).getElement('.product').getElements('input.RGOption').each(function(e) {
			this.dispose(e);
			if (el.value == '1520-13438')
				this.register(e);
		},this);
	}
});

