/**
 * TODO Depurar JS y llevar a POO (este y todos los archivows js desarrollados por nosotros
 */

var filters = {
    requerido: function(el) {return ($(el).val() != '' && $(el).val() != -1);},
    email: function(el) {return /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test($(el).val())||(($(el).val() == null) || ($(el).val().length == 0));},
    telefono: function(el){return (/^[0-9]*$/.test($(el).val())&& ($(el).val().length == 9)) ||(($(el).val() == null) || ($(el).val().length == 0));},
    numerico: function(el){return /^[0-9]*$/.test($(el).val())||(($(el).val() == null) || ($(el).val().length == 0));},
    //tags: function(el){return /^[A-Za-z ,]{1,}$/.test($(el).val());},
    tags: function(el){return /^(^[A-ZÑÁÉÍÓÚÇa-zñáéíóúç*]{1,}( *)([A-ZÑÁÉÍÓÚÇa-zñáéíóúç ]*)(,{0,1}))+([A-ZÑÁÉÍÓÚÇa-zñáéíóúç, ]*)$/.test($(el).val());},
    url: function(el){return /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test($(el).val())||(($(el).val() == null) || ($(el).val().length == 0));},
    codpostal: function(el){return (/^[0-9]*$/.test($(el).val())&& ($(el).val().length == 5)) ||(($(el).val() == null) || ($(el).val().length == 0));}
};

var msj = {
    requerido: "es obligatorio",
    email: "ha de ser un e-mail válido",
    telefono: "ha de ser un telefono válido",
    codpostal: "ha de ser un código postal válido",
    url: "ha de ser una URL válida",
    pass: "ha de coincidir con la contraseña"
};

function mostrarError(el, klass){
    el.addClass('error');
    var id= '#'+el.attr('name');
    $(id).html('Este campo '+msj[klass]);
}
function limpiarError(el){
    el.removeClass('error');
    var id= '#'+el.attr('name');
    $(id).html('');
}

function enviarForm(form){
    var param='';
    var separador='';
    form.find("input, textarea, select").each(function(x,e){
        param += separador+e.name +'='+e.value;
        separador='&';
    })

    $.ajax({
        type: "POST",
        // TODO quitar linea siguiente y dejar--> url: form.attr('action'),
        url: form.action,
        data: param+"&ajax=1",
        beforeSend: function(){$("#request").html('enviando');},
        success: function(request){
            $("#request").html(request);
            $("#request").fadeIn('normal');
        }
    })

    return false;
}

$.extend({
	stop: function(e){
        if (e.preventDefault) e.preventDefault();
        if (e.stopPropagation) e.stopPropagation();
    }
});

function initValidacion(){
    $("form.validable").bind("submit", function(e){
        var valido = true;

        $('#errores ul').remove();
        $('#errores').append('<ul></ul>');

		if (typeof filters == 'undefined') return false;

	    $(this).find("input, textarea, select").each(function(x,el){
	        if ($(el).attr("className") != 'undefined') {
                var flagError = false;
		        $.each(new String($(el).attr("className")).split(" "), function(x, klass){
                    if(filters[klass] == 'pass'){
                        if($(el).val()!=$('#password').val()){
                            mostrarError($(el), klass);
                            flagError = true;
                        }
                    }
		            if ($.isFunction(filters[klass]))
		                if (!filters[klass](el)){
							mostrarError($(el), klass);
                            flagError = true;
						}else{
							if(!flagError) limpiarError($(el));
						}
		        });
	        }
	    });

		if ($(this).find(".error").size() > 0) {
			$.stop(e || window.event);
			valido = false;
		}else if($(this).attr("rel") == 'ajax'){
            $.stop(e || window.event);
            valido = false;
            enviarForm($(this));
        }

        return valido;
	});
}

$(document).ready(function(){
	$("form.validable").bind("submit", function(e){
        var valido = true;
        
        $('#errores ul').remove();
        $('#errores').append('<ul></ul>');

		if (typeof filters == 'undefined') return false;

	    $(this).find("input, textarea, select").each(function(x,el){
	        if ($(el).attr("className") != 'undefined') {
                var flagError = false;
		        $.each(new String($(el).attr("className")).split(" "), function(x, klass){
                    if(klass == 'pass'){
                        if($(el).val()!=$('#pass1').val()){
                            mostrarError($(el), klass);
                            flagError = true;
                        }
                    }
		            if ($.isFunction(filters[klass]))
		                if (!filters[klass](el)){
							mostrarError($(el), klass);
                            flagError = true;
						}else{
							if(!flagError) limpiarError($(el));
						}  
		        });
	        }
	    });

		if ($(this).find(".error").size() > 0) {
			$.stop(e || window.event);
			valido = false;
		}else if($(this).attr("rel") == 'ajax'){
            $.stop(e || window.event);
            valido = false;
            enviarForm($(this));
        } 

        return valido;
	});
});
