/***************************************************************************************
        Nested list collapsing script written by Mark Wilton-Jones - 21/11/2003
Version 2.2.0 - this script takes existing HTML nested UL or OL lists, and collapses them
            Updated 13/02/2004 to allow links in root of expanding branch
                  Updated 09/09/2004 to allow state to be saved
          Updated 07/10/2004 to allow page address links to be highlighted
Updated 28/11/2004 to allow you to force expand/collapse links to use just the extraHTML

Nisad Sivcevic - 20050107 - way to use images, that whould work even if you don't use
  a mouse, and should also work with auto-collapse.
PP - 20051010 - update to correct auto-collapse feature, change global var of +/- signs
  to params, new par oFromLevel to set level from which list will be compacted
****************************************************************************************
Please see http://www.howtocreate.co.uk/jslibs/ for details and a demo of original script
Please see http://www.howtocreate.co.uk/jslibs/termsOfUse.html for terms of use
_________________________________________________________________________________________*/
var openLists=[],oIcount=0;
var compactFromLevel=0;//PP
function compactMenu(oID,oAutoCol,oMask,oPl,oMn,oFromLevel,oMinimalLink){
  if(!document.getElementsByTagName||!document.childNodes||!document.createElement){return}
  var baseElement=document.getElementById( oID ); if( !baseElement ){return}
  if (oFromLevel){compactFromLevel=oFromLevel}; //PP
  compactChildren(baseElement,0,oID,oAutoCol,oMask,oPl,oMn,baseElement.tagName.toUpperCase(),oMinimalLink&&oPl);
}
function compactChildren(oOb,oLev,oBsID,oCol,oMask,oPl,oMn,oT,oML){
  if(!oLev){oBsID=escape(oBsID);if(oCol){openLists[oBsID]=[]}}
  for(var x=0,y=oOb.childNodes;x<y.length;x++){if(y[x].tagName){
    //for each immediate LI child
    var theNextUL=y[x].getElementsByTagName(oT)[0];
    if(theNextUL){
      //collapse the first UL/OL child
      theNextUL.style.display=(oLev>=compactFromLevel)?'none':'block';
      //create a link for expanding/collapsing
      var newLink=document.createElement('A');
      newLink.setAttribute('href','#');
      newLink.onclick=new Function('clickSmack(this,'+oLev+',\''+oBsID+'\','+oCol+',\''+escape(oT)+'\',\''+escape(oPl)+'\',\''+escape(oMn)+'\');return false;');
      //wrap everything upto the child U/OL in the link
      if(oML){var theHTML=''} else {
        var theT=y[x].innerHTML.toUpperCase().indexOf('<'+oT);
        var theA=y[x].innerHTML.toUpperCase().indexOf('<A');
        var theHTML=y[x].innerHTML.substr(0,(theA+1&&theA<theT)?theA:theT);
        while(!y[x].childNodes[0].tagName||(y[x].childNodes[0].tagName.toUpperCase()!=oT&&y[x].childNodes[0].tagName.toUpperCase()!='A')) {
          y[x].removeChild(y[x].childNodes[0]);
      } }
      y[x].insertBefore(newLink,y[x].childNodes[0]);
      y[x].childNodes[0].innerHTML=oMask.replace('%%',(oLev>=compactFromLevel)?oPl:oMn)+theHTML.replace(/^\s*|\s*$/g,'');//PP
      theNextUL.MWJuniqueID=oIcount++;
      compactChildren(theNextUL,oLev+1,oBsID,oCol,oMask,oPl,oMn,oT,oML);
} } } }
function clickSmack(oThisOb,oLevel,oBsID,oCol,oT,oPl,oMn){
  if(oThisOb.blur){oThisOb.blur()}
  oThisOb=oThisOb.parentNode.getElementsByTagName(unescape(oT))[0];
  if(oCol){
    for(var x=openLists[oBsID].length-1;x>=oLevel;x-=1){if(openLists[oBsID][x]){
      openLists[oBsID][x].style.display='none';
      openLists[oBsID][x].previousSibling.innerHTML=openLists[oBsID][x].previousSibling.innerHTML.replace(oMn,oPl);//NS
      if(oLevel!=x){openLists[oBsID][x]=null;}
    } }
    if(oThisOb==openLists[oBsID][oLevel]){openLists[oBsID][oLevel]=null}
    else {
      oThisOb.style.display='block';
      oThisOb.previousSibling.innerHTML = oThisOb.previousSibling.innerHTML.replace(oPl,oMn);//NS
      openLists[oBsID][oLevel]=oThisOb
    }
  } else {
    oThisOb.style.display=(oThisOb.style.display=='block')?'none':'block';
    oThisOb.previousSibling.innerHTML=oThisOb.previousSibling.innerHTML.replace((oThisOb.style.display=='block')?unescape(oPl):unescape(oMn),(oThisOb.style.display=='block')?unescape(oMn):unescape(oPl));//PP
  }
}
function stateToFromStr(oID,oFStr){
 if(!document.getElementsByTagName||!document.childNodes||!document.createElement){return ''}
 var baseElement=document.getElementById(oID);
 if(!baseElement){return ''};
 if(!oFStr&&typeof(oFStr)!='undefined'){return ''};
 if(oFStr) {oFStr=oFStr.split(':')};
 for(var oStr='',l=baseElement.getElementsByTagName(baseElement.tagName),x=0;l[x];x++) {
   if(oFStr&&MWJisInTheArray(l[x].MWJuniqueID,oFStr)&&l[x].style.display=='none'){l[x].parentNode.getElementsByTagName('a')[0].onclick()}
   else if(l[x].style.display!='none'){oStr+=(oStr?':':'')+l[x].MWJuniqueID}
 }
 return oStr;
}
function MWJisInTheArray(oNeed,oHay){for(var i=0;i<oHay.length;i++){if(oNeed==oHay[i]){return true}} return false}
function selfLink(oRootElement,oClass,oExpand){
  if(!document.getElementsByTagName||!document.childNodes){return};
  oRootElement=document.getElementById(oRootElement);
  for(var x=0,y=oRootElement.getElementsByTagName('a');y[x];x++){
    if(y[x].getAttribute('href')&&!y[x].href.match(/#$/)&&getRealAddress(y[x])==getRealAddress(location)){
      y[x].className=(y[x].className?(y[x].className+' '):'')+oClass;
      if(oExpand){
        oExpand=false;
        for(var oEl=y[x].parentNode,ulStr='';oEl!=oRootElement&&oEl!=document.body;oEl=oEl.parentNode){
          if(oEl.tagName&&oEl.tagName==oRootElement.tagName){ulStr=oEl.MWJuniqueID+(ulStr?(':'+ulStr):'')}
        }
        stateToFromStr(oRootElement.id,ulStr);
} } } }
function getRealAddress(oOb){return oOb.protocol+((oOb.protocol.indexOf(':')+1)?'':':')+oOb.hostname+((typeof(oOb.pathname)==typeof(' ')&&oOb.pathname.indexOf('/')!=0)?'/':'')+oOb.pathname+oOb.search}
