
var mes, ano, tabla, hoy, campo, ultimoacceso;

function checkTimeout() {
	if (document.getElementById("Calendario") != null) {
		if (document.getElementById("Calendario").style.display == "") {
			if (window.event && !document.getElementById("Calendario").contains(event.srcElement)) {
				if ((new Date().valueOf() - ultimoacceso) > 2000) {
					esconderCalendario();
				}
			}
		}
	}
}

function esconderCalendario() {
		tabla.style.display = "none";
		// visualiza todos los objetos select que tuve que esconder para poder sobremontarlos
		for (var i=0;i<document.getElementsByTagName("SELECT").length;i++) {
			var seleccion = document.getElementsByTagName("SELECT").item(i);
			if (seleccion.style.visibility == "hidden") {
				seleccion.style.visibility = "visible";
			}
		}
}

function ubicarCalendario(src, field) {
	tabla = document.getElementById("Calendario");
	esconderCalendario();	
	tabla.style.zIndex = src.style.zIndex + 1;
	tabla.style.top = src.offsetTop-1;
	tabla.style.left = src.offsetLeft;
	var empiezaX, terminaX, empiezaY, terminaY
	tabla.style.display = "";
	// detecta colisiones con objetos select que no pueden ser sobremontados
	for (var i=0;i<document.getElementsByTagName("SELECT").length;i++) {
		var seleccion = document.getElementsByTagName("SELECT").item(i);
		empiezaX = seleccion.offsetLeft;
		terminaX = seleccion.offsetLeft + seleccion.offsetWidth;
		empiezaY = seleccion.offsetTop;
		terminaY = seleccion.offsetTop + seleccion.offsetHeight;
		// (Si empieza en medio de la tabla) o (empieza antes y termina en medio)
		if (  ((empiezaX > tabla.style.posLeft) && (empiezaX < (tabla.style.posLeft + tabla.offsetWidth))) || ((empiezaX < tabla.style.posLeft) && (terminaX > tabla.style.posLeft))  ) {
			// (Si empieza en medio de la tabla) o (empieza antes y termina en medio)
			if (  ((empiezaY > tabla.style.posTop) && (empiezaY < (tabla.style.posTop + tabla.offsetHeight))) || ((empiezaY < tabla.style.posTop) && (terminaY > tabla.style.posTop))  ) {
				seleccion.style.visibility = "hidden";
			}
		}
	}
	
	inicializarCalendario(field, new Date());
}

function cClick() {
	if (window.event) {
		var src = event.srcElement;
		if (src.tagName == "TD" && src.className == "calendarioSel") {
			// Formato dia,mes,aņo
			// campo.value = src.innerText +"/"+(mes+1)+"/"+ano;
			// Formato mes,dia,aņo
			campo.value = (mes+1)+"/"+src.innerHTML +"/"+ano;
			esconderCalendario();
		}
	}
}

function cOver() {
	if (window.event) {
		var src = event.srcElement;
		if (src.tagName == "TD" && src.className == "calendario") {
			if (src.innerHTML != "") {
				src.className = "calendarioSel";
			}
		}
		ultimoacceso = new Date().valueOf();
		tabla.style.filter = "";
	}
}

function cOut() {
	if (window.event) {
		var src = event.srcElement;
		if (src.tagName == "TD" && src.className == "calendarioSel") {
			src.className = "calendario";
		}
	}
}

function limpiarCalendario() {
	tabla = document.getElementById("Calendario")
	for (var i=0; i<(6*7);i++) {
		tabla.rows[Math.floor(i/7)+2].cells[i%7].innerHTML="";
		tabla.rows[Math.floor(i/7)+2].cells[i%7].style.color ="";
	}
}

function pintarCalendario(fecha) {
	var i,t,celda;
	t = fecha.getDay();
	limpiarCalendario();
	for (i=0;i<31;i++) {
		celda = tabla.rows[Math.floor((i+t)/7)+2].cells[(i+t)%7]; 
		if (new Date(fecha.setDate(i+1)).getMonth() == mes) {
			celda.innerHTML = i+1;
			if (hoy == i+1) {
				celda.style.color = "red";
			}
		}
	}
}

function cambioCalendario() {
	ano = document.getElementById("Ano").value;
	mes = parseInt(document.getElementById("Mes").value);
	var fecha = new Date();
	hoy = -1;
	if (ano == fecha.getYear() && mes == fecha.getMonth()) {
		hoy = fecha.getDate();
	}
	fecha.setFullYear(ano,mes,1);
	pintarCalendario(fecha);
}

function inicializarCalendario(field, fechaIni) {
	document.getElementById("Ano").value = fechaIni.getYear();
	document.getElementById("Mes").value = fechaIni.getMonth();
	campo = document.getElementById(field)
	cambioCalendario();
}
