/*********************************************************************************

	ILUMINAR FILAS / COLUMNAS DE LAS TABLAS

	Se utiliza para buscar tablas de unas clases determinadas y asignarles dinámicamente
	eventos para iluminarlos por filas o columnas.

	Uso: Añadir buscaTablas() en el onLoad
	
	Configuración:
	- clases:				Clases a las que les afecta (separadas con comas)
	- activarColumnas:		Iluminar columnas al señalas las celdas interiores (true/false)
	- activarFila:			Iluminar filas al señalar las celdas interiores (true/false)
		- activarColumnasCab:	Iluminar columnas al señalar la cabecera sup (true/false) - DESHABILITADO
		- activarFilaCab:		Iluminar filas al señalar la cabecera izq (true/false)	- DESHABILITADO
	- iluminarVacias:		Activar las celdas vacias (true/false)
	- tooltip:				Mostrar tooltips con el texto de la cabecera (true/false)
	- estiloActivoPar:		Estilo de las celdas iluminadas (pares)
	- estiloActivoImpar:	Estilo de las celdas iluminadas (impares)
	- estiloInactivo:		Estilo normal de las celdas (normalmente vacío)

**********************************************************************************/

/***************************************** Configuración *****************************************/
var aPrefs = {
	'clases'			: 'horarios',
	'activarColumna'	: true,
	'activarFila'		: true,
//	'activarColumnaCab'	: false,	
//	'activarFilaCab'	: false,
	'iluminarVacias'	: false,
	'tooltip'			: true,
	'estiloActivoPar'	: 'background-color:#CE7C16; cursor:default',
	'estiloActivoImpar'	: 'background-color:#E8922F; cursor:default',
	'estiloInactivo'	: ''
};
/*************************************** Fin Configuración ***************************************/

// Buscar tablas con la clase determinada
function buscaTablas() {
	var tabla = document.getElementsByTagName("table");
	
	// Identificar las celdas
	if(tabla) {
		for(iTabla=0;iTabla < tabla.length;iTabla++) {
			if(tabla[iTabla].className && aPrefs.clases.indexOf(tabla[iTabla].className) > -1) {

				// Recorrer filas
				var fila = tabla[iTabla].rows;
				for(iFila=0;iFila < fila.length;iFila++) {
					
					// Recorrer celdas
					var celda = fila[iFila].cells;
					for(iCelda=0;iCelda < celda.length;iCelda++) {
						
						// Id de la celda (o de su primer hijo)
						var sId = iTabla + ":" + iFila + ":" + iCelda;
						if(celda[iCelda].childNodes.length) {
							if(celda[iCelda].childNodes[0].nodeName!="#text")
								celda[iCelda].childNodes[0].id = sId;
							else celda[iCelda].id = sId;
						}
						else celda[iCelda].id = sId;
						
						if( (celda[iCelda].innerHTML && celda[iCelda].innerHTML != "&nbsp;") 
							|| ( (!celda[iCelda].innerHTML || celda[iCelda].innerHTML == "&nbsp;") && aPrefs.iluminarVacias) ) {
							
							// Registrar tooltips
							if(aPrefs.tooltip) {
								celda[iCelda].title = fila[0].cells[iCelda].innerHTML;
							}
						
							// Registrar el evento onmouseover
							document.getElementById(sId).onmouseover = function(e) {
								activar(obtenerElemento(e),true);
							}
							
							// Registrar el evento onmouseout
							document.getElementById(sId).onmouseout = function(e) {
								activar(obtenerElemento(e),false);
							}
						
						}
						
					}
					
				}

			}
		}
	}
}

// Recorrer por filas o columnas
function recorrer(sNombre,iTipo,bActivo) {
	iTabla = sNombre.split(":")[0];
	iFila = sNombre.split(":")[1];
	iCol = sNombre.split(":")[2];
	
	// Columnas
	if(iTipo==1) {
//		if((iFila>0 && iCol>0 && aPrefs.activarColumna) || (iFila==0 && aPrefs.activarColumnaCab)) {
		if((aPrefs.activarColumna) || (iFila==0 && aPrefs.activarColumnaCab)) {	
			var sInc = "iFila";
		}
	}
	
	// Filas
	if(iTipo==2) {
//		if((iFila>0 && iCol>0 && aPrefs.activarFila) || (iCol==0 && aPrefs.activarFilaCab)) {
		if((aPrefs.activarFila) || (iCol==0 && aPrefs.activarFilaCab)) {
			var sInc = "iCol";
		}
	}

	// Recorrer
	if(sInc) {
		eval(sInc + "=0");
		
		var celda = document.getElementById(iTabla + ":" + iFila + ":" + iCol);
		
		while(celda) {

			sEstilo = obtenerEstilo(eval(sInc),bActivo);
			
			eval(sInc + "++");
			
			celda.style.cssText = sEstilo;
			
			var celda = document.getElementById(iTabla + ":" + iFila + ":" + iCol);
		}
	}
	
}

// Obtener el estilo en función de la posición de la celds
function obtenerEstilo(iPos,bActivo) {
	if(bActivo) {
		if(iPos % 2) return aPrefs.estiloActivoImpar;
		else return aPrefs.estiloActivoPar;
	}
	else return aPrefs.estiloInactivo;
}

function activar(sNombre,bActivo) {

	if(aPrefs.activarColumna || aPrefs.activarColumnaCab) recorrer(sNombre, 1, bActivo);
		
	if(aPrefs.activarFila || aPrefs.activarFilaCab) recorrer(sNombre, 2, bActivo);

}

// Obtener el elemento que activó el evento
function obtenerElemento(e) {
	var targ

	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
	   targ = targ.parentNode;
	
	return targ.id;
}
