// 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';
}
}
}
/*}}}*/