//configurations
var LNBnavLocation = "/WMS/common/images/";
var LNBimgLocation = "/WMS/common/images/left_nav_bar/";
var LNBimgExtension = ".gif";
var LNBmenuLayerName = "LNBmnu";
var LNBdefaultTargetFrame = "mainFrame";

var LNBmaxLevel = 3;
var LNBmenuWidth = 160;
var LNBlevel1Height = 22;
var LNBlevel2Height = 14;
var LNBlevel3Height = 14;

//global variables
var LNBitemHighlight = false;
var LNBmenuList = new Array;
var LNBimage = new Array;

function initialize() {
  window.setTimeout("initMenu();",1);
}

function initMenu() {
  var i = 0;
  var j = 0;
  var key = 0;
  var yPos = 0;
  var HTML = "";
  var level = 0;
  var height = 0;
  var children = "";
  var menuItem1 = new Array;
  var menuItem2 = new Array;
  LNBmenuList = LNBmenuString.split("$");
  for(i = 0; i < LNBmenuList.length - 1; i++) {
    menuItem1 = LNBmenuList[i].split("|");
    key = eval(menuItem1[0]) + 1;
	children = "";
	//search for direct child-nodes
    for(j = i + 1; j < LNBmenuList.length - 1; j++) {
      menuItem2 = LNBmenuList[j].split("|");
	  if(eval(menuItem2[0]) == key) { //child-node
	    LNBmenuList[j] += "|"+i; //link to parent-node
	    children += j+";"; //add to list of children
	  } else if(eval(menuItem2[0]) < key) {
	    key = 0; //break
	  }
    }
	//set item level
    level = eval(menuItem1[0]);
    if(level > LNBmaxLevel) { //sanity check
      level = LNBmaxLevel;
    } else if(level < 1) {
      level = 1;
    }
	menuItem1[0] = level;
	//set item height
    if(menuItem1[5] == "") {
      height = eval("LNBlevel"+menuItem1[0]+"Height");
    } else {
	  height = eval(menuItem1[5]);
    }
	menuItem1[5] = height;
	//writeback buffered changes
	LNBmenuList[i] = menuItem1.join("|");
	//append child list
	if(level == 1) {
      LNBmenuList[i] += "|-1|"+children+"|1";
	} else {
      LNBmenuList[i] += "|"+children+"|0";;
	}
	//add a dummy yPos for NN browser
	yPos += height;
	//create HTML code for this item
	if(children != "") { //parent item
	  HTML += createItemHTML(i, level, height, menuItem1[1], menuItem1[2], true, yPos);
	} else { //child item
	  HTML += createItemHTML(i, level, height, menuItem1[1], menuItem1[2], false, yPos);
	}
  }
  if(document.layers) { //NN4 margin
    setLayerPosition(-4,-4);
  }
  setLayerHTML(HTML);
  displayItems();
}

function refresh() {
  if(document.layers) {
    location.reload();
  }
}

function cacheImage(idx, itp, img) {
  eval("LNBimage[idx*3+itp] = new Image();");
  eval("LNBimage[idx*3+itp].src = img;");
}

function createItemHTML(idx, level, height, title, description, parent, yPos) {
  var cut = 0;
  var HTML = "";
  cut = title.lastIndexOf(LNBimgExtension);
  if(cut > 0) { //image type item
	cacheImage(idx, 0, LNBimgLocation+title.substring(0,cut)+"_def"+LNBimgExtension);
	cacheImage(idx, 1, LNBimgLocation+title.substring(0,cut)+"_rol"+LNBimgExtension);
	if(level == 1) {
	  cacheImage(idx, 2, LNBimgLocation+title.substring(0,cut)+"_clk"+LNBimgExtension);
	}
    HTML += "<div id=\"LNBitm"+idx+"\" style=\"position:absolute;border-style:none;border-width:thin;width:"+LNBmenuWidth+"px;left:0px;top:"+yPos+"px;visibility:hidden;\"><a href=\"javascript:itemClick("+idx+");\" onMouseOver=\"return itemOver("+idx+",\'"+description+"\');\" onMouseOut=\"return itemOut("+idx+");\"><img id=\"LNBitm"+idx+"img\" name=\"LNBitm"+idx+"img\" src=\""+LNBimgLocation+title.substring(0,cut)+"_def"+LNBimgExtension+"\" border=\"0\" width=\""+LNBmenuWidth+"\" height=\""+height+"\"></a></div>";
  } else { //text type item
    //TBD
  }
  return HTML;
}

function expandList(idx) {
  var i = 0;
  var menuItem;
  var level = 0;
  var children = "";
  menuItem = LNBmenuList[idx].split("|");
  if(menuItem[7] != "") { //parent item
    level = eval(menuItem[0]) + 1;
    menuItem[8] = "2"; //opened
    LNBmenuList[idx] = menuItem.join("|");
    for(i = idx + 1; i < LNBmenuList.length - 1; i++) {
	  if(eval(LNBmenuList[i].substring(0,1)) == level) {
        menuItem = LNBmenuList[i].split("|");
	    menuItem[8] = "1"; //visible
	    LNBmenuList[i] = menuItem.join("|");
	  } else if(eval(LNBmenuList[i].substring(0,1)) < level) {
        return;
	  }
    }
  }
}

function collapseList(idx) {
  var i = 0;
  var menuItem;
  var level = 0;
  var children = "";
  menuItem = LNBmenuList[idx].split("|");
  level = eval(menuItem[0]);
  menuItem[8] = "1"; //closed
  LNBmenuList[idx] = menuItem.join("|");
  for(i = idx + 1; i < LNBmenuList.length - 1; i++) {
	if(eval(LNBmenuList[i].substring(0,1)) > level) {
      menuItem = LNBmenuList[i].split("|");
	  menuItem[8] = "0"; //invisible
	  LNBmenuList[i] = menuItem.join("|");
	} else if(eval(LNBmenuList[i].substring(0,1)) < level) {
      return;
	}
  }
}

function getOpenItem(level) {
  var i = 0;
  for(i = 0; i < LNBmenuList.length - 1; i++) {
	if((eval(LNBmenuList[i].substring(0,1)) == eval(level))&&(LNBmenuList[i].substring(LNBmenuList[i].length-1,LNBmenuList[i].length) == "2")) {
	  return i;
	}
  }
  return -1;
}

function displayItems() {
  var i = 0;
  var yPos = 0;
  var menuItem = new Array;
  for(i = 0; i < LNBmenuList.length - 1; i++) {
	if(eval(LNBmenuList[i].substring(LNBmenuList[i].length-1,LNBmenuList[i].length)) > 0) { //visible
      menuItem = LNBmenuList[i].split("|");
      if(menuItem[8] == "2") {
	    if(menuItem[0] == "1") {
	      setItemImage("LNBitm"+i,i*3+2);
		} else {
	      setItemImage("LNBitm"+i,i*3+1);
		}
	  } else {
	    setItemImage("LNBitm"+i,i*3);
	  }
      setItemPosition("LNBitm"+i,0,yPos);
      setItemVisibility("LNBitm"+i,true);
      yPos += eval(menuItem[5]);
	} else { //invisible
      setItemVisibility("LNBitm"+i,false);
	}
  }
}

function setLayerHTML(HTML) {
  var mylayer
  if(document.getElementById) { //IE 5.x+, NS 6.x+
    mylayer = eval("document.getElementById(\""+LNBmenuLayerName+"\")");
    mylayer.innerHTML = HTML;
  } else if(document.all) { //IE 4.x
    mylayer = eval("document.all."+LNBmenuLayerName);
    mylayer.innerHTML = HTML;
  } else if(document.layers) { //NS 4.x
    mylayer = eval("document."+LNBmenuLayerName);
    mylayer.document.open("text/html","replace");
    mylayer.document.write(HTML);
    mylayer.document.close();
  }
}

function setLayerPosition(xpos, ypos) {
  var mylayer
  if(document.getElementById) { //IE 5.x+, NS 6.x+
    mylayer = eval("document.getElementById(\""+LNBmenuLayerName+"\").style");
	mylayer.left = xpos
    mylayer.top = ypos
  } else if(document.all) { //IE 4.x
    mylayer = eval("document.all."+LNBmenuLayerName+".style");
	mylayer.posLeft = xpos
    mylayer.posTop = ypos
  } else if(document.layers) { //NS 4.x
    mylayer = eval("document."+LNBmenuLayerName);
	mylayer.left = xpos;
	mylayer.top = ypos;
  }
}

function setItemVisibility(item, visibility) {
  var myItem;
  if(document.getElementById) { //IE 5.x+, NS 6.x+
    myItem = eval("document.getElementById(\""+item+"\")");
    if(!myItem) return;
    if(visibility) {
      myItem.style.visibility = "visible";
    } else {
      myItem.style.visibility = "hidden";
    }
  } else if(document.all) { //IE 4.x
    myItem = eval("document.all."+item);
    if(!myItem) return;
    if(visibility) {
      myItem.style.visibility = "visible";
    } else {
      myItem.style.visibility = "hidden";
    }
  } else if(document.layers) { //NS 4.x
    myItem = eval("document."+LNBmenuLayerName+".document."+item);
    if(!myItem) return;
    if(visibility) {
      myItem.visibility = "visible";
    } else {
      myItem.visibility = "hidden";
    }
  }
}

function setItemPosition(item, xpos, ypos) {
  var myItem;
  if(document.getElementById) { //IE 5.x+, NS 6.x+
    myItem = eval("document.getElementById(\""+item+"\")");
    if(!myItem) return;
	myItem.style.left = xpos;
    myItem.style.top = ypos;
  } else if(document.all) { //IE 4.x
    myItem = eval("document.all."+item);
    if(!myItem) return;
	myItem.style.posLeft = xpos;
    myItem.style.posTop = ypos;
  } else if(document.layers) { //NS 4.x
    myItem = eval("document."+LNBmenuLayerName+".document."+item);
    if(!myItem) return;
	myItem.left = xpos;
	myItem.top = ypos;
  }
}

function setItemImage(item, img) {
  var myItem;
  if(img < 0) return;
  if(document.getElementById) { //IE 5.x+, NS 6.x+
    myItem = eval("document.getElementById(\""+item+"img\")");
  } else if(document.all) { //IE 4.x
    myItem = eval("document.all."+item+"img");
  } else if(document.layers) { //NS 4.x
    myItem = eval("document."+LNBmenuLayerName+".document."+item+"img");
  }
  if(!myItem) return;
  eval("myItem.src = LNBimage[img].src;");
}

function openLocation(url, target) {
  var myFrame;
  if((document.getElementById)||(document.all)) { //IE 4.x+, NS 6.x+
    open(url, target); //use open where you can...
  } else if(document.layers) { //NS 4.x
	myFrame = eval("parent."+target);
	myFrame.location.href = url;
  }
}

function itemClick(idx) {
  var target = LNBdefaultTargetFrame;
  var menuItem = new Array;
  menuItem = LNBmenuList[idx].split("|");
  //check for action first
  if(menuItem[3] != "") {
    if(menuItem[4] != "") {
	  target = menuItem[4];
	}
	openLocation(menuItem[3], target);
  }
  //then for menu redraw
  if(menuItem[8] == "2") { //menu item is already opened
    collapseList(idx);
	displayItems();
    setItemImage("LNBitm"+idx,idx*3+1); //recompensate rollover loss
  } else if((menuItem[7] != "")||(menuItem[0] == "1")) { //menu item is a parent
    i = getOpenItem(menuItem[0]);
	if(i >= 0) {
	  collapseList(i); //close open items first
	}
    expandList(idx); //expand node
	displayItems();
  }
}

function itemOver(idx, msg) {
  if(!LNBitemHighlight) {
    LNBitemHighlight = true;
	window.status = msg;
	if(LNBmenuList[idx].substring(LNBmenuList[idx].length-1,LNBmenuList[idx].length) == "1") { //visible
      setItemImage("LNBitm"+idx,idx*3+1);
	}
  }
  return true;
}

function itemOut(idx) {
  if(LNBitemHighlight) {
    LNBitemHighlight = false;
	window.status = "";
	if(LNBmenuList[idx].substring(LNBmenuList[idx].length-1,LNBmenuList[idx].length) == "1") { //visible
      setItemImage("LNBitm"+idx,idx*3);
	}
  }
  return true;
}
