
<!-------------------------------------------------------------------------------------------------
// Navegadores tipo IE4 o superior (full dhtml)
//  Codigo para el cliente. 
//  Version 1.0
// Funciones de utilizacion para la movilidad de los menues
//------------------------------------------------------------------------------------------------>

// Manejadores de eventos  ----------------------------------------------------------------------
// posiciona el subgrupo para el item dado e inicia su expansion
function eihnm_itemMsOver(item, subGroup, expandDirection, horAdj, verAdj, expandDelay, effect) 
{
  var newLeft = 0; 
  var newTop = 0; 
  var oItem = document.all[item]; 
  var oSubGroup = document.all[subGroup]; 

  if (eihnm_curItem != item)
  {
    eihnm_curItem = item; 
  
		if (eihnm_mac && oItem.tagName=="TABLE")
			oItem = oItem.parentElement;
		
    switch (expandDirection)
    {
      case 'belowleft': 
        newLeft = eihnm_pageX(oItem); 
        if (newLeft + oSubGroup.offsetWidth > window.document.body.clientWidth)
          newLeft = eihnm_pageX(oItem) + oItem.offsetWidth - oSubGroup.offsetWidth; 
        newTop = eihnm_pageY(oItem) + oItem.offsetHeight; 
        break; 
      case 'belowright': 
        newLeft = eihnm_pageX(oItem) + oItem.offsetWidth - oSubGroup.offsetWidth; 
        newTop =  eihnm_pageY(oItem) + oItem.offsetHeight; 
        break; 
      case 'aboveleft': 
        newLeft = eihnm_pageX(oItem); 
        newTop =  eihnm_pageY(oItem) - oSubGroup.offsetHeight; 
        break; 
      case 'aboveright': 
        newLeft = eihnm_pageX(oItem) + oItem.offsetWidth - oSubGroup.offsetWidth; 
        newTop =  eihnm_pageY(oItem) - oSubGroup.offsetHeight; 
        break; 
      case 'rightdown': 
        newLeft = eihnm_pageX(oItem) + oItem.offsetWidth; 
        if (newLeft + oSubGroup.offsetWidth > window.document.body.clientWidth)
          newLeft = eihnm_pageX(oItem) - oSubGroup.offsetWidth; 
        newTop = eihnm_pageY(oItem); 
        if (newTop + oSubGroup.offsetHeight > window.document.body.clientHeight)
          newTop = eihnm_pageY(oItem) - oSubGroup.offsetHeight + oItem.offsetHeight; 
        break; 
      case 'rightup': 
        newLeft = eihnm_pageX(oItem) + oItem.offsetWidth; 
        newTop = eihnm_pageY(oItem) - oSubGroup.offsetHeight + oItem.offsetHeight; 
        break; 
      case 'leftdown': 
        newLeft = eihnm_pageX(oItem) - oSubGroup.offsetWidth; 
        newTop = eihnm_pageY(oItem); 
        break; 
      case 'leftup': 
        newLeft = eihnm_pageX(oItem) - oSubGroup.offsetWidth; 
        newTop = eihnm_pageY(oItem) - oSubGroup.offsetHeight + oItem.offsetHeight; 
        break; 
      default: 
        newLeft = eihnm_pageX(oItem) + oItem.offsetWidth; 
        newTop = eihnm_pageY(oItem); 
        break; 
    }  
    newLeft += horAdj; 
    newTop += verAdj; 
    if (newTop < 0) 
			newTop = 0; 
    if (newLeft < 0) 
			newLeft = 0; 
    
    oSubGroup.style.left = newLeft + 'px'; 
    oSubGroup.style.top = newTop + 'px';
      
    eihnm_startExpand(subGroup, expandDelay, effect); 
  }
}

// si el puntero del mouse no esta sobre un item dado o uno de sus sugrupo
// se inicia el colapso del grupo dado
function eihnm_itemMsOut(item, group, subGroup, expandDelay, effect)
{
  if ((!(eihnm_isMouseOnObject(item))) && subGroup) 
    if (!(eihnm_isMouseOnObject(subGroup)))
    {
      eihnm_curItem = ''; 
      eihnm_startCollapse(subGroup, expandDelay, effect);
    }  
}

// Esta funcion se llama solo desde grupos expandibles. Si hay una accion de colapso total pendiente
// se setea la variable global para el grupo dado de manera que el grupo dado y sus padres no se
// colapsen. Tambien detiene el colapso si este ha sido iniciado para este grupo.
function eihnm_groupMsOver(group)
{
  if (eihnm_collapsingAll) eihnm_restoredGroup = group;

  if (eihnm_collapsingGroup == group) 
  {
    eihnm_stopCollapse(); 
    eihnm_stopExpand(); 
  }
}
// si el puntero del mouse esta en un grupo dado, un subgrupo o su padre no se hace nada
// si el puntero esta sobre el grupo padre, pero fuera del padre mismo, inicia el colapso de 
// si mismo y de sus subgrupos. 
// De otra manera, el puntero esta afuera de la estructura del menu y por lo tanto se inicia
// el colapso de todos los grupos expandidos
function eihnm_groupMsOut(group, parentItem, parentGroup, expandDelay, effect)
{ 
  if (!(eihnm_isMouseOnObject(group)))
  {
    eihnm_curItem = ''; 

    var subGroup = eihnm_expandedObjects[eihnm_expandCount]; 
    if (subGroup == group) subGroup = null; 

    if (parentItem == null && parentGroup == null && !(eihnm_isMouseOnObject(group)))
      eihnm_startCollapseAll(expandDelay, effect);     
    else if (eihnm_isMouseOnObject(group) || eihnm_isMouseOnObject(subGroup) || eihnm_isMouseOnObject(parentItem))
      ; // nada para hacer
    else if (eihnm_isMouseOnObject(parentGroup))
    {
      eihnm_startCollapse(group, expandDelay, effect); 
      eihnm_startCollapse(subGroup, expandDelay, effect); 
    }
    else
      eihnm_startCollapseAll(expandDelay, effect);     
  }
}

// Functiones de tiempo para colapso/expansion ----------------------------------------------------------

// Inicia la expansion de un grupo dado
function eihnm_startExpand(group, interval, effect)
{
  if (group == eihnm_collapsingGroup) eihnm_stopCollapse(); 
  if (group != eihnm_expandingGroup) eihnm_stopExpand();  
  
  eihnm_restoredGroup = group; 
  
  eihnm_expandingGroup = group; 
  if (group) group += '.id'; 
  if (effect) effect = "'" + effect + "'";  
  eihnm_expandTimerID = setTimeout('eihnm_expand(' + group + ', ' + effect + ')', interval); 
}

// Inicia el colapso de un grupo dado
function eihnm_startCollapse(group, interval, effect)
{
  if (group == eihnm_expandingGroup) eihnm_stopExpand(); 

  if (group) 
    if (document.all[group].style.visibility == 'visible') 
    {
      eihnm_collapsingGroup = group; 
      group += '.id'; 
      if (effect) effect = "'" + effect + "'";  
      eihnm_collapseTimerID = setTimeout('eihnm_collapse(' + group + ', ' + effect + ')', interval); 
    }  
}
// inicia el colapso de todos los expandidos
function eihnm_startCollapseAll(interval, effect)
{
  eihnm_stopCollapse(); 
  eihnm_stopExpand(); 
  eihnm_stopCollapseAll(); 

  eihnm_collapsingAll = true; 
  if (effect) 
  {
    effect = "'" + effect + "'";  
    eihnm_collapseAllTimerID = setTimeout('eihnm_collapseAll(' + effect + ')', interval); 
  }
  else
    eihnm_collapseAllTimerID = setTimeout('eihnm_collapseAll(null)', interval); 
}
// detiene la expansion del grupo que se esta expandiendo actualmente
function eihnm_stopExpand()
{
  clearTimeout(eihnm_expandTimerID); 
  eihnm_expandingGroup = ''; 
}
// Detiene el colapso del grupo que se esta colapsando
function eihnm_stopCollapse()
{
  clearTimeout(eihnm_collapseTimerID); 
  eihnm_collapsingGroup = ''; 
}
// detiene el colapso de todos los grupos que se estan expandiendo
function eihnm_stopCollapseAll()
{
  clearTimeout(eihnm_collapseAllTimerID); 
  eihnm_restoredGroup = '';
}
// Funciones principales ---------------------------------------------------------------------------------
//Expando el grupo de menu dados
function eihnm_expand(group, effect)
{
  if (document.all[group].style.visibility != 'visible')
  {
    eihnm_hideSelectElements(group); 
    eihnm_showOverlay(document.all[group]);
    if (effect) 
    {
      document.all[group].style.filter = effect; 
      document.all[group].filters[0].Apply(); 
    }  
    document.all[group].style.visibility = 'visible'; 
    eihnm_makeDropShadow(group); 
    if (effect) document.all[group].filters[0].Play(); 
    eihnm_expandCount++; 
    eihnm_expandedObjects[eihnm_expandCount] = group; 
  }  
}
// Colapso el grupo de menu dados
function eihnm_collapse(group, effect)
{
  if (group) 
  {
    if (document.all[group].style.visibility != 'hidden')
    {
      if (effect)
      {
        document.all[group].style.filter = effect; 
        document.all[group].filters[0].Apply(); 
      }
      document.all[group].style.visibility = 'hidden';     
      if (effect) document.all[group].filters[0].Play();
      if (eihnm_expandedObjects[eihnm_expandCount] != group)
				for (var i=0; i<eihnm_expandCount; i++)
					if (eihnm_expandedObjects[i] == group)
						eihnm_expandedObjects[i] = eihnm_expandedObjects[eihnm_expandCount];
      eihnm_expandCount--; 
      eihnm_hideOverlay(document.all[group]);
      eihnm_clearDropShadow(group); 
    }      
  }
  if (!(eihnm_contextUp) && eihnm_expandCount == 0) 
    eihnm_restoreSelectElements(); 
}
// Colapsa todos los grupos expandidos
function eihnm_collapseAll(effect)
{
  for (var i = eihnm_expandCount; i >= 1; i--)
  {
    if (eihnm_expandedObjects[i] == eihnm_restoredGroup) break; 

    if (effect)
    {
      document.all[eihnm_expandedObjects[i]].style.filter = effect; 
      document.all[eihnm_expandedObjects[i]].filters[0].Apply(); 
    }
    document.all[eihnm_expandedObjects[i]].style.visibility = 'hidden';
    eihnm_hideOverlay(document.all[eihnm_expandedObjects[i]]);
    eihnm_clearDropShadow(eihnm_expandedObjects[i]); 
    if (effect) document.all[eihnm_expandedObjects[i]].filters[0].Play(); 
  }

  eihnm_collapsingAll = false; 
  eihnm_expandCount = i;
  eihnm_restoredGroup = ''; 
  if (!(eihnm_contextUp) && eihnm_expandCount == 0) 
    eihnm_restoreSelectElements(); 
}
// esconde todos los grupos de menus antes de llamar a clientsideonclick
function eihnm_hideAllGroups()
{
  eihnm_curItem = ''; 
  eihnm_restoredGroup = ''; 
  eihnm_collapseAll(null); 
}

// Utilidades --------------------------------------------------------------------------------------
// actualiza la clase menu item, icono izquierda e icono derecha
function eihnm_updateCell(Element, NewClassName, LeftImage, LeftImageSrc, RightImage, RightImageSrc, direction)
{  
  if (direction == 'out' && eihnm_isMouseOnObject(Element))    
    ;   
  else  
  {    
    if (Element != null & NewClassName != '') document.all[Element].className = NewClassName;
    if (LeftImage != null  && LeftImageSrc != '') document.images[LeftImage].src = LeftImageSrc;     
    if (RightImage != null && RightImageSrc != '') document.images[RightImage].src = RightImageSrc;   
  }
}
// determina si el puntero del mouse esta sobre un objeto dado
function eihnm_isMouseOnObject(objName)
{
  if (objName)
  {
		var obj = document.all[objName];
		
		if (eihnm_mac && obj.tagName=="TABLE" && obj.parentElement.tagName=="TD")
			obj = obj.parentElement;
  
    var objLeft = eihnm_pageX(obj) - window.document.body.scrollLeft + 1; 
    var objTop = eihnm_pageY(obj) - window.document.body.scrollTop + 1; 
    var objRight = objLeft + obj.offsetWidth - 1; 
    var objBottom = objTop + obj.offsetHeight - 1;
      
    var ex = (eihnm_mac) ? event.x+2 : event.x;
    var ey = (eihnm_mac) ? event.y+2 : event.y;
    
    if ((ex > objLeft) && (ex < objRight) && 
        (ey > objTop) && (ey < objBottom))
      return true; 
    else  
      return false; 
  }
  else
    return false; 
}
// calcula las coordenadas absolutas X e Y de un elemento
function eihnm_pageX(o)
{
  return ( eihnm_mac ? eihnm_macX(o) : eihnm_winX(o) );
}
// calcula las coordenadas absolutas X e Y de un elemento para clientes Windows
function eihnm_winX(o)
{
  var x = 0;
  while (o != document.body)
  {
    x += o.offsetLeft;
    o = o.offsetParent;
  }
  return x;
}
// calcula las coordenadas absolutas X e Y de un elemento para clientes MAC
function eihnm_macX(o)
{
  var x = 0;
  while (o.offsetParent != document.body)
  {
    if ((o.tagName=="TABLE") && (o.offsetParent.tagName=="TD"))
      x += o.clientLeft;
    else
      x += o.offsetLeft;
    o = o.offsetParent;
  }
  x += (o.offsetLeft + eihnm_pgMrgX());
  return x;
}
// devuelve el margen izquierdo del cuerpo de la pagina en pixeles
function eihnm_pgMrgX()
{
  if (!eihnm_marginX)
  {
    if (!document.all["eihnm_pgMrgMsr"])
			eihnm_createPgMrgMsr();
		eihnm_marginX = -document.all["eihnm_pgMrgMsr"].offsetLeft;
  }
  return eihnm_marginX;
}
// calcula la posicion Y absoluta de un elemento
function eihnm_pageY(o)
{
  return ( eihnm_mac ? eihnm_macY(o) : eihnm_winY(o) );
}
// calcula la posicion Y absoluta de un elemento para clientes Windows
function eihnm_winY(o)
{
  var y = 0;
  while (o != document.body)
  {
    y += o.offsetTop;
    o = o.offsetParent;
  }
  return y;
}
// calcula la posicion Y absoluta de un elemento para clientes MAC
function eihnm_macY(o)
{
  var y = 0;
  while (o.offsetParent != document.body)
  {
    if ((o.tagName=="TABLE") && (o.offsetParent.tagName=="TD"))
      y += o.clientTop;
    else
      y += (o.tagName!="TD") ? o.offsetTop : o.parentElement.offsetTop;
    o = o.offsetParent;
  }
  y += (o.offsetTop + eihnm_pgMrgY());
  return y;
}
// devuelve el top del cuerpo de la pagina en pixeles
function eihnm_pgMrgY()
{
  if (!eihnm_marginY)
  {
    if (!document.all["eihnm_pgMrgMsr"])
			eihnm_createPgMrgMsr();
		eihnm_marginY = -document.all["eihnm_pgMrgMsr"].offsetTop;
  }
  return eihnm_marginY;
}
// crea elementos ocultos para realizar las mediciones de los margenes del cuerpo de la pagina
function eihnm_createPgMrgMsr()
{
  document.body.insertAdjacentHTML('beforeEnd',
    '<div id="eihnm_pgMrgMsr" style="position:absolute;left:0;top:0;z-index:-1000;visibility:hidden">*</div>');
}
// esconde todos los elementos select de HTML que estan superpuestos a un menu deteminado
function eihnm_hideSelectElements(group)
{
  if (eihnm_hideSelectElems && document.getElementsByTagName) 
  {
    var arrElements = document.getElementsByTagName('select'); 
    for (var i = 0; i < arrElements.length; i++) 
      if (eihnm_objectsOverlapping(document.all[group], arrElements[i]))
        arrElements[i].style.visibility = 'hidden';          
  }
}
// devuelve todos los elementos select de un pagina a su estado 
function eihnm_restoreSelectElements()
{
  if (eihnm_hideSelectElems && document.getElementsByTagName) 
  {
    var arrElements = document.getElementsByTagName('select'); 
    for (var i = 0; i < arrElements.length; i++) 
      arrElements[i].style.visibility = 'visible'; 
  }
}
// muestra un control superpuesto a un grupo dado
function eihnm_showOverlay(group)
{
  if (!eihnm_overlayWindowed) return;
  var overid = group.id + "_over";
  if (!document.all[overid])
    document.body.insertAdjacentHTML("beforeEnd","<iframe id='" +overid+ "' src='javascript:void 0;' style='position:absolute;left:0px;top:0x;z-index:990;display:none' scrolling='no' frameborder='0'></iframe>");
  if (document.all[overid])
  {
    var overs = document.all[overid].style;
    overs.top = group.style.top;
    overs.left = group.style.left;
    overs.width = group.offsetWidth + (eihnm_shadowEnabled ? eihnm_shadowOffest : 0);
    overs.height = group.offsetHeight + (eihnm_shadowEnabled ? eihnm_shadowOffest : 0);
    overs.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
    overs.display = 'block';
  }
}
// Oculta un control superpuesto para un grupo dado
function eihnm_hideOverlay(group)
{
  if (!eihnm_overlayWindowed) return;
  var overid = group.id + "_over";
  if (document.all[overid])
    document.all[overid].style.display = 'none';
}
// Devuelve si hay superposicion de objetos
function eihnm_objectsOverlapping(obj1, obj2)
{
  var result = true; 
  var obj1Left = eihnm_pageX(obj1) - window.document.body.scrollLeft; 
  var obj1Top = eihnm_pageY(obj1) - window.document.body.scrollTop; 
  var obj1Right = obj1Left + obj1.offsetWidth; 
  var obj1Bottom = obj1Top + obj1.offsetHeight;
  var obj2Left = eihnm_pageX(obj2) - window.document.body.scrollLeft; 
  var obj2Top = eihnm_pageY(obj2) - window.document.body.scrollTop; 
  var obj2Right = obj2Left + obj2.offsetWidth; 
  var obj2Bottom = obj2Top + obj2.offsetHeight;
  
  if (obj1Right <= obj2Left || obj1Bottom <= obj2Top || 
      obj1Left >= obj2Right || obj1Top >= obj2Bottom) 
    result = false; 
  return result; 
}
// Crea una sombra para un objeto
function eihnm_makeDropShadow(objName)
{
  if (eihnm_shadowEnabled) 
  {
    eihnm_shadows[objName] = new Array(); 
    for (var i = eihnm_shadowOffest; i > 0; i--)
    {
      var obj = document.all[objName]; 
      var rect = document.createElement('div');
      var rs = rect.style
      rs.position = 'absolute';
      rs.left = (obj.style.posLeft + i) + 'px';
      rs.top = (obj.style.posTop + i) + 'px';
      rs.width = obj.offsetWidth + 'px';
      rs.height = obj.offsetHeight + 'px';
      rs.zIndex = obj.style.zIndex - i;
      rs.backgroundColor = eihnm_shadowColor;
      var opacity = 1 - i / (i + 1);
      rs.filter = 'alpha(opacity=' + (100 * opacity) + ')';
      obj.insertAdjacentElement('afterEnd', rect);
      eihnm_shadows[objName][eihnm_shadows[objName].length] = rect; 
    }
  }
}
// Saca la sombra para un objeto
function eihnm_clearDropShadow(objName)
{
  if (eihnm_shadowEnabled) 
  {
    var curShadow; 
    for (var i = 0; i < eihnm_shadows[objName].length; i++)
    {
      curShadow = eihnm_shadows[objName][i]; 
      curShadow.style.filter = 'alpha(opacity=0)'; 
      curShadow.removeNode(true); 
    }
  }  
}
// posiciona el menu basado en la alineacion, OffSetX, y OffsetY
function eihnm_positionMenu(menu, alignment, offsetX, offsetY)
{
  var scrlLeft = 0; 
  var scrlTop = 0;
  var clientW = window.document.body.clientWidth; 
  var clientH = window.document.body.clientHeight; 
  var menuWidth = menu.offsetWidth; 
  var menuHeight = menu.offsetHeight; 
  var newLeft = 0; 
  var newTop = 0; 

  switch (alignment)
  {
    case 'topleft': 
      newLeft = scrlLeft;
      newTop = scrlTop;
      break; 
    case 'topmiddle': 
      newLeft = (clientW - menuWidth) / 2 + scrlLeft;
      newTop = scrlTop;
      break; 
    case 'topright': 
      newLeft = clientW + scrlLeft - menuWidth;
      newTop = scrlTop;
      break; 
    case 'bottomleft': 
      newLeft = scrlLeft;
      newTop = clientH + scrlTop - menuHeight;
      break; 
    case 'bottommiddle': 
      newLeft = (clientW - menuWidth) / 2 + scrlLeft;
      newTop = clientH + scrlTop - menuHeight;
      break; 
    case 'bottomright': 
      newLeft = clientW + scrlLeft - menuWidth;
      newTop = clientH + scrlTop - menuHeight;
      break; 
    default: 
      newLeft = clientW + scrlLeft;
      newTop = clientH + scrlTop;
      break; 
  }    
  
  newLeft += offsetX; 
  newTop += offsetY; 
  menu.style.left = newLeft; 
  menu.style.top = newTop; 
}
// navega la pagina solicitada como argumento de la funcion
// permite incluir clic que se procesan en el cliente sin afectar el esquema de 
// estilos al no agregar <a></a>
function irapagina(destino)
{
			window.navigate(destino);
			return false;
		}