
	function validateForm(_form_,_data_) {

        if (!(_data_ instanceof Object))
            return false;

        for(var i in _data_) {
			
			switch (_data_[i]['type']) {
				case 'text':
					
		            if (!validateInput(i,_data_)) //text input
    	            	return false;
						
					break;
				case 'select':
					
					if (!validateSelect(i,_data_)) //checkField
    	            	return false;
						
					break;
			}
			
        }

        return true;
    }
	
	function validateSelect(_input_,_data_) {
		
		//alert("validar select");
		
		var vals = _data_[_input_];
	    if (vals instanceof Object) {
			
			var inpt = $(_input_);
			unfocused(inpt);
			
			if (!vals.allownull) {
				
				var val = $F(_input_);

				if (vals.different != null) {
					//alert(val+" == "+vals.different);
					if (''+val == ''+vals.different) {
						showmsg("Seleccione algún "+vals.name+", es obligatorio", vals.field+"_msg");
						
						focused(inpt);
						return false;
					} else {
						return true;
						}
					
				}
			}
		}
		
		return false;
	}

    function validateInput(_input_,_data_) {
        var d = _data_[_input_];
        if (d instanceof Object) {

            var vinput = $(_input_);
            var vvalue = $F(_input_);
			
			
            if (typeof(vinput) != 'object') {
				
                showmsg('El campo '+d.name+' no se encontro', d.field+"_msg");
                return false;

                }

            unfocused(vinput);

            if (!vvalue.length) {
				
				if (!d.allownull) {
	                focused(vinput);
    	            showmsg('El campo "'+d.name+'" es obligatorio', d.field+"_msg");
					return false;
				}
				
                return true;

            } else {
    			if (d.min != null  && vvalue.length < d.min) {

                    focused(vinput);
    				showmsg('Es necesario que el campo "'+d.name+'" tenga por lo menos '+d.min+' caracteres.', d.field+"_msg");

    				return false;

    			} else if (d.max != null  && vvalue.length > d.max) {

                    focused(vinput);
    				showmsg('El campo "'+d.name+'" no puede contener mas de '+d.max+' caracteres. Elimine '+(vvalue.length - d.max)+' caracteres', d.field+"_msg");

    				return false;

    			}

    			if (d.expresion != null) {

    				if (typeof(d.expresion) == 'string') {
    					var expresion = new RegExp(d.expresion);
    				} else {
    					var expresion = d.expresion;
    				}

    				if (expresion.exec(vvalue) == null) {
    					showmsg("Escriba correctamente el texto del campo \""+d.name+"\""+(d.format==null?"":" "+d.format), d.field+"_msg");

    					focused(vinput);
    					return false;
    				}
    			}
				
				deletemsg(d.field+"_msg");
                return true;
            }
        }
    }

	//Estas funciones deberian ser modificadas
	//para otros proyectos.
	function showmsg(msg, sp) {
		if (sp == null) {
	        $('principal_msg').innerHTML = msg;
		} else {
			$(sp).innerHTML = msg;
		}
	}

    function deletemsg(sp) {
        showmsg('', sp);
    }
	
	function deletemsg_all(_data_) {
	   if (!(_data_ instanceof Object))
            return false;

        for(var i in _data_) {
            showmsg('', _data_[i].field+'_msg');
        }
	}
	
	function focused(element) {

        style_memory[element.name] = savestyle(element,style_focus);
        changestyle(element,style_focus);

	}

    //Eliminar el halo
	function unfocused(element) {

        if (element == null)
            return;

        if (style_memory[element.name] != null) {
            changestyle(element, style_memory[element.name]);
        }

	}

    function unfocused_all(_data_) {

        if (!(_data_ instanceof Object))
            return false;

        for(var i in _data_) {
            unfocused($(i));
        }

    }

    function savestyle(element, styleObj) {

        if (!(styleObj instanceof Object))
            return;

        var r = new Object();
        for(var i in styleObj) {
            //alert('guardar stylo '+i+'='+element.style[i]);
            r[i] = element.style[i];
        }
        return r;
    }

    function changestyle(element, styleObj) {
        if (!(styleObj instanceof Object))
            return;

        for(var i in styleObj) {
            //alert('asignar estilo '+i+'='+styleObj[i]);
            element.style[i] = styleObj[i];
        }
    }
