var defaultMenuYPos	= 115;

//----------------------------------------------------------------------------
// Object menu
//----------------------------------------------------------------------------
function cMenu(name){
	this.name			= name;
	this.items			= new Array();
	this.childMenus		= new Array();
	this.buildMenus		= new String("_"); //store info about builded menus
	this.itemCount		= 0;
	this.isTop			= true;
	
	this.appendItem 	= fnAppendItem;

	this.buildMainMenu  = fnBuildMainMenu;
	this.buildTopMenu	= fnBuildTopMenu;
	this.buildSideMenu	= fnBuildSideMenu;
	this.buildMenu		= fnBuildMenu;
	
	return this
}
//------------------------------------------
//------------------------------------------
function fnBuildMainMenu(){
	if(this.isTop){
		document.write(this.buildTopMenu());
	}else{
		var myW = (browser.isIE) ? "100%" : "93%"
		document.write(this.buildSideMenu(myW));
	}
	for(var i=0; i<this.childMenus.length; i++){
		document.write(this.childMenus[i]);
	}
	if(!this.isTop){
		var aMenu = document.getElementById("menu_" + this.name);	
		if (browser.isIE){
    		aMenu.style.lineHeight = "2.5ex";
		    spanList = aMenu.getElementsByTagName("SPAN");
    		for (i = 0; i < spanList.length; i++)
	    	  if (hasClassName(spanList[i], "menuItemArrow")){
    	    	spanList[i].style.fontFamily = "Webdings";
	        	spanList[i].firstChild.nodeValue = "4";
		      }
	  		}
		aMenu.style.visibility = "visible";
	}
}
//------------------------------------------
//------------------------------------------
function fnBuildTopMenu(){
	var tMenu = new String();
	for(var i=0; i<this.itemCount; i++){
		if(this.items[i].treelevel == 1){
			var thisClass = (this.items[i].isActiveButton==0) ? "menuButton" : "menuButton";
			var mHref = (this.items[i].redirurl!="") ? this.items[i].redirurl : ("/default.aspx?section=" + this.items[i].id_section);
			if((i!=this.itemCount-1) && (this.items[i+1].treelevel>this.items[i].treelevel)){
				tMenu += "<img src='images/blank.gif' height='10' width='1' hspace='0' vspace='0' alt='' border='0'><a id=\"" + this.items[i].id_section + "\" class=\"" + thisClass + "\" href=\"" + mHref + "\" onmouseover=\"buttonClick(event, 'menu_" + this.items[i].id_section + "');buttonMouseover(event, 'menu_" + this.items[i].id_section + "');\">" + this.items[i].name +  "</a>"; //this.items[i].name
			}else{
				tMenu += "<img src='images/blank.gif' height='10' width='1' hspace='0' vspace='0' alt='' border='0'><a class=\"" + thisClass + "\" href=\"" + mHref + "\">" +this.items[i].name + "</a>"
			};
		}else{
			this.buildMenu(this.items[i].id_section_parent, this.items[i].treelevel, i);
		}
	}
	return "<div class=\"menuBar\">" + tMenu + "</div>\n";
}
//------------------------------------------
//------------------------------------------
function fnBuildSideMenu(mWidth){
	var tMenu = new String();
	for(var i=0; i<this.itemCount; i++){
		if(this.items[i].treelevel == 1){
			var mHref = (this.items[i].redirurl!="") ? this.items[i].redirurl : ("/default.aspx?section=" + this.items[i].id_section);
			if((i<this.itemCount-3) && (this.items[i+1].treelevel>this.items[i].treelevel)){
				tMenu += "<a style=\"position:relative;width:100%\" class=\"menuItem\" href=\"" + mHref + "\" onmouseover=\"menuItemMouseover(event, 'menu_" + this.items[i].id_section + "');\"><span class=\"menuItemText\">" + this.items[i].name + "</span><span class=\"menuItemArrow\">&#9654;</span></a>\n"
			}else{
				tMenu += "<a style=\"position:relative;width:100%\" class=\"menuItem\" href=\"" + mHref + "\">" +this.items[i].name + "</a>";
			};
		}else{
			this.buildMenu(this.items[i].id_section_parent, this.items[i].treelevel, i);
		}
	}
	return "<div align='left' style=\"position:relative;width:" + mWidth + "\" id=\"menu_" + this.name + "\" class=\"menu\" onmouseover=\"menuMouseover(event)\">" + tMenu + "</div>\n";
}
//------------------------------------------
//------------------------------------------
function fnBuildMenu(id_parent, treelevel, startPos){
	var custMenu = new String();
	if(this.buildMenus.indexOf("_"+id_parent+"_")==-1){
		for(var j=startPos; j<this.itemCount; j++){
			if(this.items[j].treelevel==treelevel && this.items[j].id_section_parent==id_parent){
				var mHref = (this.items[j].redirurl!="") ? this.items[j].redirurl : ("/default.aspx?section=" + this.items[j].id_section);
				if(this.items[j].redirurl!="#"){
					if(((j+1)<this.itemCount) && (this.items[j+1].treelevel>this.items[j].treelevel)){ //has submenu
						custMenu += "<a class=\"menuItem\" href=\"" + mHref + "\" onmouseover=\"menuItemMouseover(event, 'menu_" + this.items[j].id_section + "');\"><span class=\"menuItemText\">" + this.items[j].name + "</span><span class=\"menuItemArrow\">&#9654;</span></a>"
					}else{
						custMenu += "<a class=\"menuItem\" href=\"" + mHref + "\">" +this.items[j].name + "</a>";
					};
				}else{
					custMenu += "<a class=\"separator\" href=\"" + mHref + "\">" +this.items[j].name + "</a>";
				};
			}else{
				//exit for
				if(this.items[j].treelevel<treelevel){ //find same parent level
					this.childMenus[this.childMenus.length] = "<div align='left' style=\"position:absolute;\" id=\"menu_" + id_parent + "\" class=\"menu\" onmouseover=\"menuMouseover(event)\">" + custMenu + "</div>\n";
					this.buildMenus += id_parent+"_";
					return
				}
			}
			if(j==this.itemCount-1){ //find same parent level
				this.childMenus[this.childMenus.length] = "<div align='left' style=\"position:absolute;\" id=\"menu_" + id_parent + "\" class=\"menu\" onmouseover=\"menuMouseover(event)\">" + custMenu + "</div>\n";
				this.buildMenus += id_parent+"_";
				return
			}
		}
	}
}
//------------------------------------------
//------------------------------------------
function fnAppendItem(oItem){
	this.items[this.itemCount] = oItem;
	this.itemCount++;
}


//----------------------------------------------------------------------------
// Object menu item
//----------------------------------------------------------------------------
function cMenuItem(id_section, id_section_parent, treelevel, name, redirurl, isActiveButton){
	this.id_section			= id_section;
	this.id_section_parent  	= id_section_parent;
	this.treelevel			= treelevel;
	this.id_section			= id_section;
	this.name			= getUnBrokenName(name);
	this.redirurl			= redirurl;
	this.isActiveButton		= isActiveButton;

	return this
}
//------------------------------------------
function getUnBrokenName(name){
	var newNameArray = name.split(" ");
	var newName		 = (newNameArray.length>1) ? newNameArray.join("&nbsp;") : name;
	newNameArray = name.split("-");
	newName		 = (newNameArray.length>1) ? newNameArray.join("&nbsp;") : newName;
	return newName
}
//----------------------------------------------------------------------------
// Code to determine the browser and version.
//----------------------------------------------------------------------------
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();

//----------------------------------------------------------------------------
// Code for handling the menu bar and active button.
//----------------------------------------------------------------------------

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 += " menuButtonActive";
  x = getPageOffsetLeft(button);
  y = defaultMenuYPos;//getPageOffsetTop(button) + button.offsetHeight;
  button.menu.style.top  = y + "px";
  var mOffset = x + button.menu.offsetWidth;
  var maxX = document.body.offsetWidth + document.body.scrollLeft;
  if(mOffset > maxX){
  	button.menu.style.left = (x + button.offsetWidth - button.menu.offsetWidth) + "px";
  }else{
  	button.menu.style.left = x + "px";
  }
  button.menu.style.visibility = "visible";
}
//------------------------------------------
//------------------------------------------
function resetButton(button) {
  removeClassName(button, "menuButtonActive");
  if (button.menu != null) {
    closeSubMenu(button.menu);
    button.menu.style.visibility = "hidden";
  }
}

//----------------------------------------------------------------------------
// Code to handle the menus and sub menus.
//----------------------------------------------------------------------------
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 menuItemMouseover(event, menuId) {
  var item, menu, x, y;
  if (browser.isIE)
    item = getContainerWith(window.event.srcElement, "A", "menuItem");
  else
    item = event.currentTarget;
  menu = getContainerWith(item, "DIV", "menu");
  if (menu.activeItem != null)
    closeSubMenu(menu);
  menu.activeItem = item;

  item.className += " menuItemHighlight";

  if (item.subMenu == null) {
    item.subMenu = document.getElementById(menuId);
    if (item.subMenu.isInitialized == 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, "menuItemHighlight");
  menu.activeItem = null;
}

//----------------------------------------------------------------------------
// Code to initialize menus.
//----------------------------------------------------------------------------
function menuInit(menu) {
  var itemList, spanList;
  var textEl, arrowEl;
  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], "menuItemArrow")) {
        spanList[i].style.fontFamily = "Webdings";
        spanList[i].firstChild.nodeValue = "6";
      }
  }

  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;
    arrowEl = null;
    for (j = 0; j < spanList.length; j++) {
      if (hasClassName(spanList[j], "menuItemText"))
        textEl = spanList[j];
      if (hasClassName(spanList[j], "menuItemArrow"))
        arrowEl = spanList[j];
    }
    if (textEl != null && arrowEl != null)
      textEl.style.paddingRight = (itemWidth 
        - (textEl.offsetWidth + arrowEl.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.isInitialized = true;
}

//----------------------------------------------------------------------------
// General utility functions.
//----------------------------------------------------------------------------
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();
  var myList = "";
  curList = el.className.split(" ");
  for (i = 0; i < curList.length; i++)
    if (curList[i] != name)
      myList += curList[i];
  el.className = myList;
}
//------------------------------------------
//------------------------------------------
function getPageOffsetLeft(el) {
  var x = el.offsetLeft;
  if (el.offsetParent != null)
    x += getPageOffsetLeft(el.offsetParent);

  return x;
}
//------------------------------------------
//------------------------------------------
function getPageOffsetTop(el) {
  var y = el.offsetTop;
  if (el.offsetParent != null)
    y += getPageOffsetTop(el.offsetParent);

  return y;
}
//------------------------------------------
//------------------------------------------
function getParentContainer(el){
  var eName = (!el.id) ? "" : el.id;
  if (eName.indexOf("MENU_LEFT")!=-1){
  		return el
  }else{
		if(el.tagName == "BODY"){
			return null
		}else{
			return getParentContainer(el.offsetParent);
		}  
  }
}
// Internet Explorer 5 didn't have Push, Pop and Shift so here we create them.
// push appends new elements to an array, and returns the new length
if (Array.prototype && !Array.prototype.push) {
	Array.prototype.push = function() {
		for (var i=0; i<arguments.length; i++) this[this.length] = arguments[i];
		return this.length;
	};
}
// pop removes the last element from an array and returns it
if (Array.prototype && !Array.prototype.pop) {
	Array.prototype.pop = function() {
		var lastitem = this.length > 0 ? this[this.length - 1] : undefined;
		if (this.length > 0) this.length--;
		return lastitem;
	};
}

// shift removes the first element from an array and returns it
if (Array.prototype && !Array.prototype.shift) {
	Array.prototype.shift = function() {
		var firstitem = this.length > 0 ? this[0] : undefined;
		for (var i=0; i<this.length-1; i++) this[i] = this[i + 1];
		if (this.length > 0) this.length--;
		return firstitem;
	};
}

// join returns a string value consisting of all the elements of an array 
// concatenated together and separated by the separator argument
if (Array.prototype && !Array.prototype.join) {
	Array.prototype.join = function(separator) {
		if (typeof separator != "string") separator = ",";
		var s = "";
		for (var i=0; i<this.length; i++) {
			if (this[i] != null && this[i] != undefined) s += this[i];
			if (i != this.length - 1) s += separator;
		}
		return s;
	};
}