function obtener_dias_mes(_mes, _anio) {
	mes = parseInt(_mes);
	anio = parseInt(_anio);
	switch (_mes) {
	case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : return 31;
	case 2 : return (_anio % 4 == 0) ? 29 : 28;
	}
	return 30;
}
function nombre_mes(mes) {
	switch (mes) {
		case 1: return 'Enero'; break;	
		case 2: return 'Febrero'; break;	
		case 3: return 'Marzo'; break;	
		case 4: return 'Abril'; break;	
		case 5: return 'Mayo'; break;	
		case 6: return 'Junio'; break;	
		case 7: return 'Julio'; break;	
		case 8: return 'Agosto'; break;	
		case 9: return 'Septiembre'; break;	
		case 10: return 'Octubre'; break;	
		case 11: return 'Noviembre'; break;	
		case 12: return  'Diciembre'; break;	
	}
}
function mod(x, x_div){    
	for (var i=x; i>=x_div; i -= x_div);    
		return i;
}
function dia_semana (_dia, _mes, _anio) {
	//Check for a valid date			     
	var cur_day = parseInt(_dia,10);	
	var cur_month = parseInt(_mes,10);	
	var cur_year = parseInt(_anio,10);	
	//alert(" "+cur_day+" "+cur_month+" "+cur_year);	
	//Significant value	
	var sig_val;	
	if (cur_month == 1)		
		sig_val = 0;	
	else if (cur_month == 2)		
		sig_val = 3;	
	else if (cur_month == 3)		
		sig_val = 3;	
	else if (cur_month == 4)		
		sig_val = 6;	
	else if (cur_month == 5)		
		sig_val = 1;	
	else if (cur_month == 6)		
		sig_val = 4;	
	else if (cur_month == 7)		
		sig_val = 6;	
	else if (cur_month == 8)		
		sig_val = 2;	
	else if (cur_month == 9)		
		sig_val = 5;	
	else if (cur_month == 10)		
		sig_val = 0;	
	else if (cur_month == 11)		
		sig_val = 3;	
	else if (cur_month == 12)		
		sig_val = 5;		
	var val1 = mod((cur_year + parseInt(cur_year/4) + cur_day + sig_val),7);		
	
	return val1;
}
var calendario = function (_id_contenedor, _instancia, _tipo, _dimensiones_dia) {
	this.id_contenedor = _id_contenedor;
	this.instancia = _instancia;
	this.tipo = _tipo;
	this.dimensiones_dia = _dimensiones_dia;

	this.dia_seleccionado = 0;
	this.mes_seleccionado = 0;
	this.anio_seleccionado = 0;
	
	this.url_eventos_dia = '/calendario/mostrar_dia_eventos.php';
	
	this.mostrar_calendario = function (dia, mes, anio) {
		var contenedor = document.getElementById(this.id_contenedor);
		// calculamos mes y anio anteriores y siguientes para la navegación...
		mes_anterior = mes - 1;
		anio_anterior = anio;
		if (mes_anterior < 1) {
			mes_anterior = 12;
			anio_anterior--;
		}
		mes_siguiente = mes + 1;
		anio_siguiente = anio;
		if (mes_siguiente > 12) {
			mes_siguiente = 1;
			anio_siguiente++;
		}
		//alert("dia seleccionado: "+dia_seleccionado+" "+mes_seleccionado+" "+anio_seleccionado);
		//alert (this.lista_eventos[10]);
		var code = '<table class="calendario">\n';
		code += '<tr><td class="celda_navegacion" colspan="7" cellpadding="0" cellspacing="0">\n';
		code += '<table cellspacing="0" cellpadding="0" class="navegacion" border="0">\n';
		code += '	<tr>\n';
		code += '	<td width="15%" align="center">\n';
		code += '	<input type="button" value="&laquo;" class="boton_navegacion" onclick="'+this.instancia+'.mostrar_calendario(1,'+mes_anterior+','+anio_anterior+')"/>\n';
		code += '	</td>\n';
		code += '	<td width="70%" align="center"><strong>'+nombre_mes(mes)+' '+anio+'</strong></td>\n';
		code += '	<td width="15%" align="center">\n';
		code += '	<input type="button" value="&raquo;" class="boton_navegacion"  onclick="'+this.instancia+'.mostrar_calendario(1,'+mes_siguiente+','+anio_siguiente+')"/>\n';
		code += '	</td>\n';
		code += '	</tr>\n';
		code += '</table>\n';
		code += '</td></tr>\n';
		// días de la semana...
		code += '<tr>\n';
		code += '	<td class="dia_semana">L</td>\n';
		code += '	<td class="dia_semana">M</td>\n';
		code += '	<td class="dia_semana">M</td>\n';
		code += '	<td class="dia_semana">J</td>\n';
		code += '	<td class="dia_semana">V</td>\n';
		code += '	<td class="dia_semana">S</td>\n';
		code += '	<td class="dia_semana">D</td>\n';
		code += '</tr>\n';
		// mostramos los días...
		dias_mes = obtener_dias_mes(mes,anio);
		//alert("dia 1 del mes "+1+"-"+mes+"-"+anio+": "+dia_semana (1, mes, anio));
		indice_dia = dia_semana (1, mes, anio) - 3;
		//indice_dia = this.fecha.getDay();
		//alert("indice_dia: "+indice_dia);
		if (indice_dia < 0) indice_dia = 7 + indice_dia;
		//alert("indice_dia: "+indice_dia);
		
		//rellenamos días hasta llegar al día 1...
		i = 0;
		while (i < indice_dia) {
			if (i == 0)
				code +='<tr>\n';
			code += '<td class="dia_oculto"></td>\n';
			i++;
			if (i>6) i=0;
		}
		
		// rellenamos los días del mes...
		for (i=1; i<=dias_mes; i++) {
			if (i == this.dia_seleccionado && mes == this.mes_seleccionado && anio == this.anio_seleccionado)
				clase_dia = 'dia_seleccionado';
			else
				clase_dia = 'dia';
			if (indice_dia == 0)
				code +='<tr>\n';
			cadena_tiempo = i+'-'+mes+'-'+anio;
			
			switch (this.tipo) {
				case 'SELECTOR': 	code += '<td id="dia'+i+'_'+this.instancia+'" class="'+clase_dia+'" onclick="'+this.instancia+'.seleccionar_dia('+i+', '+mes+', '+anio+')" width="'+this.dimensiones_dia+'" height="'+this.dimensiones_dia+'">'+i+'</td>\n';
									break;
				case 'MOSTRAR': 	code += '<td id="dia'+i+'_'+this.instancia+'" class="'+clase_dia+'" onclick="'+this.instancia+'.mostrar_dia('+i+', '+mes+', '+anio+')" width="'+this.dimensiones_dia+'" height="'+this.dimensiones_dia+'">'+i+'</td>\n';
									break;
				case 'MOSTRAR_DETALLE': 	code += '<td id="dia'+i+'_'+this.instancia+'" class="'+clase_dia+'" onclick="'+this.instancia+'.detalle_dia('+i+', '+mes+', '+anio+')" width="'+this.dimensiones_dia+'" height="'+this.dimensiones_dia+'">'+i+'</td>\n';
									break;
			}
			
			if (indice_dia>=6) {
				code +='</tr>\n';
				indice_dia = 0;
			} else
				indice_dia++;
		}
		if (indice_dia<6)
			code +='</tr>\n';
	
		code += '</table>';
		//alert(code);
		contenedor.innerHTML = code;
	}
	this.seleccionar_dia = function (_dia, _mes, _anio) {
		if (this.dia_seleccionado > 0) {
			celda_dia_ant = document.getElementById('dia'+this.dia_seleccionado+'_'+this.instancia);
			celda_dia_ant.className = 'dia';
		}
		if (this.dia_seleccionado != _dia || this.mes_seleccionado != _mes || this.anio_seleccionado != _anio) {
			this.dia_seleccionado = _dia;
			this.mes_seleccionado = _mes;
			this.anio_seleccionado = _anio;
			celda_dia = document.getElementById('dia'+_dia+'_'+this.instancia);
			celda_dia.className = 'dia_seleccionado';
		} else {
			this.dia_seleccionado = 0;
			this.mes_seleccionado = 0;
			this.anio_seleccionado = 0;
		}
	}
	this.obtener_dia_seleccionado = function () {
		if (this.anio_seleccionado > 0  && this.mes_seleccionado > 0 && this.dia_seleccionado > 0)
			return this.anio_seleccionado+'-'+this.mes_seleccionado+'-'+this.dia_seleccionado;	
		else
			return null;
	}
	this.mostrar_dia = function (_dia, _mes, _anio) {
		parametros = 'dia='+_dia+'&mes='+_mes+'&anio='+_anio;
		this.peticion_ajax(this.url_eventos_dia, parametros, 'contenedor_eventos');
	}
	this.detalle_dia = function (_dia, _mes, _anio) {
		location.href = this.url_eventos_dia+'?dia='+_dia+'&mes='+_mes+'&anio='+_anio;
	}
	this.objetoAjax = function (){
		var xmlhttp=false;
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				xmlhttp = false;
				}
		}
		if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
			xmlhttp = new XMLHttpRequest();
		}
		return xmlhttp;
	}
	this.mostrar_eventos_calendario = function (mes, anio) {
		parametros = 'mes='+mes+'&anio='+anio+'&inst='+this.instancia+'&dim='+this.dimensiones_dia+'&modo='+this.tipo;
		this.peticion_ajax('/calendario/mostrar_mes_eventos.php', parametros, this.id_contenedor);
	}
	this.peticion_ajax = function (url, params, contenedor) {
		//donde se mostrará los registros
		divContenido = document.getElementById(contenedor);
		ajax = this.objetoAjax();
		ajax.open("POST", url+'?rdm='+Math.floor(Math.random()*10000), true);
		ajax.setRequestHeader('Content-Encoding', 'UTF-8'); 
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4 ) {
				divContenido.innerHTML  = ajax.responseText;
			}
		}
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send(params);	
	}
	this.set_eventos_dia = function (url) {
		this.url_eventos_dia = url;
	}
}

/********************  GLOBAL  ***********************/
var dias_semana = new Array();
dias_semana[0] = 'Lunes';
dias_semana[1] = 'Martes';
dias_semana[2] = 'Miércoles';
dias_semana[3] = 'Jueves';
dias_semana[4] = 'Viernes';
dias_semana[5] = 'Sábado';
dias_semana[6] = 'Domingo';