// validable.js
//Filtros
var filters = {
    requerido: function(el) {return ($(el).val() != '' && $(el).val() != -1);},
    email: function(el) {return /^[A-Za-z][A-Za-z0-9_]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/.test($(el).val());},
    numerico: function(el){return /^[0-9]*$/.test($(el).val());}};
// Extensiones
$.extend({
	stop: function(e){
        if (e.preventDefault) e.preventDefault();
        if (e.stopPropagation) e.stopPropagation();
    }
});
// Código
$(document).ready(function(){
	$("form.validable").bind("submit", function(e){
		if (typeof filters == 'undefined') return; 
	    $(this).find("input, textarea, select").each(function(x,el){
	    	$(el).removeClass("error");
	        if ($(el).attr("className") != 'undefined') {
		        var type = this.type;
			    var tag = this.tagName.toLowerCase(); // normalize case
			    var name = this.name;

				if (type == "radio") {
					// No hacemos nada
				    //if ($(el).is(':checked')) { alert("Falta check") };
				} else {
					$.each(new String($(el).attr("className")).split(" "), function(x, klass){
			        	// si la clase está en los filtros
			            if ($.isFunction(filters[klass])) {
			                if (!filters[klass](el))  {
			                	$(el).addClass("error");
			                }
						}
			        });
				}
	        }
	    });
		if ($(this).find(".error").size() > 0) {
			alert("Hay errores en el formulario, reviselo por favor");
			$.stop(e || window.event);
			return false;
		}
	    return true;
	});
	
	$("form.validable :input").bind("click", function() { 
		// Se ejecuta cuando se hace click sobre un elemento del formulario cuya clase es validable
        var type = this.type;
	    var tag = this.tagName.toLowerCase(); 
	    var name = this.name;
		$(this).removeClass("error");
		// Quitar el mensaje de enviado si es q lo tenía
		$("#mensaje_envio").html( "" );
		
	});

});

