/**
 * requires YUI
 */
 
if (typeof RC == 'undefined') {
	RC = { widget: {} };
}

(function () { // run with local scope
    var Dom = YAHOO.util.Dom;
    RC.widget.MainNav = {
      /**
       * adds the iehover class
       */
      addIeHover:function (elem) {
        Dom.addClass(elem, "iehover");
    },
    _version: null,
    getVersion: function(el) {
        if (this._version) {
          return this._version;
        }
        var rApp = new RegExp('appNav');
        var rDash = new RegExp('dashboardNav');
        for (var n=el;n;n=n.parentNode) {
            var className = n.className;
            if (rApp.test(className)) {
              this._version = 'app';
              break;
            }
            else if (rDash.test(className)) {
              this._version =  'dashboard';
              break;
            }
        }
        if (!this._version) {
          this._version = 'none';
        }
        return this._version;
    },
    /**
     * removes iehover class
     */
    removeIeHover:function (elem) {
      Dom.removeClass(elem, "iehover");
    },
    /**
     * shows the iframe shim
     */
    setShim:function (elem) {
        var iframe = this.iframe;
        // do this in a setimeout so the menu opens quickly
        
        elem.style.zIndex = 101;
        var v = this.getVersion(elem);
        
        var menuElem;
        
        if (v == 'app') {
            var list = elem.getElementsByTagName("div");
            if (list.length > 1) {
                menuElem = list[1];
            }
        }
        else if (v == 'dashboard' || v == 'none') {
            var list = elem.getElementsByTagName("ul");
            if (list.length > 0) {
                menuElem = list[0];
            }
            
        }
        var inputs = document.getElementsByTagName("input");
        if (iframe && menuElem) {
            iframe.style.width = menuElem.offsetWidth + "px";
            iframe.style.height = menuElem.offsetHeight + "px";
            iframe.style.left = menuElem.offsetLeft + "px";
            iframe.style.top = menuElem.offsetTop + "px";
            iframe.style.display = "block";
        }
        
    },
    /**
     * hides iframe shim
     */
    clearShim:function () {
        if (this.iframe) {
            this.iframe.style.display = "none";
        }
    },
    /**
     * clears the focus from text inputs
     */
    clearFocus:function () {

        // do this in a setimeout so the menu opens quickly
        setTimeout(function() {
            var inputs = document.getElementsByTagName("input");
            for (var i = 0; i < inputs.length; i++) {
                var s = inputs[i];
                if (s.type == 'text') {
                    s.blur();
                }
            }
        },1);
        
    },
    /**
     * NOTE: we have to use browser detection because of specific
     * bugs related to each browser. Using object/feature detection is
     * not possible.
     */
    show:function (elem) {
 
        elem.onmouseover = null;
        var ua = YAHOO.env.ua;
        
        // these browsers need nothing done

        if (ua.webkit|| (ua.gecko && ua.gecko >= 1.9)) { // 1.9 == Firefox 3.0
            return;
        }
        var self = this;
        if (ua.ie) {
            if (!this.iframe) {
                var iframe = document.createElement("IFRAME");
                this.iframe = iframe;
                iframe.setAttribute("src", "javascript:false;");
                document.body.insertBefore(this.iframe, document.body.firstChild);
                iframe.style.display = "none";
                iframe.style.position = "absolute";
            }
            if (ua.ie <= 6) {
                
                elem.onmouseover = function() {
                    self.addIeHover(this);
                    self.setShim(this);
                    self.clearFocus(this);
                };
                elem.onmouseout = function() {
                    self.removeIeHover(this);
                    self.clearShim(this);
                };
                elem.onmouseover();
            }
            else {
                elem.onmouseover = function() {
                    self.setShim(this);
                    self.clearFocus(this);
                };
                elem.onmouseout = function() {
                    self.clearShim(this);
                };
                self.setShim(elem);
            }
        }
        else {
            elem.onmouseover = function(evt) {
                self.clearFocus(this);
            };
            self.clearFocus(this);
        }
        
    }};
})();

