function Browser() {
  var ua,s,i;

  this.isIE=false;
  this.isNS=false;
  this.version=null;

  ua = navigator.userAgent;

  s="MSIE";
  if((i=ua.indexOf(s))>=0){
    this.isIE=true;
    this.version=parseFloat(ua.substr(i + s.length));
    return;
  }

  s="Netscape6/";
  if((i=ua.indexOf(s))>=0){
    this.isNS=true;
    this.version=parseFloat(ua.substr(i+s.length));
    return;
  }

  s="Gecko";
  if((i=ua.indexOf(s))>=0){
    this.isNS=true;this.version=6.1;
    return;
  }
}

var browser=new Browser();
var activeButton=null;

if(browser.isIE) {
  document.onmousedown=pageMousedown;
} else {
  document.addEventListener("mousedown",pageMousedown,true);
}

function pageMousedown(event){
  var el;

  if(activeButton==null) {
    return;
  }

  if(browser.isIE) {
    el=window.event.srcElement;
  } else {
    el=(event.target.tagName?event.target:event.target.parentNode);
  }

  if(el== activeButton) {
    return;
  }

  if(getContainerWith(el,"DIV","menu")==null){
    resetButton(activeButton);
    activeButton = null;
  }
}


function buttonClick(event,menuId){
  var button;

  if(browser.isIE) {
    button=window.event.srcElement;
  } else {
    button=event.currentTarget;
    button.blur();
  }

  if(button.menu==null){
    button.menu = document.getElementById(menuId);

    if(button.menu.isInitialized==null) {
      menuInit(button.menu);
    }
  }

  if(activeButton!=null) {
    resetButton(activeButton);
  }

  if(button!=activeButton){
    depressButton(button);
    activeButton = button;
  } else {
    activeButton=null;
  }  

  return false;
}


function buttonMouseover(event, menuId){
  var button;

  if(browser.isIE) {
    button=window.event.srcElement;
  } else {
    button=event.currentTarget;
  }

  if(activeButton!=null&&activeButton!=button) {
    buttonClick(event, menuId);
  }
}


function depressButton(button){
  var x,y;

  button.className+=" WinKnopActive";

  x=getPageOffsetLeft(button);
  y=getPageOffsetTop(button)+ button.offsetHeight;
  
  if (browser.isIE) {
    x+=button.offsetParent.clientLeft;
    y+=button.offsetParent.clientTop;
  }

  button.menu.style.left=x+"px";
  button.menu.style.top=y+"px";
  button.menu.style.visibility="visible";
}


function resetButton(button){
  removeClassName(button,"WinKnopActive");

  if(button.menu!=null){
    closeSubMenu(button.menu);
    button.menu.style.visibility="hidden";
  }
}

function menuMouseover(event){
  var menu;

  if(browser.isIE) {
    menu=getContainerWith(window.event.srcElement,"DIV","menu");
  } else { 
    menu=event.currentTarget;
  }

  if(menu.activeItem!=null) {
    closeSubMenu(menu);
  }
}


function WinItemMouseover(event,menuId){
  var item,menu,x,y;

  if(browser.isIE) {
    item=getContainerWith(window.event.srcElement,"A","WinItem");
  } else {
    item=event.currentTarget;
  }  
  menu=getContainerWith(item,"DIV","menu");

  if(menu.activeItem!=null) {
    closeSubMenu(menu);
  }
  menu.activeItem=item;
  item.className+=" WinItemOplichten";

  if(item.subMenu==null){
    item.subMenu=document.getElementById(menuId);

    if(item.subMenu.initialized==null) {
      menuInit(item.subMenu);
    }
  }

  x=getPageOffsetLeft(item)+item.offsetWidth;  
  y=getPageOffsetTop(item);

  var maxX, maxY;

  if(browser.isNS){
    maxX=window.scrollX+window.innerWidth;
    maxY=window.scrollY+window.innerHeight;
  }

  if(browser.isIE) {
    maxX=(document.documentElement.scrollLeft!=0?document.documentElement.scrollLeft:document.body.scrollLeft)+(document.documentElement.clientWidth!=0?document.documentElement.clientWidth:document.body.clientWidth);
    maxY=(document.documentElement.scrollTop!=0?document.documentElement.scrollTop:document.body.scrollTop)+(document.documentElement.clientHeight!=0?document.documentElement.clientHeight:document.body.clientHeight);
  }

  maxX-=item.subMenu.offsetWidth;
  maxY-=item.subMenu.offsetHeight;

  if(x>maxX) {
    x=Math.max(0,x-item.offsetWidth-item.subMenu.offsetWidth+(menu.offsetWidth-item.offsetWidth));
  }

  y=Math.max(0,Math.min(y, maxY));
  item.subMenu.style.left=x+"px";
  item.subMenu.style.top=y+"px";
  item.subMenu.style.visibility="visible";

  if(browser.isIE) {
    window.event.cancelBubble=true;
  } else {
    event.stopPropagation();
  }
}


function closeSubMenu(menu){
  if(menu==null||menu.activeItem==null) {
    return;
  }

  if(menu.activeItem.subMenu!=null){
    closeSubMenu(menu.activeItem.subMenu);
    menu.activeItem.subMenu.style.visibility="hidden";
    menu.activeItem.subMenu=null;
  }

  removeClassName(menu.activeItem,"WinItemOplichten");
  menu.activeItem=null;
}


function menuInit(menu){
  var itemList,spanList;
  var textEl,pijltjeEl;
  var itemWidth;
  var w,dw;
  var i,j;

  if(browser.isIE){
    menu.style.lineHeight="2.5ex";
    spanList=menu.getElementsByTagName("SPAN");

    for(i=0;i< spanList.length; i++) {
      if(hasClassName(spanList[i],"WinItempijltje")){
        spanList[i].style.fontFamily="Webdings";spanList[i].firstChild.nodeValue="4";
      }
    }
  }

  itemList=menu.getElementsByTagName("A");

  if(itemList.length>0)itemWidth=itemList[0].offsetWidth;else return;

  for(i=0; i < itemList.length; i++) {
    spanList=itemList[i].getElementsByTagName("SPAN")
    textEl=null
    pijltjeEl = null;

    for(j=0; j < spanList.length; j++) {
      if(hasClassName(spanList[j],"WinItemText"))textEl=spanList[j];
        if(hasClassName(spanList[j],"WinItempijltje"))pijltjeEl=spanList[j];
    }

    if(textEl!=null&&pijltjeEl!=null)
      textEl.style.paddingRight=(itemWidth-(textEl.offsetWidth+pijltjeEl.offsetWidth))+"px";
  }

  if (browser.isIE){
    w=itemList[0].offsetWidth;
    itemList[0].style.width=w+"px"; 
    dw=itemList[0].offsetWidth-w;
    w-=dw;
    itemList[0].style.width=w+"px";
  }

  menu.initialized=true;
}


function getContainerWith(node,tagName,className){
  while(node!=null) {
    if(node.tagName!=null&&node.tagName==tagName&&hasClassName(node,className)) {
      return node;
    }
    node=node.parentNode;
  }
  return node;
}


function hasClassName(el,name){
  var i,list;
  list=el.className.split(" ");
  
  for(i=0;i<list.length;i++) {
    if(list[i]==name) {
      return true;
    }
    return false; 
  }
}


function removeClassName(el,name){
  var i,curList,newList;

  if(el.className==null) {
    return;
  }

  newList=new Array();
  curList=el.className.split(" ");

  for(i=0;i<curList.length;i++) {
    if(curList[i]!=name) {
      newList.push(curList[i]);
    }
    el.className=newList.join(" ");
  }
}


function getPageOffsetLeft(el){
  var x;
  x=el.offsetLeft;

  if(el.offsetParent!=null) {
    x+=getPageOffsetLeft(el.offsetParent);
  }
  return x;
}


function getPageOffsetTop(el){
  var y;
  y=el.offsetTop;

  if(el.offsetParent!=null) {
    y+=getPageOffsetTop(el.offsetParent);
  }
  return y;
}
