function Date2Uunix(D) {
    return Math.floor(D.valueOf() / 86400000);
}

function Unix2Date(N) {
    with (D = new Date(N * 86400000)) {
        setMinutes(getMinutes());
    }
    return D;
}


function Date2ShortString(D) {
    return D.getDate() + '/' + (D.getMonth()+1) + '/' + D.getFullYear();
}

function DateItemCompare(d1, d2) {
  return d1-d2;
}


/*
    Function marcaDia
    Parametros:
        - Objeto: Objeto en el que hemos hecho click en el calendario.
        - Dia: Dia en formato "numerico" ... dias desde EPOCH
*/

function marcaDia(objeto,dia) {
    //Determinamos si el objecto sobre el que hemos hecho click esta seleccionado
    var seleccionado = objeto.className=='diaON';

    //Buscamos el input que contiene la lista de dias.
    var dias = document.fAnuncio.dias;

    if (seleccionado)
        {
        //El dia estaba seleccionado ... le asignamos el estilo de no seleccionado.
        objeto.className='diaOFF';

        //De la lista de dias si existe ... buscamos el dia en cuestion y lo quitamos.
        if (dias)
            {
            diasList = dias.value.split(',');
            dias.value='';
            for(i=0;i<diasList.length;i++)
                {
                if (diasList[i]!=dia)
                    {
                    if (dias.value=='')
                        dias.value=diasList[i];
                    else
                        dias.value=dias.value+','+diasList[i];
                    }
                }
            }
        }
    else
        {
        //El dia estaba NO seleccionado ... le asignamos el estilo de seleccionado.
        objeto.className='diaON';

        //A la lista de dias ... añadimos el nuevo dia y la ordenamos por fecha
        if (dias)
            {
            if (dias.value!='')
                dias.value=dias.value + ',' +dia;
            else
                dias.value=dia;
    
            diasList = dias.value.split(',');
            diasList.sort(DateItemCompare);
            dias.value = diasList.join(',');
            }
        }

    //Finalmente si existe HTML con la lista de días lo actualizamos
    printDayList();
}


function marcaFin(objeto,dia) {
    //Determinamos si el objecto sobre el que hemos hecho click esta seleccionado
    var seleccionado = objeto.className=='diaFinON';

    //Buscamos el input que contiene la lista de dias.
    var dias = document.fAnuncio.dias;

    if (seleccionado)
        {
        //El dia estaba seleccionado ... le asignamos el estilo de no seleccionado.
        objeto.className='diaFinOFF';
        objeto.nextSibling.className='diaFinOFF';

        //De la lista de dias si existe ... buscamos el dia en cuestion y lo quitamos.
        if (dias)
            {
            diasList = dias.value.split(',');
            dias.value='';
            for(i=0;i<diasList.length;i++)
                {
                if ((diasList[i]!=dia) && (diasList[i]!=(dia+1)))
                    {
                    if (dias.value=='')
                        dias.value=diasList[i];
                    else
                        dias.value=dias.value+','+diasList[i];
                    }
                }
            }
        }
    else
        {
        //El dia estaba NO seleccionado ... le asignamos el estilo de seleccionado.
        objeto.className='diaFinON';
        objeto.nextSibling.className='diaFinON';

        //A la lista de dias ... añadimos el nuevo dia y la ordenamos por fecha
        if (dias)
            {
            if (dias.value!='')
                dias.value=dias.value + ',' +dia+','+(dia+1);
            else
                dias.value=dia+','+(dia+1);
    
            diasList = dias.value.split(',');
            diasList.sort(DateItemCompare);
            dias.value = diasList.join(',');
            }
        }

    //Finalmente si existe HTML con la lista de días lo actualizamos
    printDayList();
}


function limpiaDias() {
    document.fAnuncio.dias.value='';
    redibujar(document.fAnuncio.mo.value-1);
    printDayList();
}


/*
    Function printDayList
    Descripcion: Actualiza las diferentes elementos HTML que describen la lista de
    días seleccionados, asi como los mensajes que indican si la selección de días
    es correcta o bien está imcompleta por la falta o sobra de días seleccionados.
    Se encarga tambien la funcion de mostrar/ocultar el boton que permiti continuar
    con la siguiente pantlla.
*/
function printDayList() {
    var listaDias = document.getElementById('listaDias');
    var labDayCounter = document.getElementById('labDayCounter');
    var resEcLabCounter = document.getElementById('resEcLabCounter');
    var weekendCounter = document.getElementById('weekendCounter');
    var resECWeekendCounter = document.getElementById('resECWeekendCounter');
    var valoracionAmount = document.getElementById('valoracionAmount');
    var resEcBase = document.getElementById('resEcBase');
    var resEcTotal = document.getElementById('resEcTotal');

    var dias = document.fAnuncio.dias;
    var tarLab = document.fAnuncio.tarLab.value;
    var tarFin = document.fAnuncio.tarFin.value;
    var palabras  = document.fAnuncio.palabras.value;
    var listaDiasClean = document.getElementById('listaDiasClean');

    if (listaDias) {
        if (dias.value=='')
            {
            diasCount = 0;
            listaDias.innerHTML='Ninguno';
            labDayCounter.innerHTML='Ninguno';
            resEcLabCounter.innerHTML='0';
            weekendCounter.innerHTML='Ninguno';
            resECWeekendCounter.innerHTML='0';
            valoracionAmount.innerHTML = '0,00 &euro;';
            resEcBase.innerHTML = '0,00';
            resEcTotal.innerHTML = '0,00';
            listaDiasClean.style.visibility = 'hidden';
            }
        else
            {
            diasList = dias.value.split(',');
            diasCount = diasList.length;
            labDayCount = 0;
            weekendDayCount = 0;
            
            var D=Unix2Date(diasList[0]);
            var dow=D.getDay();
            if (dow==0) {
                className='weekendDay';
                weekendDayCount++;
            }
            else if (dow==6) {
                className='weekendDay';
                weekendDayCount++;
            }
            else {
                className='labDay';
                labDayCount++;
            }
            
            var cadenaDias = '<span class="'+className+'">'+Date2ShortString(D) + '</span>';
            for(i=1;i<diasCount;i++) {
                D=Unix2Date(diasList[i]);
                dow=D.getDay();
                if (dow==0) {
                    className='weekendDay';
                }
                else if (dow==6) {
                    className='weekendDay';
                    weekendDayCount++;
                }
                else {
                    className='labDay';
                    labDayCount++;
                }
                cadenaDias = cadenaDias + ', '+ '<span class="'+className+'">'+ Date2ShortString(D) + '</span>';
            }

            listaDias.innerHTML=cadenaDias;
            labDayCounter.innerHTML=labDayCount + ' x ' + tarLab + '&euro;';
            resEcLabCounter.innerHTML=labDayCount;

            weekendCounter.innerHTML=weekendDayCount + ' x ' + tarFin + '&euro;';
            resECWeekendCounter.innerHTML=weekendDayCount;

            base = Math.round((labDayCount*tarLab+weekendDayCount*tarFin)*palabras*100)/100;
            valoracionAmount.innerHTML =  base + '&euro;';
            resEcBase.innerHTML = base + '&euro;';
            resEcTotal.innerHTML = (Math.round(base*118)/100) + '&euro;'
            listaDiasClean.style.visibility = 'visible';
            }
    }
}


