// Simple menu support
// copyright SimX corp. 2006

if( typeof menu_script_loaded == "undefined" ) {

var closable = new Array;

var old_doc_mousedown = null;
var old_doc_keydown = null;

var MousedownHandler = function(event)   // close menus on click elsewhere
{
    if( !closable ) return;
    for( cc in closable ) {
        if( closable[cc] ) {  
            var elem = ua.ie ? window.event.srcElement : (event.target.tagName ? event.target : event.target.parentNode);
            if( elem.className.indexOf( "submenu" ) < 0 && elem.parentNode && elem.parentNode.className.indexOf( "submenu" ) < 0 ) {
                var bar = document.getElementById(closable[cc]);
                if(bar) {
                    if( bar.className.indexOf( "submenu" ) >= 0 )
                        closeSubMenu(bar.id);
                    else
                        closeAll(bar);
                }
            }
        }    
    }
    if( old_doc_mousedown ) old_doc_mousedown(event);
}

if(document.addEventListener) document.addEventListener("mousedown", MousedownHandler, true); else
if( typeof document.onmousedown != "undefined") { old_doc_mousedown=document.onmousedown; document.onmousedown = MousedownHandler; }

var KeydownHandler = function() 
{
    if(window.event.keyCode == 27) {
        for( cc in closable ) {
            if( closable[cc] ) {  
                var bar = document.getElementById(closable[cc]);
                if(bar) {
                    if( bar.className.indexOf( "submenu" ) >= 0 )
                        closeSubMenu(bar.id);
                    else
                        closeAll(bar);
                }
            }    
        }
    }
    if( old_doc_keydown ) old_doc_keydown();
}

if(document.all) {
    old_doc_keydown = document.onkeydown;
    document.onkeydown = KeydownHandler;
}

function closeAll(menu,except)
{
    for( var i=0; i<menu.childNodes.length; i++) {
        var c = menu.childNodes.item(i)
        if( c == except ) continue;
        var sm = c.menu;
        if( sm && sm.className.indexOf( "submenu" ) >= 0 ) {
            closeSubMenu(sm.id);
            closeAll(sm,except);
        }
    }
}

function closeSubMenu(menuId)
{
    var menu = document.getElementById(menuId);
    if( !menu ) return;
    menu.style.display = "none";
    restoreSelect( menu.button );
}

function showSubMenu(menuId,top_button)
{
    var menu = document.getElementById(menuId);
    var item = menu.button;
    if( !top_button )
         top_button = item.parentNode.className.indexOf( "menuBar" ) >= 0 ? true : false
    var x_scroll = GetXScroll();
    var page_width = GetPageWidth();
    var maxX = x_scroll + page_width;
    var x_item_pos = GetPageXPos( item );
    var item_width = top_button ? 0 : GetWidth( item );
    menu.style.display = "block";
    var menu_width = GetWidth( menu );
    SetXPos( menu, x_item_pos + item_width + menu_width <= maxX ?
                   x_item_pos + item_width :
                   x_item_pos - menu_width >= x_scroll && !top_button ? x_item_pos - menu_width :
                   maxX - menu_width );
    SetYPos( menu, GetPageYPos( item ) + (top_button ? GetHeight( item ) : 0));
    menu_width = GetWidth( menu );
    SetWidth(menu,menu_width);
}

function menuOver(menu)
{
    if( menu.className.indexOf( "submenu" ) < 0 ) return;
    stopClosing(menu);
    for( var i=0; i<menu.childNodes.length; i++) {
        var c = menu.childNodes.item(i);
        if(c && c.className) c.className = "";
    }
}

function stopClosing(menu)
{
    if( menu.opener ) stopClosing(menu.opener);
    if( menu.tId ) {
        window.clearTimeout(menu.tId);
    }
    restoreSelect( menu.button );
}

function restoreSelect( b )
{
    if( !b ) return;
    if( b.data )
       SplitButton.checkSelect( b );
    else
       b.className = "";
}

function menuOut(menu)
{
    if( !menu || menu.className.indexOf( "submenu" ) < 0 ) return;
    tryClose(menu);
}

function tryClose(menu)
{
    var toeval = "closeSubMenu('"+menu.id+"')";
    menu.tId = window.setTimeout(toeval, 5000);
    if( menu.opener ) tryClose(menu.opener);
}

function itemOver(item,menuId,top)
{
    if( !item ) return;
    var top_button = top || item.parentNode.className.indexOf( "menuBar" ) >= 0 ? true : false;
    var menu = GetElem(menuId);
    item.menu=menu;
    if( menu.tId ) {
        window.clearTimeout(menu.tId);
    }
    if( top_button )
        closeAll(item.parentNode,item);
    else
        menu.opener=item.parentNode;
    menu.button=item;
    var toeval = "showSubMenu('"+menu.id+"'," + (top?"true":"false") + ")";
    item.tId = window.setTimeout(toeval, item.data ? 1 : top_button ? 100 : 500);
}

function itemOut(item)
{
    if( !item ) return;
    var top_button = item.parentNode.className.indexOf( "menuBar" ) >= 0 ? true : false
    var menu = item.menu;
    if( !menu ) return;
    if( item.tId ) {
        window.clearTimeout(item.tId);
    }
    var toeval = "closeSubMenu('"+menu.id+"')";
    menu.tId = window.setTimeout(toeval, top_button ? 100 : 500);
}

// --- SplitButton ---

var SplitButton = function( but_id, data_id, menubox_id )
{
    this.button = GetElem(but_id);
    this.button.data = this.data = GetElem(data_id);
    this.menubox = GetElem(menubox_id);
    var $this = this;
    var inner_spans = this.button.getElementsByTagName("SPAN");
    for( s in inner_spans ) {
        if( inner_spans[s].className == "sb_ddb" ) {
            inner_spans[s].onclick = function() { $this.showDDL(); StopEvent(event); }
            break;
        }    
    }
    updates[menubox_id] = function() { $this.Refresh(); }
}

SplitButton.prototype = new DataHolder;   // "inheritance"

SplitButton.prototype.showDDL = function()
{
    if( this.menubox.style.display != "none" ) {
        this.menubox.style.display = "none";
    }
    else {
        var menu_width = GetWidth( this.menubox );
        SetXPos( this.menubox, GetPageXPos( this.button ) );
        SetYPos( this.menubox, GetPageYPos( this.button ) + GetHeight( this.button ) );
        this.menubox.style.display = "block";
    }
}

SplitButton.prototype.replaceButton = function(subitem,radio)
{
    if( !subitem ) return;
    this.menubox.style.display = "none";
    var  button_core = this.button.getElementsByTagName("SPAN")[0];
    if( !button_core ) return;
    var  subitem_core = subitem.getElementsByTagName("SPAN")[0];
    if( !subitem_core ) return;

    button_core.innerHTML = subitem_core.innerHTML;
    this.button.href=subitem.href;
    this.button.onclick=subitem.onclick;
    this.button.onmousemove=subitem.onmousemove;
    if( radio ) this.button.onmousedown();
}

SplitButton.checkSelect = function( b )
{
    var d = b.data;
    if( d ) {
        if( d.value == '1' ) {
            if( b.className.indexOf("selected") < 0 )
                b.className += " selected";
        }
        else
            b.className = b.className.replace( "selected", "" );
    }
}

SplitButton.prototype.Refresh = function()
{
    SplitButton.checkSelect( this.button );
    if( this.menubox ) {
      var inps = this.menubox.getElementsByTagName('INPUT');
      for( var i = 0; i < inps.length; i++ )
       if( inps.item(i).value == '1') {
        this.replaceButton(inps.item(i).previousSibling);
       }
    }
}

SplitButton.prototype.over = function() {

}
SplitButton.prototype.out = function() {
    this.button.className = this.button.className.replace( "selected", "" );
}

SplitButton.prototype.down = function() {

    if( !this.button ) { alert("No button ref!"); return; }
    if( this.button.tId )
        window.clearTimeout(this.button.tId);
    if( this.button.data && this.button.className.indexOf("selected") < 0 )
        this.button.className += " selected";
}
SplitButton.prototype.enable = function() {}
SplitButton.prototype.disable = function() {}

menu_script_loaded = true;

}