
//-------------------------------------------------------------------------------------------
// Funciones generales
//-------------------------------------------------------------------------------------------

function trim(strAux) {
	while (strAux.charAt(strAux.length - 1) == ' ')
		strAux = strAux.substr(0, strAux.length - 1);
	
	while (strAux.charAt(0) == ' ')
		strAux = strAux.substr(1, strAux.length);
                  		
	return strAux;
}

function getAbsoluteTop(Element) {
	var Top = 0;
		
	while (Element && Element != document.body) {
		Top = Top + Element.offsetTop;
		Element = Element.offsetParent;
	}
		
	return Top;
}

function getAbsoluteLeft(Element) {
	var Left = 0;
		
	while (Element && Element != document.body) {
		Left = Left + Element.offsetLeft;
		Element = Element.offsetParent;
	}
		
	return Left;
}

function findFrame(sName) {
	var iAux;
		
	for (iAux = 0; iAux < window.parent.frames.length; iAux++) {
		if (window.parent.frames[iAux].name.toUpperCase() == sName.toUpperCase()) {
			return window.parent.frames[iAux];
		}
	}

	if (window.opener) {
		for (iAux = 0; iAux < window.opener.parent.frames.length; iAux++) {
			if (window.opener.parent.frames[iAux].name.toUpperCase() == sName.toUpperCase()) {
				return window.opener.parent.frames[iAux];
			}
		}
	}
}

function toArray(arrAux) {
	if (arrAux) {
		if (!arrAux.length) {
			return new Array(arrAux);
		} else {
			return arrAux;
		}
	} else {
		return new Array();
	}
}

function ReplaceRoot(sPath) {
	var sAux;
	
	while (true) {
		sAux = sPath.replace(new RegExp("[$]ROOT[$]/", "i"), parRoot);
		if (sAux == sPath) break;
		sPath = sAux;
	}
	
	while (true) {
		sAux = sPath.replace(new RegExp("[$]ROOT[$]\\\\", "i"), parRoot);
		if (sAux == sPath) break;
		sPath = sAux;
	};
	
	while (true) {
		sAux = sPath.replace(new RegExp("[$]ROOT[$]", "i"), parRoot);
		if (sAux == sPath) break;
		sPath = sAux;
	};

	// 20060127 ddignazi
	while (true) {
		sAux = sPath.replace(new RegExp("[$]SITE_ROOT[$]/", "i"), parSiteRoot);
		if (sAux == sPath) break;
		sPath = sAux;
	}
	
	while (true) {
		sAux = sPath.replace(new RegExp("[$]SITE_ROOT[$]\\\\", "i"), parSiteRoot);
		if (sAux == sPath) break;
		sPath = sAux;
	};
	
	while (true) {
		sAux = sPath.replace(new RegExp("[$]SITE_ROOT[$]", "i"), parSiteRoot);
		if (sAux == sPath) break;
		sPath = sAux;
	};

	return sPath;
}
	

//-------------------------------------------------------------------------------------------
// Funciones para el ABM
//-------------------------------------------------------------------------------------------

var LastRow;

function MenuContexto() {
	if (document.elementFromPoint(event.clientX, event.clientY).tagName != 'INPUT') {
		//alert("Menu de contexto anulado!");
		//return false;
	}
}

function BotonMouseMove(Boton, sColor) {
  if (!window.event) return;    // solo soportado por MSIE

	Boton.borderColor = (!sColor ? parColorAbmBordeBotonera : sColor);

	if (event.button == 0) {
		Boton.style.cursor = "hand";
	} else {
		Boton.style.cursor = "wait";
	}
	
	if (Boton.title) 
		window.status = Boton.title;
	else
		window.status = "";
}

function BotonMouseOut(Boton, bSelected, sColor) {
  if (!window.event) return;    // solo soportado por MSIE
    
	if (bSelected) {
		Boton.borderColor = (!sColor ? parColorAbmBordeBotonera : sColor);
	} else {
		Boton.borderColor = "";
	}
	
	window.status = '';
}

function BotonMouseDown(Boton, sColor) {
  if (!window.event) return;    // solo soportado por MSIE

	Boton.borderColor = (!sColor ? parColorAbmBordeBotonera : sColor);
}

function ResaltarFila(Row, ColorHigh, ColorNormal, FontHigh, FontNormal) {
	var iAux, arrFont;

	if (!Row) return;
	if (Row.tagName != 'TR') return;
	if (!ColorHigh) ColorHigh = parDarkBackColor;
	if (!ColorNormal) ColorNormal = parLightBackColor;
	if (!FontHigh) FontHigh = '#FFFFFF';
	if (!FontNormal) FontNormal = '#000000';

	if (LastRow) {
		LastRow.bgColor = ColorNormal;

		arrFont = LastRow.cells;
		if (!arrFont.length) arrFont = new Array(arrFont);
	
		for (iAux = 0; iAux < arrFont.length; iAux++) {
			var arrItems = arrFont[iAux].getElementsByTagName('FONT');
			var iFont;
			
			for (iFont = 0; iFont < arrItems.length; iFont++) {
				arrItems[iFont].color = FontNormal;
			}
		}
	}

	Row.bgColor = ColorHigh;
	
	arrFont = Row.cells;
	if (!arrFont.length) arrFont = new Array(arrFont);
	
	for (iAux = 0; iAux < arrFont.length; iAux++) {
		var arrItems = arrFont[iAux].getElementsByTagName('FONT');
		var iFont;
		
		for (iFont = 0; iFont < arrItems.length; iFont++) {
			arrItems[iFont].color = FontHigh;
		}
	
	}
	
	LastRow = Row;
}

function ImgMouseOver(img) {
	img.style.borderLeftColor = 'white';
	img.style.borderTopColor = 'white';
	img.style.borderRightColor = 'gray';
	img.style.borderBottomColor = 'gray';
	img.hspace = img.hspace - 1;
	img.vspace = img.vspace - 1;
	img.border = 1;
}

function ImgMouseOut(img) {
	img.hspace = img.hspace + 1;
	img.vspace = img.vspace + 1;
	img.border = 0;
}

function selectButtonEvent(oElem) {
	if (event.type == 'mouseout') {
		oElem.all('p').style.borderStyle = 'solid';
		oElem.all('p').style.borderColor = parColorAbmFondoCentral;
	} else if (event.type == 'mouseover' || event.type == 'mouseup') {
		oElem.all('p').style.borderStyle = 'outset';
		oElem.all('p').style.borderColor = '';
	} else if (event.type == 'mousedown') {
		oElem.all('p').style.borderStyle = 'inset';
		oElem.all('p').style.borderColor = '';
	}
}

//-------------------------------------------------------------------------------------------
// Funciones para manejo de Combos
//-------------------------------------------------------------------------------------------

function getValue(sName, sValues, sValueSep, sKeySep) {
	var arrValues, arrKeys, iAux, iAux2, sRet = '';

	if (!sValues) return;
	if (!sValueSep) sValueSep = '|';
	if (!sKeySep) sKeySep = '=';

	arrValues = sValues.split(sValueSep);
		
	for (iAux = 0; iAux < arrValues.length; iAux++) {
		arrKeys = arrValues[iAux].split(sKeySep);
			
		if (arrKeys[0].toUpperCase() == sName.toUpperCase()) {
			for (iAux = 1; iAux < arrKeys.length; iAux++) {
				sRet = sRet + arrKeys[iAux];
			}

			return sRet;
		}
	}
}

function IsIn(elem, arrElem, returnPos) {
	var iAux;

	for (iAux = 0; iAux < arrElem.length; iAux++) 
		if (arrElem[iAux] == elem)
			if (returnPos) return iAux; else return true;
	
	if (returnPos) return -1; else return false;
}

function AddOption(Combo, sValue, sText, sData) {
	var objOption;
	
	objOption = document.createElement('OPTION');
	Combo.options.add(objOption);

	objOption.value = sValue;
	objOption.text = sText;
	if (sData && sData != '') objOption.data = sData;
}

function RemoveOption(Combo, sValue) {
	var iAux = 0;
	
	while (iAux < Combo.options.length) {
		if (Combo.options[iAux].value == sValue) {
			Combo.options.remove(iAux);			
		} else {
			iAux++;
		}
	}
}

function UpdateOption(Combo, sValue, sText, sData) {
	var iAux = 0;
	
	while (iAux < Combo.options.length) {
		if (Combo.options[iAux].value == sValue) {
			Combo.options[iAux].text = sText;
			if (sData && sData != '') Combo.options[iAux].data = sData;
		}
		
		iAux++;
	}
}

function SetOption(Combo, sValue, bLastOcurrence) {
	var iAux = 0;
	
	while (iAux < Combo.options.length) {
		if (Combo.options[iAux].value == sValue) {
			Combo.selectedIndex = iAux;
			if (!bLastOcurrence) return;
		} else {
			iAux++;
		}
	}
}

function FillCombo(Combo, arrElements, FilterId, SelectedId, arrBeforeElements, arrAfterElements, FilterRegExp) {
	var arrElem = new Array(), arrData, objOption, intSelected = -1, intAux;

	if (arrBeforeElements) arrElem = arrElem.concat(arrBeforeElements);
	if (arrElements) arrElem = arrElem.concat(arrElements);
	if (arrAfterElements) arrElem = arrElem.concat(arrAfterElements);

  while (Combo.options.length > 0) {
    //Combo.options.remove(0);  --> solo soportado por MSIE
    Combo.options[Combo.options.length - 1] = null;
  }

	for (intAux = 0; intAux < arrElem.length; intAux++) {
		arrData = arrElem[intAux].split('|');
		
		if (arrData.length == 2 || (!FilterId && !FilterRegExp) ||
			(FilterId && (arrData[0] == FilterId || IsIn(arrData[0], FilterId))) ||
			(FilterRegExp && FilterRegExp.test(arrData[0]))	) {

			if (arrData.length > 3) {
				AddOption(Combo, arrData[arrData.length - 3], arrData[arrData.length - 2], arrData[arrData.length - 1]);
				if (arrData[arrData.length - 3] == SelectedId) intSelected = Combo.options.length - 1;
			} else {
				AddOption(Combo, arrData[arrData.length - 2], arrData[arrData.length - 1]);
				if (arrData[arrData.length - 2] == SelectedId) intSelected = Combo.options.length - 1;
			}
		}
	}
		
	if (intSelected == -1 && !isNaN(parseInt(SelectedId))) intSelected = parseInt(SelectedId);
	Combo.selectedIndex = intSelected;
}

function ReplaceCombo(oCombo, sOptions) {
	var sName, sValue, sOuter, sInner;
	
	sName = oCombo.name;
	if (sName == '') sName = oCombo.id;
	sValue = oCombo.value;
	
	sOuter = oCombo.outerHTML;
	sInner = oCombo.innerHTML + '</SELECT>';
	sOuter = sOuter.substr(0, sOuter.length - sInner.length);
	sOuter = sOuter + sOptions + '</SELECT>';

	oCombo.outerHTML = sOuter;
		
	oCombo = document.getElementById(sName);
	if (oCombo) oCombo.value = sValue;
}


//-------------------------------------------------------------------------------------------
// Funciones para el pedido de datos al servidor.
//-------------------------------------------------------------------------------------------

var oRDRequest = null;
var oRDSyncRequest = null;
var arrRequests = new Array();
var arrRequestQueue = new Array();
var bRequestInCurse = false;
//var dCache = new ActiveXObject("Scripting.Dictionary");
var bCache = true;

function SearchRequest(sKey, sParam, oControl, sValue) {
	var arrAux, iAux, sData, sUniqueId = '';

	for (iAux = 0; iAux < arrRequests.length; iAux++) {
		if (arrRequests[iAux]) {
			arrAux = arrRequests[iAux].split('<||>');
					
			if (arrAux.length >= 2 && arrAux[0] == sKey && arrAux[1] == sParam) {
				if (oControl) {
					if (oControl.toString() == '[object]') {
						if (oControl.name != '') {
							sUniqueId = oControl.name;
						} else if (oControl.id != '') {
							sUniqueId = oControl.id;
						} else {
							sUniqueId = oControl.uniqueID;
						}
					} else {
						sUniqueId = oControl;
						oControl = document.all(sUniqueId);
					}

					if (!oControl) {
						alert('SearchRequest! - Control not found!');
					} else if (oControl.tagName == 'SELECT' || oControl.tagName == 'INPUT') {
						if (!sValue) sValue = oControl.value;
					} else if (oControl.tagName == 'FONT') {
						if (!sValue) sValue = oControl.innerHTML;
					}
				}

				if (!sValue) sValue = '';

				sData = sKey + '<||>' + sParam + '<||>' + sUniqueId + '<||>' + sValue + '<||>' + arrAux[4];
				DataReady(sData);
				return true;
			}
		}
	}
}

function DeleteRequest(sKey, sParam) {
	var arrAux, iAux;

	//if (dCache.exists(sKey + '_' + sParam)) {
	//	dCache.remove(sKey + '_' + sParam);
	//};
	
	for (iAux = 0; iAux < arrRequests.length; iAux++) {
		if (arrRequests[iAux]) {
			arrAux = arrRequests[iAux].split('<||>');
					
			if (arrAux.length >= 2 && arrAux[0] == sKey && arrAux[1] == sParam) {
				arrRequests = arrRequests.slice(0, iAux).concat(arrRequests.slice(iAux + 1));
				return;
			}
		}
	}
}

function RequestData(sKey, sParam, oControl, sValue, bTestUrl, sProcessPage) {
	RequestDataExt(sKey, sParam, oControl, sValue, bTestUrl, true, sProcessPage);
}

function RequestSyncData(sKey, sParam, oControl, sValue, bTestUrl, sProcessPage) {
	return RequestDataExt(sKey, sParam, oControl, sValue, bTestUrl, false, sProcessPage);
}

function RequestDataExt(sKey, sParam, oControl, sValue, bTestUrl, bAsync, sProcessPage) {
	var arrAux, sData, sUniqueId = '', sUrl;
	
	if (oControl) {
		if (oControl && oControl.toString() == '[object]') {
			if (oControl.name != '') {
				sUniqueId = oControl.name;
			} else if (oControl.id != '') {
				sUniqueId = oControl.id;
			} else {
				sUniqueId = oControl.uniqueID;
			}
		} else {
			sUniqueId = oControl;
			oControl = document.all(sUniqueId);
			
		}
		
		if (!oControl) {
			alert('RequestData! - Control not found!');
		} else if (oControl.tagName == 'SELECT') {
			if (!sValue) sValue = oControl.value;
			
			//if (!dCache.exists(sKey + '_' + sParam)) {
				AddOption(oControl, sValue, 'Loading . . .');
				oControl.selectedIndex = oControl.options.length - 1;
			//}
		} if (oControl.tagName == 'INPUT') {
			if (!sValue) sValue = oControl.value;
			oControl.value = '';
		} if (oControl.tagName == 'FONT') {
			if (!sValue) sValue = oControl.innerHTML;
			oControl.innerHTML = '';
		}

	}
	
	//if (dCache.exists(sKey + '_' + sParam)) {
	//	DataReady(sKey + "<||>" + sParam + "<||>" + sUniqueId + "<||>" + sValue + "<||>" + dCache.item(sKey + '_' + sParam));
	//	return;
	//}
	
	
	if (!sValue) sValue = '';
	
	if (bRequestInCurse && bAsync) {
		arrRequestQueue[arrRequestQueue.length] = sKey + '<||>' + sParam + '<||>' + sUniqueId + '<||>' + ((sValue) ? sValue : '@NULL@') + '<||>' + ((bTestUrl) ? '@TRUE@' : '@FALSE@');
		return;
	}
	
	window.status = 'Loading data . . .';
	if(bAsync) bRequestInCurse = true;
	
	if(bCache == true)
		if (!bTestUrl && SearchRequest(sKey, sParam, oControl, sValue)) return;

	if(sProcessPage){
		arrAux = sProcessPage
		sUrl = sProcessPage + '?Operacion=RequestData' + 
									   '&Key=' + sKey + 
									   '&Param=' + escape(sParam) + 
									   '&Control=' + sUniqueId + 
									   '&Value=' + sValue +
									   '&Dummy=' + newTarget();
	}else{
		arrAux = window.location.pathname.split('/');
		sUrl = arrAux[arrAux.length - 1] + '?Operacion=RequestData' + 
									   '&Key=' + sKey + 
									   '&Param=' + escape(sParam) + 
									   '&Control=' + sUniqueId + 
									   '&Value=' + sValue +
									   '&Dummy=' + newTarget();
		
	}
	
	
	
	
	
	
	if (bTestUrl) {
		openWindow(sUrl, newTarget());
		bRequestInCurse = false;
		return;
	}
	if(bAsync){
		//setCookie('ventanaDialogo', '1');
		oRDRequest = new ActiveXObject("Microsoft.XMLHTTP");
		oRDRequest.open('POST', sUrl, bAsync);
		oRDRequest.onreadystatechange = DataReady;
		oRDRequest.send();

		
	}else{
		//setCookie('ventanaDialogo', '1');
		oRDSyncRequest = new ActiveXObject("Microsoft.XMLHTTP");
		oRDSyncRequest.open('POST', sUrl, bAsync);
		oRDSyncRequest.send();
		//setCookie('ventanaDialogo', '0');
		if(!oControl){
			return oRDSyncRequest.responseText;
		}else{
			FillControl(oControl, oRDSyncRequest.responseText);
		}
		
	}
	
	
}

function FillControl(oControl, sData){
	var arrData, oControl, bFocus = false;
	arrData = sData.split('<||>');
		
	if (arrData[0] == 'Error') {
		alert('RequestData Error!\r\r' + arrData[1] + '\r' + arrData[4]);
	} else {
		
		if (arrData[2]) {
			
			if (!oControl) {
				alert('FillControl! - Control not found!');
			} else {
				if (document.activeElement == oControl) bFocus = true;
				
				//if (!dCache.exists(arrData[0] + '_' + arrData[1]) && bCache == true){ 
				//	dCache.add (arrData[0] + '_' + arrData[1],arrData[4]);
				//}
				
				if (oControl.tagName == 'SELECT') {
					ReplaceCombo(oControl, arrData[4]);
					oControl.value = arrData[3];
				}if (oControl.tagName == 'INPUT') {
					oControl.value = arrData[4];
				}if (oControl.tagName == 'FONT') {
					oControl.innerHTML = arrData[4];
				}

				if (bFocus) setTimeout("document.all('" + arrData[2] + "').focus();", 10);
			}
		}
	}

	window.status = 'Data loaded!';
	
}



function DataReady(sData) {
	var sData, arrData, oControl, bAdd = false, bFocus = false;

	if (!sData && oRDRequest && oRDRequest.readyState == 4) {
		sData = oRDRequest.responseText;
		oRDRequest = null;
		bAdd = true;
		//setCookie('ventanaDialogo', '0');
	}
	
	if (sData) {
		arrData = sData.split('<||>');
		
		if (arrData[0] == 'Error') {
			alert('RequestData Error!\r\r' + arrData[1] + '\r' + arrData[4]);
		} else {
			if (bAdd) arrRequests[arrRequests.length] = sData;
			
			if (arrData[2]) {
				oControl = document.all(arrData[2]);

				if (!oControl) {
					alert('DataReady! - Control not found!');
				} else {
					if (document.activeElement == oControl) bFocus = true;
					
					//if (!dCache.exists(arrData[0] + '_' + arrData[1]) && bCache == true){ 
					//	dCache.add (arrData[0] + '_' + arrData[1],arrData[4]);
					//}
					
					if (oControl.tagName == 'SELECT') {
						ReplaceCombo(oControl, arrData[4]);
						oControl.value = arrData[3];
					}if (oControl.tagName == 'INPUT') {
						oControl.value = arrData[4];
					}if (oControl.tagName == 'FONT') {
						oControl.innerHTML = arrData[4];
					}

					if (bFocus) setTimeout("document.all('" + arrData[2] + "').focus();", 10);
				}
			}
			
			if (window.onDataReady) onDataReady(arrData[0], arrData[1], document.all(arrData[2]), arrData[3], arrData[4], bAdd);
		}

		window.status = 'Data loaded!';
		bRequestInCurse = false;
			
		if (arrRequestQueue.length > 0) {
			sData = arrRequestQueue[0];
			arrRequestQueue = arrRequestQueue.slice(1);
			arrData = sData.split('<||>');
			RequestData(arrData[0], arrData[1], arrData[2], ((arrData[3] == '@NULL@') ? null : arrData[3]), ((arrData[4] == '@FALSE@') ? false : true));
		}
	}
}




//-------------------------------------------------------------------------------------------
// Funciones para manejo de menus de contexto
//-------------------------------------------------------------------------------------------

var oDivLastMenu;
	
function AsociarMenuContexto(divMenu, oElem, iFixedLeft, iFixedTop, bOpenOnClick) {
	var arrItems, iAux;
		
	if (oDivLastMenu) {
		OcultarMenuContexto(oDivLastMenu);
	}
		
	if (divMenu) {
		arrItems = divMenu.all('trItem');
		if (arrItems) {
			if (!arrItems.length) arrItems = new Array(arrItems);
						
			for (iAux = 0; iAux < arrItems.length; iAux++) {
				arrItems[iAux].onmousemove = MC_Item_onMouseOver;
				arrItems[iAux].onmouseover = MC_Item_onMouseOver;
				arrItems[iAux].onclick = MC_Item_onClick;
			}
		}

		divMenu.fixedLeft = iFixedLeft;
		divMenu.fixedTop = iFixedTop;
		divMenu.openOnClick = bOpenOnClick;
		oElem.divMenu = divMenu;
		document.body.onmousemove = null;
		oElem.oncontextmenu = MC_Elem_onContextMenu;
		oElem.onmouseup = MC_Elem_onMouseUp;
		divMenu.oncontextmenu = MC_Elem_onContextMenu;
	}
}
	
function MC_Elem_onContextMenu() {
	event.returnValue = false;
	return false;
}
	
function MC_Elem_onMouseUp() {
	if ((event.button == 2 || this.divMenu.openOnClick) && !document.body.firingContextMenu && this && this.divMenu) {
		this.divMenu.eventType = event.type;
		this.divMenu.eventSrcElement = event.srcElement;
		this.divMenu.eventHandlerElement = this;
		document.body.firingContextMenu = true;
		
		setTimeout("MostrarMenuContexto(document.all('" + this.divMenu.id + "'), " + event.clientY + ", " + event.clientX + ");", 100);
		//MostrarMenuContexto(document.all(this.divMenu.id), event.clientY, event.clientX );
	}
}
	
function MC_Item_onMouseOver() {
	if (!oDivLastMenu) return;
	
	if (this) {
		if (oDivLastMenu.last) {
			oDivLastMenu.last.bgColor = parColorAbmFondoCentral;
			oDivLastMenu.last.all('fnt').color = parColorAbmTextoCentral;
		}
			
		this.bgColor = parColorAbmFondoDivisor;
		this.all('fnt').color = parColorAbmTextoDivisor;
		oDivLastMenu.last = this;
		oDivLastMenu.entered = true;
	}
}

function MC_Item_onClick(ItemName) {
	var divMenu;
		
	if (!oDivLastMenu) return;
		
	if (this) {
		divMenu = oDivLastMenu;
		OcultarMenuContexto();
			
		if (window.onMenuContextoClick) {
			onMenuContextoClick(divMenu, this);
		}
	}
}

function MostrarMenuContexto(divMenu, clientY, clientX) {
	var arrItems, iAux;
	var iLastHeight = 0;

	if (oDivLastMenu) {
		OcultarMenuContexto();
	}
	
	divMenu.style.visibility = "visible";
	divMenu.style.visibility = "hidden";
	
	while (iLastHeight != divMenu.offsetHeight){
		
		iLastHeight = divMenu.offsetHeight;
		if (divMenu.fixedTop) {
			divMenu.style.top = divMenu.fixedTop;
		} else if (document.body.offsetHeight - clientY < divMenu.offsetHeight) {
			divMenu.style.top = document.body.scrollTop + clientY - divMenu.offsetHeight + 5;
			if(parseInt(divMenu.style.top,10) < document.body.scrollTop){
				divMenu.style.top = document.body.scrollTop;
			}
		} else {
			divMenu.style.top = document.body.scrollTop + clientY - 5;

		}

		if (divMenu.fixedLeft) {
			divMenu.style.left = divMenu.fixedLeft;
		} else if (document.body.offsetWidth - clientX < divMenu.offsetWidth) {
			divMenu.style.left = document.body.scrollLeft + clientX - divMenu.offsetWidth + 5;
		} else {
			divMenu.style.left = document.body.scrollLeft + clientX - 5;
		}

		if (window.onMenuContextoBeforeShow) {
			if (window.onMenuContextoBeforeShow(divMenu)) {
				document.body.firingContextMenu = false;
				return;
			}
		}
	
		divMenu.entered = false;
		divMenu.style.visibility = "visible";
					
		arrItems = divMenu.all('trItem');
		if (arrItems) {
			if (!arrItems.length) arrItems = new Array(arrItems);
						
			for (iAux = 0; iAux < arrItems.length; iAux++) {
				arrItems[iAux].bgColor = '';
				arrItems[iAux].all('fnt').color = '';
			}
		}
		
		oDivLastMenu = divMenu;
		document.body.onmousemove = MC_Body_onMouseMove;
		document.body.firingContextMenu = false;
	}
}
		
function MC_Body_onMouseMove() {
	OcultarMenuContexto(true);
}

function OcultarMenuContexto(check) {
	if (!oDivLastMenu) return;
	if (oDivLastMenu.style.visibility == "hidden") return;
	if (!oDivLastMenu.entered) return;
			
	if (check) {
		if (document.body.scrollLeft + event.clientX >= oDivLastMenu.offsetLeft - 15 &&
			document.body.scrollLeft + event.clientX <= oDivLastMenu.offsetLeft + oDivLastMenu.offsetWidth + 15 &&
			document.body.scrollTop + event.clientY >= oDivLastMenu.offsetTop - 15 &&
			document.body.scrollTop + event.clientY <= oDivLastMenu.offsetTop + oDivLastMenu.offsetHeight + 15) {
					
			return;
		}
	}
			
	oDivLastMenu.style.visibility = "hidden";
	oDivLastMenu = null;
}


//-------------------------------------------------------------------------------------------
// Funciones para manejo de Cookies
//-------------------------------------------------------------------------------------------

function setCookie(name, value, expireDate) {
	if (expireDate) {
		document.cookie = escape(name) + '=' + escape(value) + ';path=/;expires=' + expireDate.toGMTString();
	} else {
		document.cookie = escape(name) + '=' + escape(value) + ';path=/';
	}
}

function getCookie(name) {
	var arrPairs, arrPair, intAux;
  
	arrPairs = document.cookie.split(';');

	for (intAux = 0; intAux < arrPairs.length; intAux++) {
		arrPair = arrPairs[intAux].split('=');

		if (arrPair[0].replace(/\s/i, '').toUpperCase() == name.toUpperCase()) {
			return unescape(arrPair[1]);
		}
	}
}

function getQuery(name) {
	var arrPairs, arrPair, intAux;
  
	arrPairs = window.location.search.substring(1).split('&');

	for (intAux = 0; intAux < arrPairs.length; intAux++) {
		arrPair = arrPairs[intAux].split('=');
		
		if (arrPair[0].replace(/\s/i, '').toUpperCase() == name.toUpperCase()) {
			return unescape(arrPair[1]);
		}
	}
}

function newTarget() {
	return parseInt(Math.random() * 50000);
}


//-------------------------------------------------------------------------------------------
// Funciones para validaciones numericas
//-------------------------------------------------------------------------------------------

function ValidarCUIT(strCuit) {
	var VP, A, C, DV, nI;
    	
	while (strCuit.substr(0, 1) == '0') {
		strCuit = strCuit.substr(1, strCuit.length - 1);
	}
	
	if (strCuit.substr(0,1) != "2" && strCuit.substr(0,1) != "3"){
		return false;
	}
    
	VP = "5432765432";
	A = 0;
    
	for (nI = 0;nI<=9;nI++){
	    A = A + parseInt(strCuit.substr( nI, 1)) * parseInt(VP.substr(nI, 1));
	}
    
	C = A % 11;
    	
	if (C == 0){
	    DV = 0;
	} else {
	    DV = 11 - C;
	}
		    
	if (parseInt(DV) != parseInt(strCuit.substr(strCuit.length-1, 1))){
		return false;
	}
		
	return true;
}


//-------------------------------------------------------------------------------------------
// Funciones para el manejo de textareas
//-------------------------------------------------------------------------------------------

function wrapControl(oAux) {
  var bAux1 = false;
  var bAux2 = false;
  var proteccion = 0;
  
  if (!oAux) return;
	if (oAux.tagName != 'TEXTAREA') return;
	
	while (oAux.clientHeight != oAux.scrollHeight) {
		proteccion++;
		if (oAux.clientHeight > oAux.scrollHeight) {
			if (oAux.rows <= 1) break;
			oAux.rows = oAux.rows - 1;
			bAux1 = true;
		} else {
			oAux.rows = oAux.rows + 1;
			bAux2 = true;
		}
		
		if (bAux1 && bAux2) break;
		
		/*Protejo que no se vaya de mambo*/
		if(proteccion > 100) return;
		
		if(oAux.rows <= 0)
		{
		  oAux.rows = 1;
		  return;
		}
		if(oAux.rows > 10)
		{
		  oAux.rows = 10;
		  return;
		}
	}
}

function limitText(oTextArea,length){
		
	if(oTextArea.value.length > length){
		oTextArea.value = oTextArea.value.substr(0,length - 1);
	}	
}

function TextAreasSetWrapControl() {
    var arrObjs, iObj;
    arrObjs = document.all;
    if (!arrObjs.length) arrObjs = new Array(arrObjs)
        
    for (iObj = 0; iObj < arrObjs.length; iObj++) {
        if (arrObjs[iObj].tagName == 'TEXTAREA') {
            wrapControl(arrObjs[iObj]);
        }    
    }
}

function RCo(sData) {
    var sCode;	
	
    if (!sData.split('[')[1]) return('');
    sCode = sData.split('[')[1];
	    
    if (!sCode.split(']')[0]) return('');
    return(sCode.split(']')[0]);
} 

function RDe(sData) {
    var sCode;	
	
    if (!sData.split('[')[0]) return('');
    return(sData.split('[')[0]);
}    

function centerObject(obj){

	obj.style.top = document.body.scrollTop + (document.body.offsetHeight - obj.offsetHeight) / 2;
	obj.style.left = document.body.scrollLeft + (document.body.offsetWidth - obj.offsetWidth) / 2;
}

function Serializer(){
    var rowSplitter;
    var rows, columns; 
        
    this.rowSplitter = '|~|';
    this.rows = '';
    this.columns = '';
        
    this.setRowSplitter = setRowSplitter;
    this.getRowSplitter = getRowSplitter;
    this.addColumn = addColumn;
    this.addRow = addRow;
    this.getRowString = getRowString;
    this.serialize = serialize;
}  	  
  	
function setRowSplitter(param){ this.rowSplitter = param;}
function getRowSplitter(param){ return this.rowSplitter;}
  	
function addColumn(key, value){
    if (this.columns != '') this.columns += ';';
    this.columns += key + '=' + value;
}
  	
function addRow(){
	if (this.rows != '') this.rows += this.rowSplitter;
    this.rows += this.getRowString();
    this.columns = '';
    
}
  	
function getRowString() {return this.columns;}
function serialize() {return this.rows;}


function Deserializer(){
	var sBuffer;
    var sRowSplitter;
    
    this.sRowSplitter = "|~|";
    this.getBuffer = getBuffer;
    this.setBuffer = setBuffer;
    this.getRowSplitter = getRowSplitter;
    this.setRowSplitter = setRowSplitter;
    this.getDictionary = getDictionary;
}

function getBuffer(){
	return this.sBuffer;
}

function setBuffer(sParam){ 
	this.sBuffer = sParam;
	return this;
}

function getRowSplitter(){
	return this.sRowSplitter;
}

function setRowSplitter(sParam){ 
	this.sRowSplitter = sParam;
	return this;
}

		 
function getDictionary(){
    var dValores;
    var dRow;
    var vRows, vColumns;
    var vRow, vColumn;
    var iRowCount, iAux, iAux2;
          
    dValores = new ActiveXObject("Scripting.Dictionary");
	
	if(this.sBuffer == '') return dValores;
	
    vRows = this.sBuffer.split(this.sRowSplitter);
    iRowCount = 0
    
    for(iAux = 0; iAux < vRows.length; iAux++){
		vRow = vRows[iAux];
		
        dRow = new ActiveXObject("Scripting.Dictionary");
          
        vColumns = vRow.split(";");
		for(iAux2 = 0; iAux2 < vColumns.length; iAux2++){    
			vColumn = vColumns[iAux2];
            dRow.Add(vColumn.split("=")[0], vColumn.split("=")[1]);
        }
              
        dValores.Add(iRowCount, dRow);
        iRowCount++;
    }
          
    return dValores;
}
      
/////////////////////////////////////////////////////////////////////////////////////////////////
// funciones agregadas para compatibilidad con Mozilla Firefox y manejo de JS estándar usando DOM
/////////////////////////////////////////////////////////////////////////////////////////////////

// 
// foo = getRowElementById(row, 'bar') equivale a
// foo = row.all('bar')
//
function getRowElementById(oRow, sElementId, debug) {
	var iCell, iNode, arrCells, arrNodes, oRowElement;

	if (!oRow.cells)
	{
		// ... asumo que me pasaron un TD y no un TR
		arrCells = new Array(oRow);
	}
	else
	{
		arrCells = oRow.cells;
	}

  for (iCell = 0; iCell < arrCells.length; iCell++) {
  	// la verificación extra del atributo 'id' es porque no cualquier nodo tiene este atributo
  	if (arrCells[iCell].getAttribute && arrCells[iCell].getAttribute('id') == sElementId) {
  		// me fijo si el elemento buscado es el TD
  		oRowElement = arrCells[iCell];
  		break;
  	} 
  	// me fijo dentro del TD
    arrNodes = arrCells[iCell].childNodes;
    for (iNode = 0; iNode < arrNodes.length; iNode++ ) {
      if (arrNodes[iNode].getAttribute && arrNodes[iNode].getAttribute('id') == sElementId)
        oRowElement = arrNodes[iNode];
    }
  }
  
  return oRowElement;
}


//
// arrFoo = getRowsById(table, 'bar') equivale a
// arrFoo = table.all('bar')
//
function getRowsById(oTable, sRowId) {
	var iRow, arrAllRows, arrRows;
	
	arrRows = new Array();
	
	arrAllRows = oTable.getElementsByTagName('tr');
	for (iRow = 0; iRow < arrAllRows.length; iRow++) {
		if (arrAllRows[iRow].id == sRowId)
			arrRows[arrRows.length] = arrAllRows[iRow];
	}
	
	return arrRows;
}


//
// arrFoo = getElementsById(element, 'td', 'bar') equivale a
// arrFoo = element.all('bar')
//
//  NOTA: Se asume que todos los elementos 'bar' del nodo element
//        son del mismo tipo!!!
//
// También funciona si en lugar de una tabla se le pasa el
// objeto document
//
function getElementsById(oNode, sTag, sId) {
	var iElement, arrAllElements, arrElements;
	
	arrElements = new Array();
	
	arrAllElements = oNode.getElementsByTagName(sTag);
	for (iElement = 0; iElement < arrAllElements.length; iElement++) {
		if (arrAllElements[iElement].id == sId) {
			arrElements[arrElements.length] = arrAllElements[iElement];
		}
	}
	
	return arrElements;
}

//
// setClipboard: Versión para Firefox y Opera
//
function setClipboard(text){
	var url = [
		'data:text/html;charset=utf-8;base64,PGJvZHk+PC9ib2',
		'R5PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKGZ1',
		'bmN0aW9uKGVuY29kZWQpe3ZhciBzd2ZfZGF0YSA9IFsKICdkYX',
		'RhOmFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoO2Jhc2U2',
		'NCxRMWRUQjJ3JywKICdBQUFCNG5EUGdZbGpBd01qSTRNejAlMk',
		'YlMkY5JTJGZTJaZkJnYUdhV3dNRE1uNUthJywKICdrTU10TjRH',
		'ZGdaZ1NJTXdaWEZKYW01UUFFJTJCQm9iaTFCTG5uTXlDcFB6RW',
		'9oU0dJJywKICdQRnAlMkZBeHNEREJRa3BGWkRGUUZGQ2d1eVM4',
		'QXlqSTRBRVVCaXkwVndBJTNEJTNEJwpdLmpvaW4oIiIpOwpkb2',
		'N1bWVudC5ib2R5LmlubmVySFRNTCA9IFsKICc8ZW1iZWQgc3Jj',
		'PSInLHN3Zl9kYXRhLCciICcsCiAnRmxhc2hWYXJzPSJjb2RlPS',
		'csZW5jb2RlZCwnIj4nLAogJzwvZW1iZWQ+JwpdLmpvaW4oIiIp',
		'Owp9KSgi',
		base64encode( encodeURIComponent(text) + '")</'+'script>')
	].join("");
	var tmp = document.createElement("div");
	tmp.innerHTML = [
		 '<iframe src="',url,'"'
		,' width="0" height="0">'
		,'</iframe>'
	].join("");
	with(tmp.style){
		position ="absolute";
		left = "-10px";
		top  = "-10px";
		visibility = "hidden";
	};
	document.body.appendChild(tmp);
	setTimeout(function(){document.body.removeChild(tmp)},1000);
	function base64encode(str){
		var Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
		var c1, c2, c3;
		var buf = [];
		var len = str.length;
		var i = 0;
		while(i < len){
			c1 = str.charCodeAt(i) & 0xff;
			c2 = str.charCodeAt(i+1);
			c3 = str.charCodeAt(i+2);
			buf.push(Chars[(c1 >> 2)]);
			if(i+1 == len){
				buf.push(Chars[(c1 & 0x3) << 4],"==");
				break;
			}
			buf.push(Chars[((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)]);
			if(i+2 == len){
				buf.push(Chars[(c2 & 0xF) << 2],"=");
				break;
			}
			buf.push(
				Chars[((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)],
				Chars[(c3 & 0x3F)]
			);
			i+=3;
		}
		return buf.join("")
	}
}

function toHex(iNum) {
	var iRes, sHex = '';
		
	iNum = parseInt('0' + iNum, 10);
		
	while (iNum > 16) {
		iRes = iNum % 16;
		sHex = (iRes == 10 ? 'A' : (iRes == 11 ? 'B' : (iRes == 12 ? 'C' : (iRes == 13 ? 'D' : (iRes == 14 ? 'E' : (iRes == 15 ? 'F' : iRes)))))) + sHex;
		iNum = parseInt(iNum / 16);
	}
		
	iRes = iNum;
	return (iRes == 10 ? 'A' : (iRes == 11 ? 'B' : (iRes == 12 ? 'C' : (iRes == 13 ? 'D' : (iRes == 14 ? 'E' : (iRes == 15 ? 'F' : iRes)))))) + sHex
}

