
function hasClass(ele,cls) {

return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));

}

 

function addClass(ele,cls) {

if (!this.hasClass(ele,cls)) ele.className += " "+cls;

}

 

function removeClass(ele,cls) {

if (hasClass(ele,cls)) {

var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');

ele.className=ele.className.replace(reg,' ');

}

}

// Simple folding
function jsmenuToggle(parentid, id)
{
   var list = document.getElementById(id);
   
   // correct node?
   if (list == null)
      return;
   
   // parrent handling
   if (typeof(parentid) == 'string')
   {
      jsmenuParentFolding(parentid, list);
   }
   else if (typeof(parentid) == 'object')
   {
      for (var i = parentid.length - 1; i >= 0; i--)
         jsmenuParentFolding(parentid[i], list);
   }
   
   // initial display
   if (list.style.display == '')
      list.style.display = 'none';
   
   // toggle node
   if (list.style.display == 'none'){
      list.style.display = 'block';
      
   }
   else{
      list.style.display = 'none';
   }
   
   // stop event
   if(window.Event)
      return false;
   else{
      window.event.cancelBubble = true;
   }
}

// Parent folding
function jsmenuParentFolding(parentid, list)
{
   var parentNode = document.getElementById(parentid);
   // correct node?
   if (parentNode == null){
	   return;
   }
   // fold all items
   for (var i = parentNode.childNodes.length - 1; i >= 0; i--)
   {
      var subNode = parentNode.childNodes[i];
      if (typeof(subNode.innerList) != 'undefined'){
         subNode.innerList.style.display = 'none';
      }
      else if (subNode.className == 'subMenu' && subNode != list)
         subNode.style.display = 'none';
   }
}

// Js Menu tracing class
function jsMenu() {};

jsMenu.prototype.load = function()
{
   var list = document.getElementById("jsmenu");
   this.checkList(list);
}

jsMenu.prototype.checkList = function(list)
{
   if (list.nodeName != 'UL' && list.nodeName != 'OL')
      return;
   
   for (var i = list.childNodes.length - 1; i >= 0; i--)
   {
      var node = list.childNodes[i];
      this.checkListNode(node, list);
   }
}

jsMenu.prototype.checkListNode = function(node, parentList)
{
   // is listitem?
   if (node.nodeName != 'LI')
      return;
   
   // find sublist
   var innerList = null;
   var innerA = null;
   for (var i = node.childNodes.length - 1; i >= 0; i--)
   {
      var subNode = node.childNodes[i];
      if (subNode.nodeName == 'A')
          innerA = subNode;
      else if (subNode.nodeName == 'UL' || subNode.nodeName == 'OL')
         innerList = subNode;
   }
   
   if (innerList == null)
      return;
   else {
      innerList.style.display = 'none';
   }
   // handle sublist
   node.innerList = innerList;
   var trigger = node;
   if (innerA != null)
   {
      innerA.removeAttribute('href');
      innerA.removeAttribute('onclick');
      trigger = innerA;
   }
   
   trigger.parentList = parentList;
   trigger.innerList = innerList;
   
   if (parentList.id == 'jsmenu')
   {
	   //onmouseover
	   addEvent(trigger, 'mouseover', function()
			   {
			      
			      if (this.innerList.style.display == 'none')
			      {
			         var parentNode = this.parentList;
			         for (var i = parentNode.childNodes.length - 1; i >= 0; i--)
			         {
			            var subNode = parentNode.childNodes[i];
			            if (typeof(subNode.innerList) != 'undefined')
			            {
			               subNode.innerList.style.display = 'none';
			               removeClass(subNode, "open");
			            }
			         }
			         this.parentNode.className += " open";
			         this.innerList.style.display = 'block';
			         /*
			         if(this.innerList.style.display == 'block')
			        	 setTimeout("doAlert()", 2000);
			      	 */
			      }
			      if(window.Event)
			         return false;
			      else
			         window.event.cancelBubble = true;
			   });
   }
   else
   {
	   //click
   
	   addEvent(trigger, 'click', function()
			   {
		      
		      if (this.innerList.style.display == 'none')
		      {
		         var parentNode = this.parentList;
		         for (var i = parentNode.childNodes.length - 1; i >= 0; i--)
		         {
		            var subNode = parentNode.childNodes[i];
		            if (typeof(subNode.innerList) != 'undefined')
		            {
		               subNode.innerList.style.display = 'none';
		               removeClass(subNode, "open");
		            }
		         }
		         this.parentNode.className += " open";
		         this.innerList.style.display = 'block';
		      }
		      else
		      {
		         this.innerList.style.display = 'none';
		      }
		      
		      if(window.Event)
		         return false;
		      else
		         window.event.cancelBubble = true;
		   });
   }
   this.checkList(innerList);
}

// Setup
var JsMenu = null;
function loadJsMenu()
{
   JsMenu = new jsMenu;
   JsMenu.load();
}
function doAlert() { 
	alert('timeout'); 
	}
//addEvent(window, 'load', loadJsMenu);

