dc={
	triggerElements:'*', 	// elements to trigger the effect
	parentElementId:'collapsible_content',	// ID of the parent element (keep null if none)
	uniqueCollapse:false,	// if set to true, only one element can be open at a time
	scrollToBlock:false,	// if set to true, clicking on element will scroll it into view (like internal link)
	usePic:false,	// if set to false, plus/minus image will not be used 

	// CSS class names
	parentClass:'collapsible',
	trigger:'trigger',
	triggerOpen:'trigger open',
	triggerClosed:'trigger closed',
	showClass:'body show',
	hideClass:'body hide',
	
	// pictures and text alternatives
	picHTML:'<img width="14" height="14" alt="" border="0" style="vertical-align: middle; padding-right: 5px;" />',
	closedPic:'/images/ico_plus.gif',
	closedAlt:'Click to expand section',
	openPic:'/images/ico_minus.gif',
	openAlt:'Click to collapse section',

	init:function(e){
		var temp;
		if(!document.getElementById || !document.createTextNode){return;}
		if(!dc.parentElementId){
			temp=document.getElementsByTagName(dc.triggerElements);
		} else if(document.getElementById(dc.parentElementId)){
			temp=document.getElementById(dc.parentElementId).getElementsByTagName(dc.triggerElements);
		}else{
			return;
		}
		dc.tempLink=document.createElement('a');
		dc.tempLink.setAttribute('href','#');
		for(var i=0;i<temp.length;i++){
			if(dc.cssjs('check',temp[i],dc.trigger) || dc.cssjs('check',temp[i],dc.triggerOpen) || dc.cssjs('check',temp[i],dc.triggerClosed)){
				dc.makeTrigger(temp[i],e);
			}
		}
	},
	makeTrigger:function(o,e){
		var tl=dc.tempLink.cloneNode(true);
		var oParent = o.parentNode;
		var tohide=o.nextSibling;
		while(tohide.nodeType!=1) {
			tohide=tohide.nextSibling;
		}
		tl.tohide=tohide;
		if (dc.usePic) {
			tl.innerHTML = dc.picHTML + o.innerHTML;
		} else {
			tl.innerHTML = o.innerHTML;
		}
		dc.cssjs('add',oParent,dc.parentClass);
		if(!dc.cssjs('check',o,dc.triggerOpen)){
			if (dc.usePic) {
				tl.getElementsByTagName('img')[0].setAttribute('src',dc.closedPic);
			}
			tl.setAttribute('title',dc.closedAlt);
			dc.cssjs('add',tohide,dc.hideClass);
			dc.cssjs('remove',tl,dc.triggerOpen);
			dc.cssjs('add',tl,dc.triggerClosed);
		}else{
			if (dc.usePic) {
				tl.getElementsByTagName('img')[0].setAttribute('src',dc.openPic);
			}
			tl.setAttribute('title',dc.openAlt);
			dc.cssjs('add',tohide,dc.showClass);
			dc.cssjs('remove',tl,dc.triggerClosed);
			dc.cssjs('add',tl,dc.triggerOpen);
			dc.currentOpen=tl;
		}
		dc.addEvent(tl,'click',dc.addCollapse,false);
		oParent.replaceChild(tl,o);
		// Safari hacks 
		tl.onclick=function(){return false;}
	},
	addCollapse:function(e){
		var o=dc.getTarget(e);
		if(dc.uniqueCollapse && dc.currentOpen && o != dc.currentOpen){
			if (dc.usePic) {
				dc.currentOpen.getElementsByTagName('img')[0].setAttribute('src',dc.closedPic);
			}
			dc.currentOpen.setAttribute('title',dc.closedAlt);
			dc.cssjs('swap',dc.currentOpen.tohide,dc.showClass,dc.hideClass);
			dc.cssjs('remove',dc.currentOpen,dc.triggerOpen);
			dc.cssjs('add',dc.currentOpen,dc.triggerClosed);
		}
		if(o.tohide){
			if(dc.cssjs('check',o.tohide,dc.hideClass)){
				if (dc.usePic) {
					o.getElementsByTagName('img')[0].setAttribute('src',dc.openPic);
				}
				o.setAttribute('title',dc.openAlt);
				dc.cssjs('swap',o.tohide,dc.hideClass,dc.showClass);
				dc.cssjs('remove',o,dc.triggerClosed);
				dc.cssjs('add',o,dc.triggerOpen);
				dc.currentOpen=o;
				if (dc.scrollToBlock && o.scrollIntoView) {
					o.scrollIntoView();
				}
			}else{
				if (dc.usePic) {
					o.getElementsByTagName('img')[0].setAttribute('src',dc.closedPic);
				}
				o.setAttribute('title',dc.closedAlt);
				dc.cssjs('swap',o.tohide,dc.showClass,dc.hideClass);
				dc.cssjs('remove',o,dc.triggerOpen);
				dc.cssjs('add',o,dc.triggerClosed);
				dc.currentOpen=null;
			}
			dc.cancelClick(e);
		}
		else{
			dc.cancelClick(e);
		}
	},
	/* helper methods */
	getTarget:function(e){
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		while(!target.tohide && target.nodeName.toLowerCase()!='body'){
			target=target.parentNode;
		}
		return target;
	},
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return;
		}
		if (e){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	addEvent: function(elm, evType, fn, useCapture){
		if (elm.addEventListener) 
		{
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},
	cssjs:function(a,o,c1,c2){
		switch (a){
		  case 'swap':
			o.className=!dc.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
		  case 'add':
			if(!dc.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
		  case 'remove':
			var rep=o.className.match(' '+c1)?' '+c1:c1;
			o.className=o.className.replace(rep,'');
			break;
		  case 'check':
			return new RegExp("(^|\\s)" + c1 + "(\\s|$)").test(o.className)
			break;
		}
	}
}
dc.addEvent(window, 'load', dc.init, false);
