// JScript source code
/* iubito's menu - http://iubito.free.fr/prog/menu.php - configuration du javascript */


// Doku:
// - Use the function positionne() to ajust the Menu to the different Browsers
// - Use the follwoing vars to ajust the Menu to the individuall needs



// Vertical or Horizontal Menu (true = horizontal; false = vertical)
var vertical = false;

// Where to start with the Menus and Submenus (Pixels below TOP of menu)
var top_delta = 23; //menu
var top_ssmenu = 10; //submenu

//ATTENTION: This Value has NO Effekt use top_delta!!!!!!
var top_menu = 0;
//ATTENTION: This Value has NO Effekt use top_delta!!!!!!

// Left Position of the Menu
var left_menu = 0;
//Count of menus (Will be set automatically from Code if the menus IDs are menu1, menu2, ...)
var nbmenu = 15;

// Center the Menu
var centrer_menu = false;

/* Size of the Menus
On est oblig de dfinir une largeur pour les menus.
Pour mettre des menus de largeurs diffrentes :
var largeur_menu = new Array(largeur menu1, largeur menu2, largeur menu3...)
Il faut faire attention  mettre autant de valeurs que de nombre de menu !
Attention, si vous tes en menu vertical, mettez une largeur fixe (pas de Array) !
*/

// If we have individual Sizes for each menu please use the following line
/*var largeur_menu = new Array(largeur menu1, largeur menu2, largeur menu3...)*/
/*var largeur_menu = new Array(90, 70, 80, 50, 40)*/

// If all menues have the same size use the following line
var largeur_menu = 115;

/* Same as above if the Menu is displayed vertically
En mode vertical, on a besoin de connatre la hauteur de chaque menu.
Mme si les "cases" ne sont pas dimensionnes en hauteur.
Ajustez cette variable si les menus sont trop rapprochs ou espacs en vertical.
Pour mettre des menus de hauteurs diffrentes :
var hauteur_menu = new Array(hauteur menu1, hauteur menu2, hauteur menu3...)
Il faut faire attention  mettre autant de valeurs que de nombre de menu !
Attention, si vous tes en menu horizontal, mettez une largeur fixe (pas de Array) !
*/
var hauteur_menu = 30;

/* Width of the Submenues
En mode horizontal.
Largeur des sous-menus, pour IE uniquement, les autres navigateurs respectent la largeur
auto. Mettez "auto" uniquement si vous tes sr d'avoir mis des &nbsp;  la place des
espace dans les items !
Pour mettre des sous-menus de largeurs diffrentes :
var largeur_sous_menu = new Array(largeur1, largeur2...).
Il faut faire attention  mettre autant de valeurs que de menus.
Si un menu n'a pas de sous-menus, il faut mettre quand mme quelque chose !
Il est possible de mettre "auto" dans certaines colonnes,  condition de respecter la
consigne ci-dessus.
*/
var largeur_sous_menu = 150;

/* Set if the SubMenues should grow if the content is to big
Pour les navigateurs connaissant la largeur automatique (s'adapte au contenu), cette
option (active par dfaut) permet d'avoir une largeur automatique. En cas contraire
(false), les sous menus auront la largeur largeur_sous_menu. */
var largeur_auto_ssmenu = true;

/* ... pour mettre un peu d'espace entre les menus ! */
var espace_entre_menus = 5;


/* En version verticale.
Position des sous-menus par rapport au bord gauche de l'cran. */
var left_ssmenu = largeur_menu + 2;

/* Quand la souris quitte un sous-menu, si le sous-menu disparait immdiatement,
cela gne l'utilisateur. Alors on peut mettre un dlai avant disparition du sous-menu.
500 ms c'est bien :-) */
var delai = 650; // en milliseconde

/* En version horizontale.
Comme le menu peut se superposer avec le texte de la page, il est possible de faire
descendre un peu la page (on augmente la marge du haut) pour arer un peu la page,
une quarantaine de pixel c'est pas mal. en px*/
var marge_en_haut_de_page = top_menu + 40;
/* En version verticale.
On dcale le document  droite pour pas que le menu le superpose. */
var marge_a_gauche_de_la_page = largeur_menu + 10;


/* Mettez  true si vous souhaitez que le menu soit toujours visible.
Mettez false si vous ne le souhaitez pas, dans ce cas le menu "disparatra" quand vous
descendrez dans la page. */
var suivre_le_scroll = false;

/* Pour IE uniquement, les balises <select> passent toujours au-dessus du menu, donc
par dfaut on cache les listes droulantes quand le menu est ouvert, puis on les fait
rapparatre  la fermeture du menu. Pour empcher a, mettre  false. */
var cacher_les_select = true;


var timeout; //ne pas toucher, c'est pour dclarer la variable
var agt = navigator.userAgent.toLowerCase();
var isMac = (agt.indexOf('mac') != -1);
var isOpera = (agt.indexOf("opera") != -1);
var IEver = parseInt(agt.substring(agt.indexOf('msie ') + 5));
var isIE = ((agt.indexOf('msie') != -1 && !isOpera && (agt.indexOf('webtv') == -1)) && !isMac);
var isIE5win = (isIE && IEver == 5);
var isIE5mac = ((agt.indexOf("msie") != -1) && isMac);
var blnOk = true;
var isCrome = ((agt.indexOf("chrome") != -1));
var isSafari = ((agt.indexOf("safari") != -1));

//pour enlever les "px" pour faire des calculs...
var reg = new RegExp("px", "g");

// onScroll pour Internet Explorer, le position:fixed fait ce boulot pour les autres navigateurs
// qui respectent les normes CSS...
window.onscroll = function () {
    if (blnOk && suivre_le_scroll && (isIE || isIE5mac)) {
        if (isIE5mac) document.getElementById("conteneurmenu").style.visibility = "hidden";
        var cumul = 0;
        for (i = 1; i <= nbmenu; i++) {
            if (!vertical) {
                document.getElementById("menu" + i).style.top = document.body.scrollTop + top_menu + "px";
                if (document.getElementById("ssmenu" + i))//undefined
                    document.getElementById("ssmenu" + i).style.top = document.body.scrollTop + top_ssmenu + "px";
            } else {
                document.getElementById("menu" + i).style.top = document.body.scrollTop
							+ (((i - 1) * espace_entre_menus) + cumul + 1 + top_menu) + "px";
                if (document.getElementById("ssmenu" + i))//undefined
                    document.getElementById("ssmenu" + i).style.top = document.body.scrollTop
							+ (((i - 1) * espace_entre_menus) + cumul + 1 + top_menu) + "px";
                cumul += isFinite(hauteur_menu) ? hauteur_menu : hauteur_menu[i - 1];
            }
        }
        if (isIE5mac) document.getElementById("conteneurmenu").style.visibility = "visible";
    }
}

function preChargement() {
    if (document.getElementById("conteneurmenu")) {
        document.getElementById("conteneurmenu").style.visibility = "hidden";
    }
}

function Chargement() {
    if (!blnOk) {
        if (document.body.style.backgroundColor != "") { blnOk = false; }
        if (document.body.style.color != "") { blnOk = false; }
        if (document.body.style.marginTop != "") { blnOk = false; }
        if (document.getElementById) {
            with (document.getElementById("conteneurmenu").style) {
                if (position != "" || top != "" || left != ""
						|| width != "" || height != "" || zIndex != ""
						|| margin != "" || visibility != "") {
                    blnOk = false;
                }
            }
        }
        else {
            blnOk = false;
        }
    }

    if (blnOk) {
        document.getElementById("conteneurmenu").style.visibility = "hidden";

        trimespaces();

        //MHO we leaf the Page Like it is
        //with(document.body.style) {
        //	if (!vertical) marginTop=marge_en_haut_de_page+"px";
        //	else		   marginLeft=marge_a_gauche_de_la_page+"px";
        //}

        positionne();
        CacherMenus();
    }

    // comme on a vit le clignotement, maintenant on fait apparatre le menu ;-)
    document.getElementById("conteneurmenu").style.visibility = '';
}
window.onresize = neuAufbau;

/*
* Place les lments du menu correctement, au chargement, au scroll, au redimensionnement
* de la fentre
*/
function positionne() {
    //MHO dynamic Position of the Element
    var pos = getElementPos("pmenu");
    top_menu = pos.top;
    left_menu = pos.left;
    if (IEver >= 8 || isSafari || isCrome) left_menu = 0;
    if (IEver >= 8 || isSafari || isCrome) top_menu = 0;
    top_ssmenu = top_menu + top_delta;

    var largeur_fenetre = (isIE ? document.body.clientWidth : window.innerWidth);
    var hauteur_fenetre = (isIE ? document.body.clientHeight : window.innerHeight);
    if (centrer_menu) {
        if (!vertical) {
            var largeur_totale = espace_entre_menus * (nbmenu - 1);
            if (isFinite(largeur_menu))
                largeur_totale += largeur_menu * nbmenu;
            else {
                for (i = 1; i <= nbmenu; i++)
                    largeur_totale += largeur_menu[i - 1];
            }
            left_menu = (largeur_fenetre - largeur_totale) / 2;
        } else {
            var hauteur_totale = espace_entre_menus * (nbmenu - 1);
            if (isFinite(hauteur_menu))
                hauteur_totale += hauteur_menu * nbmenu;
            else {
                for (i = 1; i <= nbmenu; i++)
                    hauteur_totale += hauteur_menu[i - 1];
            }
            top_menu = (hauteur_fenetre - hauteur_totale) / 2;
        }
    }

    //Menus
    var cumul = 0;
    for (i = 1; i <= nbmenu; i++) {
        if (document.getElementById("menu" + i)) {
            with (document.getElementById("menu" + i).style) {
                if (!vertical) {
                    top = top_menu + "px";
                    //left=(((i-1)*(largeur_menu+espace_entre_menus))+1+left_menu)+"px";
                    left = (((i - 1) * espace_entre_menus) + cumul + 1 + left_menu) + "px";
                } else {
                    //top=(((i-1)*(hauteur_menu+espace_entre_menus))+1+top_menu)+"px";
                    top = (((i - 1) * espace_entre_menus) + cumul + 1 + top_menu) + "px";
                    left = left_menu + "px";
                }
                //position="relative";
                if (!suivre_le_scroll || isIE || isIE5mac)
                    position = "absolute";
                else position = "fixed";
                //if (vertical) height=hauteur_menu+"px";
                margin = "0";
                zIndex = "2";
                if (vertical || isFinite(largeur_menu))
                    width = largeur_menu + "px";
                else
                    width = largeur_menu[i - 1] + "px";
                if ((!vertical && isFinite(largeur_menu)) || (vertical && isFinite(hauteur_menu))) {
                    cumul += (!vertical ? largeur_menu : hauteur_menu);
                }
                else {
                    cumul += (!vertical ? largeur_menu[i - 1] : hauteur_menu[i - 1]);
                    if (vertical) height = hauteur_menu[i - 1] + "px";
                }
            }
        }
    }

    //Sous-menus
    cumul = 0;
    for (i = 1; i <= nbmenu; i++) {
        if (document.getElementById("ssmenu" + i))//undefined
        {
            with (document.getElementById("ssmenu" + i).style) {
                position = "relative";
                if (!suivre_le_scroll || isIE || isIE5mac)
                    position = "absolute";
                else position = "fixed";
                if (!vertical) {
                    top = top_ssmenu + "px";
                    //left=(((i-1)*(largeur_menu+espace_entre_menus))+1+left_menu)+"px";
                    left = (((i - 1) * espace_entre_menus) + cumul + 1 + left_menu) + "px";
                } else {
                    left = left_ssmenu + "px";
                    //top=(((i-1)*(hauteur_menu+espace_entre_menus))+1+top_menu)+"px";
                    top = (((i - 1) * espace_entre_menus) + cumul + 1 + top_menu) + "px";
                }
                if (isIE || isOpera || isIE5mac || !largeur_auto_ssmenu) {
                    if (isFinite(largeur_sous_menu))
                        width = largeur_sous_menu + (largeur_sous_menu != "auto" ? "px" : "");
                    else
                        width = largeur_sous_menu[i - 1] + (largeur_sous_menu[i - 1] != "auto" ? "px" : "");
                }
                else width = "auto";
                if (!vertical && !isIE5mac) {
                    //repositionnement si dborde  droite
                    if ((width != "auto")
						&& ((left.replace(reg, '').valueOf() * 1 + width.replace(reg, '').valueOf() * 1) > largeur_fenetre))
                        left = (largeur_fenetre - width.replace(reg, '').valueOf()) + "px";
                }
                margin = "0";
                zIndex = "3";
            }
        }
        if ((!vertical && isFinite(largeur_menu)) || (vertical && isFinite(hauteur_menu))) {
            cumul += (!vertical ? largeur_menu : hauteur_menu);
        }
        else {
            cumul += (!vertical ? largeur_menu[i - 1] : hauteur_menu[i - 1]);
        }
    }
}


function MontrerMenu(strMenu) {
    if (blnOk) {
        AnnulerCacher();
        CacherMenus();
        if (document.getElementById(strMenu))//undefined
            with (document.getElementById(strMenu).style)
                visibility = "visible";
    }
    SelectVisible("hidden", document.getElementsByTagName('select'));
}

function CacherDelai() {
    if (blnOk) {
        timeout = setTimeout('CacherMenus()', delai);
    }
}
function AnnulerCacher() {
    if (blnOk && timeout) {
        clearTimeout(timeout);
    }
}
function CacherMenus() {
    if (blnOk) {
        for (i = 1; i <= nbmenu; i++) {
            if (document.getElementById("ssmenu" + i))//undefined
                with (document.getElementById("ssmenu" + i).style)
                    visibility = "hidden";
        }
    }
    SelectVisible("visible", document.getElementsByTagName('select'));
}

function trimespaces() {
    //Contourne un bug d'IE5/win... il ne capte pas bien les css pour les <li>, donc on les vire !
    if (blnOk && isIE5win) {
        for (i = 1; i <= nbmenu; i++) {
            if (document.getElementById("ssmenu" + i))//undefined
                with (document.getElementById("ssmenu" + i))
                    innerHTML = innerHTML.replace(/<LI>|<\/LI>/g, "");
        }
    }
}

function SelectVisible(v, elem) {
    if (blnOk && cacher_les_select && (isIE || isIE5win))
        for (var i = 0; i < elem.length; i++) elem[i].style.visibility = v;
}

function getElementPos(id) {
    //return an element absolute position
    var elmnt = document.getElementById(id);
    if (!elmnt) return;
    var pos = new Object;
    //get width and height
    pos.width = elmnt.offsetWidth;
    pos.height = elmnt.offsetHeight;
    //get left and top
    pos.left = 0;
    pos.top = 0;
    /*
    ie 5.0 counts the body as well with the full win width...
    so we need to stop on body
    */
    while (elmnt != null && elmnt.nodeName != "BODY") {
        pos.left += elmnt.offsetLeft;
        pos.top += elmnt.offsetTop;
        elmnt = elmnt.offsetParent;
    }
    //right and bottom
    pos.right = (pos.left + pos.width);
    pos.bottom = (pos.top + pos.height);
    return pos;
}
function neuAufbau() {
    if (!isIE) location.href = location.href;
}

