﻿var navegadorVer = "0";
var intNavegador;

function versioNavegador() {
    //comprueba la versión del navegador
    if (navigator.appName == "Microsoft Internet Explorer") {
        navegadorVer = navigator.appVersion;
        var intAuxIni = navegadorVer.search("MSIE");
        navegadorVer = navegadorVer.substring(intAuxIni + 4, 23);
    }
}


function importXML(strIdiomaMenu) {
    //crea el objeto que cargará el xml
    if (window.XMLHttpRequest)
        xmlhttp = new XMLHttpRequest();
    else
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    //carga el xml
    xmlhttp.open("GET", "/xml/menu" + strIdiomaMenu + ".xml", false);
    xmlhttp.send();
    //recoge el contenido del xml
    var xmlDoc2 = xmlhttp.responseXML;
    /*---temp(sólo para pruebas en IE en local)---*/
    if (xmlDoc2.childNodes.length <= 0) {
        xmlhttp = new ActiveXObject("Microsoft.XMLDOM");
        xmlhttp.async = false;
        xmlhttp.load("/xml/menu" + strIdiomaMenu + ".xml");
        xmlDoc2 = xmlhttp;
    }
    /*---temp---*/
    return xmlDoc2;
}

/*function veureSubMenu(cod) {
    document.getElementById(cod).style.visibility = "visible";
}
function amagaSubMenu(cod) {
    document.getElementById(cod).style.visibility = "hidden";
}*/


function generarMenu(strIdiomaMenu) {
    versioNavegador();
    var xmlDoc = importXML(strIdiomaMenu);
    //canvia las imágenes de la cabecera del menú según el idioma
    canviarImg(strIdiomaMenu, 1);
    //obtiene los elementos del menú
    var xmlObj = xmlDoc.getElementsByTagName("rama");
    //obtiene el elemento menuPrincipal de la página para llenarlo con el menú
    var body = document.getElementById("menuPrincipal");
    var tbl = document.createElement("table");
    if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
        tbl.setAttribute("className", "menu");
    else
        tbl.setAttribute("class", "menu");
    tbl.setAttribute("cellSpacing", 0);
    tbl.setAttribute("cellPadding", 0);
    var tblBody = document.createElement("tbody");
    var row = document.createElement("tr");
    //se recorre cada rama
    for (var i = 0; i < xmlObj.length; i++) {
        var x = xmlDoc.getElementsByTagName("rama")[i];
        var cell = document.createElement("td");
        //se crea la pestaña del menú
        if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
            cell.setAttribute("className", x.attributes.getNamedItem("style").nodeValue);
        else
            cell.setAttribute("class", x.attributes.getNamedItem("style").nodeValue);
        cell.setAttribute("id", x.attributes.getNamedItem("id").nodeValue);
        //se asignan los eventos a la pestaña del menú
        cell.onmouseover = function () { CanviEstil(this, 1); mostrarMenu(this, 1) }
        cell.onmouseout = function () { CanviEstil(this, 0); mostrarMenu(this, 0) }
        cell.onclick = function () { CanviEstil(this, 0); mostrarMenu(this, 0) }

        var cellText = document.createTextNode(xmlObj[i].attributes.getNamedItem("nombre").nodeValue);
        var enllas = xmlObj[i].attributes.getNamedItem("destino").nodeValue;
        var alnk = document.createElement("a");
        //añade el enlace si existe
        if (enllas.length > 0) {
            if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
                alnk.setAttribute("className", "noDecMenu");
            else
                alnk.setAttribute("class", "noDecMenu");
            alnk.href = enllas;
            //añade la ventana destino si existe
            if (xmlObj[i].attributes.getNamedItem("target").nodeValue != "")
                alnk.target = xmlObj[i].attributes.getNamedItem("target").nodeValue;
            else
                alnk.target = "_blank";

            alnk.appendChild(cellText);

            cell.appendChild(alnk);
        }
        else//si no existe el enlace, añade el texto
            cell.appendChild(cellText);

        //crea un div que contendrá el submenú asociado a la pestaña actual
        var divAux = document.createElement("div");
        var tableAux = evaluarBranca(x, x.attributes.getNamedItem("id").nodeValue);
        //se asignan los estilos
        if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
            divAux.setAttribute("className", x.attributes.getNamedItem("posicioMenu").nodeValue);
        else
            divAux.setAttribute("class", x.attributes.getNamedItem("posicioMenu").nodeValue)

        if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
            tableAux.setAttribute("className", "submenu");
        else
            tableAux.setAttribute("class", "submenu");
        //añade el submenú al menú principal
        divAux.appendChild(tableAux);
        cell.appendChild(divAux);
        row.appendChild(cell);
    }
    tblBody.appendChild(row);
    tbl.appendChild(tblBody);
    body.appendChild(tbl);
}

function evaluarBranca(branca, strNomParent) {
    //recorre los elementos hoja del xml y monta los submenús
    var taulaSubMenu = document.createElement("table");
    //identifica al nuevo submenú a partir del nombre del menú que lo contenga
    taulaSubMenu.setAttribute("id", "taula" + strNomParent);
    //asigna estilo al submenú
    if (navigator.appName == "Microsoft Internet Explorer")
        taulaSubMenu.setAttribute("className", "submenu");
    else
        taulaSubMenu.setAttribute("class", "submenu");
    taulaSubMenu.setAttribute("cellSpacing", 0);
    taulaSubMenu.setAttribute("cellPadding", 0);
    var tbodySubMenu = document.createElement("tbody");
    //lee los elementos del submenú
    var aux = branca.getElementsByTagName("hoja");
    for (var w = 0; w < aux.length; w++) {
        var rowSubMenu = document.createElement("tr");
        var cellSubMenu = document.createElement("td");
        cellSubMenu.setAttribute("id", aux[w].attributes.getNamedItem("id").nodeValue);

        var aux2 = aux[w].getElementsByTagName("hoja");
        var textSubMenu = document.createTextNode('\u00a0' + aux[w].attributes.getNamedItem("nombre").nodeValue);
        if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
            cellSubMenu.setAttribute("className", aux[w].attributes.getNamedItem("style").nodeValue);
        else
            cellSubMenu.setAttribute("class", aux[w].attributes.getNamedItem("style").nodeValue);
        var enllas = aux[w].attributes.getNamedItem("destino").nodeValue;
        //si existe, se crea el enlace y sus atributos
        if (enllas.length > 0) {
            var alnk = document.createElement("a");
            //según el navegador el atributo class no es válido
            if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
                alnk.setAttribute("className", "noDec");
            else
                alnk.setAttribute("class", "noDec");
            alnk.href = enllas;
            //añade la ventana destino si existe
            if (aux[w].attributes.getNamedItem("target").nodeValue != "")
                alnk.target = aux[w].attributes.getNamedItem("target").nodeValue;
            else
                alnk.target = "_blank";

            cellSubMenu.appendChild(textSubMenu);
            alnk.appendChild(cellSubMenu);
        }
        else {
            //se añade el texto
            cellSubMenu.appendChild(textSubMenu);
        }
        //el submenú contiene otro submenú
        if (aux2.length > 0) {
            //asigna los eventos al submenú
            cellSubMenu.onmouseover = function () { CanviEstil(this, 1); mostrarMenu(this, 1) }
            cellSubMenu.onmouseout = function () { CanviEstil(this, 0); mostrarMenu(this, 0) }
            cellSubMenu.onclick = function () { CanviEstil(this, 0); mostrarMenu(this, 0) }

            var divAux = document.createElement("div");
            if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8)) {
                divAux.setAttribute("className", aux[w].attributes.getNamedItem("posicioMenu").nodeValue);
            } else
                divAux.setAttribute("class", aux[w].attributes.getNamedItem("posicioMenu").nodeValue);
            //se vuleve a llamar a la función para montar el sub-submenú
            var taulaAux = evaluarBranca(aux[w], aux[w].attributes.getNamedItem("id").nodeValue);
            if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
                taulaAux.setAttribute("className", "submenu");
            else
                taulaAux.setAttribute("class", "submenu");
            divAux.appendChild(taulaAux);

            cellSubMenu.appendChild(divAux);
            if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8))
                cellSubMenu.setAttribute("className", aux[w].attributes.getNamedItem("style").nodeValue);
            else
                cellSubMenu.setAttribute("class", aux[w].attributes.getNamedItem("style").nodeValue);
        }
        else {
            //asigna los eventos al submenú
            cellSubMenu.onmouseover = function () { CanviEstil(this, 1) }
            cellSubMenu.onmouseout = function () { CanviEstil(this, 0) }
            cellSubMenu.onclick = function () { CanviEstil(this, 0) }
        }
        rowSubMenu.appendChild(alnk);
        tbodySubMenu.appendChild(rowSubMenu);
        //puesto que el getElementsByName de encima del for devuelve todos los elementos con nombre 'hoja' sin discriminar que
        //sean o no hijso de otra hoja, hay que sumar el número de elementos hijos de esta hoja  a la posición actual del bucle 
        //para no repetirlos.
        w = w + aux2.length;
    }
    taulaSubMenu.appendChild(tbodySubMenu);
    return taulaSubMenu;
}

function CanviEstil(idCtrl, intOverOut) {
    //canvia el estilo del elemento para resaltar o no el elemento
    var navClass = "";
    var estil;
    //se obtiene el estilo, según el navegador el atributo class no es válido
    if ((navigator.appName == "Microsoft Internet Explorer") && (navegadorVer < 8)) {
        navClass = "className";
        estil = idCtrl.getAttribute("className");
    }
    else {
        navClass = "class";
        estil = idCtrl.getAttribute("class");
    }
    var auxEstil;
    //determina si el elemento se debe o no resaltar
    if (estil != null) {
        if (estil.substring(estil.length - 4, estil.length) == "Ress")
            auxEstil = 1;
        else
            auxEstil = 0;
    }
    //asigna un estilo dependiendo del evento
    if (intOverOut == 0) {
        if (auxEstil == 1)
            estil = estil.substring(0, estil.length - 4);
        idCtrl.setAttribute(navClass, estil);
    }
    else {
        if (auxEstil == 1)
            idCtrl.setAttribute(navClass, estil);
        else
            idCtrl.setAttribute(navClass, estil + "Ress");
    }
}

function mostrarMenu(Ctrl, visible) {
    //muestra o oculta el menú.
    var Ctrl2 = document.getElementById("taula" + Ctrl.id);
    if (visible == 1)
        Ctrl2.style.visibility = "visible";
    else
        Ctrl2.style.visibility = "hidden";
}
