var expandedTriggerClass='triggerexpanded';
var normalTriggerClass='triggernormal';
var hoverTriggerClass='triggerhover';
var normalElementClass='elementnormal';
var collapsedElementClass='elementcollapsed';
var collapsedElements=new Array();
var triggerElements=new Array();
		
function domCollapse() {
  if(document.getElementById && document.createTextNode) {
	var triggerClass=/trigger/;
	
	var elms,tohide,colobj,elementsToCheck,triggerelements,parentElementId;
    elementsToCheck=triggerelements?triggerelements:'*';
				
	if(parentElementId) {
	  elms=document.getElementById('parentElementId').getElementsByTagName(elementsToCheck);
    } else {
	  elms=document.getElementsByTagName(elementsToCheck);
    }
				
    for (i=0;i<elms.length;i++) {
      if(triggerClass.test(elms[i].className)) {
		tohide=elms[i].nextSibling;
		while(tohide.nodeType!=1) {
          tohide=tohide.nextSibling;
		}
		
		collapsedElements.push(tohide)
		triggerElements.push(elms[i])
		juggleClass(tohide,normalElementClass,0);
        juggleClass(tohide,collapsedElementClass,1);
						
		elms[i].colobj=tohide;
		elms[i].onmouseover=function(){ doTriggerHover(this); }
		elms[i].onmouseout=function(){ juggleClass(this,hoverTriggerClass,0); }
		elms[i].onclick=function(){ doDomCollapse(this,this.colobj); return false; }
        elms[i].className=elms[i].className+' '+normalTriggerClass;
	  }
    }
  }
}
		
function doTriggerHover(o) {
  if(!checkClass(hoverTriggerClass,o) && !checkClass(expandedTriggerClass,o)) {
    juggleClass(o,hoverTriggerClass,1);
  }
}
		
function doDomCollapse(o,t) {
  if(t) {
	if(checkClass(collapsedElementClass,t)) {
	  juggleClass(t,collapsedElementClass,0);
	  juggleClass(t,normalElementClass,1);
	  juggleClass(o,normalTriggerClass,0);
	  juggleClass(o,expandedTriggerClass,1);
    } else {
      juggleClass(t,normalElementClass,0);
	  juggleClass(t,collapsedElementClass,1);
	  juggleClass(o,expandedTriggerClass,0);
	  juggleClass(o,normalTriggerClass,1);
    }
  }
}
		
function doDomCollapseAll(state){
  var i,o,t;
  
  for(i=0;i<collapsedElements.length;i++){
    t=collapsedElements[i];	
	o=triggerElements[i];	
	
	if (state==1) {
	  juggleClass(t,collapsedElementClass,0);
	  juggleClass(t,normalElementClass,1);
	  juggleClass(o,normalTriggerClass,0);
	  juggleClass(o,expandedTriggerClass,1);
	} else {
	  juggleClass(t,normalElementClass,0);
	  juggleClass(t,collapsedElementClass,1);
	  juggleClass(o,expandedTriggerClass,0);
	  juggleClass(o,normalTriggerClass,1);
	}
  }
}
		
function juggleClass(o,c,s) {
  if(s==0) {
    o.className=o.className.replace(c,'');	
  }

  if (s==1 && !checkClass(c,o)) {
    o.className+=' '+c;
  }
}

function checkClass(c,o) {
  var re=new RegExp('\\b'+c+'\\b');
  return re.test(o.className);
}


window.onload=domCollapse;
