// Simple Calender Creator
// By Brian Gosselin of http://scriptasylum.com

// Usage:  buildCal(month, year, main_css_classname, header_css_classname, Sat-Sun_css_classname, days_css_classname, border_thickness, starting_day, date_onclick_handler)
//         Pass the result to the document.write() method. ex: document.write( buildCal(<parameters>) );

// Release History:
// V1.0 - Initial Release
// V1.1 - Added revisions made by DynamicDrive.com (changes denoted by the letters "DD").
// V1.2 - Added ability to specify the starting day of the week (Sun, Mon, Tue, etc)
// V1.3 - Added ability to execute a function when a date is clicked. Fixed a minor visual bug in Mozilla.

function buildCal(m, y, cM, cH, cDW, cD, brdr, sDay, action){
var mn=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
var dim=[31,0,31,30,31,30,31,31,30,31,30,31];

if(sDay<1 || sDay>7)sDay=1;

var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st

var tmpod=oD.od-sDay;
if(tmpod<0)tmpod=7+tmpod;
oD.od=tmpod+1;

var wkstr="DLMXJVS".substr(sDay-1,"DLMXJVS".length)+"DLMXJVS".substr(0,sDay-1);

var todaydate=new Date() //DD
var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD

dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
var t='<div class="'+cM+'"><table class="'+cM+'" cellpadding="0" border="'+brdr+'" cellspacing="0">';
t+='<tr align="center"><td colspan="7" align="center" class="'+cH+'">'+mn[m-1]+'</td></tr>';
t+='<tr align="center">';
for(s=0;s<7;s++)t+='<td class="'+cDW+'">'+wkstr.substr(s,1)+'</td>';
t+='</tr><tr align="center">';
for(i=1;i<=42;i++){
var x=( (i-oD.od>=0) && (i-oD.od<dim[m-1]) )? '<div style="width:100%" '+((action!='')? 'onmouseup="'+action+'('+m+','+(i-oD.od+1)+','+y+')':(i-oD.od+1))+'">'+(i-oD.od+1)+'</div>' : '&nbsp;';
if (i-oD.od+1==scanfortoday)x='<span id="today" class="'+cD+'">'+x+'</span>' //DD
t+='<td width="14.28%" class="'+cD+'">'+x+'</td>';
if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
}
t+='</tr></table></div>';
return t;
}

function linkCal(url) {
	document.location.href=url;
}

// Modificaciones del calendario para poder mostrar una lista de eventos en el calendario
// el formato de entrada que espera es el siguiente:
// var eventos=['07:10:2005','20:10:2005','31:10:2005'];
function buildCalEvento(m, y, cM, cH, cDW, cD, brdr, sDay, action, evento){
var mn=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
//Determina el dia de la semana con el que se quiere empezar (lunes a domingo) - lunes por defecto
if(sDay<1 || sDay>7)sDay=1;
var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st
var tmpod=oD.od-sDay;
if(tmpod<0)tmpod=7+tmpod;
oD.od=tmpod+1;
var wkstr="DLMXJVS".substr(sDay-1,"DLMXJVS".length)+"DLMXJVS".substr(0,sDay-1);
// determina la fecha actual
var todaydate=new Date() //DD
var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD
dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
var t='<div class="'+cM+'"><table class="'+cM+'" cellpadding="0" border="'+brdr+'" cellspacing="0">';
// Pinta el nombre del mes
t+='<tr align="center"><td colspan="7" align="center" class="'+cH+'">'+mn[m-1]+'</td></tr>';
// Pinta los dias de la semana
t+='<tr align="center">';
for(s=0;s<7;s++)	t+='<td class="'+cDW+'">'+wkstr.substr(s,1)+'</td>';
t+='</tr>'
t+='<tr align="center">';
for(i=1;i<=42;i++){
var x=( (i-oD.od>=0) && (i-oD.od<dim[m-1]) )? '<div style="width:100%" '+((action!='')? 'onmouseup="'+action+'('+m+','+(i-oD.od+1)+','+y+')':(i-oD.od+1))+'">'+(i-oD.od+1)+'</div>' : '&nbsp;';
if (x!='&nbsp;') {
	if (i-oD.od+1==scanfortoday)x='<span id="today" class="'+cD+'">'+x+'</span>' // determina el dia de hoy
//	for(kk=0;kk<=evento.length-1;kk++) if (i-oD.od+1==scanforevent(evento[kk]))x='<span id="event" class="'+cD+'">'+x+'</span>' // determina el dia evento
	for(kk=0;kk<=evento.length-1;kk++) if (i-oD.od+1==scanforeventMensual(evento[kk],m,y))x='<span id="event" class="'+cD+'">'+x+'</span>' // determina el dia evento
}
t+='<td width="14.28%" class="'+cD+'">'+x+'</td>';
// Salto de carro cuando llegamos a la 7a casilla
if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">'; 
}
t+='</tr></table></div>';
return t;
}

function scanforevent(evento) {
//Determina los eventos
var eventoArr=evento.split(':');
var de=eventoArr[0];
var me=eventoArr[1];
var ye='20'+eventoArr[2];
var eventdate=new Date(ye, me-1, de);
var todaydate=new Date();
var scanforevent=(todaydate.getFullYear()==eventdate.getFullYear() && todaydate.getMonth()==eventdate.getMonth())? eventdate.getDate() : 0 //DD
return scanforevent;
}

function scanforeventMensual(evento,mes,anyo) {
//Determina los eventos
var eventoArr=evento.split(':');
var de=eventoArr[0];
var me=eventoArr[1];
var ye='20'+eventoArr[2];
var eventdate=new Date(ye, me-1, de);
var mensualDate=new Date(anyo,mes-1,1);
var scanforevent=(mensualDate.getFullYear()==eventdate.getFullYear() && mensualDate.getMonth()==eventdate.getMonth())? eventdate.getDate() : 0 //DD
return scanforevent;
}