var qdiferencia = -150;
var tMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var IE = (document.all) ? true : false;
var mac = (navigator.userAgent.indexOf('Mac') != -1)?true:false;
var today = new Date();
var day = today.getDate();
var month = today.getMonth();
var yYear = today.getYear();
if (yYear < 2000) { yYear += 1900; }
var qDiaEsHoy = parseInt(day,10);

var nDays=365;
var fLimite= new Date (today.getTime()+(nDays*3600*24*1000));
var dayLimite = fLimite.getDate();
var monthLimite = fLimite.getMonth();   /*es el mes limite q se puede asignar */
var yearLimite = fLimite.getYear();
if (yearLimite < 2000) { yearLimite += 1900; }

var qDiaEsHoyC;         /*indica el dia q estamos actualmente*/
var qMesEsHoyC;
var mes_today;          /*indica el mes q estamos actualmente*/
var anio_today;         /*indica el a.o en el q nos encontramos*/
var anioSel;
var wCeldas = parseInt((196/7),10);


function isBisiesto(yYear)
{   mod = (yYear%4);
    if (mod == 0)   /* es bisiesto */
        return true;
    return false;
}

function cerrarCalendario() {
    document.getElementById('lCalendar').style.visibility = "hidden";
}


//Funciones para obtener la posicion exacta del objeto.
function getRealLeft(objeto) {
    xPos = objeto.offsetLeft;
    tempEl = objeto.offsetParent;
    while (tempEl != null) {
        xPos += tempEl.offsetLeft;
        tempEl = tempEl.offsetParent; 
    }
    return xPos;
}


function getRealTop(objeto) {
    yPos = objeto.offsetTop;
    tempEl = objeto.offsetParent;
    while (tempEl != null) {
        yPos += tempEl.offsetTop;
        tempEl = tempEl.offsetParent;
    }
    return yPos;
}


function dibujar(qDiaEsHoy, qMesEsHoy, mes, aYear) {   
    qDiaEsHoyC = qDiaEsHoy;
    qMesEsHoyC = qMesEsHoy;

    mes_today = mes;
    anioSel = aYear;
    anio_today = anioSel;
    redibujar(mes);
}


/*
    Function: posInicio
    Descripcion: Nos da la posicion de inicio del mes de 1 para el Luneas a 7 para el Domingo
*/
function posInicio(mes,anio_today) {  
    //Del mes actual cogemos el dia 1
    var posIni = new Date(anio_today, mes, 1);

    //Devolvemos el dia de la semana
    var posicion = parseInt(posIni.getDay(),10);
    if (posicion == 0) 
        return 7;
    else
        return posicion;
}


//Genera el HTML de la Cabecera del calendario.
//Nombre del mes y el año y los enlaces de navegación
function cabeceraCalendario(mes) {

    var strHTML = '<table width="100%" cellspacing="0" cellpadding="0" border="0">';
    strHTML += '<tr class="calendarHead">';

    //Comprobamos si podemos ir hacia atras.
    strHTML += '<td class="calNav">';
    if ((mes > month) || (anio_today > yYear))
        {
        strHTML += '<a href="javascript:redibujar('+(mes-1)+')"><img src="/images/lt.gif" alt="&lt;"></a>';
        }
    else
        {
        strHTML += '&nbsp;';
        }
    strHTML += '</td>';

    //Nombre del mes
    strHTML += '<td>'+tMeses[mes] + ' ' + anio_today + '</td>';

    //Comprobamos si podemos ir hacia delante
    //if (dateCald < dateCaldLimit) {
    strHTML += '<td class="calNav">';
    if ((mes<monthLimite) || (anio_today < yearLimite))
        {
        strHTML += '<a href="javascript:redibujar('+(mes+1)+')"><img src="/images/gt.gif" alt="&gt;"></a>';
        }
    else
        {
        strHTML += '&nbsp;';
        }
    strHTML += '</td>';
    
    //Cerramos la tabla
    strHTML += '</tr></table>';
    return strHTML;
}


//Dibuja el pie del calendario con el enlace para cerrar
function pieCalendario() {
var objCalendar = '<table width="100%" cellspacing="0" cellpadding="0" border="0">';
    objCalendar += '<tr><td class="calPieSep"></td></tr>';
    objCalendar += '<tr class="calPie">';
    objCalendar += '<td class="calLatSpacer">&nbsp;</td>';
    objCalendar += '<td><a href="javascript:consecutivos()">' + strConsecutivos + '</a></td>';
    //objCalendar += '<td><a href="javascript:cerrarCalendario()">' + strCerrar + '</a></td>';
    objCalendar += '<td class="calLatSpacer">&nbsp;</td></tr>';
    objCalendar += "</table>";
    return objCalendar;
}

function redibujar(mes) {
    //Ajustamos el mes de 0..11
    if (mes > 11) { anio_today++; mes = 0; }
    if (mes < 0) { anio_today--; mes = 11; }

    //Actualizamos el formulario ...
    document.fPresupuesto.yr.value = anio_today;
    document.fPresupuesto.mo.value = mes+1;
    
    //Detrminamos la posicion de inicio del dia 1
    var iFor = posInicio(mes,anio_today);

    //Comprobamos si el mes es bisiesto o no!
    if (isBisiesto(anio_today))
        {
         tMonth[1]=29;
        }
    else 
        {
        tMonth[1] = 28;
        }

    var nfilas = parseInt((tMonth[mes]-(8-iFor))/7+1,10);
    var rfilas = parseInt((tMonth[mes]-(8-iFor))%7,10); /*numero restante de dias a pintar*/
    if (rfilas > 0) { nfilas ++; }

    /*numero de veces q se tiene q repetir*/
    var nVeces = (nfilas*7);
    var cCalendar = '<table border=0 width=100% cellpadding=0 cellspacing=0 class="mainTable">';
    var cDias = 1;

    //Calculemos la fecha de inicio en UnixStyle ;)
    var D = new Date(anio_today, mes, 1);
    var unixInicioDia=Math.floor(D.valueOf() / 86400000);

    var dias = document.fPresupuesto.dias.value;
    var primerDia = document.fPresupuesto.primerdia.value;

    for (var ind=1;ind<=nVeces;ind++) {
        //Inicio de semana?
        if ((ind%7) == 1) 
            cCalendar += '<tr class="weekRow"><td class="calLatSpacer">&nbsp;</td>';

        cCalendar += "<td id='cell"+ind+"' align=center "
        if ( (ind >= iFor) && (cDias <= tMonth[mes]) ) {
            //Hay dia en esta casilla

            //Es viernes?
            if ((ind%7)!=4) 
                cCalendar += ' class="diaDis">'+ cDias;
            else
                 {
                //Comprobamos si nos pasamos del limite o no!
                if ( (mes==monthLimite) && (anio_today==yearLimite) )
                    {
                    //Cuidado ... estamos en el ultimo mes!
                    if (cDias > dayLimite)
                        {
                        //Nos pasamos del limite lo metemos como inactivo
                        cCalendar += ' class="diaDis">'+ cDias;
                        }
                    else 
                        {
                        //No nos pasamos ... lo ponemos como seleccionable
                        cCalendar += ' onClick="marcaDia(this,'+ (unixInicioDia+cDias) +');"';
                        if (dias.indexOf(""+(unixInicioDia+cDias))!=-1)
                            cCalendar += ' class="diaON">';
                        else
                            cCalendar += ' class="diaOFF">';
                        cCalendar += cDias;
                        }
                    }
                else
                    {
                    if ((mes > monthLimite) && (anio_today >= yearLimite)) {
                        //Nos podemos pasar de largo, o no? Por si acaso
                        cCalendar += ' class="diaDis">'+ cDias;
                    }
                    else {
                        //No nos pasamos ... pero hay que comprobar si estamos en el pasado!
                        //if ( (parseInt(cDias,10)<parseInt(qDiaEsHoyC,10)) && (mes==qMesEsHoyC) && (anio_today==yYear)) {
                        if (primerDia>unixInicioDia+cDias) {
                            //Opps ... es una fecha del pasado.
                            cCalendar += ' class="diaDis">'+ cDias; 
                        }
                        else {
                            //Bueno, por fin tenemos una fecha valida!
                            cCalendar += ' onClick="marcaDia(this,'+(unixInicioDia+cDias)+');"';
                            if (dias.indexOf(""+(unixInicioDia+cDias))!=-1)
                                cCalendar += ' class="diaON">';
                            else
                                cCalendar += ' class="diaOFF">';
                            cCalendar += cDias;
                        }
                }
            }
            }
            cDias++;
        }
        else {
            //No hay dia en esta casilla
            cCalendar +=' class="diaEmpty">&nbsp;'; 
        }
        cCalendar +="</td>";

        //Cerramos la fila 
        if ((ind%7) == 0) {
            cCalendar += '<td class="calLatSpacer">&nbsp;</td></tr>';
        }
    }
    cCalendar += "</tr>";
    cCalendar += "</table>";

    var qMuestro =
        cabeceraCalendario(mes) + //Cabecera del mes
        cabeceraDias + //Cabecera de dias de la semana
        cCalendar + //Calendario
        pieCalendario(); //Pie

    document.getElementById('lCalendar').innerHTML = qMuestro;
}

var aux_dia;        /*indica el dia q hemos seleccionado*/
var aux_mes;        /*indica el mes seleccionado*/
var aux_anio;       /*indica el ano seleccionado*/
var vDays; var vMonths; var vtxtDays; var vYears;



function openCalendar()
{
    var lLayer = document.getElementById('lCalendar');
    var cMonth = document.fPresupuesto.mo.value-1;
    var cyYear = document.fPresupuesto.yr.value; 
    var aux = ""+cMonth;
        

    /*var obj_aux = document.getElementById('calLink');
    var MiX = getRealLeft(obj_aux);
    var MiY = getRealTop(obj_aux);

    lLayer.style.left = MiX+5;
    if ((IE) && (mac)) { MiY += qdiferencia; }
    lLayer.style.top = MiY;
*/
    dibujar( qDiaEsHoy, month, cMonth, cyYear);
    //lLayer.style.visibility = (lLayer.style.visibility == "hidden")? "visible":"hidden";
    //lLayer.style.visibility = "visible";
}

function getDias(numDias) {
    var diaInicial = parseInt(document.fPresupuesto.primerdia.value,10);
    var listaDias = diaInicial;
    for(i=1; i<numDias; i++)
        listaDias = listaDias + ',' + (diaInicial+i*7);
    return listaDias;
}


function consecutivos() {
    document.fPresupuesto.dias.value = getDias(document.fPresupuesto.inserciones.value);
    redibujar(document.fPresupuesto.mo.value-1);
    printDayList();
}

function anchorCalendario()
{
    var lLayer = document.getElementById('lCalendar');
    var anchorPoint = document.getElementById('calendarioAnchor');

    if ((lLayer) && (anchorPoint))
        {
        anchorPoint.appendChild(lLayer);
        }
}
