var ARR_MONTHS = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
var ARR_WEEKDAYS = ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"];
// day week starts from (normally 0-Mo or 1-Su)
var NUM_WEEKSTART = 1;

var calendars = [];

function calendar(str_date,str_form_name,str_ctrl_name)
{	this.get_html=cal_get_html;
	this.get_body=cal_get_body;
	this.set_year=cal_set_year;
	this.set_month=cal_set_month;
	this.set_day=cal_set_day;
	this.update=(document.body&&document.body.innerHTML?cal_css_update:cal_rel_update);
	this.id=calendars.length;
	calendars[this.id]=this;
	
	var re_url=new RegExp('cal'+this.id+'_val=(\\d+)');
	this.dt_current=(re_url.exec(String(window.location))?new Date(new Number(RegExp.$1)):(str_date?cal_parse_date(str_date):cal_date_only()));
	this.form_name=str_form_name;
	this.control_name=(str_ctrl_name?str_ctrl_name:'datetime_'+this.id);
	document.write(this.get_html(this.dt_current));
// Las siguientes 3 líneas son sólo para poder ver que está pasando.  No son parte del script.
// my_window= window.open ("","mywindow2","status=1,width=350,height=150"); 
// my_window.document.write(this.get_html(this.dt_current)); 
// alert (this.get_html(this.dt_current));
	this.mon_ctrl=document.forms[this.form_name].elements['dt_mon_'+this.id];
	this.year_ctrl=document.forms[this.form_name].elements['dt_year_'+this.id];
}

function cal_css_update(dt_datetime)
{	this.dt_current=dt_datetime;
	var obj_container=(document.all?document.all['divDias_y_MTNO_'+this.id]:document.getElementById('divDias_y_MTNO_'+this.id));
	obj_container.innerHTML=this.get_body(dt_datetime);	
	this.mon_ctrl.selectedIndex=dt_datetime.getMonth();
	this.year_ctrl.selectedIndex=dt_datetime.getFullYear()-Number(this.year_ctrl.options[1].text)+1;
}

function cal_rel_update(dt_datetime)
{	var arr_location=String(window.location).split('?');
	var arr_params=String(arr_location[1]).split('&');
	var num_found=-1;
	for (var i=0;i<arr_params.length;i++)
	if	((arr_params[i].split('='))[0]=='cal'+this.id+'_val')
		{	num_found=i;
			break;
		}
	arr_params[(num_found==-1?(arr_location[1]?arr_params.length:0):num_found)]='cal'+this.id+'_val='+dt_datetime.valueOf();
	window.location=arr_location[0]+'?'+arr_params.join('&');
}

function cal_set_day(num_datetime)
{	var dt_newdate=new Date(num_datetime);
	this.update(cal_validate(dt_newdate)?dt_newdate:this.dt_current);
}

function cal_set_month()
{	var dt_newdate=new Date(this.dt_current);
	var num_month=this.mon_ctrl.options[this.mon_ctrl.selectedIndex].value;
	dt_newdate.setMonth(num_month);
	if	(num_month!=dt_newdate.getMonth())
		dt_newdate.setDate(0);
	if	(cal_validate(dt_newdate))
		this.update(dt_newdate);
	else 
		this.mon_ctrl.selectedIndex=this.dt_current.getMonth();
}

function cal_set_year()
{	var dt_newdate=new Date(this.dt_current);
	var str_year=this.year_ctrl.options[this.year_ctrl.selectedIndex].text;
	var str_scroll=this.year_ctrl.options[this.year_ctrl.selectedIndex].value;
	var num_year;
	if	(str_scroll=="+" || str_scroll=="-")
		{	num_year=(str_scroll=='+'?this.dt_current.getFullYear()+4:this.dt_current.getFullYear()-4);
		}
	else
		{	num_year=new Number(str_year);
		}
	dt_newdate.setFullYear(num_year);
	var num_month=this.mon_ctrl.options[this.mon_ctrl.selectedIndex].value;
	if	(num_month!=dt_newdate.getMonth())
		dt_newdate.setDate(0);
	if	(!cal_validate(dt_newdate))
		{	this.year_ctrl.selectedIndex=this.dt_current.getFullYear()-Number(this.year_ctrl.options[1].text)+1;
			return;
		}
	if	(str_scroll)
		{	this.year_ctrl.length=0;
			this.year_ctrl.options[0]=new Option('<<'+(num_year-4),'-');
			for	(var i=1;i<8;i++)
				{	this.year_ctrl.options[i]=new Option(num_year+i-4);
					this.year_ctrl.options[i].selected=!(i-4);
				}
			this.year_ctrl.options[8]=new Option((num_year+4)+'>>','+');
		}
	this.update(dt_newdate);
}

function cal_limit_min(str_min_date,b_absolute)
{	this.min_date=(b_absolute?this.parse_date(str_min_date):new Date(this.date.valueOf()-new Number(str_min_date*864e5)));
}

function dts_limit_max(str_max_date,b_absolute)
{	this.cal_date=(b_absolute?this.parse_date(str_max_date):new Date(this.date.valueOf-new Number(str_max_date*864e5)));
}

function cal_get_html(dt_datetime)
{	var i, str_buffer=new String('<div id="divCalendario">'+'<div id="divAnoMes">'+'<select name="dt_mon_'+this.id+'" class="dupCtrlAnoMes" onchange="return calendars['+this.id+'].set_month();">');
	for	(i=0;i<12;i++)
		str_buffer+='<option value="'+i+'"'+(i==dt_datetime.getMonth()?' selected':'')+'>'+ARR_MONTHS[i]+"</option>\n";
	str_buffer+='</select>'+'<select name="dt_year_'+this.id+'" class="dupCtrlAnoMes" onchange="return calendars['+this.id+'].set_year();">'+'<option value="-">&lt;&lt;'+(dt_datetime.getFullYear()-4)+"</option>\n";
	for	(i=-3;i<4;i++)
		str_buffer+='<option'+(i==0?' selected':'')+'>'+(dt_datetime.getFullYear()+i)+"</option>\n";
	str_buffer+='<option value="+">'+(dt_datetime.getFullYear()+4)+"&gt;&gt;</option>\n"+'</select></div>'+'<div id="divDias_y_MTNO_'+this.id+'">'+this.get_body(dt_datetime)+'</div>'+'</div>';			
	return(str_buffer);
}

function cal_get_body (dt_datetime)
{	var dt_prev_year=new Date(dt_datetime);
	dt_prev_year.setFullYear(dt_prev_year.getFullYear()-1);
	if	(dt_prev_year.getDate()!=dt_datetime.getDate())
		dt_prev_year.setDate(0);
	var dt_next_year=new Date(dt_datetime);
	dt_next_year.setFullYear(dt_next_year.getFullYear()+1);
	if	(dt_next_year.getDate()!=dt_datetime.getDate())
		dt_next_year.setDate(0);
	var dt_firstday=new Date(dt_datetime);
	dt_firstday.setDate(1);
	dt_firstday.setDate(1-(7+dt_firstday.getDay()-NUM_WEEKSTART)%7);
	var str_buffer=new String('<div><table id="tabDias">');
	str_buffer+='<tr>';
	for	(var n=0;n<7;n++)
		str_buffer+='<td class="dupNombresDias">'+ARR_WEEKDAYS[(NUM_WEEKSTART+n)%7]+'</td>';
	str_buffer+="</tr>\n";
	var dt_current_day=new Date(dt_firstday);
	while	(dt_current_day.getMonth()==dt_datetime.getMonth()||dt_current_day.getMonth()==dt_firstday.getMonth())
			{	str_buffer+='<tr>';
				for	(var n_current_wday=0;n_current_wday<7;n_current_wday++)
					{	if	(dt_current_day.getDate()==dt_datetime.getDate()&&dt_current_day.getMonth()==dt_datetime.getMonth())
						str_buffer+='<td class="dupDiaActual"' +
												' onmouseover="this.style.cursor=\'pointer\'"' +
												' onclick="calendars[' + this.id + '].set_day(' + dt_current_day.valueOf() + ')">';
						else
							if	(dt_current_day.getDay()==0||dt_current_day.getDay()==6)
								str_buffer+='<td class="dupDiaWeekend"' +
												' onmouseover="this.style.cursor=\'pointer\'"' +
												' onclick="calendars['+this.id+'].set_day(' + dt_current_day.valueOf() + ')">';
							else
								str_buffer+='<td class="dupDiaNormal"' +								
								        ' onmouseover="this.style.cursor=\'pointer\'"' +
												' onclick="calendars['+this.id+'].set_day('+dt_current_day.valueOf()+')">';
						if	(dt_current_day.getMonth()==dt_datetime.getMonth())
							str_buffer+='<a href="javascript:calendars['+this.id+'].set_day('+dt_current_day.valueOf()+');" class="dupMesActual">';
						else
							str_buffer+='<a href="javascript:calendars['+this.id+'].set_day('+dt_current_day.valueOf()+');" class="dupMesOtro">';
						str_buffer+=dt_current_day.getDate()+'</a></td>';
						dt_current_day.setDate(dt_current_day.getDate()+1);
					}
				str_buffer+="</tr>\n";
			}
	str_buffer+='</table></div>';
	
	var ano, mes, dia;
	ano=String(dt_datetime.getFullYear());
	mes=dt_datetime.getMonth()+1;
	dia=dt_datetime.getDate();
	if (mes<10) {mes="0"+mes};
	if (dia<10) {dia="0"+dia};
		
	str_buffer+='<div id="divMTNO">';	
	str_buffer+='<input type="hidden" name="ano" value="' + ano + '">';
	str_buffer+='<input type="hidden" name="mes_dia" value="' + mes+dia + '">';
	str_buffer+='<input type="button" name="manana" value="Mañana" class="dupBoton" onClick="JavaScript: Resultados(ano.value, mes_dia.value,'+"'M'"+')">';
	str_buffer+='<input type="button" name="tarde"  value="Tarde"  class="dupBoton" onClick="JavaScript: Resultados(ano.value, mes_dia.value,'+"'T'"+')">';
	str_buffer+='<input type="button" name="noche"  value="Noche"  class="dupBoton" onClick="JavaScript: Resultados(ano.value, mes_dia.value,'+"'N'"+')">';
	str_buffer+='<input type="button" name="otro"   value="Otro"   class="dupBoton" onClick="JavaScript: Resultados(ano.value, mes_dia.value,'+"'O'"+')">';
	str_buffer+='</div>';
// Las siguientes 3 líneas son sólo para poder ver que está pasando.  No son parte del script.
// my_window= window.open ("","mywindow1","status=1,width=350,height=150"); 
// my_window.document.write(str_buffer); 
// alert (str_buffer);
	return (str_buffer);
}

function cal_date_only(dt_datetime)
{	if	(!dt_datetime)
		dt_datetime=new Date();
		dt_datetime.setHours(0);
		dt_datetime.setMinutes(0);
		dt_datetime.setSeconds(0);
		dt_datetime.setMilliseconds(0);
		return dt_datetime;
}

function cal_validate(dt_datetime)
{	return true;
}
