// menu constructor
function srxMenu (parent) {
    this.items = new Array();
    this.m = new Array();
    this.position = "";
    this.container = null;
    this.className = (DEFAULT_CLASS?DEFAULT_CLASS:"");
    this.tableClassName = (DEFAULT_TABLE_CLASS?DEFAULT_TABLE_CLASS:"");
    this.timer;
    if ( parent ) this.parent = parent;
    else parent = null;
    this.active_child = null;
    this.offset = 0;
    return this;
}
// item constructor
function mItem (title, href, parent) {
    this.title = title;
    this.href = href;
    if ( parent ) this.child = new srxMenu(parent);
    else this.child = null;
    this.target = '';
    this.menu_id = 0;
    this.item_id = 0;
    this.sub_itme_id = 0;
    return this;
}

srxMenu.prototype.addItem = function (title, href) {
    var new_item_id = this.items.length;
    this.items[new_item_id] = new mItem(title, href, 0);
    return this.items[new_item_id];
}

srxMenu.prototype.addChild = function (title, href) {
    var new_item_id = this.items.length;
    this.items[new_item_id] = new mItem(title, href, this);
    return this.items[new_item_id];
}

mItem.prototype.getChild = function (menu_id, item_id, sub_item_id) {
    this.menu_id = menu_id;
    this.item_id = item_id;
    this.sub_item_id = sub_item_id;
    return this.child;
}

function showMenu (o,menu_id,item_id,sub_item_id) {
    if ( !menu_id || !item_id || !o ) return;
    if ( !sub_item_id ) sub_item_id = 0;
    if ( !menu || !menu[menu_id] || !menu[menu_id][item_id] || !menu[menu_id][item_id][sub_item_id] ) return;
    m = menu[menu_id][item_id][sub_item_id];
    // isvalomi visi taimeriai..
    if ( m.timer ) window.clearTimeout(m.timer);
    par = m.parent;
    if ( par ) {
        if ( par.active_child && par.active_child != m ) {
            if ( par.active_child.container ) par.active_child.container.style.display = 'none';
        }
        par.active_child = m;
        while ( par ) {
            if ( par.timer) window.clearTimeout(par.timer);
            par = par.parent;
        }
    }
    if ( m.container && m.container.style.display == "block" ) {
        return;
    }
    o = getTD(o);
    if ( m.container ) {
        m.container.style.display = "block";
    } else {
        var mybody=document.getElementsByTagName("body").item(0);
        mytable = document.createElement("TABLE");
        mytable.onmouseover = function () { showMenu(1,menu_id,item_id,sub_item_id); }
        mytable.onmouseout = function () { hideMenu(menu_id,item_id,sub_item_id); }
        mytablebody = document.createElement("TBODY");
        for ( i=0; i<m.items.length; i++ ) {
            row=document.createElement("TR");
            cell=document.createElement("TD");
            if ( m.items[i].child ) {
                cell.menu_id = m.items[i].menu_id;
                cell.item_id = m.items[i].item_id;
                cell.sub_item_id = m.items[i].sub_item_id;
                cell.onmouseover = function () { showMenu(this,this.menu_id,this.item_id,this.sub_item_id); }
            } else {
                cell.m = m;
                cell.onmouseover = function () {
                    if ( this.m.active_child ) {
                        if ( this.m.active_child.container ) this.m.active_child.container.style.display = 'none';
                        this.m.active_child = null;
                    }
                }
            }
            cell.className = m.className;
            link=document.createElement("A");
            link.href = m.items[i].href;
            link.className = m.className;
            if ( m.items[i].target ) link.target = m.items[i].target;
            currenttext=document.createTextNode(m.items[i].title);
            link.appendChild(currenttext);
            cell.appendChild(link);
            row.appendChild(cell);
            mytablebody.appendChild(row);
        }
        mytable.appendChild(mytablebody);
        mybody.appendChild(mytable);
        switch ( m.position ) {
            case "left":
                left_offset = getOffsetLeft(o)+parseInt(o.offsetWidth);
                if ( (left_offset+parseInt(mytable.offsetWidth)) > document.body.scrollWidth ) {
                    left_offset = getOffsetLeft(o)-parseInt(mytable.offsetWidth);
                    m.offset = m.offset * (-1);
                }
                left_offset += m.offset;
                mytable.style.display = 'none';
                mytable.style.position = 'absolute';
                mytable.style.top = parseInt(getOffsetTop(o));
                mytable.style.left = left_offset;
                mytable.className = m.tableClassName;
                mytable.style.display = 'block';
                break;
            default:
                top_offset = parseInt(getOffsetTop(o))+parseInt(o.offsetHeight);
                if ( (top_offset+100) > document.body.scrollHeight ) {
                    top_offset = getOffsettop(o)-parseInt(mytable.offsetHeight);
                }
                left_offset = getOffsetLeft(o);
                if ( (left_offset+parseInt(mytable.offsetWidth)) > document.body.scrollWidth ) {
                    left_offset = getOffsetLeft(o)-((getOffsetLeft(o)+parseInt(mytable.offsetWidth))-document.body.scrollWidth);
                }
                mytable.style.display = 'none';
                mytable.style.position = 'absolute';
                mytable.style.top = top_offset;
                mytable.style.left = left_offset;
                mytable.className = m.tableClassName;
                mytable.style.display = 'block';
        }
        m.container = mytable;
    }
}

function hideMenu (menu_id,item_id,sub_item_id,hide) {
    if ( !menu_id || !item_id ) return;
    if ( !menu[menu_id][item_id] ) return;
    m = menu[menu_id][item_id][sub_item_id];
    if ( !hide ) {
        m.timer = window.setTimeout("hideMenu("+menu_id+","+item_id+","+sub_item_id+",1)",400);
    } else if ( m.container ) {
        m.container.style.display = "none";
        if ( m.parent ) {
            par = m.parent;
            while ( par ) {
                if ( par.container ) par.container.style.display = "none";
                par = par.parent;
            }
        }
        i=sub_item_id; do { i++;
            mm = menu[menu_id][item_id][i];
            if ( mm && mm.container ) mm.container.style.display = 'none';
        } while ( mm );
    } else {
        m.timer = window.setTimeout("hideMenu("+menu_id+","+item_id+","+sub_item_id+",1)",400);
    }
}

function getTD (o) {
    if ( o.nodeName == "TD" ) return o;
	var curelem = o;
    var i = 0;
	if (curelem.parentNode) {
		while (curelem.parentNode && curelem.parentNode.nodeName != "TD") {
            i++; if ( i > 1000 ) return o;
			curelem = curelem.parentNode;
		}
	}
    return curelem;
}

function report_error (err) {
    window.status = err;
}


