var arrMenusContextuales = new Array();
var blnDragAnchor = false;

function Pagina(idNqPagina) {
  var PaginaSelf = this;
  var LastClickEvent = new ClickEvent('');
  PaginaSelf.CTES = new pagCTES;
  PaginaSelf.CtrlPressed = false;
  PaginaSelf.ObjDragged = null;
  PaginaSelf.ObjRightOffDragged = null;
  PaginaSelf.ObjLeftOffDragged = null;
  PaginaSelf.DropAreas = new Array();
  PaginaSelf.currentContextMenu = null;
  PaginaSelf.id = idNqPagina;
  PaginaSelf.DropzoneClasses = new Array;

  PaginaSelf.registerMouse = function() {
    document.ondblclick  = PaginaSelf.onDblClick;
	  document.onmousedown = PaginaSelf.onMouseDown;
	  document.onmousemove = PaginaSelf.onMouseMove;
	//document.onmouseup   = PaginaSelf.onMouseUp;
    document.oncontextmenu = PaginaSelf.onContextMenu;
  }

  PaginaSelf.onDblClick = function(e) {
    return false;
  }

  PaginaSelf.onMouseDown = function(e) {
  	try{
      if (ddInit(e)){
      	//algo que debe hacer si esta sobre el draggablediv
      }
  	}catch (e){
    }
    PaginaSelf.LastClickEvent = new ClickEvent(e);
    var valorBoton = (e? e.button: window.event.button);
    if (!e){ //si es que estamos en IE entonces modificamos los valores
      if (valorBoton == 1) { //boton izquierdo
        valorBoton = 0;
      }else{
        if (valorBoton == 4) valorBoton = 1; //boton del medio (o rueda)
          //boton derecho es el mismo valor para ambos ( = 2)
        }
      }
      switch (valorBoton) {
        case 0: //boton izquierdo
          if (isCtrlPressed(e)) {
            clearSelection();
          }
          if (isCtrlPressed(e) && PaginaSelf.ObjDragged == null) {
            PaginaSelf.CtrlPressed = true;
            PaginaSelf.onDragAttempt(e);
          }else {
            PaginaSelf.onClickAttempt(e);
          }
          break;
        case 1: //boton del medio
          break;
        case 2: //boton derecho
          break;
        default:
          break;
      }
      document.onmousedown   = null;
      document.onmouseup   = PaginaSelf.onMouseUp;
      return true;
  }

  PaginaSelf.RemoveContextMenu = function(){
    if (PaginaSelf.currentContextMenu != null) {
      var body = document.getElementsByTagName('body')[0];
      body.removeChild(PaginaSelf.currentContextMenu);
      PaginaSelf.currentContextMenu = null;
    }
  }

  PaginaSelf.onMouseMove = function(e) {
      var cm = PaginaSelf.currentContextMenu;
      if (cm != null){
          if (! PaginaSelf.isMouseOverObject(e,cm,false)) {
              PaginaSelf.RemoveContextMenu();
          }
      }
      if (PaginaSelf.ObjDragged != null) {
          if (PaginaSelf.ObjDragged.parentNode == null){
              PaginaSelf.ObjDragged = null;
          }
          clearSelection();
          PaginaSelf.ObjDragged.style.left = String(getMouseX(e) + getWindowScrollLeft()) + 'px';
          PaginaSelf.ObjDragged.style.top = String(getMouseY(e) + getWindowScrollTop()) + 'px';
          for (var i in PaginaSelf.DropAreas) {
              if (PaginaSelf.isMouseOverObject(e,PaginaSelf.DropAreas[i],false)) {
                  RemoverClase(PaginaSelf.DropAreas[i],'dragdrop_destino_posible');
                  AgregarClase(PaginaSelf.DropAreas[i],'dragdrop_destino_utilizable');
              }else{
                  RemoverClase(PaginaSelf.DropAreas[i],'dragdrop_destino_utilizable');
                  AgregarClase(PaginaSelf.DropAreas[i],'dragdrop_destino_posible');
              }
          }
      }else {
      }
      return false;
  }

  PaginaSelf.onMouseUp = function(e) {
    ddEnabled=false; //esta línea es para el "draggable Div"
    if (PaginaSelf.ObjDragged != null) {
      PaginaSelf.unmarkDropAreas('dragdrop_destino_posible');
      for (var i in PaginaSelf.DropAreas) {
        if (PaginaSelf.isMouseOverObject(e,PaginaSelf.DropAreas[i],false)) {
          var idDropZoneDestino = PaginaSelf.DropAreas[i].id;
          var idObjDragged = PaginaSelf.ObjDragged.id;
          var arrSubElementos = new Array();
          arrSubElementos = PaginaSelf.getDraggableElementsInZone(idDropZoneDestino);
          var iPosInsercion = 0;
          var blnAvanzoDentroDelZone = false;
          for (var j in arrSubElementos) {
            if (isMouseAfterObject(e,arrSubElementos[j])){
              if (arrSubElementos[j].id != idObjDragged){
                iPosInsercion += 1;
              }else{
                iPosInsercion += 1;
                blnAvanzoDentroDelZone = true;
              }
            }else{
              break;
            }
          }
          if (blnAvanzoDentroDelZone){
            iPosInsercion += 1;
          }
          RemoverClase(PaginaSelf.DropAreas[i],'dragdrop_destino_utilizable');
          var objOriginal = PaginaSelf.LastClickEvent.Obj;
          var idDropZoneOrigen = objOriginal.parentNode.id;
          if (arrSubElementos[iPosInsercion]){
            PaginaSelf.DropAreas[i].insertBefore(objOriginal, arrSubElementos[iPosInsercion]);
          }else{
            PaginaSelf.DropAreas[i].appendChild(objOriginal);
          }
          break;
        }
      }
      var objParent = PaginaSelf.ObjDragged.parentNode;
      objParent.removeChild(PaginaSelf.ObjDragged);
      PaginaSelf.ObjDragged = null;
      PaginaSelf.DropAreas = new Array();
    }
    PaginaSelf.CtrlPressed = false;
    document.onmouseup = null;
    document.onmousedown   = PaginaSelf.onMouseDown;
    try {
      if (blnAvanzoDentroDelZone){
        iPosInsercion -= 1;
      }
      onElementDragged(idObjDragged,idDropZoneOrigen,idDropZoneDestino,iPosInsercion);
    }catch (e){
    }
    return false;
  }

  PaginaSelf.addContextMenu = function(idObj,cssClasses) {
    var idMenu = 'menu_' + idObj;
    var cm = new ContextMenu(idMenu, cssClasses, 0, 0);
    arrMenusContextuales[idMenu] = cm;
    return cm;
  }

  PaginaSelf.addContextMenuItem =  function addContextMenuItem(idObj, nombre, href, onClic) {
    var idMenu = 'menu_' + idObj;
    var cm = arrMenusContextuales[idMenu];
    var tabla = cm.getElementsByTagName("tbody")[0];
    var tr = tabla.appendChild(document.createElement('tr'));
    var numItems = tabla.getElementsByTagName("tr").length;
    var td = document.createElement('td');
    td.id = cm.id + 'item' + String(numItems + 1);
    var anchor = document.createElement('a');
    if (href == '' || href == null){
      anchor.setAttribute('href', 'javascript:{}');
    }else{
      anchor.setAttribute('href', href);
    }
    if (onClic != '' && onClic != null){
      if (document.all){
        anchor.setAttribute('onclick', Function(onClic + ';' + PaginaSelf.id + '.RemoveContextMenu();'));
      }else{
      	anchor.setAttribute('onclick', onClic + ';' + PaginaSelf.id + '.RemoveContextMenu();');
      }
    }
    tr.appendChild(td);
    var innerDiv = document.createElement('div');
    innerDiv.appendChild(document.createTextNode(nombre));
    anchor.appendChild(innerDiv);
    td.appendChild(anchor);
  }

  PaginaSelf.removeContextMenuItem =  function removeContextMenuItem(idObj, nombre) {
    var idMenu = 'menu_' + idObj;
    var cm = arrMenusContextuales[idMenu];
    var tabla = cm.getElementsByTagName("tbody")[0];
    var tr = tabla.appendChild(document.createElement('tr'));
    var numItems = tabla.getElementsByTagName("tr");
    var i;
    for (i=0; i<numItems.length; i++){
    	if (numItems[i].childNodes.length > 0){
    		if (numItems[i].childNodes[0].childNodes.length > 0){
    			if (numItems[i].childNodes[0].childNodes[0].childNodes.length > 0){
		    		var nombreDiv = getInnerText(numItems[i].childNodes[0].childNodes[0].childNodes[0]);
		    		if (nombreDiv == nombre){
		    			tabla.deleteRow(i);
		    		}
		    	}
	    	}
    	}
    }
  }

  PaginaSelf.onContextMenu = function(e) {
    PaginaSelf.RemoveContextMenu();
    var lce = PaginaSelf.LastClickEvent;
    var Obj = lce.Obj;
    while (Obj.id == '' && Obj != document){
      Obj = Obj.parentNode;
    }
//    if (Obj == document){
//      break;
//    }
    var idMenu = 'menu_' + Obj.id;
    if (arrMenusContextuales[idMenu]){
      PaginaSelf.currentContextMenu = arrMenusContextuales[idMenu];
      var cm = PaginaSelf.currentContextMenu;
      cm.style.position = 'absolute';
      cm.style.left = String(Max(lce.PosX - 10 + getWindowScrollLeft(),0)) + 'px';
      cm.style.top = String(Max(lce.PosY - 10 + getWindowScrollTop(),0)) + 'px';
      var body = document.getElementsByTagName('body')[0];
      body.appendChild(cm);
    }
    return false ;
  }

  PaginaSelf.isObjDraggable = function(objTarget) {
    var strRegEx = new RegExp('  ', 'g');
    var strTodasLasClases = String(objTarget.className).replace(strRegEx,' ');
    var arrClases = new Array();
    arrClases = String(strTodasLasClases).split(' ');
    var arrDropZones = new Array();
    for (var i in arrClases) {
	    var targetClass = arrClases[i];
	    var arrTemp = new Array();
	    for (var nomParent in PaginaSelf.DropzoneClasses){
	      arrTemp = PaginaSelf.DropzoneClasses[nomParent];
	      for (var k in arrTemp){
	        if (arrTemp[k] == targetClass){
	          arrDropZones.push(nomParent);
	        }
	      }
	    }
    }
    if (arrDropZones != null) {
      PaginaSelf.findDropAreas(arrDropZones);
    }
    if (PaginaSelf.DropAreas.length > 0) {
      return true;
    }else{
      return false;
    }
  }

  PaginaSelf.markDropAreas = function(nomClase) {
    for (var i in PaginaSelf.DropAreas) {
      AgregarClase(PaginaSelf.DropAreas[i],nomClase);
    }
  }

  PaginaSelf.unmarkDropAreas = function(nomClase) {
    for (var i in PaginaSelf.DropAreas) {
      RemoverClase(PaginaSelf.DropAreas[i],nomClase);
    }
  }

  PaginaSelf.isMouseOverObject = function(e,objTarget,OnlyFrontObject) {
    if (OnlyFrontObject){
      var idObjTarget = objTarget.id;
      var idObjHover = getMouseObject(e).id;
      if (idObjTarget == idObjHover) {
        return true;
      }else{
        return false;
      }
    }else{
      var iMouseLeft = getMouseX(e) + getWindowScrollLeft();
      var iMouseTop = getMouseY(e) + getWindowScrollTop();
      var iObjLeft = getAbsLeft(objTarget);
      var iObjTop = getAbsTop(objTarget);
      var iObjWidth = objTarget.clientWidth;
      var iObjHeight = objTarget.clientHeight;
      var blnOutsideX = (iMouseLeft < iObjLeft || iMouseLeft > (iObjLeft + iObjWidth));
      var blnOutsideY = (iMouseTop < iObjTop || iMouseTop > (iObjTop + iObjHeight));
      if (blnOutsideX || blnOutsideY){
        return false;
      }else{
        return true;
      }
    }
  }

  PaginaSelf.addDragDropRelation = function(strParentClass,strChildClass) {
    var arrTemp = new Array();
    if (PaginaSelf.DropzoneClasses[strParentClass] != null){
      arrTemp = PaginaSelf.DropzoneClasses[strParentClass];
    }
    for(var i=0; i<arrTemp.length; i++){
      if(arrTemp[i] == strChildClass){
        return false;
      }
    }
    arrTemp.push(strChildClass);
    PaginaSelf.DropzoneClasses[strParentClass] = arrTemp;
    return true;
  }

  PaginaSelf.onDragAttempt = function(e) {
    var objOriginal = PaginaSelf.LastClickEvent.Obj;
    if (PaginaSelf.isObjDraggable(objOriginal)) {
      var divaux = duplicateObject(objOriginal,objOriginal.id);
      divaux.style.position = 'absolute';
      divaux.style.left = String(getMouseX(e) + + getWindowScrollLeft()) + 'px';
      divaux.style.top = String(getMouseY(e) + + getWindowScrollTop()) + 'px';
      AgregarClase(divaux,'dragdrop_dragging_object');
      document.getElementsByTagName('body')[0].appendChild(divaux);
      PaginaSelf.ObjDragged = divaux;
      PaginaSelf.markDropAreas('dragdrop_destino_posible');
    }
  }

  PaginaSelf.onClickAttempt = function(e) {
    var obj = new ClickEvent(e);
  }
  PaginaSelf.getDraggableElementsInZone = function(idDropZone){
      var objDropArea = document.getElementById(idDropZone);
      var arrClasesDropZone = String(objDropArea.className).split(' ');
      var arrTemp = new Array();
      var strIdObjetosDragueables = '';
      var strClasesDragueables = '';

      //<====  Bloque que construye strIdObjetosDragueables
      for (var j in arrClasesDropZone) {
          var strClaseDropZone = arrClasesDropZone[j];
          var arrClasesDragueables = PaginaSelf.DropzoneClasses[strClaseDropZone];
          for (var k in arrClasesDragueables){
              var strClaseDragueable = arrClasesDragueables[k];
              if (String(strClasesDragueables).indexOf('|' + strClaseDragueable) < 0 ){
                  strClasesDragueables += ('|' + strClaseDragueable);
                  var arrSubElementosTemp = new Array();
                  arrSubElementosTemp = getElementsByClassNames(objDropArea, '*', strClaseDragueable);
                  for (var l in arrSubElementosTemp){
                      var strIdObjetoDragueable = arrSubElementosTemp[l].id;
                      if (strIdObjetoDragueable != '' && String(strIdObjetosDragueables).indexOf('|' + strIdObjetoDragueable) < 0 ){
                          strIdObjetosDragueables += ('|' + strIdObjetoDragueable);
                      }
                  }
                  arrSubElementosTemp = null;
              }
          }
      }
      //Bloque que construye strIdObjetosDragueables ====>
      var arrTodosLosSubElementos = new Array();
      var arrSubElementos = new Array();
      arrTodosLosSubElementos = objDropArea.getElementsByTagName('*');
      for (var j in arrTodosLosSubElementos){
          if (arrTodosLosSubElementos[j].id != '' && String(strIdObjetosDragueables).indexOf('|' + arrTodosLosSubElementos[j].id) >= 0){
              arrSubElementos.push(arrTodosLosSubElementos[j]);
          }
      }
      arrTodosLosSubElementos = null;
      return arrSubElementos;
  } // function getDraggableElementsInZone(idDropZone)

}	// function Pagina()


function ContextMenu(id, className, width, height) {
  var cm = this;
  var div = createDiv(id, className, 0, 0, width, height);
  var tabla = document.createElement('table');
  div.appendChild(tabla);
  tabla.setAttribute('cellspacing', '0');
  tabla.setAttribute('cellpadding', '0');
  var mytablebody = document.createElement("tbody");
  tabla.appendChild(mytablebody);
  return (div);
} // function ContextMenu


		// <pagCTES>
		function pagCTES() {
			var CtesSelf = this;
			CtesSelf.MaxClickTime = 300;
		}
		// </pagCTES>

		//<ClickEvent>
		function ClickEvent(e) {
			var ClickEventSelf = this;
				if (e == '') {
			    ClickEventSelf.PosX = 0;
			    ClickEventSelf.PosY = 0;
			    ClickEventSelf.Tiempo = new Date();
			    ClickEventSelf.Obj = document;
				}
				else {
			    ClickEventSelf.PosX = getMouseX(e);
			    ClickEventSelf.PosY = getMouseY(e);
			    ClickEventSelf.Tiempo = new Date();
			    ClickEventSelf.Obj = getMouseObject(e);
				}
		}
		//</ClickEvent>

		function AgregarElemento() {
			var divaux = document.createElement('div');
			document.getElementById("div-Pagina").appendChild(divaux);
			var nodo = document.createTextNode("Hello. This is a new node.");
			divaux.appendChild(nodo);
		}

		function QuitarElemento(divNum) {
		  var objParent = document.getElementById('div-holder');
		  var divaux = document.getElementById(divNum);
		  objParent.removeChild(divaux);
		}

		function AgregarClase(objTarget,nomClase,idTarget,blnEliminaClases) {
      var claseSpecial = new String;
      if (objTarget == null){
       var objTarget = document.getElementById(idTarget);
      }
      if (objTarget != null){
          if (blnEliminaClases == true){
            eliminarClases(objTarget, idTarget);
          }
          if (String(objTarget.className).indexOf(nomClase) < 0) {
              objTarget.className = objTarget.className + ' ' + nomClase;
          }
      }
     }

      function RemoverClase(objTarget,nomClase,idTarget) {
        if (objTarget == null){
         var objTarget = document.getElementById(idTarget);
        }
        if (objTarget != null){
            objTarget.className = String(objTarget.className).replace(nomClase,'');
        }
      }

      function eliminarClases(objTarget,idTarget) {
        if (objTarget == null){
         var objTarget = document.getElementById(idTarget);
        }
        if (objTarget != null){
            objTarget.className = '';
        }
      }


//<Funciones genericas de MOUSE y TECLADO>

		//</FUNCIONES DE PANTALLA (QUE TRABAJAN SOBRE EL SCREEN)


		//<FUNCIONES MATEMATICAS>
function GUIDGen() {
	try {
	  var x = new ActiveXObject("Scriptlet.TypeLib");
		return (x.GUID).substr(0, 38);
	}
		catch (e)
	{
		return ("error creating GUID");
	}
}

function Min(a,b) {
	if (a < b) {
        return a;
	} else {
	    return b;
	}
}

function Max(a,b) {
	if (a > b) {
        return a;
	} else {
	    return b;
	}
}

		//</FUNCIONES MATEMATICAS>



		function createDiv(id, className, left, top, width, height) {
      var div = document.createElement("div");
      div.id           = id;
      div.className    = className;
      div.style.left   = String(left)   + "px";
      div.style.top    = String(top)    + "px";
      if (width != 0){
	      div.style.width  = String(width)  + "px";
      }
      if (height != 0){
  	    div.style.height = String(height) + "px";
      }
		  return(div);
		}

		function duplicateDiv(div,newId) {
      var dupdiv = document.createElement("div");
      dupdiv.id           = newId;
      dupdiv.className    = div.className;
      dupdiv.style.left   = div.style.left;
      dupdiv.style.top    = div.style.top;
      dupdiv.style.width  = div.style.width;
      dupdiv.style.height = div.style.height;
      dupdiv.innerHTML = div.innerHTML;
		  return(dupdiv);
		}



//******************************************************
    function include_dom(script_filename) {
        var html_doc = document.getElementsByTagName('head').item(0);
        var js = document.createElement('script');
        js.setAttribute('language', 'javascript');
        js.setAttribute('type', 'text/javascript');
        js.setAttribute('src', script_filename);
        html_doc.appendChild(js);
        return false;
    }

	function showSecInMenu(idMenu,idSec) {
		var menu = document.getElementById(idMenu);
		for (var i in menu.childNodes) {
			var innerTag = menu.childNodes[i];
			if (innerTag.id == idSec) {
				innerTag.style.display = '';
			}
		}
	}

	function getNextSibling(objeto,tipoTag) {
		var ns = objeto.nextSibling;
		while (ns.tagName != tipoTag) {
			ns = ns.nextSibling;
		}
			return ns;
	}

	function getFirstChild(objeto,tipoTag) {
		var nc = objeto.firstChild;
		alert(nc.tagName);
		while (nc.tagName != tipoTag) {
			nc = nc.nextSibling;
			alert(nc.tagName);
		}
			return nc;
	}

    function Menu(idMenu){
        var menHtml = document.getElementById(idMenu);
        var Mnu = this;
        Mnu.Secciones = new Array();
        var pagCandidate = new Array();
        var myUrl = String(window.location);
        var arrUrl = myUrl.split("index.html");
        var nomPagina = arrUrl[arrUrl.length - 1];
        var arrQueryString = ''
        if (nomPagina.split("?")[1]){
            arrQueryString = nomPagina.split("?")[1].split("&");
        }
        var nomPagina = nomPagina.split("?")[0];
        var linkActivo;


        Mnu.FillchildNodes = function Menu_FillchildNodes(elem,NomClase,arrPadre){
            for (var i in elem.childNodes) {
                var innerTag = elem.childNodes[i];
                if (innerTag.className){
                    var arrClases = String(innerTag.className).split(" ");
                    var clFound = false;
                    for (j=0; j<arrClases.length; j++) {
                        var cn = String(arrClases[j]);
                        if (cn == NomClase){
                            var sec = new Seccion(innerTag.innerHTML,innerTag.className,innerTag.id,innerTag);
                            arrPadre.push(sec);
                            clFound = true;
                            Mnu.FillchildNodes(innerTag,'mnu_seccion',sec.Secciones);
                        }
                    }
                    if (!clFound){
                        Mnu.FillchildNodes(innerTag,NomClase,arrPadre);
                    }
                }
            }
            for (i=0; i<arrQueryString.length; i++) {
                var variable = arrQueryString[i].split("=")[0];
                var valor = arrQueryString[i].split("=")[1];
                if (variable == 'mnu') {
                    if (Mnu.FindSec(valor,Mnu)){
                        linkActivo = valor;
                        break;
                    }
                }
            }
        }

        Mnu.ActiveSec = function Menu_findActiveSec(sec){
            if (linkActivo){
                return linkActivo;
            }else{
                Mnu.findActiveSec(Mnu);
                return pagCandidate['idMnu'];
            }
        }

        Mnu.findActiveSec = function Menu_findActiveSec(sec){
            if (sec == Mnu){
                if (Mnu.Secciones.length == 0) {
                    return null;
                }
                for (var i in Mnu.Secciones) {
                    var contCoincidencias = 0;
                    if (Mnu.Secciones[i]._Href.indexOf(nomPagina) >= 0) {
                        contCoincidencias += 1;
                        for (j=0; j<arrQueryString.length; j++) {
                            if (Mnu.Secciones[i]._Href.indexOf(arrQueryString[j]) >= 0) {
                                contCoincidencias += 1;
                            }
                        }
                    }
                    if ((!pagCandidate['idMnu'] || pagCandidate['coinc'] < contCoincidencias) && contCoincidencias > 0){
                        pagCandidate['idMnu'] = Mnu.Secciones[i].id;
                        pagCandidate['coinc'] = contCoincidencias;
                    }
                    Mnu.findActiveSec(Mnu.Secciones[i]);
                }
            }else{
                if (sec.Secciones.length == 0) {
                    return null;
                }
                for (var i in sec.Secciones) {
                    var contCoincidencias = 0;
	                if (sec.Secciones[i]._Href.indexOf(nomPagina) >= 0) {
	                    contCoincidencias += 1;
                        for (j=0; j<arrQueryString.length; j++) {
                            if (sec.Secciones[i]._Href.indexOf(arrQueryString[j]) >= 0) {
                                contCoincidencias += 1;
                            }
                        }
	                }
                    if ((!pagCandidate['idMnu'] || pagCandidate['coinc'] < contCoincidencias) && contCoincidencias > 0){
                        pagCandidate['idMnu'] = sec.Secciones[i].id;
                        pagCandidate['coinc'] = contCoincidencias;
                    }
                Mnu.findActiveSec(sec.Secciones[i]);
                }
            }
        }

	    Mnu.CollapseAll = function Menu_CollapseAll(Sec) {
	        if (Sec == null){
	            Sec = Mnu;
	        }else{
	            Sec.Collapse();
	        }
            for (var i in Sec.Secciones) {
                Mnu.CollapseAll(Sec.Secciones[i]);
            }
	    }

	    Mnu.UncollapseAll = function Menu_UncollapseAll(Sec) {
	        if (Sec == null){
	            Sec = Mnu;
	        }else{
	            Sec.Uncollapse();
	        }
            for (var i in Sec.Secciones) {
                Mnu.UncollapseAll(Sec.Secciones[i]);
            }
	    }


	    Mnu.FindSec = function Menu_FindSec(idSec,sec) {
	        if (sec == Mnu){
	            if (Mnu.Secciones.length == 0) {
	                return null;
	            }
	            for (var i in Mnu.Secciones) {
    	            if (Mnu.Secciones[i].id == idSec){
    	                return Mnu.Secciones[i]
    	            }else{
    	                var rtnSec = null;
    	                rtnSec = Mnu.FindSec(idSec,Mnu.Secciones[i]);
    	                if (rtnSec != null){
    	                    return rtnSec;
    	                }
    	            }
	            }
	            return null;
	        }else{
	            if (sec.Secciones.length == 0) {
	                return null;
	            }
	            for (var i in sec.Secciones) {
    	            if (sec.Secciones[i].id == idSec){
    	                return sec.Secciones[i];
    	            }else{
    	                var rtnSec = null;
    	                rtnSec = Mnu.FindSec(idSec,sec.Secciones[i]);
    	                if (rtnSec != null){
    	                    return rtnSec;
    	                }
    	            }
	            }
	            return null;
	        }
	    }

	    Mnu.ShowSec = function Menu_ShowSec(idSec) {
	        var Sec = Mnu.FindSec(idSec,Mnu);
	        if (Sec) {
	            Sec.Uncollapse();
                objParent = Sec.obj.parentNode;
                if (objParent.id == '' || objParent == null){
                    objParent = objParent.parentNode;
                }
                if (objParent.id != Mnu.id) {
                    Mnu.ShowSec (objParent.id);
                }
            }
	    }
        Mnu.FillchildNodes(menHtml,'mnu_seccion',Mnu.Secciones);
    }

    function Seccion(inHtml,clase,id,obj,collapsed){
        this.inHtml = inHtml;
        this.clase = clase;
        this.id = id;
        this.obj = obj;
        this.collapsed = collapsed;
        this.Secciones = new Array();
        this._Href = '';
        this.Nombre = '';
        var anchs = obj.getElementsByTagName('a');
        if (anchs.length > 0){
            this._Href = anchs[0].getAttribute('href');
            this.Nombre = anchs[0].innerHTML;
        }

        this.Collapse = function Sec_Collapse() {
            this.collapsed = true;
            for (var i in this.Secciones) {
                this.Secciones[i].obj.style.display = 'none';
            }
            if (this.Secciones.length > 0) {
                arrSpan = this.obj.getElementsByTagName('span');
                for (j=0; j<arrSpan.length; j++) {
                    if (String(arrSpan[j].className).indexOf('boton_menu_minus') >= 0) {
                        arrSpan[j].className = String(arrSpan[j].className).replace('boton_menu_minus','boton_menu_plus');
                        break;
                    }
                }
            }
        }
        this.Uncollapse = function Sec_Uncollapse() {
            this.collapsed = false;
            for (var i in this.Secciones) {
                this.Secciones[i].obj.style.display = '';
            }
            if (this.Secciones.length > 0) {
                arrSpan = this.obj.getElementsByTagName('span');
                for (j=0; j<arrSpan.length; j++) {
                    if (String(arrSpan[j].className).indexOf('boton_menu_plus') >= 0) {
                        arrSpan[j].className = String(arrSpan[j].className).replace('boton_menu_plus','boton_menu_minus');
                        break;
                    }
                }
            }
        }
        this.Toggle = function Sec_Toggle() {
            if (this.collapsed) {
                this.Uncollapse();
            }else{
                this.Collapse();
            }
        }
    }

function GetNomPagina(){
    var myUrl = String(window.location);
    var arrUrl = myUrl.split('index.html');
    var strNomPagina = arrUrl[arrUrl.length - 1];
    strNomPagina = strNomPagina.split('?')[0];
    return strNomPagina.split('#')[0];
}



function countMatches(str, pattern) {
  var count = 0;
  pattern.lastIndex = 0;
  while (pattern.test(str)) {
    ++count;
    if (str == null){
      return count;
    }
    str = String(str).substring(pattern.lastIndex + 1, str.length);
  }
  return count;
}

function duplicateObject(elem,newId) {
    var dupdiv = document.createElement(elem.tagName);
    for (var e in elem) {
        try {
            dupdiv[e] = elem[e];
        }catch(e){
        }
    }
    dupdiv.id           = newId;
    return dupdiv;
}

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements);
}

    //      Ejemplos de uso:
    //  getElementsByClassName(document.getElementById('envase'), 'div', 'nomBreClaseBuscada')
    //  getElementsByClassName(document, 'a', 'nomBreClaseBuscada')
    //  getElementsByClassName(document, '*', 'nomBreClaseBuscada')


function getElementsByClassNames(oElm, strTagName, strTodasLasClases){
    var strTodasLasClases = String(strTodasLasClases).replace('  ',' ');
    var arrClases = new Array();
    var arrReturnElements = new Array();
    var arrReturnElementsTmp = new Array();
    arrClases = String(strTodasLasClases).split(' ');
    for (var i in arrClases) {
        var targetClass = arrClases[i];
        arrReturnElementsTmp = getElementsByClassName(oElm, strTagName, targetClass)
        for (var j in arrReturnElementsTmp) {
            arrReturnElements.push(arrReturnElementsTmp[j]);
        }
    }
    return (arrReturnElements);
}


function SetearBotonOnEnter(idElemento,idBoton){
  var elem = document.getElementById(idElemento);
  elem.idBtnDefault = idBoton;
  elem.onkeypress = keyhandler;
}

function keyhandler(e) {
  e = e? e: window.event;
  var elem = (e.target? e.target: window.event.srcElement);
  var unicode = e.charCode? e.charCode : e.keyCode;
  if (elem.idBtnDefault && unicode == 13){
    var btn = document.getElementById(elem.idBtnDefault);
    var h = btn.onclick;
    if (h && h.apply) {
      btn.focus();
      h.apply(this);
    }
  }
}