/* Javascript by Daniel Cohen Gindi (c) danielgindi@gmail.com 054-5655765 */
/* Version: 2009-03-15 */

function floatingMenuManager() { };

floatingMenuManager.prototype = {

    create: function() {
        var _thisObj = this;
        this._thisObj = this;
        this._FMouseOver = function() { _thisObj._clearMenuTimer(); };
        this._FMouseOut = function() { _thisObj._setMenuTimer(); };
        this._FCloseMenu = function() { _thisObj._closeMenu(); };
        this._create();
    },

    _thisInstance: this,
    _curSelMenu: null,
    _menuTimer: null,
    _menuHideTimeOut: 100,
    _elMenuItemParent: null,
    _elParentOriginalClass: null,
    _parentClassOnHover: null,
    _offset: new Array(0, 0),
    _baseNameMenuItem: 'menuItem',
    _baseNameFloatingMenu: 'subMenu',
    _alignBottom: false,
    _alignRight: false,

    _create: function() { },
    setHideTimeOut: function(timeout) { this._menuHideTimeOut = timeout; },
    setParentClassOnHover: function(cls) { this._parentClassOnHover = cls; },
    setMenuItemBaseName: function(baseNameMenuItem) {
        this._baseNameMenuItem = baseNameMenuItem;
    },
    setFloatingMenuBaseName: function(baseNameFloatingMenu) {
        this._baseNameFloatingMenu = baseNameFloatingMenu;
    },
    setOffset: function(x, y, alignBottom, alignRight) {
        this._offset = new Array(x, y);
        if (alignBottom) this._alignBottom = true;
        if (alignRight) this._alignRight = true;
    },
    _clearMenuTimer: function() {
        if (this._menuTimer) { clearTimeout(this._menuTimer); this._menuTimer = null; }
    },
    _setMenuTimer: function() {
        this._clearMenuTimer();
        this._menuTimer = setTimeout(this._FCloseMenu, this._menuHideTimeOut);
    },
    _closeMenu: function() {
        this._clearMenuTimer();
        if (this._curSelMenu) {
            unregisterEvent(this._curSelMenu, 'mouseover', this._FMouseOver);
            unregisterEvent(this._curSelMenu, 'mouseout', this._FMouseOut);
            this._curSelMenu.style.display = 'none';
            this._curSelMenu.style.visibility = 'hidden';
            this._curSelMenu = null;
            if (this._elParentOriginalClass != null) this._elMenuItemParent.className = this._elParentOriginalClass;
        }
    },
    showMenu: function(idx) {
        var el = $find(this._baseNameFloatingMenu + idx);
        if (this._curSelMenu != el) { this._closeMenu(); this._curSelMenu = el; }
        else { this._clearMenuTimer(); return; }

        this._elMenuItemParent = $find(this._baseNameMenuItem + idx);
        if (el == undefined) el = null;
        this._curSelMenu = el;

        if (this._curSelMenu != null) {
            this._curSelMenu.style.position = 'absolute';
            var elParentOffset = $offset(this._elMenuItemParent);
            if (this._alignRight) this._curSelMenu.style.right = ((getWindowClientWidth() - elParentOffset[0]) - $width(this._elMenuItemParent) + this._offset[0]) + 'px';
            else this._curSelMenu.style.left = (elParentOffset[0] + this._offset[0]) + 'px';
            if (this._alignBottom) this._curSelMenu.style.bottom = ((getWindowClientHeight() - elParentOffset[1]) + this._offset[1]) + 'px';
            else this._curSelMenu.style.top = (elParentOffset[1] + this._offset[1]) + 'px';
            this._curSelMenu.style.display = '';
            this._curSelMenu.style.visibility = 'visible';
            this._curSelMenu.style.zIndex = '5000';

            if (this._parentClassOnHover != null) {
                this._elParentOriginalClass = this._elMenuItemParent.className;
                this._elMenuItemParent.className = this._parentClassOnHover;
            }

            registerEvent(this._curSelMenu, 'mouseover', this._FMouseOver);
            registerEvent(this._curSelMenu, 'mouseout', this._FMouseOut);
        }
    },
    hideMenu: function() { this._setMenuTimer(); }
};