function inicia_fechas() {
    var f = clona_fecha(new Date());
    f.setDate(f.getDate() + 2);
    $('#fecha_entrega').val(ffecha(f));
    f.setDate(f.getDate() + 1);
    $('#fecha_devolucion').val(ffecha(f));
}

function get_fecha(campo) {
    var fecha = $('#fecha_' + campo).val().split('/');

    if (fecha.length == 3)
        return new Date(fecha[2], fecha[1] - 1, fecha[0]);
    return clona_fecha(new Date());
}

function cal_entrega() {
    var campo = 'entrega';
    var fecha = get_fecha(campo);
    cal3(fecha.getMonth(), fecha.getFullYear(),
         "Start of rental", campo);
}

function cal_devolucion() {
    var campo = 'devolucion';
    var fecha = get_fecha(campo);
    cal3(fecha.getMonth(), fecha.getFullYear(),
         "End of rental", campo);
}

function nombre_mes(mes) {
    return ["January",
            "February",
            "March",
            "April",
            "May",
            "June",
            "July",
            "August",
            "September",
            "October",
            "November",
            "December"][mes];
}

function clona_fecha(f) {
    return new Date(f.getFullYear(), f.getMonth(), f.getDate());
}

function oculta_cal() {
    $('#calendarios').hide();
    $('#fondo_cal').hide();
}

function ffecha(f) {
    return nn(f.getDate()) + '/' +
           nn(f.getMonth() + 1) + '/' +
           f.getFullYear();
}

function dias_diferencia(a, b) {
    return (a.getTime() - b.getTime()) / (24 * 60 * 60 * 1000);
}

function sel_fecha(ano, mes, dia, campo) {
    var entrega = get_fecha('entrega');
    var devolucion = get_fecha('devolucion');
    var today = clona_fecha(new Date());
    today.setDate(today.getDate() + 2);
    var fecha = new Date(ano, mes, dia);
    if (fecha.getTime() < today.getTime())
        fecha = clona_fecha(today);
    var min_dias = 0;
    if ((fecha.getMonth() == 7-1 && fecha.getDate() >= 26) ||
        (fecha.getMonth() == 8-1 && fecha.getDate() <= 25))
        min_dias = 3;
    if (campo == 'entrega') {
        var dias = dias_diferencia(devolucion, fecha);
        if (dias < min_dias) {
            devolucion = clona_fecha(fecha);
            devolucion.setDate(devolucion.getDate() + min_dias);
            devolucion.setDate(devolucion.getDate());
        }
        entrega = fecha;
    } else {
        var dias = dias_diferencia(fecha, entrega);
        if (dias < min_dias) {
            alert('Minimum '+min_dias+' days for this season.');
            return;
            /*
            entrega = clona_fecha(fecha);
            if (fecha.getTime() == today.getTime())
                fecha.setDate(fecha.getDate() + min_dias);
            else
                entrega.setDate(fecha.getDate() - min_dias);
            */
        }
        devolucion = fecha;
    }
    $('#fecha_entrega').val(ffecha(entrega));
    $('#fecha_devolucion').val(ffecha(devolucion));
    oculta_cal();
}

function nn(n) {
    if (n < 10)
        return '0' + n;
    return n;
}

function cal(mes, ano, campo) {
    var entrega = get_fecha('entrega');
    var devolucion = get_fecha('devolucion');
    var s = '<div class="mes_calendario">';
    s += '<div class="nombre_mes">';
    s += '<div>' + nombre_mes(mes) + " " + ano + '</div>';
    s += '<div class="nombre_dia">Mo</div>';
    s += '<div class="nombre_dia">Tu</div>';
    s += '<div class="nombre_dia">We</div>';
    s += '<div class="nombre_dia">Th</div>';
    s += '<div class="nombre_dia">Fr</div>';
    s += '<div class="nombre_dia">Sa</div>';
    s += '<div class="nombre_dia">Su</div>';
    s += '</div><div class="dias_mes">';
    var d = new Date(ano, mes, 1);
    var today = clona_fecha(new Date());
    today.setDate(today.getDate() + 2);
    var final = mes_siguiente(mes, ano, 1);
    if (d.getDay() == 0)
        d.setDate(d.getDate() - 6);
    else if (d.getDay() > 0)
        d.setDate(d.getDate() - (d.getDay() - 1))
    while (d.getTime() < final.getTime()) {
        if (d.getMonth() < mes)
            s += '<div class="dias_semana_pasados"></div>';
        else if (d.getTime() < today.getTime())
            s += '<div class="dias_semana_pasados">' + d.getDate()  + '</div>';
        else {
            if (d.getTime() <= devolucion.getTime() &&
                d.getTime() >= entrega.getTime())
                s += '<div class="dias_semana_elegidos">';
            else
                s += '<div class="dias_semana">';
            s += '<a href="javascript:sel_fecha(' +
                 d.getFullYear() + ',' + d.getMonth() + ',' + d.getDate() +
                 ",'" + campo + "'" + ')">' + d.getDate() + '</a></div>';
        }
        d.setDate(d.getDate() + 1);
    }
    while (d.getDay() != 1) {
        s += '<div class="dias_semana_pasados"></div>';
        d.setDate(d.getDate() + 1);
    }
    s += '<div style="clear:both"></div></div></div>';
    return s;
}

function mes_anterior(mes, ano, n) {
    if (mes == 0) {
        mes = 11;
        ano--;
    } else
        mes--;
    if (n > 1)
        return mes_anterior(mes, ano, n - 1);
    return new Date(ano, mes, 1);
}

function mes_siguiente(mes, ano, n) {
    if (mes == 11) {
        mes = 0;
        ano++;
    } else
        mes++;
    if (n > 1)
        return mes_siguiente(mes, ano, n - 1);
    return new Date(ano, mes, 1);
}

function cal3(mes, ano, titulo, campo) {
    var s = '<iframe></iframe><div class="calendarios">';
    s += '<div class="define_calendario">' + titulo + '</div>';
    var m = mes_anterior(mes, ano, 3);
    s += '<a href="javascript:cal3(' + m.getMonth() + ',' +
         m.getFullYear() + ",'" + titulo + "','" + campo + "'" +
         ')" class="meses_anteriores"><span></span></a>';
    s += cal(mes, ano, campo);
    m = mes_siguiente(mes, ano, 1);
    s += cal(m.getMonth(), m.getFullYear(), campo);
    m = mes_siguiente(mes, ano, 2);
    s += cal(m.getMonth(), m.getFullYear(), campo);
    m = mes_siguiente(mes, ano, 3);
    s += '<a href="javascript:cal3(' + m.getMonth() + ',' +
         m.getFullYear() + ",'" + titulo + "','" + campo + "'" +
         ')" class="meses_siguientes"><span></span></a>';
    s += '<div style="clear:both"></div></div>';
    var c = $('#calendarios');
    c.html(s);
    if (c.css('display') == 'none') {
        $('#fondo_cal').show();
        c.show();
        c.focus();
    }
}
