/***************************************************************/
/***************************************************************/
/* Popup Functions                                             */
/***************************************************************/
/***************************************************************/

var _POPUP_FEATURES = 'toolbar=no,menubar=no,width=640,height=480,resizable=yes';

if (!Array.prototype.push) Array.prototype.push = function() {
    for (var i=0; i<arguments.length; i++) this[this.length] = arguments[i];
    return this.length;
}

Array.prototype.find = function(value, start) {
    start = start || 0;
    for (var i=start; i<this.length; i++)
        if (this[i]==value)
            return i;
    return -1;
}

Array.prototype.has = function(value) {
    return this.find(value)!==-1;
}

function map(list, func) {
    var result = [];
    func = func || function(v) {return v};
    for (var i=0; i < list.length; i++) result.push(func(list[i], i, list));
    return result;
}

function filter(list, func) {
    var result = [];
    func = func || function(v) {return v};
    map(list, function(v) { if (func(v)) result.push(v) } );
    return result;
}

function getElem(elem) {
    if (document.getElementById) {
        if (typeof elem == "string") {
            elem = document.getElementById(elem);
            if (elem===null) throw 'cannot get element: element does not exist';
        } else if (typeof elem != "object") {
            throw 'cannot get element: invalid datatype';
        }
    } else throw 'cannot get element: unsupported DOM';
    return elem;
}

function hasClass(elem, className) {
    return getElem(elem).className.split(' ').has(className);
}

function getElementsByClass(className, tagName, parentNode) {
    parentNode = !isUndefined(parentNode)? getElem(parentNode) : document;
    if (isUndefined(tagName)) tagName = '*';
    return filter(parentNode.getElementsByTagName(tagName),
        function(elem) { return hasClass(elem, className) });
}

function listen(event, elem, func) {
    elem = getElem(elem);
    if (elem.addEventListener)  // W3C DOM
        elem.addEventListener(event,func,false);
    else if (elem.attachEvent)  // IE DOM
        elem.attachEvent('on'+event, function(){ func(new W3CDOM_Event(elem)) } );
        // for IE we use a wrapper function that passes in a simplified faux Event object.
    else throw 'cannot add event listener';
}

function mlisten(event, elem_list, func) {
    map(elem_list, function(elem) { listen(event, elem, func) } );
}

function W3CDOM_Event(currentTarget) {
    this.currentTarget  = currentTarget;
    this.preventDefault = function() { window.event.returnValue = false }
    return this;
}

function isUndefined(v) {
    var undef;
    return v===undef;
}

function raw_popup(url, target, features) {
    // pops up a window containing url optionally named target, optionally having features
    if (isUndefined(features)) features = _POPUP_FEATURES;
    if (isUndefined(target  )) target   = '_blank';
    var theWindow = window.open(url, target, features);
    theWindow.focus();
    return theWindow;
}

function link_popup(src, features) {
    // to be used in an html event handler as in: <a href="..." onclick="link_popup(this,...)" ...
    // pops up a window grabbing the url from the event source's href
    return raw_popup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

function event_popup(e) {
    // to be passed as an event listener
    // pops up a window grabbing the url from the event source's href
    link_popup(e.currentTarget);
    e.preventDefault();
}

function event_popup_features(features) {
    // generates an event listener similar to event_popup, but allowing window features
    return function(e) { link_popup(e.currentTarget, features); e.preventDefault() }
}


/***************************************************************/
/***************************************************************/
/* Pepperio Functions                                          */
/***************************************************************/
/***************************************************************/

/***************************************************************/
/* returns the current menu item (if there is one) in the tree */
/***************************************************************/

function returnSelected(menuDiv)
{
   var url = window.location.href.toLowerCase();
   var menu = document.getElementById(menuDiv);
   if( menu!=null )
   {
	  var items = menu.getElementsByTagName("a");
	  for( var i=0; i<items.length; i++ )
	  {
         //alert('Window Url: '+url+'\nLink Url: '+items[i].href.toLowerCase()+"\n");
		 if( items[i].href.toLowerCase()==url )
         {
            return items[i];
			break;
		 }
	  }
	  return false;
   }
}

/***************************************************************/
/* sets the parent list item of the current list and any       */
/* parents of it that are list items to selected               */
/***************************************************************/

function setSelected( menuDiv,selectedItem )
{
   if( selectedItem!=false )
   {
      selectedItem.className = selectedItem.parentNode.className+" selected";
	  var parent = selectedItem.parentNode;
      while( true )
	  {
		 if( parent==null )
		 {
			break; 
		 }
		 else if( parent.id==menuDiv )
		 {
			break;
         }
         else if( parent.tagName.toLowerCase()=="li" )
         {
            parent.className = parent.className+" selected";
         }
         parent = parent.parentNode;
	  }
   }
}

/***************************************************************/
/* collapse menu                                               */
/***************************************************************/

function collapseMenu( menuDiv,selectedItem )
{
   if( selectedItem!=false )
   {
      var menu = document.getElementById(menuDiv);
      if( menu!=null )
      {
         var items = menu.getElementsByTagName("a");
         var lastSetAncestor = null;
		 for( var i=0; i<items.length; i++ )
		 {
            if( items[i]===selectedItem )
			{
                //alert("Found Selected Item, 4 levels up id is: "+items[i].parentNode.parentNode.parentNode.parentNode.id);
				if( items[i].parentNode.parentNode.parentNode.parentNode===menu )
				{
                   
                   var childLists = items[i].parentNode.parentNode.getElementsByTagName("UL");
				   if( childLists.length>0 )
				   {
					  //alert("Number of Child Lists: "+childLists.length);
					  lastSetAncestor = childLists[0];
                      //alert("lastSetAncestor tag name is: "+lastSetAncestor.tagName);
				   }
				   else
				   {
                      lastSetAncestor = false;
					  //alert("There are no Child Lists");   
				   }
				}
                else
				{
				   //alert("Found Selected Item");
				   lastSetAncestor = items[i].parentNode.parentNode.parentNode;
				   //alert("lastSetAncestor: "+lastSetAncestor.tagName);
				   break;
				}
			}
		 }
		 if( lastSetAncestor!=null )
		 {
		    var menuChildNodes = menu.childNodes;
			var subMenus = null;
			for( var i=0; i<menuChildNodes.length; i++ )
			{
			    if( menuChildNodes[i].tagName.toLowerCase()=="ul" )
				{
				   subMenus = menuChildNodes[i].getElementsByTagName("UL");
				   break;
				}
			}
			
			if( subMenus!=null )
			{
			   //alert(subMenus.length+" submenus found");
               for( var i=0; i<subMenus.length; i++ )
		       {
                  if( subMenus[i]===lastSetAncestor )
			      {
                     subMenus[i].style.display = "block";
					 break;
			      }
			   }
		    }			 
		 }
      }
   }
}

/***************************************************************/
/* startup - perform startup functions                         */
/***************************************************************/

function startup()
{
   var menuName = 'leftnavigation';
   var selected = returnSelected(menuName);
   setSelected(menuName,selected);
   collapseMenu(menuName,selected);
}












