function cargarCalendarioFerries() {

    var calendarioPulsado = false;

    $('#datePickerIdaFerry').datepicker({
        minDate: '0',
        maxDate: '+1Y',
        altField: '#fechaIdaFE',
        altFormat: 'dd/mm/yy',
        numberOfMonths: numCalendarios,
        buttonImage: dominioCDN + '/' + aplicacion + '/images/ico_calendario2.gif',

        onClose: function() {
            var strFechaIda = $("#fechaIdaFE").val();
            var strFechaVuelta = $("#fechaVueltaFE").val();
            var datePickerVuelta = $("#datePickerVueltaFerry");

            var oDateIda = strToDate(strFechaIda, 1);
            var oDateVuelta = strToDate(strFechaVuelta, 1);

            if ((oDateIda > oDateVuelta) || (strFechaVuelta == '')) {
                datePickerVuelta.datepicker('setDate', addDays(oDateIda, 1));
                actualizaDiasTrayecto(oDateIda, addDays(oDateIda, 1));
            }
            else {
                actualizaDiasTrayecto(oDateIda, oDateVuelta);
            }
            datePickerVuelta.datepicker('option', 'minDate', oDateIda);
            calendarioPulsado = true;
        }
    });

    $("#datePickerVueltaFerry").datepicker({
        minDate: '0',
        maxDate: '+1Y',
        altField: '#fechaVueltaFE',
        altFormat: 'dd/mm/yy',
        numberOfMonths: numCalendarios,
        buttonImage: dominioCDN + '/' + aplicacion + '/images/ico_calendario2.gif',
        
        onClose: function() {
            var strFechaIda = $("#fechaIdaFE").val();
            var strFechaVuelta = $("#fechaVueltaFE").val();
            var datePickerIda = $("#datePickerIdaFerry");
            
            var oDateIda = strToDate(strFechaIda, 1);
            var oDateVuelta = strToDate(strFechaVuelta, 1);

            if ((strFechaIda == ''))
                datePickerIda.datepicker('setDate', oDateVuelta);

            actualizaDiasTrayecto(oDateIda, oDateVuelta);
            calendarioPulsado = true;
        }
    });
    
    //Configuración calendario    
    $("#datePickerIdaFerry").datepicker("option", "beforeShowDay", nationalDays);
    $("#datePickerVueltaFerry").datepicker("option", "beforeShowDay", nationalDays);

    $("#datePickerIdaFerry").datepicker('setDate', '0');
    $("#datePickerVueltaFerry").datepicker('setDate', '0');
    
    // añadimos el atributo 'alt' a las imagenes (iconos) a la derecha del datePicker
    $("#divFechaIdaFerry #tdFechaIda img").attr('alt', 'Selección fecha ida');    
    $("#divFechaVueltaFerry #tdFechaVuelta img").attr('alt', 'Selección fecha vuelta');    
}


function nationalDays(date) {
    for (i = 0; i < natDaysTrn.length; i++) {
        if (date.getDate() == natDaysTrn[i][0] && (date.getMonth() + 1) == natDaysTrn[i][1] && date.getFullYear() == natDaysTrn[i][2]) {
            return [true, natDaysTrn[i][3], natDaysTrn[i][4]];
        }
    }
    return [true, ''];
}

function actualizaDiasTrayecto(oFechaIda, oFechaVuelta) {
    natDaysTrn = [[oFechaIda.getDate(), oFechaIda.getMonth() + 1, oFechaIda.getFullYear(), 'ui-state-boarding-day', 'Fecha ferry de ida'],
               [oFechaVuelta.getDate(), oFechaVuelta.getMonth() + 1, oFechaVuelta.getFullYear(), 'ui-state-boarding-day', 'Fecha ferry de vuelta']];
}


function cargaEdades(idSel, edadSel) {
    var objSel = document.getElementById(idSel);

    if (objSel.options.length < 2) 
    {
        cargaOptionsEdades(objSel, edadSel);
    }
}

function cargaOptionsEdades(objSel, edadSel) {
    objSel.remove(0);
    for (i = 1; i < 100; i++) {
        insertOption(objSel, i, i);
    }
    objSel.selectedIndex = edadSel - 1;
}

function insertOption(sel, text, value) {
    var opt = document.createElement('option');
    opt.text = text;
    opt.value = value;
    try {
        sel.add(opt, null); // standards compliant
    }
    catch (ex) {
        sel.add(opt); // IE only
    }
}


function esCadenaVacia(s) {
    return ((s == null) || (s.length == 0) || (s == ""))
}

function esDigitoNumerico(c) {
    return ((c >= "0") && (c <= "9"))
}

function esNumeroEntero(s) {
    var i;

    if (esCadenaVacia(s))
        return false;

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);

        if (!esDigitoNumerico(c)) return false;
    }

    return true;
}

// Valida el formulario de la petición
function validaFormFerry() {
    var msg = "";
    var origen = $('#formPeticionSoloFerry #PuertoOrigenFE').val();
    var destino = $('#formPeticionSoloFerry #PuertoDestinoFE').val();
    var adultos = parseInt($('#formPeticionSoloFerry #adultos').val(), 10);
    var menores = parseInt($('#formPeticionSoloFerry #menores').val(), 10);
    var bebes = parseInt($('#formPeticionSoloFerry #bebes').val(), 10);
    var tipoVehiculo = $('#formPeticionSoloFerry #tipoVehiculoFE').val();


    // si el cliente ha seleccionado un vehiculo, comprobamos si ha introducido un valor numerico en los campos de altura y longitud
    if (tipoVehiculo != 0) {
        var altura = $('#formPeticionSoloFerry #alturaVehiculosFE').val();
        var longitud = $('#formPeticionSoloFerry #longitudVehiculosFE').val();

        // comprobamos que la altura y longitud del vehiculo sean caracteres numéricos
        if (!esNumeroEntero(altura)) {
            msg += "\n- " + literalsFe[6];
        }

        if (!esNumeroEntero(longitud)) {
            msg += "\n- " + literalsFe[7];
        }
    }
    // Comprobamos que la ida y la vuelta sean diferentes
    if (msg == "" && (origen == destino))
        msg += "\n- " + literalsFe[9];

    // Al menos tiene que haber un adulto
    if (adultos == 0)
        msg += "\n- " + literalsFe[10];

    // Mostramos mensaje de error
    if (msg != "") {
        msg = literalsFe[8] + ":\n" + msg;
        alert(msg);
        return false;
    } else {
        return true;
    }
}

// Oculta o muestra la fecha de vuelta
function soloIdaFerry(selected) {
    if (selected)
        $("#formPeticionSoloFerry #divFechaVueltaFerry").slideUp("normal")
    else
        $("#formPeticionSoloFerry #divFechaVueltaFerry").slideDown("normal")
}

// Valida si el input proporcionado es un entero válido.
// En caso de error lo incializa al valor por defecto.
function validaEntero(objecte, defaultValue) {
    valor = parseInt(objecte.value, 10)

    //Compruebo si es un valor numérico 
    if (isNaN(valor))
        objecte.value = defaultValue;
}

function strToDate(strFecha, tipo) {
    var anyo, mes, dia;

    switch (tipo) {
        case 1: //dd/MM/yyyy
            var aFecha = strFecha.split("/");
            dia = parseInt(aFecha[0], 10);
            mes = parseInt(aFecha[1], 10);
            anyo = parseInt(aFecha[2], 10);
            break;
        case 2: //yyyy-mm-dd
            var aFecha = strFecha.split("-");

            dia = parseInt(aFecha[2], 10);
            mes = parseInt(aFecha[1], 10);
            anyo = parseInt(aFecha[0], 10);
    }
    return new Date(anyo, mes - 1, dia);
}
