
/*
 * home.js: HaWe homepage client-side scripts
 * author: Hans-Werner Heinzen hwheinzen@t-online.de
 * created: 23.01.2004

 $Log: home.js,v $
 Revision 1.4  2004/06/19 14:38:52  hawe
 minor change

 Revision 1.3  2004/06/11 18:26:35  hawe
 no more parking variables in the DOM tree,
 new function appendParmsToLanguage() for language switching

 Revision 1.2  2004/02/22 14:23:05  hawe
 new menu classes, RCS keywords, some content changes

 */

// -----------------------------------------------------------------------
// init() (is executed at loading time, see *.ihtml)
// IN: - OUT: - GLOBALS: -
//
// - call expandMenu() for maximum menu height
// - calls adjustLayout()
// - calls setMenuItems()
// - add event listener
// - set all to visible
// -----------------------------------------------------------------------
function init()
{
    expandMenu();                                   // set maximum hight of id="mainmenu"
    adjustLayout();
    setMenuItems();                                 // set display of menu elements

    xAddEventListener(window, "resize", adjustLayout, false);

    xShow("body");
}

// -----------------------------------------------------------------------
// adjustLayout()
// IN: - OUT: - GLOBALS: menuSide
// (prerequisite: *container and higher level elements with
//  margin,border and padding: 0 !)
//
// - menu left or right
// - recalculate heights for id="mainmenu"/"maintext"/"centercontainer"
// - call updateMenu()
// -----------------------------------------------------------------------
function adjustLayout()
{
    var centerWidth = xWidth("centercontainer");    // get width of id="centercontainer"
    var mainmenuWidth = xWidth("mainmenu");         // get width of id="mainmenu"
    var maintextWidth = xWidth("maintext");         // get width of id="maintext"

//    alert("centerWidth = "+centerWidth+"\nlWidth = "+mainmenuWidth);

    if (menuSide == "right") {
        xLeft("maintext", 0);                       // shift id="maintext"
        xLeft("mainmenu", maintextWidth);           // shift id="mainmenu"
    } else {
        xLeft("mainmenu", 0);                       // shift id="mainmenu"
        xLeft("maintext", mainmenuWidth);           // shift id="maintext"
    }

    var minHeight   = xClientHeight()               // get height of window
                    - xHeight("topcontainer")
                    - xHeight("bottomcontainer");

    var maxHeight = Math.max(xHeight("mainmenu"),xHeight("maintext"));

    maxHeight = Math.max(maxHeight,minHeight);

    xHeight("mainmenu", maxHeight);                 // set hight of id="mainmenu"
    xHeight("maintext", maxHeight);                 // set hight of id="maintext"
    xHeight("centercontainer", maxHeight);          // set hight of id="centercontainer"
}

// -----------------------------------------------------------------------
// expandMenu()
// IN: - OUT: - GLOBALS: tocRootId
//
// - set 'display' of all <ul>s to 'block'
// -----------------------------------------------------------------------
function expandMenu()
{
    var menu = xGetElementById(tocRootId);          // get DOM element of menu
    var uls = menu.getElementsByTagName("ul");      // get unordered lists
    for (var i=1; i<uls.length; ++i) {
        uls[i].style.display="block";               // set 'display'
    }
}

// -----------------------------------------------------------------------
// setMenuItems()
// IN: - OUT: - GLOBALS: tocRootId, toglDesc
//
// - set 'display' of <ul>s in the menu according to toggle descriptor
// -----------------------------------------------------------------------
function setMenuItems()
{
    var menu = xGetElementById(tocRootId);          // get DOM element of menu
    var uls = menu.getElementsByTagName("ul");      // get unordered lists
    var toglUls = toglDesc.split(".");              // toggle descriptor into array
    if (uls.length != toglUls.length) {
        alert ("initMenu: error - count uls=" + uls.length + "toglDesc=" + toglDesc);
    } else {
        for (var i=1; i<uls.length; ++i) {
            if (toglUls[i] == "0") {
                uls[i].style.display="none";        // set 'display'
            } else {
                uls[i].style.display="block";       // set 'display'
            }
        }
    }
}

// -----------------------------------------------------------------------
// toggleMenuItem()
// IN: DOM element OUT: - GLOBALS: -
//
// - toggles 'display' of one <ul> onClick (see *menu.php)
// -----------------------------------------------------------------------
function toggleMenuItem(thisIn)
{
    var ul = thisIn.parentNode.parentNode.getElementsByTagName("ul")[0];   // get <ul>

    var img = thisIn.getElementsByTagName("img")[0];// get 'img'

    // toggle and set icon
    if (ul.style.display=="none") {
        ul.style.display = "block";
        img.setAttribute("src","image/minus.gif");  // set 'img'
        img.setAttribute("alt","-");                // set 'img'
    } else {
        ul.style.display = "none";
        img.setAttribute("src","image/plus.gif");   // set 'img'
        img.setAttribute("alt","+");                // set 'img'
    }

    setToglDesc();                                  // update toggle descriptor
}

// -----------------------------------------------------------------------
// setToglDesc()
// IN: - OUT: - GLOBALS: tocRootId, toglDesc
//
// - set toggle descriptor according to 'display' of <ul>s
// -----------------------------------------------------------------------
function setToglDesc()
{
    var menu = xGetElementById(tocRootId);          // get root of menu
    var allUls = menu.getElementsByTagName("ul");   // get <ul>s
    toglDesc = "1";                                 // start toggle descriptor
    for (var i=1; i<allUls.length; ++i) {
        if (allUls[i].style.display == "none") {
            toglDesc += ".0";                       // continue toggle descriptor
        } else {
            toglDesc += ".1";                       // continue toggle descriptor
        }
    }
}

// -----------------------------------------------------------------------
// toggleMenuSide()
// IN: - OUT: - GLOBALS: menuSide
//
// - toggles menu side
// - calls adjustLayout()
// -----------------------------------------------------------------------
function toggleMenuSide()
{
    if (menuSide == "left") {
        menuSide = "right";
    } else {
        menuSide = "left";
    }

    adjustLayout();
}

// -----------------------------------------------------------------------
// appendParms()
// IN: DOM element OUT: - GLOBALS: toglDesc menuSide lang
//
// - completes 'href' before sending (see *menu.php)
// -----------------------------------------------------------------------
function appendParms(thisIn)
{
    if (toglDesc != "") {
        var href = thisIn.parentNode.getAttribute("href");  // get 'href'

        href += "&toglDesc=" + toglDesc;            // add toggle descriptor
        href += "&menu=" + menuSide;                // add menu side descriptor
        href += "&lang=" + lang;                    // add language descriptor

        thisIn.parentNode.setAttribute("href",href);// set 'href'
    }
}

// -----------------------------------------------------------------------
// appendParmsToLanguage()
// IN: DOM element OUT: - GLOBALS: paggge toglDesc menuSide layout
//
// - completes 'href' before sending (see *menu.php)
// -----------------------------------------------------------------------
function appendParmsToLanguage(thisIn)
{
    if (toglDesc != "") {
        var href = thisIn.parentNode.getAttribute("href");  // get 'href'

        href += "&page=" + page;                    // add page descriptor
        href += "&toglDesc=" + toglDesc;            // add toggle descriptor
        href += "&menu=" + menuSide;                // add menu side descriptor
        href += "&layout=" + layout;                // add layout descriptor

        thisIn.parentNode.setAttribute("href",href);// set 'href'
    }
}

