/* Licuit Interactive SL /
/ www.licuit.com /
/ formValidator.js /
/ Created Sept, 2009
--------------------------------------- */


bilboostCore.formValidator = new Class({ 
        Extends: bilboostCore.bilboost,
		
	form : null,
	fields: [],
	defaultColor : "#ffffff",
	errorColor : "#ff9696",
	okColor : "#d0eb8f",
	validaciones : null,
	mascaras : null,
	
	
	initialize : function(formName){
		this.form = document[formName];
		this.validaciones = new bilboostCore.validationTypes();
		this.mascaras = new bilboostCore.maskTypes();
	},
	
	addField : function(fieldName, validacion, mascara, onBlur, onPostValidation){
		var tClass = this;
		var objField = {};
		
		objField.field = this.form[fieldName];
		objField.validated = null;
		
		if(validacion == undefined) validacion = {};
		objField.validacion = validacion;
		if(objField.validacion.obligatorio == undefined) objField.validacion.obligatorio = false;
		if(objField.validacion.tipo == undefined) objField.validacion.tipo = "simpleText";
		
		if(mascara == undefined) mascara = {};
		objField.mascara = mascara;
		objField.blurAction = onBlur;
		objField.postValidationAction = onPostValidation;
		
		this.configura(objField);


		objField.field.onfocus = function(){ tClass.focus(objField); }
		if(objField.validacion.tipo == "checkbox")
			objField.field.onchange = function(){	tClass.blur(objField); }
		else{ 
			objField.field.onblur = function(){	tClass.blur(objField); } 		
			}	

		this.fields.push(objField);
		
	},
	
	changeFieldParams : function(fieldName,validacion,mascara, onBlur, onPostValidation){
		var tClass = this;
		var objField;
		
		for(var a = 0 ; a < this.fields.length; a++){
        	if(this.fields[a].field == this.form[fieldName]){
				objField = this.fields[a];
				break;
			}
        }
		
		if(objField == undefined)
			return;
			
		if(validacion != null && validacion != undefined){
			for(var a in validacion){
				objField.validacion[a] = validacion[a]; 
			}
		}
		
		if(mascara != null && mascara != undefined){
			for(var a in mascara){
				objField.mascara[a] = mascara[a]; 
			}
		}
		
		if(onBlur != null && onBlur != undefined)
			objField.blurAction = onBlur;
			
		if(onPostValidation != null && onPostValidation != undefined)
			objField.postValidationAction = onPostValidation;
			
		objField.validated = null;		
	},
	
	limpiaTodo : function(){
		for( var a = 0; a < this.fields.length ; a++){
			this.fields[a].field.value = "";
			this.fields[a].field.checked = false;
			this.fields[a].validated = null;
			//this.fields[a].field.setStyle("background-color",this.defaultColor);
		}
	},
	
	compruebaTodo : function(){
		var todoOk = true;
		for( var a = 0; a < this.fields.length ; a++){
			if(this.fields[a].validated == null){
				if(!this.comprueba(this.fields[a]))
					todoOk = false;
			}else if(this.fields[a].validated == false)
				todoOk = false;
		}
		
		return todoOk;
	},
	
	focus : function(fieldObj){
		this.mascaras.startListener(fieldObj.field,fieldObj.validacion.tipo,fieldObj.mascara);
	},
	
	blur : function(fieldObj){
		this.mascaras.stopListener(fieldObj.field);
		
		this.mascaras.doMask(fieldObj.field, fieldObj.mascara);
		var ok = this.comprueba(fieldObj);
		
		if (fieldObj.validacion.tipo == "checkbox" && fieldObj.blurAction != undefined) 
			fieldObj.blurAction();	
		else if (ok == true && fieldObj.blurAction != undefined) 
			fieldObj.blurAction();	
	},
	
	configura : function(fieldObj){
		if(fieldObj.validacion.maxChars != undefined)
			fieldObj.field.maxLength = fieldObj.validacion.maxChars;
			
		if(fieldObj.mascara.digitos != undefined)
			fieldObj.field.maxLength = fieldObj.mascara.digitos;
		
		
	},
	
	comprueba : function(fieldObj){
		
		var ok = this.validaciones.validate(fieldObj.field, fieldObj.validacion);

		if (ok == true) {
			this.showValidation(fieldObj.field, true);
		}
		else {
			this.showValidation(fieldObj.field, false);
		}
		
		fieldObj.validated = ok;
		
		if(fieldObj.postValidationAction != undefined)
			fieldObj.postValidationAction();			
		
		return ok;
	},
	
	checkIdentity : function(fieldName1, fieldName2){
		if (this.form[fieldName1].value === this.form[fieldName2].value) {
			this.showValidation(this.form[fieldName2],true);
			return true;
		}else {
			this.showValidation(this.form[fieldName2],false);
			return false;
		}
	},
	
	getValidation : function(fieldName){
		var fieldObj = null;
		for (var a = 0; a < this.fields.length; a++) {
			if(this.fields[a].field.name == fieldName){
				fieldObj = this.fields[a];
				break;
			}
		}

		if(fieldObj != null)
			return fieldObj.validated;
		else
			return null;
	},
	
	setValidation : function(fieldName, value){
		var fieldObj = null;
		for (var a = 0; a < this.fields.length; a++) {
			if(this.fields[a].field.name == fieldName){
				fieldObj = this.fields[a];
				break;
			}
		}
		
		if(fieldObj != null)
			fieldObj.validated = value;
		
		this.showValidation(fieldObj.field,value);
	},
	
	showValidation : function(field,validation){
		if(validation == true)
			$(field).setStyle("background-color",this.okColor);
		else
			$(field).setStyle("background-color",this.errorColor);
	},
	
	showValidationImg : function(field,validation,type){
		if (validation == true) {
			if (type == 'fecha_dia' || type == 'fecha_mes') 
				$(field).setStyle("background-image", this.input1rightimg);
			else 
				$(field).setStyle("background-image", this.input2rightimg);
		}
		else {
			if (type == 'fecha_dia' || type == 'fecha_mes') 
				$(field).setStyle("background-image", this.input1wrongimg);
			else 
				$(field).setStyle("background-image", this.input2wrongimg);
		}
	}
			
				
});