/* 
 * DOMcollapse
 * Version 3.0
 * released 06.12.2005 
 * Not for commercial reselling or use, unless consent given by the author
 * Check for updates on http://onlinetools.org and http://wait-till-i.com
 *
*/

dcqa={
	triggerqaElements:'*', 	// elements to triggerqa the effect
	parentElementIdqa:null,	// ID of the parent element (keep null if none)
	uniqueCollapseqa:false,	// is set to true only one element can be open at a time

	// CSS class names
	triggerqa:'question',
	triggerqaopen:'question_open',
	hideClassqa:'hide_qa',
	showClassqa:'show_qa',
	
	// pictures and text alternatives
	closedPic:'/images/treatmorelink_bg.gif',
	closedAlt:'expand section',
	openPic:'/images/treatmorelink_bg_up.gif',
	openAlt:'collapse section',
	/* Doesn't work with Safari
		hoverClass:'hover',
	*/

	init:function(e){
		var temp;
		if(!document.getElementById || !document.createTextNode){return;}
		if(!dcqa.parentElementIdqa){
			temp=document.getElementsByTagName(dcqa.triggerqaElements);
		} else if(document.getElementById(dcqa.parentElementIdqa)){
			temp=document.getElementById(dcqa.parentElementIdqa).getElementsByTagName(dcqa.triggerqaElements);
		}else{
			return;
		}
		dcqa.tempLink=document.createElement('a');
		dcqa.tempLink.setAttribute('href','#');
		dcqa.tempLink.appendChild(document.createElement('img'));
		for(var i=0;i<temp.length;i++){
			if(dcqa.cssjs('check',temp[i],dcqa.triggerqa) || dcqa.cssjs('check',temp[i],dcqa.triggerqaopen)){
				dcqa.maketriggerqa(temp[i],e);
			}
		}
	},
	maketriggerqa:function(o,e){
		var tl=dcqa.tempLink.cloneNode(true);
		var tohide=o.nextSibling;
		while(tohide.nodeType!=1)
		{
			tohide=tohide.nextSibling;
		}
		o.tohide=tohide;
		if(!dcqa.cssjs('check',o,dcqa.triggerqaopen)){
			dcqa.cssjs('add',tohide,dcqa.hideClassqa);
			tl.getElementsByTagName('img')[0].setAttribute('src',dcqa.closedPic);
			tl.getElementsByTagName('img')[0].setAttribute('alt',dcqa.closedAlt);
			o.setAttribute('title',dcqa.closedAlt);
		}else{
			dcqa.cssjs('add',tohide,dcqa.showClassqa);
			tl.getElementsByTagName('img')[0].setAttribute('src',dcqa.openPic);
			tl.getElementsByTagName('img')[0].setAttribute('alt',dcqa.openAlt);
			o.setAttribute('title',dcqa.openAlt);
			dcqa.currentOpen=o;
		}
		dcqa.addEvent(o,'click',dcqa.addCollapse,false);
		/* Doesn't work with Safari
		dcqa.addEvent(o,'mouseover',dcqa.hover,false);
		dcqa.addEvent(o,'mouseout',dcqa.hover,false);
		*/
		o.insertBefore(tl,o.firstChild);
		dcqa.addEvent(tl,'click',dcqa.addCollapse,false);
		// Safari hacks 
		tl.onclick=function(){return false;}
		o.onclick=function(){return false;}
	},
	/* Doesn't work with Safari
	hover:function(e){
		var o=dcqa.getTarget(e);
		var action=dcqa.cssjs('check',o,dcqa.hoverClass)?'remove':'add';
		dcqa.cssjs(action,o,dcqa.hoverClass)
	},
	*/
	addCollapse:function(e){
		var action,pic;
		// hack to fix safari's redraw bug 
		// as mentioned on http://en.wikipedia.org/wiki/Wikipedia:Browser_notes#Mac_OS_X
		if (self.screenTop && self.screenX){
			window.resizeTo(self.outerWidth + 1, self.outerHeight);    
			window.resizeTo(self.outerWidth - 1, self.outerHeight);   
		}
		if(dcqa.uniqueCollapseqa && dcqa.currentOpen){
			dcqa.currentOpen.getElementsByTagName('img')[0].setAttribute('src',dcqa.closedPic);
			dcqa.currentOpen.getElementsByTagName('img')[0].setAttribute('alt',dcqa.closedAlt);
			dcqa.currentOpen.setAttribute('title',dcqa.closedAlt);
			dcqa.cssjs('swap',dcqa.currentOpen.tohide,dcqa.showClassqa,dcqa.hideClassqa);
			dcqa.cssjs('remove',dcqa.currentOpen,dcqa.triggerqaopen);
			dcqa.cssjs('add',dcqa.currentOpen,dcqa.triggerqa);
		}
		var o=dcqa.getTarget(e);
		if(o.tohide){
			if(dcqa.cssjs('check',o.tohide,dcqa.hideClassqa)){
				o.getElementsByTagName('img')[0].setAttribute('src',dcqa.openPic);
				o.getElementsByTagName('img')[0].setAttribute('alt',dcqa.openAlt);
				o.setAttribute('title',dcqa.openAlt);
				dcqa.cssjs('swap',o.tohide,dcqa.hideClassqa,dcqa.showClassqa);
				dcqa.cssjs('add',o,dcqa.triggerqaopen);
				dcqa.cssjs('remove',o,dcqa.triggerqa);
			}else{
				o.getElementsByTagName('img')[0].setAttribute('src',dcqa.closedPic);
				o.getElementsByTagName('img')[0].setAttribute('alt',dcqa.closedAlt);
				o.setAttribute('title',dcqa.closedAlt);
				dcqa.cssjs('swap',o.tohide,dcqa.showClassqa,dcqa.hideClassqa);
				dcqa.cssjs('remove',o,dcqa.triggerqaopen);
				dcqa.cssjs('add',o,dcqa.triggerqa);
			}
			dcqa.currentOpen=o;
			dcqa.cancelClick(e);
			//document.getElementById('debug').innerHTML=o.tohide.className;
		}
		else{
			dcqa.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;
		}
		// if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;} Safari fix not needed here
		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=!dcqa.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if(!dcqa.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;
		}
	}
}
dcqa.addEvent(window, 'load', dcqa.init, false);

