﻿// JScript File

var cmmbIsFireFox = (typeof(event) == "undefined"); // FireFox,NetScape
var cmmbIsIE = (typeof(document.releaseCapture) != "undefined"); // IE5.0+

// obtiene un elemento dado su ID
function getElem(sID)
  { 
  var oElem = document.getElementById(sID);
  return oElem;
  }

// concatena los parametros pasados, separados por un "|"
function cmmJoin()
  {
  var sResult = "";
  for(var i=0; i<arguments.length-1; i++)
    sResult += arguments[i].toString() + "|";

  if (arguments.length > 0)
    sResult += arguments[arguments.length-1].toString();
    
  return sResult;
  }

function cmmExists(Attr)
  {
  return (typeof(Attr) != "undefined");
  }

// devuelve el texto de un elemento
function cmmGetText(oElem)
  {
  if (cmmExists(oElem.innerText))
    return oElem.innerText;
  else
    return "";
  }
  
// pone el texto de un elemento   
function cmmSetText(oElem, sText)
  {
  if (sText.replace(/ /g,"") == "" && cmmExists(oElem.innerHTML))
    oElem.innerHTML = "&nbsp;";
  else 
    cmmSetText2(oElem, sText);
  }
  
function cmmSetText2(oElem, sText)
  {
  if (cmmExists(oElem.innerText))
    oElem.innerText = sText;
  else if (cmmExists(oElem.textContent))
    oElem.textContent = sText;
  else
    {
    //var oTextNode = document.createTextNode(sText);
    //oElem.innerHTML = "";
    //oElem.appendChild(oTextNode);
    }
  }

// *******************  Manejo de eventos ***********************

// cancela un evento 
function cmmCancelEvent(event)
  {
  if (!event) return;
  if (event.preventDefault)
    event.preventDefault();
  else
    event.returnValue = false;
  }

// impide que un evento se propague a los padres
function cmmCancelBubble(event)
  {
  if (!event)
    return;
    
  if (event.stopPropagation)
    event.stopPropagation();
  else
    event.cancelBubble = true;
  }
  
// Devuelve el elemento que provoco un evento
function cmmGetEventSrc(event)
  {
  if (event.srcElement)
    return event.srcElement;
  else if (event.target)
    return event.target;
  else
    return null;
  }
  
var cmmCount = 0;
function cmmGetCounter() { return cmmCount++; }

function cmmScrollIntoView(oElem, oContainer)
  {
  if (oElem && oElem.offsetTop) // parece funcionar con todos
    {
    if (!oContainer)
      oContainer = oElem.offsetParent;
      
    // hacer scroll solo si hace falta
    if (oElem.offsetTop < oContainer.scrollTop ||
        oElem.offsetTop + oElem.offsetHeight > oContainer.scrollTop + oContainer.offsetHeight)
      {
      var scroll = oElem.offsetTop + oElem.offsetHeight - oContainer.offsetHeight;
      if (scroll < 0) scroll = 0;
      oContainer.scrollTop = scroll;
      }
    }
  }
  
// **************** Para ComboBox y Radio Buttons ****************

// adiciona un option a un combo
function cmmAddOption(oCombo, sValue, sText)
  {
  var oOption = document.createElement("OPTION");
  oOption.value = sValue;
  oOption.text = sText;
  oCombo.options.add(oOption);
  }

// selecciona un valor en un combo
function cmmSelectComboValue(oCombo, sValue)
  {
  if (sValue == "") // caso especial necesario para el FireFox
    oCombo.selectedIndex = -1;
  else
    oCombo.value = sValue;
  }
  
// devuelve el radiobutton de nombre sName que este
// seleccionado
function cmmGetRadioSelected(sName)
  {
  var oColl = document.getElementsByName(sName);
  for(var i=0; i<oColl.length; i++)
    if (oColl[i].checked)
      return oColl[i];
      
  return null;
  }
  
// devuelve el valor del radiobutton de nombre sName que este
// seleccionado
function cmmGetRadioValue(sName)
  {
  var oRadio = cmmGetRadioSelected(sName);
  return (oRadio) ? oRadio.value : "";
  }

// devuelve la posicion de un elemento
function cmmGetElementPosition(element) 
  {
  var result = new Object();
  result.left = 0;
  result.top = 0;
  result.width = 0;
  result.height = 0;
  if (element.offsetParent)
    {
    result.left = element.offsetLeft;
    result.top = element.offsetTop;
    var parent = element.offsetParent;
    while (parent)
      {
      result.left += parent.offsetLeft;
      result.top += parent.offsetTop;
      var parentTagName = parent.tagName.toLowerCase();
      if (parentTagName != "table" &&
          parentTagName != "body" && 
          parentTagName != "html" && 
          parentTagName != "div" && 
          parent.clientTop && 
          parent.clientLeft) 
        {
        result.left += parent.clientLeft;
        result.top += parent.clientTop;
        }
      parent = parent.offsetParent;
      }
    }
  else if (element.left && element.top) 
    {
    result.left = element.left;
    result.top = element.top;
    }
  else 
    {
    if (element.x)
      result.left = element.x;
    if (element.y)
      result.top = element.y;
    }
  if (element.offsetWidth && element.offsetHeight) 
    {
    result.width = element.offsetWidth;
    result.height = element.offsetHeight;
    }
  else if (element.style && element.style.pixelWidth && element.style.pixelHeight) 
    {
    result.width = element.style.pixelWidth;
    result.height = element.style.pixelHeight;
    }
    
  return result;
  }

// precargar imagenes
function cmmPreloadImages()
  {
  var d = document;
  if (!d.XX_img)
    d.XX_img = new Array();
  var i,j = d.XX_img.length;
  var arg = cmmPreloadImages.arguments; 
  for(i=0; i<arg.length; i++)
    {
    d.XX_img[j] = new Image;
    d.XX_img[j++].src = arg[i];
    }
 }

// ********************* Manejo de Popups ************************

var cmmArrPopups = new Array();

// oculta todos los popups que esten visibles.
// devuelve false si alguno no se pudo ocultar.
// si bCancel = true, los popups se cierran cancelando.
function cmmHidePopups(bCancel)
  {
  if (typeof(bCancel) == "undefined")
    bCancel = false;
    
  var sElemName;
  var ret = true;
  for(sElemName in cmmArrPopups)
    if (cmmHidePopupAuto(sElemName, bCancel) == false)
      ret = false;
      
  return ret;
  }

// muestra un popup, se le pasa el nombre y la funcion de 
// ocultamiento (opcional)
function cmmShowPopup(sElemName, fFunctionToHide)
  {
  // para que los popups se escondan al dar click fuera de ellos
  if (!document.body.onmousedown)
    document.body.onmousedown = function () { cmmHidePopups(false); };
    
  var oElem = getElem(sElemName);
  if (oElem)
    {
    cmmArrPopups[sElemName] = 1;
    if (fFunctionToHide)
      cmmArrPopups[sElemName] = fFunctionToHide;
    else  
      cmmArrPopups[sElemName] = "_";
    oElem.style.display = "block";
    }
  }

// esconde un elemento si esta visible, llamando a la funcion
// de ocultamiento o a style.display = "none"
function cmmHidePopupAuto(sElemName, bCancel)
  {
  var oElem = getElem(sElemName);
  var ret = true;
  if (oElem && oElem.style.display != "none")
    {
    var fFunctionToHide = cmmArrPopups[sElemName];
    if (fFunctionToHide == "_")
      oElem.style.display = "none";
    else
      if (fFunctionToHide(bCancel) == false)
        ret = false;
    }
    
  return ret;
  }

// esconde un elemento si esta visible, usando style.display = "none"
function cmmHidePopup(oElem)
  {
  if (typeof(oElem) == "string")
    return cmmHidePopup(getElem(oElem));
    
  if (cmmIsPopupVisible(oElem))
    oElem.style.display = "none";
  }

function cmmIsPopupVisible(oElem)
  {
  if (typeof(oElem) == "string")
    return cmmIsPopupVisible(getElem(oElem));

  return (oElem && oElem.style.display != "none");
  }
  
// invierte el estado de visibilidad de un popup
function cmmTogglePopup(sElemName)
  {
  var oElem = getElem(sElemName);
  if (cmmIsPopupVisible(oElem))
    cmmHidePopup(sElemName);
  else
    cmmShowPopup(sElemName);
  }
  
// ********************* Manejo de CallBacks ************************
  
var cmm_arrCallBack = Array();
var sNothingWaiting = "~~~~\n\t\r";
var cmm_nPendingCallbacks = 0;
function cmmMakeCallBack(sContext, sParam)
  {
  if (!cmm_arrCallBack[sContext])
    { // no hay ningun callback en procesamiento
    cmm_arrCallBack[sContext] = sNothingWaiting;
    
    sParam = sContext + "|" + sParam;
    cmm_nPendingCallbacks++;
    CallServer(sParam, sContext);
    }
  else
    { // ya esta en proceso
    cmm_arrCallBack[sContext] = sParam.toString();
    }
  }

function cmmReturnFromCallBack(sContext)
  {
  cmm_nPendingCallbacks--;
  var sWaitingParam = cmm_arrCallBack[sContext];
  if (typeof(sWaitingParam) == "undefined" || sWaitingParam == null)
    {Debug.writeln("!!!"); return}; // no debe ocurrir
  
  if (sWaitingParam == sNothingWaiting)
    { // no hay nada en espera
    cmm_arrCallBack[sContext] = null;
    }
  else
    { // ejecutar lo que este en espera
    sParam = sContext + "|" + sWaitingParam;
    // indicar que no hay nada en espera
    cmm_arrCallBack[sContext] = sNothingWaiting;
    
    // escapar las comillas
    var re = /"/g;
    sParam = sParam.replace(re, "\\\"");
    cmm_nPendingCallbacks++;
    window.setTimeout("CallServer(\"" + sParam + "\",\"" + sContext + "\");", 50);
    }  
  }