var _activeMenus = new Object();
_activeMenus.currentMenu = '';
_oPrevOption=null;


function closeMenu(sMenuId) { _activeMenus[sMenuId].timeout = window.setTimeout('hide("' + sMenuId + '")', 1000); }

function hide(sMenuId) {
    if (!_activeMenus[sMenuId]) return;
    if (_activeMenus[sMenuId]._oPrevOption) { 
   deselect(_activeMenus[sMenuId]._oPrevOption);
   _activeMenus[_activeMenus.currentMenu].clicked = false;
  }
}

var _i = 0;
var _o = null;
function mouseover(e, sMenuId) {
    if (typeof (_popupId) != 'undefined' && _popupId != sMenuId) return;

    var o = (e ? e.target :window.event.srcElement) ;
    clearTimeout(_activeMenus[sMenuId].timeout);

   if( o == _o ) return;
   _o=o;

    if (_activeMenus.currentMenu != sMenuId) {
        hide(_activeMenus.currentMenu);
        _activeMenus.currentMenu = sMenuId;
    }

    var oCurrOption = getOptionId(o);
    if (!oCurrOption || oCurrOption.className == 'disable' || oCurrOption.className.indexOf('noref') != -1 || oCurrOption.className.indexOf('separator') != -1) return;

    if (oCurrOption != oCurrOption.parentNode._oPrevOption) {
        if (oCurrOption.parentNode._oPrevOption && !isParent(oCurrOption.parentNode._oPrevOption, oCurrOption))
            deselect(oCurrOption.parentNode._oPrevOption);
        select(oCurrOption);

     displayMenu( oCurrOption);
    }
}

var WC1={};
   WC1.Menu={};
 
 var _j=0;  
function mouseclick(e, sMenuId) {
   var o = (e ? e.target :window.event.srcElement) ;
   var oCurrOption = getOptionId(o);
    

 if (!oCurrOption ) return true;
if( oCurrOption.className.indexOf('noref') == -1 && ( o.blur ) )     o.blur();

/////foot.innerHTML = "CurrOption:" + oCurrOption.innerHTML + ' '+ o.href;

if ( document.all && o.tagName != "A") {
x=oCurrOption.getElementsByTagName('A')[0];
if ( x ) 
{
//alert(x.href.charAt(x.href.length-1));
if(x.href.charAt(x.href.length-1) != "#") {x.click();
return;
}
}
}


if( typeof WC1.Menu.OnClick =='function') { 
   if ( ! WC1.Menu.OnClick(oCurrOption, sMenuId ) ) return true;
}

ToggleChecked( oCurrOption );



   if (!oCurrOption || oCurrOption.className == 'disable' || oCurrOption.className.indexOf('noref') != -1 || oCurrOption.className.indexOf('separator') != -1  ||   ! oCurrOption._subMenuId ) {
     hide( sMenuId );  
     return true;
}



    if ( oCurrOption.parentNode._onClick ){
        
          if(  ! _activeMenus[sMenuId].clicked  ){
                 _activeMenus[sMenuId].clicked = true;
              
              deselect(oCurrOption);
              select(oCurrOption);
              displayMenu( oCurrOption);
             
             // return false;
         }
           else   {
                    hide(sMenuId);
                   select(oCurrOption);
               }
           
        return false;
   }

return false;
}

function isParent(oCurrOption) {
    var oPrevOption = oCurrOption.parentNode._oPrevOption;
    return oPrevOption._subMenuId && oPrevOption._subMenuId == oCurrOption.parentNode.parentNode.id;
}

function select(o) {
    o.className = o.className.replace('submenu', 'hoversubmenu');
    o.className = 'hover '  + o.className;
    o.parentNode._oPrevOption = o;
    _oPrevOption = o;
   

}

function deselect(o) {
    o.className = o.className.replace(/hover/g, '');
    o.className = o.className.replace(/selected/g, '');
    o.parentNode._oPrevOption = null;
    hideChildren(o);
}

function hideChildren(o) {
    if (!o._subMenuId) return;

    o = document.getElementById(o._subMenuId); //points to DIV
    s = o.firstChild;                          //point to UL

    if (s._oPrevOption) {
        s._oPrevOption.className = s._oPrevOption.className.replace(/hover/g, '');
        hideChildren(s._oPrevOption);
    }
    o.style.visibility = 'hidden';
    menuOverlay(o, 'hidden');
}


var _zIndex=1000;
function displayMenu( oCurrOption) {
if (!oCurrOption._subMenuId) return ;
var oMenu = document.getElementById( oCurrOption._subMenuId );

    if( oCurrOption.parentNode._onClick && ! _activeMenus[_activeMenus.currentMenu].clicked )
          return;
    var sMenuType = (oCurrOption.parentNode._menuType == 'HORIZONTAL') ? 'HORIZONTAL' : 'VERTICAL';
    var t;
    var l;
    var r;
    var sDir = 'rtl'; /* right to left */
    var p = getPosTopLeft(oCurrOption);
     p.top = p.top ;
if(! document.all )  p.top = p.top  - oCurrOption.parentNode.scrollTop;
   
    var offsetHx = _activeMenus[_activeMenus.currentMenu].offsetHx;
    var offsetHy = _activeMenus[_activeMenus.currentMenu].offsetHy;
    var offsetVx = _activeMenus[_activeMenus.currentMenu].offsetVx;
    var offsetVy = _activeMenus[_activeMenus.currentMenu].offsetVy;

   oCurrOption.className +=  ' selected';

    if (sMenuType == 'HORIZONTAL') {
        t = p.top + offsetVy + oCurrOption.offsetHeight;

        l = p.left;
        sDir = ((l + offsetVx + oMenu.offsetWidth) > document.body.scrollWidth) ? 'rtl' : 'ltr';
        //alert(   sDir + '  ==  Cw:' +document.body.clientWidth+'  -- '+  '  left' + ( l + offsetVx + oMenu.offsetWidth) );

        if (sDir == 'rtl') {
            l = l + offsetVx + oCurrOption.offsetWidth + document.body.scrollLeft - oMenu.offsetWidth;
        //else
        //r = document.body.scrollWidth - l - offsetHx - oCurrOption.offsetWidth;
        }
    } else {
        t = p.top + offsetHy // + 1;
        l = p.left + offsetHx + oCurrOption.offsetWidth;
    }

    //alert( 'R:' + r + '  SL:' + document.body.scrollLeft  + ' SW:' + document.body.scrollWidth + ' CW:' +  document.body.clientWidth);

    // read menu specific attributes from UL Element
    var oAttr = oMenu.getElementsByTagName('UL');
    if (oAttr) {
        oAttr = oAttr[0];
        if (oAttr.getAttribute("_offsetX")) l += parseInt(oAttr.getAttribute("_offsetX"));
        if (oAttr.getAttribute("_offsetY")) t += parseInt(oAttr.getAttribute("_offsetY"));
        if (oAttr.getAttribute("_top")) t = oAttr.getAttribute("_top");
        if (oAttr.getAttribute("_left")) l = oAttr.getAttribute("_left");
        if (oAttr.getAttribute("_dir")) sDir = oAttr.getAttribute("_dir");
    } else {
        t += 'px';
        l += 'px';
        r += 'px';
    }

    setFilters(oMenu.style, 'apply');
    oMenu.firstChild._oPrevOption = null;
    oMenu.style.top = t;

    if (sDir == 'xrtl') oMenu.style.right = r;
    else oMenu.style.left = l;

    oMenu.style.zIndex = _zIndex++;
    oMenu.style.visibility = 'visible';
    setFilters(oMenu.style, 'play');
    menuOverlay(oMenu, 'visible');
}

function getOptionId(o) {
    while (o && o.tagName != 'LI' && o.tagName != "UL") {
        o = o.parentNode;
    }
    if (o && o.tagName == 'LI') return o;
    else return null;
}

function menuOverlay(o, vis) {
    var sElement = (document.all && !window.opera&&navigator.appVersion.indexOf('MSIE 5.0')) ? 'iframe' : 'div';
   
    var bOverlay = o.getElementsByTagName('UL')[0]._overlay;
// is showScrollBars available
if( _activeMenus[_activeMenus.currentMenu].scrollBars && typeof( showScrollBars ) == 'function' && !window.opera)
   menuScrollBars(o, vis );

    var d = $('s_' + o.id);
    if (!d) {
        var d = document.createElement(sElement);
        d.id = 's_' + o.id;
        d.frameBorder='0';
        document.body.appendChild(d);
    }
    var offset = (document.all && !window.opera&&navigator.appVersion.indexOf('MSIE 5.0') == -1) ? 0 : 3;
    var p = getPosTopLeft(o);
       d.className = 'shadow';
    d.style.position = 'absolute';
    d.style.top = (p.top + offset) + 'px';
    d.style.left = (p.left + offset) + 'px';
    d.style.width = (o.offsetWidth) + 'px';
    d.style.height = (o.offsetHeight) + 'px';
    d.style.visibility = vis;
    d.style.zIndex = o.style.zIndex -1;
    
    }

function getPosTopLeft(el) {
    var pos = new Object();
    pos.top = 0;
    pos.left = 0;
   
    while (el  ) {
         pos.top = pos.top + el.offsetTop  ;
          pos.left  = pos.left + el.offsetLeft ;

        if( el.tagName != 'BODY' ){
               pos.top = pos.top - el.scrollTop ;
              pos.left  = pos.left  - el.scrollLeft ;
        }     
        el = el.offsetParent;
    }
    return pos;
}

function setFilters(o, sMode) {
    if (o.filter) {
        for (i = 0; i < o.filters.length; i++) {
            if (sMode == 'apply') o.filters[i].apply();
            else o.filters[i].play();
        }
    }
}

var _menuId = 0;
function activateMenu(sMenuId, sType, sVClass, sHClass, bOverlay, offsetHx, offsetHy, offsetVx, offsetVy,bOnClick,bScrollBars) {
    var oMenu = $(sMenuId);
    
    bOverlay = (bOverlay) ? bOverlay : false;
    oMenu.style.zIndex = 90;

    oMenu.className = (sType == 'HORIZONTAL' ? sHClass : sVClass);
    var oUls = oMenu.getElementsByTagName("UL");
    oMenu = oUls[0];
    oMenu._menuType = sType;
    oMenu._overlay = bOverlay;
    oMenu.onmouseover = function(event) { mouseover(event, sMenuId) } ;
     oMenu.onmouseout = function() { closeMenu(sMenuId) } ;

    oMenu.onclick = function(event) { mouseclick(event, sMenuId) } ;

    // register menu and set default for vertical and horizontal submenu offsets
    _activeMenus[sMenuId] = oMenu;
    _activeMenus[sMenuId].offsetHx = offsetHx || 1;
    _activeMenus[sMenuId].offsetHy = offsetHy || -2;
    _activeMenus[sMenuId].offsetVx = offsetVx || 0;
    _activeMenus[sMenuId].offsetVy = offsetVy || -1;
    _activeMenus[sMenuId].scrollBars = bScrollBars;
   if(  bOnClick ) {
    oUls[0]._onClick=true;
     _activeMenus[sMenuId].clicked = false;
   }
     
    //if (sType == 'VERTICAL') menuOverlay(oMenu, 'visible');

    var l = oUls.length - 1;
    for (var i = l; i >= 1; i--) {
        var oParent = oUls[i].parentNode; //LI item
        oParent.className = 'submenu';
        var oSubMenu = oParent.removeChild(oUls[i]);

        if (!oSubMenu.id) oSubMenu.id = 'm' + _menuId++;
        var d = document.createElement('DIV');

        if (oSubMenu._menuType && oSubMenu._menuType == "HORIZONTAL") d.className = sHClass;
        else d.className = sVClass;
       d.style.visibility = 'hidden';
       d.style.position = 'absolute';
       d.style.top='-1000px';
        d.id = 'menu_' + oSubMenu.id;
        d.onmouseover = function(event) { mouseover(event, sMenuId) } ;
        d.onmouseout = function() { closeMenu(sMenuId) } ;
        d.onclick = function(event) { mouseclick(event, sMenuId) } ;
        if (bOverlay) oSubMenu._overlay = bOverlay;
        d.appendChild(oSubMenu);
        document.body.appendChild(d);
        oParent._subMenuId = d.id;
    }


/*special case gecko overflow adds a right margin when overflow is set; fix manually */
//var adj=0;
// if( navigator.userAgent.indexOf('Gecko')!=-1 && document.defaultView.getComputedStyle(oMenu, '').getPropertyValue("overflow") == 'hidden')
//  adj=7;
//oMenu.style.width = (oMenu.offsetWidth - adj) + 'px';

}


function ToggleChecked( oOption ){
 var o = GetOptionAttributes(oOption);
 if( ! o.isCheckbox & ! o.isRadio ) return false;
 if( o.checked )
    oOption.className  = oOption.className.replace('Checked','');
 else {
   if( o.isCheckbox )
    oOption.className  = oOption.className .replace('checkbox','checkboxChecked');
   else
   oOption.className  = oOption.className .replace('radio','radioChecked');
}
    return  true;
}


function GetOptionAttributes( oOption ){
   var c = oOption.className;
    this.isCheckbox = (c.indexOf('checkbox') != -1);
    this.isRadio  = (c.indexOf('radio') != -1);
    this.checked  = (c.indexOf('Checked') != -1);
    this.href = oOption.getElementsByTagName('HREF')[0];
      //alert( "Option Properties\nIs checkbox:" + this.isCheckbox + "\nIs Radio:" + this.isRadio +    "\nState is checked:" + this.checked + "\n");
    return this;
}

    var WebControls={}; // define public Namespace
    WebControls.Menu={};
    var _=WebControls;  // private shortcut for namespace
    
    _.wrongParams=function( oFn, params){
         var s = oFn.toString();
         var sErr='';
         for(var param in params ){
              if(  s.indexOf( '_' + param  ) == -1 )
               sErr = sErr + ' , ' + param ;
         }
         if( sErr > '')   return sErr.substring(2);
         else return '';
    }
    
    WebControls.Menu.activate = function(a){
       var _id = a.id;
       var _horizontalCss=a.horizontalCss||'menu';
       var _verticalCss=a.verticalCss||'menuBar';
       var _layout = a.layout?a.layout.toUpperCase()=='HORIZONTAL'?'HORIZONTAL':'VERTICAL':'HORIZONTAL';
       var _clickToOpen = a.clickToOpen == true||false;
       var _scrollBars= a.scrollBars==true||true;
       var _postBack= a.postBack==true||false;
       var _keyboardSupport=a.keyboardSupport==true||false;
       var _datasourceXML=a.datasourceXML?a.datasourceXML>''?a.datasourceXML:null:null;
       var _clientOnMouseover=a.clientOnMouseover?a.clientOnMouseover>''?a.clientOnMouseover:null:null;
       var _clientOnClick=a.clientOnClick?a.clientOnClick>''?a.clientOnClick:null:null;
       var _contextMenuControlId=a.contextMenuControlId;
       var _horizontalMenuOffsetX=a.horizontalMenuOffsetX||1;
       var _horizontalMenuOffsetY=a.horizontalMenuOffsetY||-2;
       var _verticalMenuOffsetX=a.verticalMenuOffsetX||0;
       var _verticalMenuOffsetY=a.verticalMenuOffsetY||-1;
       var _overlayWindowObjects=a.overlayWindowObjects||false;
       var e = _.wrongParams( _.Menu.activate, a );
       if(  e > '') alert('Error!\nWebControls.Menu.' + this._id + ' cannot set variable<s>:\n' + e);
     activateMenu( _id,_layout,_verticalCss,_horizontalCss,_overlayWindowObjects,_horizontalMenuOffsetX,_horizontalMenuOffsetY,
     _verticalMenuOffsetX,_verticalMenuOffsetY,_clickToOpen,_scrollBars);
    };
    
    
 /*  
//Tempate 
  WebControls.Menu.activate(
            {
       		id: "menuBar1",
    		layout: "horizontal",
    		verticalCss: "menu",
    		horizontalCss: "menuBar",
    		clickToOpen: true,
    		datasourceXML: "menus/someMenu.xml",
    		clientOnMouseover: "myOnMouseoverMenu",
    		clientOnClick: "myOnClickMenu",
    		scrollBars:	false,
    		postBack: false,
    		keyboardSupport: false,
    		contextMenuControlId: '',
    		horizontalMenuOffsetX:1,
    		horizontalMenuOffsetY:-2,
    		verticalMenuOffsetX:0,
    		verticalMenuOffsetY:-1
    		});
    
 */

WebControls.Menu.setMenuBarWidth=function(sId){
var  oMenuBar = $(sId).getElementsByTagName('UL')[0];
var menuItems = $(sId).getElementsByTagName('LI');
var lastItem = menuItems.length - 1;
var firstItem = 0; 
var p = getPosTopLeft( menuItems[lastItem]);
var rightSide = p.left + menuItems[ lastItem ].offsetWidth;
p = getPosTopLeft( menuItems[ firstItem ]);
var width = rightSide  - p.left; 
oMenuBar.style.width = width + 'px';
}


