/*

@name			dynamicUL
@description	transforms a UL list into a folding menu
@version		3.1a
@date			2007-06-07
@author			Olav Roth <xor@redlink.de>

*/

function dynamicUL(id,closeAuto,saveCookie){

	if(!document.getElementById)return false;
	if(typeof(id)=="object")this.id=id.id;
	if(typeof(id)=="string")this.id=id;

	this.closeAuto=closeAuto;
	this.saveCookie=saveCookie;
	this.noClose=true;

	var a=document.getElementById(this.id).getElementsByTagName('A'),f=this,l;

	if(document.cookie&&this.saveCookie){
		var t=(new RegExp("\\b"+this.id+"=([^;]+)")).exec(document.cookie);
		var u=document.getElementById(this.id).getElementsByTagName('ul');
		for(var i=0;i<u.length;i++){
			u[i].style.display=(t&&t[1]&&t[1].length==u.length&&t[1].substr(i,1)=="O"?"":"none");
			l=u[i].parentNode;
			while(l&&l.nodeName!='LI')l=l.parentNode;
			if(l.className)l.className=l.className.replace(/ ?\bopen\b/,'')+(t[1].substr(i,1)=="O"?" open":"");
			else if(t&&t[1]&&t[1].length==u.length&&t[1].substr(i,1)=="O") l.className="open";
		}
	}
	else this.closeAll();

	for(var i=0;i<a.length;i++){
		if (a[i].getAttribute('href')==window.location.href.substr(window.location.href.length-a[i].getAttribute('href').length,a[i].getAttribute('href').length)){
			if(a[i].className)a[i].className=a[i].className.replace(/ ?\bselected\b/,'')+' selected';
			else a[i].className='selected';
			l=a[i].parentNode;
			while(l&&l.nodeName!='LI')l=l.parentNode;
			if(l.className)l.className=l.className.replace(/ ?\bselected\b/,'')+' selected';
			else l.className='selected';
			this.open(a[i]);
		}

		if(a[i].addEventListener)a[i].addEventListener("click",function(e){f.click(e)},true);
		else a[i].attachEvent("onclick",function(e){f.click(e)});
	}
	return true;
}

dynamicUL.prototype.click = function(e) {

	var l=(e.target?e.target:e.srcElement);
	if(this.noClose)this.open(l);
	else{
		var p=l.parentNode;
		while(p&&p.nodeName!='LI')p=p.parentNode;
		if(p.className&&p.className.match(/\bopen\b/))this.close(l);
		else this.open(l);
	}
	if(this.saveCookie)this.save();
	return true;
}

dynamicUL.prototype.open = function(l) {

	if(typeof(l)=="string")l=document.getElementById(l);
	
	var n,s,u;

	while (l&&l.id!=this.id){
		while(l&&l.nodeName!='LI')l=l.parentNode;
		s=l.parentNode.childNodes;
		if(this.closeAuto)for(var i=0;i<s.length;i++){
			if(s[i].getElementsByTagName('UL').length){
				s[i].getElementsByTagName('UL')[0].style.display=s[i]!=l?"none":"";
				if(s[i].className)s[i].className=s[i].className.replace(/ ?\bopen\b/,'')+(s[i]!=l?"":" open");
				else if(s[i]==l)s[i].className="open";
			}
		}
		l.parentNode.style.display="";
		l=l.parentNode;
	}
	if(this.saveCookie)this.save();
	return true;
};

dynamicUL.prototype.close = function(l) {

	if(typeof(l)=="string")l=document.getElementById(l);
	while(l&&l.nodeName!='LI')l=l.parentNode;
	var p,u=l.getElementsByTagName('UL');
	for(var j=0;j<u.length;j++){
		p=u[j].parentNode;
		while(p&&p.nodeName!='LI')p=p.parentNode;
		if(p==l)u[j].style.display="none";
		if(p.className)p.className=p.className.replace(/ ?\bopen\b/,'');
	}
	if(this.saveCookie)this.save();
	return true;
};

dynamicUL.prototype.closeAll = function(l) {

	if(typeof(l)=="string")l=document.getElementById(l);
	if(l==null)l=document.getElementById(this.id);
	var p,u=l.getElementsByTagName('UL');
	for(var j=0;j<u.length;j++){
		u[j].style.display="none";
		p=u[j].parentNode;
		while(p&&p.nodeName!='LI')p=p.parentNode;
		if(p.className)p.className=p.className.replace(/ ?\bopen\b/,'');
	}
	if(this.saveCookie)this.save();
	return true;
};

dynamicUL.prototype.save = function() {

	var cookie=this.id+"=";
	var subuls=document.getElementById(this.id).getElementsByTagName('ul');
	for(var i=0;i<subuls.length;i++)cookie+=(subuls[i].style.display=="none"?"C":"O");
	var exp=new Date();
	exp.setTime(exp.getTime()+1000*60*60*24*99);
	document.cookie=cookie+";expires="+exp.toGMTString();
	return true;
};

