/**
* CSShiarchMenu v0.6
*   written by: me[AT]daantje[DOT]nl
*   last update: Sat Nov 26 13:08:45 CET 2005
*
*   Documentation:
*       Build this small script cause all the gpl-ed scripts I found where too big
*       and had too many options I never going to use, or the config for the menu
*       was not easy to set with a PHP routine.
*
*   License:
*       LGPL. (http://www.gnu.org/copyleft/lesser.txt)
*
*   Dontate:
*       Please, when you like my script, click a view banners on
*       http://www.dantje.nl Or use my pay-pal donation button.
*/

//declare
var submenu = new Array();
var tmr = new Array();
var adj = new Array();
var last_zIndex = 10000;
var lastOverId = 'menu11';
var spacerw4 = "<img border=\"0\" src=\"images/spacer.gif\" width=\"4\" height=\"14\" alt=\"\" />";
var spacerw14 = "<img border=\"0\" src=\"images/spacer.gif\" width=\"14\" height=\"14\" alt=\"\" />";
var spacerw18 = "<img border=\"0\" src=\"images/spacer.gif\" width=\"18\" height=\"14\" alt=\"\" />";

var m_spacer_classname = "m_ShorCuts";      //horizontal spacer
var m_bgcolor = "#f0f0f0";

// BEGIN CONFIG
var alignSubmenu    = 'bottom';     //bottom or right side of the main button.
var useLastItemCSS  = true;         //generate last menu item too
                                    //if false, it will behave as a normal item
                                    //and the css menuItemLast class will not be used
var adjustFirst = true;     //overlap the first submenu too?
var adjustTop   = -2;           //move the submenu's some pixels. Positive number (10) for down, negative (-10) for up.
var adjustLeft  = 0;            //move the submenu's some pixels. Positive number (10) for right, negative (-10) for left.
var divWidth;

function setWidth(d){
    divWidth = d;
return divWidth;
}

//build or unhide submenu div...
function buildSubmenu(obj,align){
    lastOverId = obj.id;

    //overrule default alignment of this submenu
    if(!align)
        align = alignSubmenu;

    //get common part of div id
    menuPath = obj.id.split('_');

    //unset mousout of parent menus and make sure they are visible...
    x = "div";
    for(i=0;i<menuPath.length;i++){
        x+= '_' + menuPath[i];
        if(document.getElementById(x)){
            if(tmr[x])
                window.clearTimeout(tmr[x]);
            document.getElementById(x).style.visibility = 'visible';
        }
    }

    //check if we have a submenu of the obj...
    if(submenu[obj.id]){
        //calc position of mouseover
        d = obj;
        if(d){
            L_pos = d.offsetLeft + d.offsetWidth;
            T_pos = d.offsetTop;
            while(d.offsetParent){
                d = d.offsetParent;
                L_pos+= d.offsetLeft;
                T_pos+= d.offsetTop;
            }
        }

        //patch first submenu to go right below the main buttons...
        if(obj.className.indexOf('menuItem') < 0 && align == 'bottom'){
            L_pos-= obj.offsetWidth;
            T_pos+= obj.offsetHeight;
        }

        //move the submenu (overlap?)
        if((adjustTop || adjustLeft) && (adjustFirst || (!adjustFirst && obj.className.indexOf('menuItem') >= 0))){
            L_pos+= adjustLeft;
            T_pos+= adjustTop;
        }

        //Only parse when position is higher than 0,0... Else we dont have the right position!
        if(L_pos > 0 && T_pos >0){
            //check if allready build...
            c = document.getElementById('div_' + obj.id);
            if(c){
                //unhide...
                c.style.visibility = 'visible';
                c.style.zIndex = last_zIndex++;

                //hard replace
                c.style.top = (T_pos - 1) + "px";
                c.style.left = (L_pos - 1) + "px";
            }else{
                //build new div
                subObj = document.createElement('div');
                subObj.id = 'div_' + obj.id;
                subObj.className = 'submenu';
                subObj.style.position = 'absolute';
                subObj.style.zIndex = last_zIndex++;
                subObj.style.top = (T_pos - 1) + "px";
                subObj.style.left = (L_pos - 1) + "px";

                //write div to the body...
                document.getElementsByTagName('body')[0].appendChild(subObj);

                //build html for submenu
                content = "";
                m = submenu[obj.id];
                for(i=0;i<m.length;i++){

                    //determin target for onclick...
                    //  (sorry, I should rewrite this routine...)
                    if(m[i][1]){
                        if(m[i][1].substring(0,11) == 'javascript:'){
                            act = m[i][1].substring(11);
                        }else{
                            if(!m[i][2] || m[i][2] == '_self')
                                act = "self.location.href='" + m[i][1] + "';";
                            else if(m[i][2] == '_top')
                                act = "top.location.href='" + m[i][1] + "';";
                            else if(m[i][2] == '_parent')
                                act = "parent.location.href='" + m[i][1] + "';";
                            else if(m[i][2] == '_blank')
                                act = "window.open('" + m[i][1] + "');";
                            else
                                act = "window.frames['"+m[i][2]+"'].location.href='" + m[i][1] + "';";
                        }
                    }

                    //make item
                    content += "<div id=\"" + obj.id + "_" + i + "\""
                            + " onmouseout=\"hideSubmenu(this)\""
                            + " onmouseover=\"buildSubmenu(this)\" "
                            + "style=\"width:" + divWidth + "px;"
                            + ((m[i][0]==m_hr) ? "height:3px;background-image:url(images/separator.gif);background-repeat:repeat-x;background-color:" + m_bgcolor + " !important;\"" : "\"")
//                          + ((m[i][1]) ? " onclick=\""+ act + "\"" : "")
                            + " class=\"menuItem" + (i==0 ? 'First'
                                                          : (i==(m.length -1) && useLastItemCSS
                                                          ? 'Last' : ''))
                            + "\">"
                            + ((tc7==1) ? ((!m[i][3]) ? spacerw18 + "&nbsp;"
                                                      : "<img border=\"0\" src=\""
                                                      + m_icon_path + m[i][3] + ".gif\""
                                                      + " width=\"14\" height=\"14\" alt=\"\" />"
                                                      + spacerw4)
                                                      : spacerw14
                                                      + "&nbsp;")
                            + ((m[i][0]==m_hr) ? spacerw14
                                               : m[i][0])
                            + ((m[i][2]) ? "<span class=\"" + m_spacer_classname + "\">"
                                         + m[i][2]
                                         + spacerw14
                                         + "</span>"
                                         : "")
                            + "</div>";
                    adj[i] = obj.id + "_" + i;
                }

                //insert new menu
                subObj.innerHTML = content;
            }
        }
    }
}

//hide a submebu div
function hideSubmenu(obj){
    //get common part of div id
    closePath = obj.id.split('_');

    //hide path
    x = "div";
    for(i=0;i<closePath.length;i++){
        x+= '_' + closePath[i];
        if(document.getElementById(x))
            tmr[x] = window.setTimeout("document.getElementById('"+x+"').style.visibility = 'hidden';",100);
        //The timeout above is needed for MSIE browsers... Or else the menu's will disapear on EVERY mousout!!!
        //Please get a normal browser like Firefox, Mozilla or Opera!!
    }
}

//add an menu item to the config array (called in the config lines)
function menuItem(txt,url,tar,ico){
    return new Array(txt,url,tar,ico);
}

//change div's on mouse over and out...
document.onmouseover = function(e){
    obj = document.all ? event.srcElement : e.target;
    if(obj.className == 'menuItemFirst' || obj.className == 'menuItem' || obj.className == 'menuItemLast')
        obj.className+='Over';
}
document.onmouseout = function(e){
    obj = document.all ? event.srcElement : e.target;
    if(obj.className == 'menuItemFirstOver' || obj.className == 'menuItemOver' || obj.className == 'menuItemLastOver')
        obj.className = obj.className.substring(0,(obj.className.length - 4));
}

//*** Patch for firefox bug with focus on mouseover...
//      This function should be called onMouseOver of every iFrame that's under the menu structure.
function iFramePatch(){
    if(!document.all && lastOverId)
        hideSubmenu(document.getElementById(lastOverId));
}

