var HORIZONTAL_MENU_CLASS_NAME = 'menu-builder-horizontal';
var HORIZONTAL_ITEM_CLASS_NAME = 'menu-builder-horizontal';
var DROPDOWN_MENU_CLASS_NAME = 'menu-builder-dropdown';
var DROPDOWN_ITEM_CLASS_NAME = 'menu-builder-dropdown';
var MENU_H_DIVIDER_CLASS_NAME = 'menu-builder-h-divider';
var MENU_V_DIVIDER_CLASS_NAME = 'menu-builder-v-divider';

var show_menu = false;

function startMenus()
{
    var ULs = document.getElementsByTagName('UL');
    for (var i = 0; i < ULs.length; i ++) {
        switch (ULs[i].className) {
            case HORIZONTAL_MENU_CLASS_NAME:
                setHorizontalMenu(ULs[i]);
                break;
            case DROPDOWN_MENU_CLASS_NAME:
                setDropdownMenu(ULs[i]);
                break;
            default:
        }
    }
}

function setHorizontalMenu(menu)
{
    var items = menu.getElementsByTagName('LI');
    for (var i = 0; i < items.length; i ++) {
        if (items[i].className == HORIZONTAL_ITEM_CLASS_NAME) {
            
            //items[i].style.width = items[i].offsetWidth;
            //items[i].style.height = items[i].offsetHeight;
            
            items[i].onmouseover = function () {
//                this.className = this.className.replace(new RegExp('-hover$'), '');
//                this.className += '-hover';
                showDropdownMenu(this);
                return false;
            }

            items[i].onmouseout = function () {
//                this.className = this.className.replace(new RegExp('-hover$'), '');
                hideDropdownMenu(this);
                return false;
            }
                       
            items[i].onclick = function () {
            }
        } else if (items[i].className == MENU_H_DIVIDER_CLASS_NAME) {
            items[i].innerHTML = '';
        }
    }
}

function setDropdownMenu(menu)
{
    //set items
    var items = menu.getElementsByTagName('LI');
    for (var i = 0; i < items.length; i ++) {
        if (items[i].className == DROPDOWN_ITEM_CLASS_NAME) {

            var mouseover = function () {
//                this.className = this.className.replace(new RegExp('-hover$'), '');
//                this.className += '-hover';
                showDropdownMenu(this);
                return false;
            }
            
            var mouseout = function () {
//                this.className = this.className.replace(new RegExp('-hover$'), '');
                hideDropdownMenu(this);
                return false;
            }
                
            //items[i].style.width = items[i].offsetWidth;
            //items[i].style.height = items[i].offsetHeight;
            
            if (items[i].firstChild) {
                items[i].firstChild.onmouseover = mouseover;
            } else {
                items[i].onmouseover = mouseover;
            }

            if (items[i].firstChild) {
                items[i].firstChild.onmouseout = mouseout;
            } else {
                items[i].onmouseout = mouseout;
            }
            
        } else if (items[i].className == MENU_V_DIVIDER_CLASS_NAME) {
            items[i].innerHTML = '';
        }
    }
    
}

function showDropdownMenu(e)
{
    for (var i = 0; i < e.childNodes.length; i ++) {
        if (e.childNodes[i].tagName && e.childNodes[i].tagName.toUpperCase() == 'UL'
         && e.childNodes[i].className == DROPDOWN_MENU_CLASS_NAME) {
            e.childNodes[i].style.display = 'block';
            switch (e.className.replace('-hover', '')) {
                case HORIZONTAL_ITEM_CLASS_NAME:
                    var client_width = getClientWidth();
                    var client_height = getClientHeight();
                    var e_position = getElementPosition(e);
                    
                    if ((e_position.x + e.childNodes[i].offsetWidth) < client_width) {
                        e.childNodes[i].style.left = e.offsetLeft + 'px';
                    } else {
                        e.childNodes[i].style.left = (e.offsetLeft + e.offsetWidth - e.childNodes[i].offsetWidth) + 'px';
                    }

                    if (e_position.y + e.offsetHeight + e.childNodes[i].offsetHeight < client_height) {
                        e.childNodes[i].style.top = (e_position.y + e.offsetHeight) + 'px';
                    } else {
                        e.childNodes[i].style.top = (e_position.y - e.childNodes[i].offsetHeight) + 'px';
                    }
                    break;
                case DROPDOWN_ITEM_CLASS_NAME:
                    var temp = e;
                    while (temp && (temp.className.match(new RegExp('^' + DROPDOWN_MENU_CLASS_NAME)) || temp.className.match(new RegExp('^' + DROPDOWN_ITEM_CLASS_NAME)))) {
                        temp.style.display = 'block';
                        temp = temp.parentNode;
                    }
                    var client_width = getClientWidth();
                    var client_height = getClientHeight();
                    var e_position = getElementPosition(e);
                    if ((e_position.x + e.offsetWidth + e.childNodes[i].offsetWidth) < client_width) {
                        e.childNodes[i].style.left = (e.offsetLeft + e.offsetWidth) + 'px';
                    } else {
                        e.childNodes[i].style.left = (e.offsetLeft - e.childNodes[i].offsetWidth) + 'px';
                    }
                    if (e.offsetTop + e.childNodes[i].offsetHeight < client_height) {
                        e.childNodes[i].style.top = e.offsetTop + 'px';
                    } else {
                        e.childNodes[i].style.top = (e_position.y - e.childNodes[i].offsetHeight)  + 'px';
                    }
                    break;
                default: alert(e.className);
            }
        }
    }
}
var t = 0;
function hideDropdownMenu(e)
{
/*    while (e) {
        if (e.tagName && e.tagName.toLowerCase() == 'ul' && e.className == DROPDOWN_MENU_CLASS_NAME) {
            e.style.display = 'none';
            break;
        } else {
            e = e.parentNode;
        }
    }*/
    /*t ++;
    document.title = t;*/
    for (var i = 0; i < e.childNodes.length; i ++) {
        if (e.childNodes[i].tagName && e.childNodes[i].tagName.toUpperCase() == 'UL'
         && e.childNodes[i].className == DROPDOWN_MENU_CLASS_NAME) {
            e.childNodes[i].style.display = 'none';
        }
    }
}
