﻿jQuery.fn.rellenaComboJSON = function(url, parametros, dataValueField, dataTextField) {

    var laCombo = this;

    $.getJSON(url, parametros, function(respuesta) {

        var elementos = "<option></option>";
        $.each(respuesta, function(i, item) {
            elementos += '<option value="' + item[dataValueField] + '">' + item[dataTextField] + '</option>';
        });
        
        laCombo.empty().append(elementos);
    });
}

jQuery.fn.rellenaComboConNumeros = function(valorInicio, valorFin, intervalo, valorSeleccionado) {

    if (valorSeleccionado == null)
        valorSeleccionado = valorInicio;

    this.empty();

    var elementos = "";
    for (i = valorInicio; i <= valorFin; i += intervalo) {
        if (valorSeleccionado == i)
            elementos += '<option selected value=' + i.toString() + '>' + i.toString() + '</option>';
        else
            elementos += '<option value=' + i.toString() + '>' + i.toString() + '</option>';
    }
    this.append(elementos);
}

jQuery.fn.hacerScroll = function() {
    var posicion = this.offset().top - 100;
    $("html:not(:animated),body:not(:animated)").animate({ scrollTop: posicion }, 500);
}

jQuery.fn.calculaLetraNif = function() {
    var elDni = new String();
    var letras = new Array(23);
    letras[0] = "T";
    letras[1] = "R";
    letras[2] = "W";
    letras[3] = "A";
    letras[4] = "G";
    letras[5] = "M";
    letras[6] = "Y";
    letras[7] = "F";
    letras[8] = "P";
    letras[9] = "D";
    letras[10] = "X";
    letras[11] = "B";
    letras[12] = "N";
    letras[13] = "J";
    letras[14] = "Z";
    letras[15] = "S";
    letras[16] = "Q";
    letras[17] = "V";
    letras[18] = "H";
    letras[19] = "L";
    letras[20] = "C";
    letras[21] = "K";
    letras[22] = "E";
    letras[23] = "T";

    var dni = this.val();
    elDni = dni;
    elDni = elDni.toUpperCase();
    if (dni == "")
        return;

    var Aa;
    var hayLetras = false;

    for (i = 0; i < elDni.length; i++) {
        Aa = elDni.substr(i, 1);
        if (Aa.charCodeAt(0) < 48 || Aa.charCodeAt(0) > 57) {
            hayLetras = true;
            break;
        }
    }

    if (hayLetras) {
        return;
    }

    var Cif = Math.abs(parseInt(dni));
    var nDni = Math.abs(parseInt(Cif / 23) * 23 - Cif);
    var letraDni = letras[nDni];
    var resultado;

    resultado = elDni.toString() + letraDni;

    this.val(resultado);
}

jQuery.fn.proporcionarTamañoAUnAncho = function(ancho) {
    var nuevaImagen = new Image();
    nuevaImagen.src = this[0].src.toString();

    var anchoOriginal = nuevaImagen.width;
    var altoOriginal = nuevaImagen.height;

    var proporcion = anchoOriginal / ancho;
    this.width(ancho);
    this.height(altoOriginal / proporcion);
}

// Para poder validar fechas con formato dd/mm/yyyy
jQuery.validator.addMethod(
	"dateES",
	function(value, element) {
	    var check = false;
	    var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
	    if (re.test(value)) {
	        var adata = value.split('/');
	        var gg = parseInt(adata[0], 10);
	        var mm = parseInt(adata[1], 10);
	        var aaaa = parseInt(adata[2], 10);
	        var xdata = new Date(aaaa, mm - 1, gg);
	        if ((xdata.getFullYear() == aaaa) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == gg))
	            check = true;
	        else
	            check = false;
	    } else
	        check = false;
	    return this.optional(element) || check;
	}
);

jQuery.fn.Carrusel = function(parametros) {

    var carousel = $("#" + parametros.idCarrusel).find('ul:first');
    var btnSiguiente = $("#" + parametros.btnSiguiente);
    var btnAnterior = $("#" + parametros.btnAnterior);

    carousel.css('overflow', 'hidden');
    carousel.css('position', 'relative');
    carousel.css('list-style', 'none');
    carousel.css('white-space', 'nowrap');
    carousel.css('height', parametros.height);
    carousel.css('width', parametros.width);

    var items = carousel.find('> li');

    if (!parametros.esVertical) {
        items.each(function() {
            $(this).css('display', 'inline-block');
        });
    }
    else {
        items.each(function() {
            $(this).css('display', 'block');
        });
    }

    btnSiguiente.click(function() {

        if (parametros.esVertical == true) {
            var x = 0;
            items.each(function() {
                if (x == 0 && $(this).position().top > 1) x = $(this).position().top;
            });

            carousel.animate({ scrollTop: carousel.scrollTop() + x }, 'slow');
        } else {
            var x = 0;
            items.each(function() {
                if (x == 0 && $(this).position().left > 1) x = $(this).position().left;
            });

            carousel.animate({ scrollLeft: carousel.scrollLeft() + x }, 'slow');
        }

        return false;
    });

    btnAnterior.click(function() {

        if (parametros.esVertical == true) {
            var x = 0;
            items.each(function() {
                if ($(this).position().top < 0) x = $(this).position().top;
            });

            carousel.animate({ scrollTop: carousel.scrollTop() + x }, 'slow');
        } else {
            var x = 0;
            items.each(function() {
                if ($(this).position().left < 0) x = $(this).position().left;
            });

            carousel.animate({ scrollLeft: carousel.scrollLeft() + x }, 'slow');
        }

        return false;
    });
}

// Valor combo numeros mayor que cero
jQuery.validator.addMethod("noCero",
	function(value, element) {
	    if (value > 0)
	        return true
	    return false;
	}
);
// Fecha que no sea cadena vacia
jQuery.validator.addMethod("fechaNoVacia",
    function(value, element, param) {
        var fecha = $(param).val();
        if (fecha == "")
            return false;
        return true;
    }
);
//Numero telefono fijo o movil
jQuery.validator.addMethod("esTelefono",
    function(value, element) {
        var length = value.length;
        var telefono = /^\d+$/;
        return this.optional(element) || (length > 8 && telefono.test(value));
    }
);
