
var nombresdias = new Array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado');
var nombresmeses = new Array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'); 
var mesActual;
var anyActual;

var diaAvui;
var mesAvui;
var anyAvui;

var diaTope = 0;
var mesTope = 0;
var anyTope = 0;

var hashDiesOcupats;
var hashDiesSeleccionats;
var hashDiesSeleccionatsInicials;

var tdMes;
var tdAny;

var campofecha;
var backgroundTaula;
var backgroundDiaDesactivat;
var backgroundTaulaSeleccionatInicial;
var colorDiaSeleccionatInicial;
var colorDiaDesactivat;
var backgroundTaulaSeleccionat;
var taulaDies;
var inputFecha;
var esMultipleSel;
var funcioExecutarAlTancar;

function posarDiaLimit(d, m, a) {
    diaTope = d;
    mesTope = m;
    anyTope = a;
}

function inicialitzarCalendari(nomCampData, esMultiple, valorInicialDates, diesOcupats, funcio) {

    var hoy = new Date();
    inicializarCalendario(hoy, nomCampData, esMultiple, valorInicialDates, diesOcupats, funcio);
}
function inicializarCalendario(fecha, nomCampData, esMultiple, valorInicialDates, diesOcupats, funcio) {
    //    alert('fecha: ' + fecha + '; nomCampData: ' + nomCampData + '; valorInicialDates: ' + valorInicialDates + '; diesOcupats: ' + diesOcupats + '; funcio: ' + funcio);
    funcioExecutarAlTancar = funcio;
    // hashDiesSeleccionats es un array associatiu on es guarden els dies seleccionats, amb la clau = aaaa-mm-dd y valor 1 o 0
    hashDiesSeleccionats = new Object();
    hashDiesSeleccionatsInicials = new Object();
    hashDiesOcupats = new Object();
    if (valorInicialDates != '') {
        dates = valorInicialDates.split(',');
        for (i = 0; i < dates.length; i++) {
            //                alert(dates[i]);
            hashDiesSeleccionats[dates[i]] = '1';
            hashDiesSeleccionatsInicials[dates[i]] = '1';
        }
    }
    if (diesOcupats != '') {
        dates = diesOcupats.split(',');
        for (i = 0; i < dates.length; i++) {
            //                alert(dates[i]);
            hashDiesOcupats[dates[i]] = '1';
        }
    }
    esMultipleSel = esMultiple;
    campofecha = nomCampData;
    //	if (location.search != '') {
    //	campofecha = location.search.substring(1);
    //	}

    // Cambiar posición del marco, si interesa
    divCalendario = document.getElementById('divCalendari');
    divCalendario.style.left = '0px';
    divCalendario.style.top = '0px';

    diaAvui = fecha.getDate();
    mesAvui = fecha.getMonth();
    anyAvui = fecha.getFullYear();
        
    mesActual = mesAvui;
    anyActual = anyAvui;
    // tdMes es el elemento HTML que tiene atributo id="nombremes". lo necesitamos para cambiar el nombre del mes
    tdMes = document.getElementById('nombremes');
    tdAny = document.getElementById('any');
    if (tdAny) {
        var textSelectAny = '';
        for (i = anyActual; i < (anyActual + 5); i++) {
            textSelectAny = textSelectAny + '<option value="' + i + '" ';
            if (i == anyActual) {
                textSelectAny = textSelectAny + ' selected="selected" ';
            }
            textSelectAny = textSelectAny + '>' + i + '</option>';
        }
    }
    
    taulaDies = document.getElementById('tabladias');
    if (opener) {
        inputFecha = opener.document.getElementById(campofecha);
    } else {
        inputFecha = document.getElementById(campofecha);
    }

    backgroundTaula = taulaDies.style.backgroundColor;
    // MODIFICAT JJC: Si posem 194, 194, 194 no es distingeix dels no seleccionats
//    backgroundTaulaSeleccionat = 'rgb(194,194,194)';
    backgroundTaulaSeleccionat = '#CC0000';
    backgroundTaulaSeleccionatInicial = 'rgb(64, 64, 64)';
    colorDiaSeleccionatInicial = 'rgb(240, 240, 240)';
    backgroundDiaDesactivat = backgroundTaula;
    colorDiaDesactivat = 'rgb(200, 200, 200)';
    var divHelp = document.getElementById('helplugares');
    if (divHelp) {
        divHelp.style.display = "none";
    }
    divHelp = document.getElementById('helptodo');
    if (divHelp) {
        divHelp.style.display = "none";
    }
    divHelp = document.getElementById('helpclub');
    if (divHelp) {
        divHelp.style.display = "none";
    }
    divCalendario.style.display = "";
    actualizarMesActual();
}

function mesAnterior() {
    // OJO: Mes es de 0 a 11
    if ((anyActual < anyAvui) || (anyActual == anyAvui && mesActual <= mesAvui)) {
        return;
    }
    mesActual--;
    if (mesActual < 0) {
        mesActual = 11;
	anyActual--;
    }
    actualizarMesActual();
}

function mesSiguiente() {
    mesActual++;
    if (mesActual > 11) {
        mesActual = 0;
        anyActual++;
    }
    actualizarMesActual();
}
function chgMes(mes){
    mesActual = mes;
    actualizarMesActual();
}
function chgAny(any){
    anyActual = any;
    actualizarMesActual();
}
function actualizarMesActual() {
    nuevafecha = new Date(); // Crear un nuevo objeto fecha
    nuevafecha.setFullYear(anyActual); // Poner el año que corresponda
    nuevafecha.setMonth(mesActual); // idem con el mes
    nuevafecha.setDate(1); // ponemos día 1 del mes

    diaSemanaInicial = nuevafecha.getDay() - 1; // getDay devuelve día de la semana de 0 (domingo) a 6 (sábado) y nosotros queremos ver de Lunes a Domingo
    if (diaSemanaInicial < 0) {
        diaSemanaInicial = 6;
    }
    // Poner el valor dentro de los elementos html correspondientes
    //tdMes.innerHTML = nombresmeses[mesActual];
    selectMes = document.getElementById('month');
    if (selectMes) {
        for (var i = 0; i < 12 && i < selectMes.options.length; i++) {
            if (mesActual == selectMes.options[i].value) {
                selectMes.options[i].selected = 'selected';
                break;
            }
        }
    }
    if (tdAny && tdAny.options) {
        //            tdAny.innerHTML = anyActual;
        for (i = 0; i < tdAny.options.length; i++) {
            if (anyActual == tdAny.options[i].value) {
                tdAny.options[i].selected = 'selected';
                break;
            }
        }
    }
    crearTaulaDies();	
}

var losdias = new Array('L', 'M', 'X', 'J', 'V', 'S', 'D');
function crearTaulaDies() {
    while (taulaDies.rows.length > 0) {
        taulaDies.deleteRow(0);
    }

    // Primero insertamos la fila con los nombres de los días
    tr = taulaDies.insertRow(-1);
    for (d = 0; d < 7; d++) {
        td = tr.insertCell(-1);
        td.innerHTML = losdias[d];
        td.className = "tdcalendartit";
    }

    // Ahora una fila por cada semana
    dia = 1;
    diasemana = 0;
    var mesReal = mesActual + 1;
    for (s = 0; s < 6; s++) {
        tr = taulaDies.insertRow(-1);
        for (d = 0; d < 7; d++) {
            td = tr.insertCell(-1);
            if (diasemana < diaSemanaInicial) {
                td.setAttribute('sel', '0');
                td.innerHTML = '';
                diasemana++;
            }else{
                var clauDies = crearClauDies(anyActual, mesReal, dia);
                esOcupat = hashDiesOcupats[clauDies];
                if (!esOcupat || esOcupat != '1') {
                    esOcupat = '0';
                }
                // Mirar si el dia es troba a hashDiesSeleccionatsInicials per desactivar onclick
                seleccionatInicial = hashDiesSeleccionatsInicials[clauDies];
                if (!seleccionatInicial || seleccionatInicial != '1') {
                    seleccionatInicial = '0';
                }
                // Mirar si el dia es troba a hashDiesSeleccionats per posar '0' o '1'  l'atribut sel

                seleccionat = hashDiesSeleccionats[clauDies];
                if (seleccionat == '1') {
                    td.style.backgroundColor = backgroundTaulaSeleccionat;
                } else {
                    seleccionat = '0';
                }

                td.setAttribute('sel', seleccionat);
                if (esOcupat == '1' ||  
                    anyActual < anyAvui ||
                    (anyActual == anyAvui && 
                    (mesActual < mesAvui || (mesActual == mesAvui && dia < diaAvui) ) ) ||
                    (diaTope != 0 && 
                    (anyActual > anyTope ||
                    (anyActual == anyTope && 
                    (mesReal > mesTope || (mesReal == mesTope && dia > diaTope) ) ) ) )   ) {
                        td.style.backgroundColor = backgroundDiaDesactivat;
                        td.style.color = colorDiaDesactivat;
                        td.innerHTML = '' + dia;
                }
                else {
                    if (dia > 31 || 
                        (dia > 30 && 
                        (mesReal == 2 ||mesReal == 4 ||mesReal == 6 ||mesReal == 9 ||mesReal == 11) ) || 
                        (dia > 28 && mesReal == 2 && (anyActual % 4) != 0) ||
                        (dia > 29 && mesReal == 2)) {
                        td.innerHTML = '';
                    }
                    else {
                        td.innerHTML = '' + dia;
                        td.id = '_' + dia;
                        if (seleccionatInicial != '1') {
                            td.onclick = function() {
                                seleccionarDia(this);
                            };
//                            td.onclick = "seleccionarDia(this);";
//                            td.onmouseover = canviarCursorPointer;
//                            td.onmouseout = canviarCursorNormal;
                        }
                        else {
                            td.style.backgroundColor = backgroundTaulaSeleccionatInicial;
                            td.style.color = colorDiaSeleccionatInicial;
                        }
                    }
                }
                dia++;
            }
        }
        if (dia > 31 || 
            (dia > 30 && 
            (mesReal == 2 ||mesReal == 4 ||mesReal == 6 ||mesReal == 9 ||mesReal == 11) ) || 
            (dia > 28 && mesReal == 2) ) {
            break;
        }
    }
}
function crearClauDies(any, mes, dia) {
    var clau = '' + any + '-';
    if (mes > 9) {
        clau = clau + '' + mes + '-';
    } else {
        clau = clau + '0' + mes + '-';
    }
    if (dia > 9) {
        clau = clau + '' + dia;
    } else {
        clau = clau + '0' + dia;
    }
    return clau;
}
function seleccionarDia(elem) {
    if (esMultipleSel) {
        mostrarDia(elem);
    } else {
        mesActual = parseInt(mesActual);
    	var mesReal = mesActual + 1;
        if (mesReal < 10) {
            mesReal = '0' + mesReal;
        }
    	var diaReal = parseInt(elem.innerHTML);
        if (diaReal < 10) {
            diaReal = '0' + diaReal;
        }
        inputFecha.value = diaReal + '-' + mesReal + '-' + anyActual;
        if (funcioExecutarAlTancar == 'dataCalendariSeleccionada') {
            dataCalendariSeleccionada(diaReal, mesReal, anyActual);
        }
//        alert('abans tancarCalendari: ' + inputFecha.value + '; inputFecha.name: ' + inputFecha.name);
        tancarCalendari();
    }
}

function mostrarDia(elem) {
    dia = elem.innerHTML;
    if (dia == '') {
        return;
    }
    // Modificat per permetre seleccionar dies de diferents mesos (OPCIONAL: en alguns casos voldrem seleccionar nomes dies d'un mes)
    var clauDies = crearClauDies(anyActual, mesActual + 1, dia);
    seleccionat = hashDiesSeleccionats[clauDies];
    if (seleccionat == '1') {
        elem.style.backgroundColor = backgroundTaula;
        hashDiesSeleccionats[clauDies] = '0';
        elem.setAttribute('sel', '0');
    }
    else {
        elem.style.backgroundColor = backgroundTaulaSeleccionat;
        hashDiesSeleccionats[clauDies] = '1';
        elem.setAttribute('sel', '1');
    }
}

function tancarCalendari() {
    diaTope = 0;
    mesTope = 0;
    anyTope = 0;
    divCalendario.style.visibility = 'hidden';
}
function cambiarPosicion(l, t) {
    divCalendario = document.getElementById('marco');
    divCalendario.style.left = l + 'px';
    divCalendario.style.top = t + 'px';

}

function seleccionarDates() {    
    if (!esMultipleSel) {
        tancarCalendari();
        return;        
    }
    posarDatesSeleccionades();    
    divCalendario.style.visibility = 'hidden';
    if (funcioExecutarAlTancar == 'buscarAgenda') {
        buscarAgenda(datesSeleccionades);
    } else if (funcioExecutarAlTancar == 'posarDatesHome') {
        posarDatesHome(datesSeleccionades);
    } else if (funcioExecutarAlTancar.indexOf('posarDatesNewsletter')!=-1){
        if(funcioExecutarAlTancar == 'posarDatesNewsletterclient'){
            posarDatesNewsletter(datesSeleccionades, 'client');
        }else if(funcioExecutarAlTancar == 'posarDatesNewslettersuper'){
            posarDatesNewsletter(datesSeleccionades, 'super');
        }
    }else if(funcioExecutarAlTancar == 'seleccionarPublicacio'){        
        seleccionarPublicacio(datesSeleccionades);
    }
}

function posarDatesSeleccionades() {
    // Modificat per permetre seleccionar dies de diferents mesos 
    // Per poder-ho fer, no miro l'atribut sel sino l'array hashDiesSeleccionats 
    datesSeleccionades = '';
    for (var diasel in hashDiesSeleccionats) {
        seleccionat = hashDiesSeleccionats[diasel];
        if (seleccionat == '1') {
            if (datesSeleccionades != '') {
                datesSeleccionades += ',';
            }
            datesSeleccionades += diasel;
        }
    }
    inputFecha.value = datesSeleccionades;
    //    alert('Dates seleccionades: ' + datesSeleccionades + '; inputFecha.value: ' + inputFecha.value);
    diaTope = 0;
    mesTope = 0;
    anyTope = 0;
}

