/**
* ValidaciÃ³n de formularios
* Desarrollado por datapixels.net (www.datapixels.net)
* Atribuir las claves necesarias en this.clases en la clase de cada elemento a validar
* No es necesario llamar manualmente para cada formulario, se detectarÃ¡n todos los formularios de la pÃ¡gina y los observarÃ¡
* @requires librerÃ­a Jquery
*/
jQuery.fn.validacion = function() {

	var no_validados = new Array();
	var clase_error = "errorForm";
	var clases = new Array("vrequerido","vemail","vnumero","valfa","valfanumerico","vdecimal","vunosolo");
	var avisos = new Array("es","en");
	avisos["es"] = new Array("Es requerido","No es una dirección de correo válida","Debe estar formado solamente por dígitos","Debe estar formado solamente por letras","Debe estar formado por letras y números","Debe estar formado por un valor entero o decimal utilizando la coma como separador de decimales","Tienes que seleccionar uno o más valores en una única opción.");
	var idm = jQuery("html").attr("lang");
	var idioma = "es";
	var title = false; // Debe o no enseÃ±ar la etiqueta title como parte del error
	if (avisos[idm]) {
		idioma = idm;
	}
	var form_actual = "";
	
	return this.each(function() {
		form_actual = this;
 		jQuery(this).submit(function() {	
 			limpiarFormulario(this);
			no_validados = new Array();
 			return (buscaElementos(this)==false) ? false : true;
  		});
	});
	
	function buscaElementos(form) {
		$.each(clases,function(pos, clase) {
			jQuery("."+clase, form.elements).each(function() {
				var elemento = this;
				if (validar(elemento, clase, pos)==false) { 
					no_validados.push(elemento.name);
				}				
			});
		});
		return (no_validados.length>0) ? false : true;
	};	
	
	function limpiarFormulario(form) {
		jQuery("div ."+clase_error,form.elements).remove();
	};	
	
	function avisarError(elemento, pos_tipo) {
		var aviso = avisos[idioma][pos_tipo];
		var descripcion = aviso;
		if (elemento.title && title) {
			descripcion = elemento.title+". "+descripcion;
		}
		var id = elemento.id ? elemento.id : elemento.name;
		var id_insercion = id+"-error";
		if (jQuery("#"+id_insercion).attr("class")==clase_error) {
		} else {
			var insercion = "<div class=\""+clase_error+"\" id=\""+id_insercion+"\">"+descripcion+"</div>";
			jQuery(elemento).before(insercion);
		}
		jQuery("#"+id_insercion).fadeIn("slow");
	};
		
	function validar (elemento, tipo, pos_tipo) {
		var v_elemento = jQuery(elemento).val();
		var dev = true;
		if (typeof v_elemento=="undefined" || v_elemento==null) {
			v_elemento = "";
		}
		if (!isArray(v_elemento)) {
			v_elemento = new Array (v_elemento);
		} else {
			if (v_elemento.length==0) {
				if (!validarValor(elemento, tipo, pos_tipo, "")) {
					dev = false;
				}
			}
		}
		for (var i=0; i<v_elemento.length; i++) {
			if (!validarValor(elemento, tipo, pos_tipo, v_elemento[i])) {
				dev = false;
			}
		}		
		return dev;
	};
	
	function validarValor (elemento, tipo, pos_tipo, valor) {
		if (eval(tipo+"(valor)")==false) { 
			avisarError(elemento, pos_tipo);
			return false;
		} else {
			return true;
		}
	};

	function valfa (valor) {
		return (vrequerido(valor)==false) ? true : evaluar(valor, "^[0-9]+$");
	};
	
	function valfanumerico(valor) {
		return (vrequerido(valor)==false) ? true : evaluar(valor, "^[a-zA-Z]+$");
	};
	
	function vnumero(valor) {
		return (vrequerido(valor)==false) ? true : evaluar(valor, "^[0-9]+$");
	};
	
	function vdecimal(valor) {
		return (vrequerido(valor)==false) ? true : evaluar(valor, "^[0-9\,]+$");
	};
	
	function vrequerido (valor) {
		return !evaluar(valor, /^\s*$/);
	};
	
	function vemail(valor) {
		return (vrequerido(valor)==false) ? true : evaluar(valor, "^[a-z0-9]+([_\\.-][a-z0-9]+)*"+"@([a-z0-9]+([\.-][a-z0-9]{1,})+)*$");
	};
	
	function vunosolo(valor) {
		var cant = 0;
		jQuery(".vunosolo",form_actual).each(function() {
			var texto = jQuery(this).val();
			cant = (texto.search(/^\s*$/)>-1!=false) ? cant : cant+1;
		});
		return cant==1 ? true : false;
	};
	
	function evaluar(valor, expresion) {
		return valor.search(expresion)>-1 ? true : false;
	};
	
	function isArray(obj) {
		if (obj.constructor.toString().indexOf("Array") == -1) {
			return false;
		} else {
			return true;
		}
	};	
};

jQuery(function($) {
	$("form").validacion();
});