Kandoo.errorField = null;
Kandoo.formTags = ['input', 'select', 'textarea'];
Kandoo.formTagsLength = Kandoo.formTags.length;
Kandoo.autoFillWrongFields = true;

Kandoo.catchForms = function(frms){
	for (var i = 0; i < frms.length; i++){
		DY.addEvent(frms[i], 'submit', Kandoo.catchSubmit);
	}
}

Kandoo.catchSubmit = function(e){
	if (!e && !window.event) return false;

	var f = DY.getEventSource(e);
	var valid = Kandoo.checkForm(f);
    
	if(!valid){
		if (e && e.preventDefault) e.preventDefault();
		else window.event.cancelBubble = true;	
	}

	return valid; 
}

Kandoo.checkForm = function(frm){
	
	clearErrors();
	
	this.errorField = null;
	
	var valid;
	
	for (var i = 0; i < this.formTagsLength; i++){
		var elms = DY.getTags(this.formTags[i], frm);

		if (elms.length > 0) valid = this.checkFormElements(elms);
		else valid = true;
	}
    
    if (wrongFields.length > 0) return markErrors();
    
    /*
	if (!valid) {
		this.setError('Hay un error en el campo<br />'+this.getFieldLabelText(frm, this.getErrorField()));
		
		return false;
	}
	*/
	var textareas = DY.getTags('textarea', frm);
	
	if (textareas.length > 0){
	    var valid = checkAtTextAreas(textareas);    
	}
	
	
	
	/*
	for (var i = 0; i < textareas.length; i++){
		var id = textareas[i].id;
		var info = formElementsToCheck[id];
		
		if (!info.allowAtSymbol) valid = (textareas[i].value.lastIndexOf('@') < 0);
	
		if (!valid) {
			this.setErrorField(textareas[i]);
			this.setError('Hay un error en el campo '+this.getFieldLabelText(frm, this.getErrorField())+'.\n\n\nLo sentimos, pero desde esta secci�n no podemos responderte. \nSi quieres, puedes realizar tus preguntas desde la secci�n Contactar. \n\nMuchas gracias. ');
			break;
		}
	}
	*/
	
	return valid;

}

Kandoo.checkFormElements = function(elms){

	var valid;

	for (var i = 0; i < elms.length; i++){
		var elm = elms[i];
		
		if (elm.type.toLowerCase() == 'submit' || elm.type.toLowerCase() == 'reset' || elm.type.toLowerCase() == 'hidden') {
			valid = true;
			continue;
		}
		
		
		var id = elm.id;

		var info = formElementsToCheck[id];
		
		if (!info) {
			valid = true;
			continue;
		}
		
		
		if (info.dependencies) this.checkFormElementDependency(elm, info);
		
		if (!info.required) valid = true;
		else valid = this.checkFormElement(elm, info);
	
		//if (!valid) break;
	}

	return valid;
}
/*
Kandoo.checkFormElement = function(elm, info){

	var valid;

	if (!info.type){
		valid = DY.validateFormElement(elm);
	}
	else{
		switch(info.type){
			case 'mail':
			case 'email':
				valid = DY.validateInputMail(elm);
				break;
			case 'phone':
			    valid = DY.validateInputPhone(elm);
			    break;
			case 'mobilePhone':
			    valid = DY.validateInputMobilePhone(elm);
			    break;
			
		}
	}
	
	if (!valid) this.setErrorField(elm);

	return valid;
}
*/

Kandoo.checkFormElement = function(elm, info, disallowTrim){
    var tag = elm.tagName.toLowerCase();

    if (info && info.condition){
        
        var pre = eval(info.condition+'(elm)');
        
        if (pre) return true;
    }
    
    switch(tag){
        case 'input':
            return checkInputElement(elm, info, disallowTrim);
            break;
        
        case 'select':
            return checkSelectElement(elm, info);
            break;
        
        case 'textarea':
            return checkTextAreaElement(elm, info);
            break;
    }
    
    return false;
}

function checkInputElement(elm, info, disallowTrim){
    var type = elm.type;
    
    switch(type){
        case 'text':
        case 'password':
        case 'hidden':
            return checkInputTextElement(elm, info, disallowTrim);
            break;
        
        case 'radio':
            return checkInputRadioElement(elm, info);
            break;
        
        case 'checkbox':
            return checkInputCheckboxElement(elm, info);
            break;
    }
    
    return false;
}

function checkInputTextElement(elm, info, disallowTrim){
	if (!disallowTrim){
	    var value = trim(elm.value);
    	elm.value = value;
	}
   
    
    if (isEmpty(elm)) return false;
    
    var filter = FILTERS[info.type];
    
    if (!filter) filter = FILTERS['alfanum'];

    return filter.test(value);
}

function checkInputRadioElement(elm){
    var collect = document.getElementsByName(elm.name);
    
    for (var i = 0; i < collect.length; i++){
        if (collect[i].checked) return true;
    }
    
    return false;
}

function checkInputCheckboxElement(elm){
    var collect = document.getElementsByName(elm.name);
    
    for (var i = 0; i < collect.length; i++){
        if (collect[i].checked) return true;
    }
    
    return false;
}

function checkSelectElement(elm){
    var value = elm.options[elm.selectedIndex].value;
    
    return (value != 'null' && value != '' && value != ' ');
}

function isEmpty(elm){
    var value = elm.value;
    return (value.length == 0);
}

function trim(str) {
   var temp = str;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   var obj = / +/g;
   temp = temp.replace(obj, " ");
   if (temp == " ") { temp = ""; }
   return temp;
}

Kandoo.getFieldLabel = function(frm, elm){
	var labels = DY.getTags('label', frm);
	var label;
    var id = (typeof elm == 'string') ? elm : DY.getElement(elm).id;
	for (var i = 0; i < labels.length; i++){
		if (DY.getAttribute(labels[i], 'for') == id) {
			label = labels[i];
			break;
		}
	}

	return label;    
}

Kandoo.getFieldLabelText = function(frm, elm){
    var label = this.getFieldLabel(frm, elm);
	
	var node = label.firstChild;
	
	if (node.nodeType != 3){
		while(node.nodeType != 3) node = node.firstChild;
	}
	
	return node.nodeValue;
	
}

Kandoo.setErrorField = function(field){
	//this.errorField = DY.getElement(field);
	if (this.autoFillWrongFields) wrongFields[wrongFields.length] = getLabelFor(field);
}

Kandoo.getErrorField = function(){
	return this.errorField;
}

