var maxHeight = 500;
var growObject = null;
var growHeight = 0;

/* retrieve all elements for supplied class name, optionally within supplied node and for supplied tag*/
function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if (node == null)
    node = document;
  if (tag == null)
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
    if (pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

/* retrieve next div element with supplied class at obj node level if possible, or alternatively at the child level */
function getNextDiv(obj, searchClass) {
  var nextDiv = getNextDivSibling(obj, searchClass);
  if (!nextDiv) {
    nextDiv = getNextDivSibling(obj.firstChild, searchClass);
  }
  return nextDiv;
}

/* retrieve next div element with supplied class at obj node level */
function getNextDivSibling(obj, searchClass) {
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  if (obj) {
    do {
      obj = obj.nextSibling;
    }
    while (obj && obj.tagName != 'DIV' && !pattern.test(obj.className)); 
  }
  return obj; 
} 

/* expand height of growObject from growHeight to maxheight */
function grow() {
  if (growHeight <= maxHeight) {
    // expand object by one more block
    growObject.style.height = growHeight + 'px';
    growHeight += 20;
    setTimeout( 'grow()', 2);
  } else {
    // object is at maximum height 
    growObject.style.height = maxHeight;
    // remove height style attribute to ensure object returns to its default height
    growObject.removeAttribute("style");
  }
}

/* reduce height of growObject from growHeight to zero */
function shrink() {
  if (growObject.className != 'expandable_content hidden') {
    // growObject is not fully shrunk yet
    if (growHeight > 0) {
      // reduce object by one more block
      growObject.style.height = growHeight + 'px';
      growHeight = growHeight - 20;
      setTimeout( 'shrink()', 2 );
    } else {
      // set object class so that it is hidden
      growObject.className = 'expandable_content hidden';
      // remove height style attribute to ensure objects default height is used when nexxt displayed
      growObject.removeAttribute("style");
    }
  }
}

/* toggle state of menu content item related to meni item */
function toggle() {
  // only toggle A (hyperlink) tagged elements
  if (this && (this.tagName == 'A')) {
    // retrieve next expandable div element for selected node
    var nextDiv = getNextDiv(this, 'expandable_content');
    if (nextDiv) {
      if (nextDiv.className == 'expandable_content hidden') {
        // div is currently hidden - show it and then grow from zero to its default height
        nextDiv.className = 'expandable_content showing';
        maxHeight = nextDiv.offsetHeight;
        growObject = nextDiv;
        growHeight = 0;
        grow();
//        menuOpen += ';' + this.value;
//        setCookie( "usc_menuopen", menuOpen, 1 );
      } else {
        // div is currently showing - shrink it from its current height to zero (when it will be hidden)
        maxHeight = nextDiv.offsetHeight;
        growObject = nextDiv;
        growHeight = maxHeight;
        shrink()
      }
    }
  }
}

/* set the valud of cookie name, number of days to expire */
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

/* get the value of cookie name */
function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

/* initialisation of expandable menu items - tagged with class name expandable_menu */
/* if javascript is disabled, all items will by default be open, otherwise this script will close them */
function initToggles() {
  // set toggle function handler for expandable menu items
  var currSelected = getElementsByClass("expandable_menu");
	for (var i=0; i<currSelected.length;i++) {
			currSelected[i].onclick = toggle;
  }  
  
  //var menuOpen = getCookie("usc_menuopen");
  //alert(menuOpen);
  //var pattern = new RegExp("(^|\\s)"+menuOpen+"(\\s|$)");

  // hide all expandable menu item content containers
  var currSelected = getElementsByClass("expandable_content");
  
	for (var i=0; i<currSelected.length;i++) {
    var value = currSelected[i].value;

//    if ( !pattern.test(value) ) {
      currSelected[i].className = "expandable_content hidden";
//    }
  }  
}

/* initialise expandable menu items on page load */
if (document.createElement) window.onload = initToggles;

