// vim: set foldmethod=marker: // vim: set nu: // vim: set nowrap: // vim: set sw=4: // vim: set tabstop=4: // id de los elementos del formulario html var _id_form = 'form_ant'; //id del formulario para el calendario var _id_mes = 'ant_mes'; //id del select meses var _id_anio = 'ant_anio'; //id del select anios var _id_titulo = 'mes_anio'; //id para el titulo del calendario // array con los nombres de meses var _month_of_year = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Setiembre','Octubre','Noviembre','Diciembre'); //fecha para la edicion mas antigua posible var _ini_date = new Date(); _ini_date.setFullYear(2009,3 - 1,20); // primera edición web var _primer_anio = _ini_date.getFullYear(); // la primera vez cargamos el calendario con la fecha del servidor change_date( _server_date.getFullYear(), _server_date.getMonth()); // carga los select de mes, año y el calendario // es la unica funcion publica function change_date(year,month) {/*{{{*/ var fecha = new Date(); fecha.setDate(1); fecha.setMonth(month); fecha.setYear(year); var index; //auxiliar para el indice del año //carga el select de los años for (i = _primer_anio; i <= _server_date.getFullYear(); i++) { index = i - _primer_anio; document.getElementById( _id_anio ).options[index] = new Option(i,i); } // seleccinamos el año index = year - _primer_anio; document.getElementById( _id_anio ).options[index].selected = true; // cargamos el select del mes month = populate_month(fecha); // correjimos fecha por si populate_month nos retorno un mes diferente del pasado fecha.setDate(1); fecha.setMonth(month); // cargamos el calendario populate_calendar(fecha); } /*}}}*/ // carga el mes pasado en fecha en el select // retorna el numero de mes cargado (de 0 a 11) // funcion privada function populate_month( fecha ) {/*{{{*/ // el objeto Date usa los meses de 0 a 11 var start_month = 0; var end_month = 11; document.getElementById( _id_mes ).selectedIndex = null; // si estamos cargando el año actual // fijamos los limites del calendario a la ultima edicion if ( fecha.getFullYear() == _server_date.getFullYear() ) { end_month = _server_date.getMonth(); if ( fecha.getMonth() > _server_date.getMonth() ) { fecha.setMonth( _server_date.getMonth() ); } } // si es el primer año fijamos el limite de las primeras ediciones version web if ( fecha.getFullYear() == _primer_anio ) { start_month = _ini_date.getMonth(); //primer mes if ( fecha.getMonth() < start_month ) { fecha.setMonth( start_month ); } } // cantidad de meses a cargar document.getElementById( _id_mes ).length = end_month - start_month + 1; // cargamos los meses for (i=0; i<=(end_month-start_month); i++) { document.getElementById( _id_mes ).options[i] = new Option(_month_of_year[i+start_month],i+start_month ); } // indice del mes actual var aux = fecha.getMonth() - start_month; //seleccionamos el mes a mostrar document.getElementById( _id_mes ).options[aux].selected = true; return fecha.getMonth(); } /*}}}*/ // carga el calendeario para la fecha pasada // funcion privada function populate_calendar(fecha) {/*{{{*/ var now = _server_date; var Calendar = fecha; var year = Calendar.getFullYear(); var month = Calendar.getMonth(); var today = _today_date; var selected = _selected_date; var DAYS_OF_MONTH = 42; var anterior = 0; // primer día del mes Calendar.setDate(1); // titulo del calendario document.getElementById( _id_titulo ).innerHTML = _month_of_year[month] + ' ' + year; // miramos en que dia de la semana comenzó el mes // y dejamos los cuadros en blanco hasta ahí for( index=1; index <= Calendar.getDay(); index++ ) { document.getElementById(index).innerHTML = ' '; document.getElementById(index).className = 'nolink_nonum'; } // atencion !! // no inicializamos index, usamos el valor que viene del for anterior // llenamos con los links for( trash = 0; index <= DAYS_OF_MONTH; index++ ) { if ( anterior < Calendar.getDate() ) { dia = String(Calendar.getDate()); xmes = String(Calendar.getMonth()+1); oink = Calendar.getFullYear()-1900; anio2 = String(oink>=100?oink-100:oink); anio4 = Calendar.getFullYear(); if ( dia.length == 1) dia = "0"+dia; if ( xmes.length == 1) xmes = "0"+xmes; if ( anio2.length == 1) anio2 = "0"+anio2; if ( ( ( now.getDate() >= Calendar.getDate() ) && ( now.getFullYear() == Calendar.getFullYear() ) && ( now.getMonth() == Calendar.getMonth() ) ) || ( ( now.getFullYear() > Calendar.getFullYear() ) || ( ( now.getMonth() > Calendar.getMonth() ) && ( now.getFullYear() == Calendar.getFullYear() ) ) ) ) { if (( selected.getDate() == Calendar.getDate() ) && ( selected.getFullYear() == Calendar.getFullYear() ) && ( selected.getMonth() == Calendar.getMonth() )) { // seleccionada no hoy //document.getElementById(index).innerHTML = '' + Calendar.getDate() + ''; document.getElementById(index).innerHTML = Calendar.getDate() ; document.getElementById(index).className = 'linksel'; } else { // llenamos los links document.getElementById(index).innerHTML = '' + Calendar.getDate() + ''; document.getElementById(index).className = 'linkfecha'; } } else { if (( today.getDate() == Calendar.getDate() ) && ( today.getFullYear() == Calendar.getFullYear() ) && ( today.getMonth() == Calendar.getMonth() )) { // hoy document.getElementById(index).innerHTML = '' + Calendar.getDate() + ''; document.getElementById(index).className = 'linkhoy'; } else { // días del mes en los que no hay publicaciones document.getElementById(index).innerHTML = Calendar.getDate(); document.getElementById(index).className = 'nolink'; } } anterior = Calendar.getDate(); Calendar.setDate(Calendar.getDate()+1); } else { // resto de los cuadros en blanco document.getElementById(index).innerHTML = ' '; document.getElementById(index).className = 'nolink_nonum'; } } } /*}}}*/