// script (c) copyright http://www.aleto.ch christian krebs aka aleto 01/12/2004

var cnFolder='folder';
var cnOpen='open';
var cnClose='close';
var refIntervals;
var refRollback;

var defaultIter=20;
var defaultIterTime=10;
var startRad=3;
var scaleX=-0.5;

var switcher=[[cnClose, new RegExp(cnOpen, '')],[cnOpen, new RegExp(cnClose, '')]];
var reFolder=new RegExp(cnFolder,'');

function addClass(ele, string) {
	if(!new RegExp(string,'').test(ele.className))
		ele.className=(ele.className?ele.className+' ':'')+string;
}

function removeClass(ele, string) {
	ele.className=ele.className.replace(new RegExp(' ?'+string,''),'');
}

function resetCN (ele, index) {
	if(switcher[index][1].test(ele.className)) 
		ele.className=ele.className.replace(switcher[index][1], switcher[index][0]);
}

function createFolderTree(ele){
	var lis=ele.getElementsByTagName('li'), li, i;
	for(i=0; li=lis[i]; i++) 
		if(li.getElementsByTagName('ul')[0]) addClass(li, cnFolder + ' ' + cnClose);
}

function closeMenus(ele,thisNot) {
	var liArr=ele.getElementsByTagName('li'), liEle, i;
	for (i=0; liEle=liArr[i]; i++) 
		if(liEle!=thisNot && reFolder.test(ele.className)) resetCN (liEle, 0);
}

function IntervalHandler(name){
	this.store=[];
	this.name=name;
	this.set=function(ele, fn, time){
		var i=0;
		while(this.store[i]) i++;
		this.store[i]={};
		this.store[i].ele=ele;
		this.store[i].fn=fn;
		if(!this.run) this.start();
		return i;
	}
	this.clear=function(index){delete(this.store[index])}
	this.goStep=function(){
		var i=0, noFn=true;
		for(i=0; i<this.store.length; i++) {
			if(this.store[i]) {
				this.store[i].fn(this.store[i].ele);
				noFn=false;
			}
		}
		if(noFn) this.stop();
	}
	this.stop=function(){
		clearInterval(this.interval);
		this.run=false;
	}
	this.start=function(){
		this.interval=setInterval(this.name+'.goStep()', defaultIterTime);
		this.run=true;
	}				
}


function prepareRollOut (ele, bol) {
	refRollback.prepare(ele.parentNode, (bol?ele:0));
	if(reFolder.test(ele.className) && bol) {
		resetCN(ele, 1);
		ele=ele.getElementsByTagName('ul')[0];
		var ref=ele;
		if(!ele.run && !ele.out) {
			ele.out=true;
			ele.storeHeight=ele.offsetHeight;
			ele.storeWidth=ele.offsetWidth;
			ele.style.height='0px';
			scroll(ele,2,'height',0,ele.scrollHeight,'overflow','visible', function(){getFolderNames(ref)});
		}
	}		
}

function RollbackHandler(){
	this.store=[];
	this.prepare=function(ele, thisNot) {
		var uls=ele.getElementsByTagName('ul'), i, ul;
		for (i=0; ul=uls[i]; i++)
		{
			if(ul.parentNode!=thisNot && ul.out) 
			{
				this.set(ul);
			}
		}
		this.check();
	}
	this.set=function(ele){
		var i=0;
		while(this.store[i]) i++;
		this.store[i]=ele;
	}
	this.checkForChildOut=function(ele) {
		var uls=ele.getElementsByTagName('ul'), child, run=true, i;
		for(i=0; (child=uls[i]) && run; i++) if(child.out) run=false;
		return run;
	}
	this.atRollEnd=function (){
		resetCN (this.parentNode, 0);
		closeMenus(this,0);
		giveKick();
		refRollback.check();
	}
	this.check=function() {
		var i;
		for(i=0; i<this.store.length; i++) {
			if(this.store[i]) {
				if(this.checkForChildOut(this.store[i])) {
					this.store[i].out=false;
					this.store[i].removeAttribute('style');
					scroll(this.store[i],2,'height',this.store[i].scrollHeight,0,0,0,this.atRollEnd);
					delete(this.store[i]);
				}
			}
		}
	}
}

function scroll(ele, start, property, from, to, endProperty, valueEndProperty, fn) {		
	if(start) {	
		if(start==2) ele.clearStyle=1;
		else ele.clearStyle=0;
		ele.from=from;
		ele.to=to;		
		ele.property=property;
		ele.iterValue='px';
		if(endProperty) {
			ele.endProperty=endProperty;
			ele.valueEndProperty=valueEndProperty;
		} else ele.endProperty=null;
		if(fn) ele.fn=fn;
		else ele.fn=null;
		ele.curr=ele.from;
		if(ele.from<ele.to) ele.how=1;
		else ele.how=-1;
		ele.distance=(ele.from-ele.to)*-1*ele.how;
		ele.percent=0;
		ele.iter=Math.ceil(defaultIter*ele.distance/100*Math.pow(defaultIter/ele.distance,.5));
		ele.startRad=startRad;
		ele.distanceRad=(180-2*ele.startRad);
		ele.actIter;
		ele.corrIter=0;
		if(ele.run) return;
		else ele.run=true;
		ele.interval=refIntervals.set(ele, function(ele){scroll(ele)});
	}	
	ele.percent=(ele.curr-ele.from)*ele.how/ele.distance;
	ele.corrIter=scaleX*Math.sin(ele.percent*Math.PI);
	if((ele.actIter=Math.ceil(ele.iter*Math.sin((ele.startRad+ele.percent*ele.distanceRad)/180*Math.PI+ele.corrIter)))<=0) ele.actIter=1;
	ele.curr+=ele.how*ele.actIter;
	if(ele.curr*ele.how<ele.to*ele.how) {
		ele.style[ele.property]=ele.curr+ele.iterValue;
	}
	else {
		ele.style[ele.property]=ele.to+ele.iterValue;
		if(ele.clearStyle) ele.removeAttribute('style');
		if(ele.endProperty) 
			ele.style[ele.endProperty]=ele.valueEndProperty;
		if(ele.fn) ele.fn();
		refIntervals.clear(ele.interval);
		ele.run=false;
	}
}

// update 04.01.06 ck

var getFolderNames=function(ele)
{
	setCookie('openFolder', ele.parentNode.getElementsByTagName('h2')[0].firstChild.nodeValue);
}

var prepareSetOpenedFolders=function()
{
	var title=getCookie('openFolder'), h2s=null, pointer=null, i=0;
	if(title)
	{
		h2s=document.getElementsByTagName('h2');
		for( ; (pointer=h2s[i]) && (pointer.firstChild) && (title!=pointer.firstChild.nodeValue); i++);
    if(pointer)
    {
      pointer=pointer.parentNode;
      setOpenedFolder(pointer);
      while(/^li$/i.test(pointer.parentNode.parentNode.nodeName))
      {
        setOpenedFolder(pointer=pointer.parentNode.parentNode);
      }
    }
	}
}

var setOpenedFolder=function(ele)
{
	resetCN(ele, 1);
	ele=ele.getElementsByTagName('ul')[0];
	ele.out=true;
	ele.style.overflow='visible';
}

var setCookie=function(name, value, time) 
{
  if(!time) time=360*24*60*60*1000;
	document.cookie = name+"="+encodeURIComponent(value)+
		"; expires="+(new Date(new Date().getTime()+time)).toGMTString()+"; path=/";
}

var getCookie=function(name) 
{
	if( new RegExp(name+'\=([^;]*);','').test(document.cookie+';') ) 
    return decodeURIComponent(RegExp.$1);
	return null;
}

window.onload=function (e) {
	if( document.getElementById && document.getElementsByTagName &&
			((e && e.target) || ( event && typeof event.srcElement=='object' && 
				((navigator.userAgent.replace(/^.*MSIE ([0-9.]*)[^0-9].*$/i,'$1')-0) > 5.5) )) ){
		refIntervals=new IntervalHandler('refIntervals');
		refRollback=new RollbackHandler();
		var tree=document.getElementsByTagName('ul')[0];
		createFolderTree(tree);
		tree.onclick=function (e) {
			var ele=( ( e && e.target ) || ( event && event.srcElement ) ), i, toDo, liArr, liEle;
			if(/h2/i.test(ele.nodeName)) {
				while(ele.parentNode && !/li/i.test(ele.nodeName) ) ele=ele.parentNode;
				if(/li/i.test(ele.nodeName) && reFolder.test(ele.className)) 
					prepareRollOut(ele, switcher[1][1].test(ele.className));
			}
			if(/a/i.test(ele.nodeName) && ele.parentNode.parentNode.parentNode.id=='contact') {
				location.href=eval('\'/6dai/6cto/3ach/72i/73ti/61n/2dk/72ebs/40blue/77in/2ech\''.replace(/\/(..)/g,'\\u00$1'));
				return false;
			}
		}
		tree.onmouseover=function (e) {
			var ele=( e && e.target ) || ( event && event.srcElement );
			if(/h2/i.test(ele.nodeName)) addClass(ele, 'over');
		}

		tree.onmouseout=function (e) {
			var ele=( e && e.target ) || ( event && event.srcElement );
			if(/h2/i.test(ele.nodeName)) removeClass(ele, 'over');
		}
		prepareSetOpenedFolders();
		giveKick();
	}
}

function giveKick() {if(window.opera) document.body.className=document.body.className;}