function AjustarTablas(pTabR, pTabA, pDesfase, pAjCels, pAjinCel, pFilas, pCeldas)
{
	// Default: AjustarTablas("idTabla", "idEncabezado", 1, 5, -3);
	// Ajuste de columnas de Tabla...
	// pTabR: ID de la Tabla de Referencia...
	// pTabA: ID de la Tabla a ajustar
	var iCnt;
	try
	{
		// Se crean los objetos de la tabla...
		var oTabR = eval("document.all." + pTabR);
		var oTabA = eval("document.all." + pTabA);
		// Se cargan las filas, si no se han especificado...
		if(pFilas == undefined)
		{
			var sFilaux = "0";
			for(iCnt = 1; iCnt < oTabR.rows[0].cells.length; iCnt++)
			{
				sFilaux += ",0";
			}
			pFilas = eval("[" + sFilaux + "]");
		}
		if(pCeldas == undefined)
		{
			var sFilaux = "0";
			for(iCnt = 1; iCnt < oTabR.rows[0].cells.length; iCnt++)
			{
				sFilaux += "," + iCnt;
			}
			pCeldas = eval("[" + sFilaux + "]");
		}
		var iWth = 0;
		var iTwth = 0;
		var iDesfase, iAjCels, iAjinCel;
		// Se cargan los defaults...
		if(pDesfase == undefined) iDesfase = 1; else iDesfase = pDesfase;
		if(pAjCels == undefined) iAjCels = 2; else iAjCels = pAjCels;
		if(pAjinCel == undefined) iAjinCel = 3; else iAjinCel = pAjinCel;
		
		for(iCnt = 0; iCnt < oTabR.rows[0].cells.length; iCnt++)
		{
			iWth = oTabR.rows[0].cells[iCnt].clientWidth;
			if(iCnt == 0)
			{
				oTabA.rows[pFilas[iCnt]].cells[pCeldas[iCnt]].width = iWth - iAjCels + iDesfase;
			}
			else
			{
				oTabA.rows[pFilas[iCnt]].cells[pCeldas[iCnt]].width = iWth - iAjCels;
			}
			//oTabR.rows[0].cells[iCnt].width = iWth;
			iTwth += iWth;
		}
		iTwth += iAjCels * oTabR.rows[0].cells.length;
		iTwth += iAjinCel * (oTabR.rows[0].cells.length - 1);
		oTabA.width = iTwth + iDesfase;
		//oTabR.width = iTwth;
	}
	catch(e)
	{
		//alert(e.message)
	}
}// AjustarTablas
function AjustarScroll(obj, pID, pLen, pPos)
{
	// Ajuste del scroll de un div que contiene al encabezado y otro que contiene los datos de la tabla...
	// Su modo de uso es agregando al evento 'onscroll' del Div de datos esta función...
	// Sintaxis: onscroll="AjustarScroll(this, 'idDivEncabezado', <longitud de la tabla>, <posición LEFT del div de encabezado>)"
	// Notas: Solo funciona si ambos Divs tienen posición absoluta en la página...
	var iPos = obj.scrollLeft;
	var iDvPos = pPos;
	var objDiv = eval("document.all." + pID);
	objDiv.style.left = iDvPos - iPos;
	objDiv.style.clip = "rect(auto " + (iPos + pLen) + " auto " + iPos + ")";
}// AjustarScroll
function sel_ConvertirSeleccionable(pIDtabla, pFMC, pMultiple, pClick, pDblClick)
{
	// Se obtiene el Objeto de la Tabla...
	var oTab = eval("document.all." + pIDtabla);
	if(!oTab) return;
	var bMul = false
	if(pMultiple) bMul = pMultiple;
	// Se indica que utilizará un manú contextual...
	if(pFMC) oTab.oncontextmenu = pFMC;
	if(!pClick) pClick = "";
	if(!pDblClick) pDblClick = null;
	// Se agrega parámetro para última fila selecta...
	oTab.fSel = "-1";
	oTab.onselectstart = sel_NoSelect;
	// Se barren las filas y se asigna la función de selección...
	var iCnt;
	for(iCnt = 0; iCnt < oTab.rows.length; iCnt++)
	{
		oTab.rows[iCnt].sel = "0"
		oTab.rows[iCnt].style.cursor = "hand"
		oTab.rows[iCnt].onmouseover = sel_Over;
		oTab.rows[iCnt].onmouseout = sel_Out;
		if(!bMul) oTab.rows[iCnt].onclick = sel_ClickX;
		else oTab.rows[iCnt].onclick = sel_ClickM;
		oTab.rows[iCnt].fnClick = pClick;
		oTab.rows[iCnt].ondblclick = pDblClick;
		oTab.rows[iCnt].oncontextmenu = sel_ClickX;
	}
}// sel_ConvertirSeleccionable
function sel_NoSelect()
{
	return false;
}
function sel_Over()
{
	if(this.sel == "0")
	{
		// Se sombrea la fila...
		this.style.backgroundColor = "#EEEEEE";
	}
}// sel_Over
function sel_Out()
{
	if(this.sel == "0")
	{
		// Se dessombrea la fila...
		this.style.backgroundColor = "";
	}
}// sel_Out
function sel_ClickX()
{
	// Se verifica que no este selecto ya...
	if(this.sel == "1") return;
	// Se deseleccionan todos...
	var oTab = this.parentElement;
	var iCnt;
	for(iCnt = 0; iCnt < oTab.rows.length; iCnt++)
	{
		oTab.rows[iCnt].sel = "0";
		oTab.rows[iCnt].style.backgroundColor = "";
	}
	// Se selecciona la fila...
	this.sel = "1";
	this.style.backgroundColor = "#7590AB";
	// Se verifica una acción secundaria al Seleccionar...
	if(this.fnClick != "") eval(this.fnClick);
}// sel_ClickX
function sel_ClickM()
{
	var oTab = this.parentElement.parentElement;
	// Se verifica que se haya presionado el boton Shift...
	if(event.shiftKey)
	{
		// Se verifica si no se presiono Control...
		if(!event.ctrlKey)
		{
			// Se deseleccionan todos...
			var iCnt;
			for(iCnt = 0; iCnt < oTab.rows.length; iCnt++)
			{
				oTab.rows[iCnt].sel = "0";
				oTab.rows[iCnt].style.backgroundColor = "";
			}
		}
		// Se verifica la última selecta...
		var iIni = this.parentElement.parentElement.fSel;
		// Se valida que exista...
		if(iIni < 0) return;
		// Se verifica la actual...
		var iFin = this.rowIndex;
		if(iIni == iFin) return;
		// Se seleccionan las filas correspondientes...
		var iCnt, iMax;
		if(iIni < iFin)
		{
			iCnt = iIni;
			iMax = iFin;
		}
		else
		{
			iCnt = iFin;
			iMax = iIni;
		}
		for(iCnt; iCnt <= iMax; iCnt++)
		{
			oTab.rows[iCnt].sel = "1";
			oTab.rows[iCnt].style.backgroundColor = "#7590AB";
		}
	}
	else
	{
		// Se verifica si no se presiono Control...
		if(!event.ctrlKey)
		{
			// Se deseleccionan todos...
			var iCnt;
			for(iCnt = 0; iCnt < oTab.rows.length; iCnt++)
			{
				oTab.rows[iCnt].sel = "0";
				oTab.rows[iCnt].style.backgroundColor = "";
			}
			// Se selecciona la fila...
			this.sel = "1";
			this.style.backgroundColor = "#7590AB";
			// Se verifica una acción secundaria al Seleccionar...
			if(this.fnClick != "") eval(this.fnClick);
			// Se registra como la ultima fila selecta...
			oTab.fSel = this.rowIndex;
		}
		else
		{
			// Se verifica si se ha seleccionado...
			if(this.sel != "1")
			{
				// Se selecciona la fila...
				this.sel = "1";
				this.style.backgroundColor = "#7590AB";
				// Se verifica una acción secundaria al Seleccionar...
				if(this.fnClick != "") eval(this.fnClick);
				// Se registra como la ultima fila selecta...
				oTab.fSel = this.rowIndex;
			}
			else
			{
				// Se selecciona la fila...
				this.sel = "0";
				this.style.backgroundColor = "";
			}
		}
	}
}// sel_ClickM
function sel_ObtenerSeleccion(pIDtabla, pCelda, pChr)
{
	// Se obtiene el Objeto de la Tabla...
	var oTab = eval("document.all." + pIDtabla);
	if(!oTab) return("");
	// Se barren las filas y se buscan los seleccionados...
	var iCnt, sRet = "", sVal = "";
	var sChr = ",";
	var iCelda = 0;
	if(pCelda) iCelda = pCelda;
	if(pChr) sChr = pChr;
	for(iCnt = 0; iCnt < oTab.rows.length; iCnt++)
	{
		if(oTab.rows[iCnt].sel == "1")
		{
			sVal = oTab.rows[iCnt].cells[iCelda].innerText;
			if(oTab.rows[iCnt].cells[iCelda].childNodes[0])
			{
				// Se busca el Hidden...
				if(oTab.rows[iCnt].cells[iCelda].childNodes[0].type == "hidden")	
					sVal = oTab.rows[iCnt].cells[iCelda].childNodes[0].value;
			}
			if(sRet == "") sRet = sVal;
			else sRet += sChr + sVal;
		}
	}
	return(sRet);
}// sel_ObtenerSeleccion
function sel_Seleccionar(pIDtabla, pCelda, pDatos)
{
	// Se seleccionan las filas correspondientes...
	// pDatos corresponde a un arreglo de strings, ejem: ["1"] ó ["1","2",...,"N"]
	// Se obtiene el Objeto de la Tabla...
	var oTab = eval("document.all." + pIDtabla);
	// Se barren las filas y se buscan los seleccionados...
	var iCnt, iCnt2, sVal = "";
	var iCelda = 0;
	if(pCelda) iCelda = pCelda;
	for(iCnt = 0; iCnt < oTab.rows.length; iCnt++)
	{
		// Se obtiene el Dato...
		sVal = oTab.rows[iCnt].cells[iCelda].innerText;
		if(oTab.rows[iCnt].cells[iCelda].childNodes[0])
		{
			// Se busca el Hidden...
			if(oTab.rows[iCnt].cells[iCelda].childNodes[0].type == "hidden")	
				sVal = oTab.rows[iCnt].cells[iCelda].childNodes[0].value;
		}
		// Se verifica si hay que seleccionar o no...
		for(iCnt2 = 0; iCnt2 < pDatos.length; iCnt2++)
		{
			if(sVal == pDatos[iCnt2])
			{
				// Se selecciona la fila...
				oTab.rows[iCnt].sel = "1";
				oTab.rows[iCnt].style.backgroundColor = "#7590AB";
				break;
			}
			else
			{
				oTab.rows[iCnt].sel = "0";
				oTab.rows[iCnt].style.backgroundColor = "";
			}
		}
	}
}// sel_Seleccionar
