Array.prototype.has = function(v, i){
    for (var j = 0; j < this.length; j++) {
        if (this[j] == v) 
            return (!i ? true : j);
    }
    return false;
}



function menu(){
    var self = this;
    var openMenus = new Array();
    var status = "keepOpen";
    
    this.init = function(){
        var navEntry = $$("td.topnavigation");
        navEntry.each(function(item){
            var link = item.down('a');
            Event.observe(item, 'mouseover', function(e){
                var idLINK = link.readAttribute("id").split("_");
                var menu = $("Level_" + idLINK[1] + "_menu");
                if (openMenus.length > 0) {
                    openMenus.each(function(item){
                        item.setStyle({
                            display: 'none'
                        });
                    });
                    openMenus = new Array();
                }
                navEntry.each(function(el){
                    $(el.parentNode.parentNode.parentNode.parentNode).removeAttribute("style");
                });
                $(item.parentNode.parentNode.parentNode.parentNode).setStyle({
                    backgroundColor: "#ffffff"
                });
                
                if (item.down('a') != null) {
                    item.down('a').setStyle({
                        'color': "#646464"
                    });
                }
                

                
                self.showMenu("Level_" + idLINK[1] + "_menu");
                Event.stop(e);
            });
            
            Event.observe(item, 'mouseout', function(e){
                status = "close";
                setTimeout(self.hideMenu, 700);
            });
        });
    }
    
    this.hideMenu = function(){
        if (status == "close") 
            self.clearAll();
    }
    
    this.clearAll = function(keepOpenEl){
        if (keepOpenEl == undefined) {
            $$("td.topnavigation").each(function(item){
                $(item.parentNode.parentNode.parentNode.parentNode).setStyle({
                    backgroundColor: "#c8c8ca"
                });
                item.down('a').setStyle({
                    color: "#646464"
                });
            });
            
            var splicevalue = 0;
            openMenus.each(function(item){
                item.setStyle({
                    display: "none"
                });
            });
            openMenus = new Array();
        }
        else {
            if ($(keepOpenEl).hasClassName('menu')) {
                var secondleveldiv = $(keepOpenEl).select('div.secondLevel');
                if ($(secondleveldiv[0])) {
                
                    $(secondleveldiv[0]).childElements().each(function(element){
                        if (element != null) {
                            element.setStyle({
                                display: 'none'
                            });
                        }
                        
                    });
                    
                    
                    
                }
                
            }
            if ($(keepOpenEl.parentNode).hasClassName('secondLevel')) {
                var thirdLeveldiv = $(keepOpenEl).select('div.thirdLevel');
                if ($(thirdLeveldiv[0])) {
                    $(thirdLeveldiv[0]).childElements().each(function(element){
                        element.setStyle({
                            display: 'none'
                        });
                    });
                }
            }
        }
    }
    
    this.showMenu = function(el){
        status = "keepOpen";
        var element = $(el);
        element.setStyle({
            visibility: 'visible',
            display: 'block'
        });
        element.select('tr').each(function(item){
            item.setStyle({
                backgroundColor: "#FFFFFF",
                opacity: 0.9
            });
        })
        
        Event.observe(element, 'mouseover', function(e){
            status = "keepOpen";
        });
        
        Event.observe(element, 'mouseout', function(e){
            status = "close";
            setTimeout(self.hideMenu, 700);
        });
        
        
        if (openMenus.length > 0) {
            var splicecounter = 0;
            openMenus.each(function(item){
                item.setStyle({
                    display: 'none'
                });
                openMenus.splice(splicecounter, 1);
                splicecounter++;
            });
        }
        
        if (!openMenus.has(element)) {
            openMenus.push(element);
            self.addListener(el);
        }
    }
    
    this.calcMenuPos = function(el, listitem, container){
    
function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}  
        var element = $(el);
        var menuHeight = parseInt(element.getHeight());
        
        var offsetTrigger = listitem.cumulativeOffset();
        var offsetCont = container.cumulativeOffset();
        var newTop = Math.round(offsetTrigger[1] - offsetCont[1]);
        if (newTop + menuHeight + offsetCont[1] > 453) 
			
			/*if (getInternetExplorerVersion() == 9) {
				newTop = newTop + getCords();
			}else{*/
				newTop = newTop - ((newTop + menuHeight + offsetCont[1]) - 453);
			//}
		else 
			/*if (getInternetExplorerVersion() == 9) {
				newTop = newTop + getCords();
			}else{*/
				newTop = newTop -12;
			//}
        element.setStyle({
            top: newTop + "px"
        });
    }
    
    function setCords(e){
        //x = (document.all) ? window.event.x + document.body.scrollLeft : e.pageX;
        y = (document.all) ? window.event.y + document.body.scrollTop : e.pageY;
    }
    
    document.onmousemove = setCords;
    
    function getCords(){
        //alert("x: " + x + "\ny: " + y);
		return y;
    }
    
    
    this.addListener = function(el){
        var container = $(el.parentNode);
        var list = $(el).firstChild;
        var table = $(list).firstChild;
        if (table == undefined) 
            return;
        var links = $(table).select('a');
        var nextLevel = $(list.nextSibling)
        
        if (nextLevel) {
            Event.observe(nextLevel, 'mouseover', function(e){
                status = "keepOpen";
            });
            
            Event.observe(nextLevel, 'mouseout', function(e){
                status = "close";
                setTimeout(self.hideMenu, 700);
            });
        }
        
        links.each(function(item){
            var element = $(item);
            var parent = element.readAttribute('id');
            var href = element.readAttribute('href');
            if (href == "javascript: void(0);") {
                Event.observe(item, 'mouseover', function(e){
                    var tr = $(item.parentNode.parentNode);
                    tr.siblings().each(function(item){
                        item.setStyle({
                            backgroundColor: "#FFFFFF",
                            color: "#000000"
                        })
                    });
                    status = "keepOpen";
                    tr.setStyle({
                        backgroundColor: "#e9e9e9",
                        color: "#FFFFFF"
                    });
                    nextLevel.immediateDescendants().each(function(item){
                        if (item.readAttribute("id") == parent + "level") {
                            // if( $(item).readAttribute("id") == parent+"level"){
                            var div = $(e.target).up('div');
                            var target = e.target;
                            self.calcMenuPos(item, target, div);
                            self.addListener(item);
                            // $(item).setStyle({ display: 'block' });
                            item.setStyle({
                                display: 'block'
                            });
                            status = "keepOpen";
                            
                            Event.observe(item, 'mouseout', function(e){
                                status = "close";
                                setTimeout(self.hideMenu, 700);
                            });
                            
                            openMenus.push($(item));
                        }
                        else {
                            item.setStyle({
                                display: "none"
                            });
                        }
                    });
                    Event.stop(e);
                });
            }
            else {
                Event.observe(item, 'mouseover', function(e){
                    status = "keepOpen";
                    self.clearAll($(list.parentNode));
                });
            }
        });
    }
    this.init();
}

