/* 
 * Metodo que permite controlar la aparicion de distintos tipos de menu
 * dinamico (con JavaScript) utilizados bajo proxia cms.
 *
 * @author $Author: java102 $
 * @version $Revision: 1.1.2.1.2.1 $
 * @since Proxia CMS 4.0
 * @copy Divisa Informatica y Telecomunicaciones S.A.
 */


/* Funciones para mostrat y ocultar capas */
// Funciona con navegadores iexplorer 5 y Netscape 6
// (no ha sido probado con iexplorer4 pero es posible q funcione)


/** FUNCIONES PARA CAPTURAR EL MOVIMIENTO DEL RATON **/
var mouseX = 0;
var mouseY = 0;

//detectamos si es Nestcape porque la captura de eventos es distinta
var isNS = (navigator.appName.indexOf("Netscape") >= 0 &&
                parseFloat(navigator.appVersion) >= 4) ? 1 : 0;
if (isNS) document.captureEvents(Event.MOUSEMOVE);

var oldMouseMove = document.onmousemove
document.onmousemove = getMousePosition;

function getMousePosition(e) {

  // Save cursor position using browser-specific code.

  //la posición se va a desplazar un par de pixels
  if (isNS) {
    mouseX = e.pageX + 2;
    mouseY = e.pageY - 2;
  }
  else {
    mouseX = event.clientX + document.body.scrollLeft + 2;
    mouseY = event.clientY + document.body.scrollTop - 2;
  }
  if(oldMouseMove!=null) {
      return oldMouseMove(e);
  }
  return true;
}


/**
 * Coordenada X de un objeto
 */
function findPosX(obj)
{
 var curleft = 0;
 if (obj.offsetParent)
 {
  while (obj.offsetParent)
  {
   curleft += obj.offsetLeft
   obj = obj.offsetParent;
  }
 }
 else if (obj.x)
  curleft += obj.x;
 return curleft;
}

/**
 * Coordenada Y de un objeto
 */

function findPosY(obj)
{
 var curtop = 0;
 if (obj.offsetParent)
 {
  while (obj.offsetParent)
  {
   curtop += obj.offsetTop
   obj = obj.offsetParent;
  }
 }
 else if (obj.y)
  curtop += obj.y;
 return curtop;
}

/**
 * Esta función permite desplegar el menú vertical asociado a un determinado elemento
 * de primer nivel para su correcta visualización en el sistema.
 */
function showMenu(menuId) {
    var _menu = document.getElementById(menuId);
    if(_menu == undefined) return;

    var _parent;
    var _mainParent;
    if (_menu.parentElement){
        _parent = _menu.parentElement;
        _mainParent = _parent.parentElement;
    }else{
        _parent = _menu.parentNode;
        _mainParent = _parent.parentNode;
    }

    var allChilds = _mainParent.childNodes;

    for(i = 0;i<allChilds.length;i++) {
        if(allChilds[i] == _parent) {
            continue;
        }

        if(allChilds[i].hasChildNodes()) {
            for(j = 0;j<allChilds[i].childNodes.length;j++) {
                if(allChilds[i].childNodes[j].tagName=='UL'){
                    allChilds[i].childNodes[j].style.display = 'none';
                }
            }
        }

    }


    if(_menu.style.display == 'none') {
        _menu.style.display = 'block';
    } else {
        _menu.style.display = 'none';
    }


}


/**
 * Esta función muestra una capa de menú con un nombre identificado por layerName y
 * a partir de un elemento padre identificado por parent.
 *
 * @param    layerName  El nombre de la capa.
 * @param    parent     El nombre del padre.
 */
function showMenuLayer(layerName,parent) {
   // Hacemos esto para ocultar todos los elementos de menú...
   var _parentElement = document.getElementById(layerName).parentNode;
   if(_parentElement && _parentElement.hasChildNodes()) {
       var _childNodes = _parentElement.getElementsByTagName("DIV");
       for(i=0;i<_childNodes.length;i++) {
           // Recuperamos el nodo actual...
           currentNode = _childNodes[i];
           // Ya estamos en condiciones de procesarlo adecuadamente, sólo si 
           // no somos nosotros....
           if(currentNode.id != layerName && currentNode.id.indexOf('submenu')!=-1) {
               currentNode.style.visibility = 'hidden';
               currentNode.style.display = 'none';
           }
       }
   }

   var curr =  document.getElementById(layerName);
   curr.theFrames = document.getElementsByTagName('IFRAME');
   
   if(curr.theFrames != undefined) {
     for(i=0;i<curr.theFrames.length;i++) {
        try {
            curr.theFrames[i].contentWindow.document.onmousemove = outOfMenu;
            curr.theFrames[i].contentWindow.document.hidedLayer = layerName;
            if(isNS) {
                curr.theFrames[i].contentWindow.document.parentDocument = document;        
            } else {
                curr.theFrames[i].contentWindow.parentDocument = document;
            }
            var _select = curr.theFrames[i].contentWindow.document.getElementsByTagName('SELECT');
            for(j=0;j<_select.length;j++) {
                _select[j].style.visibility = 'hidden';
            }
        }catch(e) {
         curr.theFrames[i].style.display ='none';
     }
     }
   
   }
   
   

   var dLayer = document.getElementById(layerName).style;
   var parentLayer = document.getElementById(parent);
   _xpos = findPosX(parentLayer);
   _ypos = findPosY(parentLayer);
   _maxx = _xpos + parentLayer.clientWidth;
   _maxy = _ypos + parentLayer.clientHeight;

   dLayer.top = _maxy;
   dLayer.left = _xpos;

   dLayer.display='block';
   dLayer.visibility='visible';

}

function outOfMenu(e) {
    var _document;
    if(this.parentWindow) {
        _document = this.parentWindow.parentDocument;
    } else {
        _document = this.parentDocument;    
    }
    _document.getElementById(this.hidedLayer).style.visibility = 'hidden';
    this.onmousemove = null;

    _select = this.getElementsByTagName('SELECT');
    for(j=0;j<_select.length;j++) {
        _select[j].style.visibility = 'visible';
    }
    
}

/**
 * Oculta una determinada capa de menú identificada por layerName asociada a un
 * determinado padre, en un tiempo especificado por el parámetro timeout
 */
function hideMenuLayer(layerName,parent,timeout) {
    setTimeout("_hideMenuLayer('"+layerName+"','"+parent+"')",timeout);

}

/**
 * Oculta una capa física del sistema.
 */
function _hideMenuLayer(layerName,parent) {
   var dLayer = document.getElementById(layerName);
   xpos = dLayer.offsetLeft;
   ypos = dLayer.offsetTop;

   maxx = xpos + dLayer.clientWidth;
   maxy = ypos + dLayer.clientHeight;

   if(mouseX > maxx || mouseY > maxy || mouseX < xpos || mouseY < ypos) {
        if(parent!='') {
            parentLayer = document.getElementById(parent);
            _xpos = findPosX(parentLayer);
            _ypos = findPosY(parentLayer);
            _maxx = _xpos + parentLayer.clientWidth;
            _maxy = _ypos + parentLayer.clientHeight;
            if((mouseX <= _maxx) && (mouseY <= _maxy) && (mouseX >= _xpos) && (mouseY >= _ypos)) {
                return;
            }
        }
        dLayer.style.visibility = 'hidden';
        dLayer.style.display = 'none';
        
        // Verificamos si hay alguno activo..     
        var _parentElement = document.getElementById(layerName).parentNode;
        var someoneVisible = false;
        if(_parentElement && _parentElement.hasChildNodes()) {
            var _childNodes = _parentElement.getElementsByTagName("DIV");
            for(i=0;i<_childNodes.length;i++) {
                 // Recuperamos el nodo actual...
                 var currentNode = _childNodes[i];
                 // Ya estamos en condiciones de procesarlo adecuadamente, sólo si 
                 // no somos nosotros....
                 if(currentNode.id != layerName && currentNode.id.indexOf('submenu')!=-1 && currentNode.style.display == 'block') {
                     someoneVisible = true;
                     break;
                 }
                 
            }
        }
        
        if(dLayer.theFrames != undefined && !someoneVisible) {
            for(i=0;i<dLayer.theFrames.length;i++) {
                dLayer.theFrames[i].style.display='block';
                _select = dLayer.theFrames[i].contentWindow.document.getElementsByTagName('SELECT');
                for(j=0;j<_select.length;j++) {
                    _select[j].style.visibility = 'visible';
                }
                
            }
        }
   }
}


/** FUNCIONES PARA LAS CAPAS **/

/** 
 * muestra una capa 
 *
 * @param name	el identificador unico de la capa
 */
function showToolTip(name) {
  
  moveLayerTo(name,mouseX,mouseY);	
  var elm = document.getElementById(name);
  elm.style.visibility = "visible";

}

/**
 * oculta una capa 
 *
 * @param name	el identificador unico de la capa
 */
function hideToolTip(name) {
  
  var elm = document.getElementById(name);
  elm.style.visibility = "hidden";

}

/**
 * mueve la capa
 *
 * @param name	el identificador unico de la capa
 * @param x		coordenada x de la esquina superior izquierda donde 
 *				queremos poner la capa
 * @param y		coordenada y de la esquina superior izquierda donde 
 *				queremos poner la capa
 */
function moveLayerTo(name,x,y) {
	
	var elm = document.getElementById(name);
    elm.style.left = x;
    elm.style.top  = y;
	
}



