// Tools für den Themeneistieg
// CMAppKit Navigation.js muss schon geladen sein...

var aktiverEinstieg = null;
var posx=-1,posy=-1;

var openingId=null;

var rememberedFutureOpeningId=null;

// class Group
// constructor
function Group(id) {
	this.id=id;
	this.opening=false;
	this.cancel=false;
}

Group.prototype.id;
Group.prototype.opening;
Group.prototype.cancel;

Group.prototype.cancelOpen=function() {
	if (this.opening==true) {
		this.cancel=true;
		// this.opening=false;
	}
}

Group.prototype.open=function() {
	if (this.cancel==true && this.opening==true) {
		this.cancel=false;
		return;
	}
	if (this.opening==true) {
		return;
	}
	this.cancel=false;
	this.opening=true;
	
	var elem=this;
	window.setTimeout(function() {
		var oPosX=posx;
		var oPosY=posy;
		
		if (abs(oPosX-posx)+abs(oPosY-posy)<4) {
			if (elem.cancel==true) {
				elem.cancel=false;
			} else {
				oeffneThema(elem.id);
			}
		}
		elem.opening=false;
	}, initialDelay);
	
	
}


var move = function(e) {
	if(!e) e = window.event;
	posx = e.pageX ? e.pageX : e.clientX + window.document.documentElement.scrollLeft;
	posy = e.pageY ? e.pageY : e.clientY + window.document.documentElement.scrollTop;
	// document.write("x="+posx+" y="+posy);
	return false
}

document["onmousemove"]=move;

function delay(time) {
	var sDate = new Date();
	
	var eMsec = sDate.getTime()+time;
	
	var oPosX=posx;
	var oPosY=posy;
	
	while (true) {
		var cDate=new Date();
		if (abs(oPosX-posx)+abs(oPosY-posy)>4) {
			return false;
		}
		if (cDate.getTime()>eMsec) {
			break;
		}
	}
	return true;
}

function abs(x) {
	if (x<0) {
		return -x;
	}
	return x;
}

function oeffneThema(id) {
	if (openingId!=null) {
		rememberedFutureOpeningId=id;
		return;
	}
	openingId=id;
	if (aktiverEinstieg!=null) {
		if (id==aktiverEinstieg[0]) {
			openingId=null;
			return;
		}
	}
	// schliesseOffneThemen();
	
	ankerNode = document.getElementById(id);
	ankerNode.className += " active";
		
	// showElementById(id);
	openItem(ankerNode);
	
	aktiverEinstieg = new Array();
	aktiverEinstieg.push(id);
	
}

function schliesseOffneThemen() {
	if(aktiverEinstieg!=null) {
		var i;
		for (i=0; i<aktiverEinstieg.length; i++) {
			// hideElementById(aktiverEinstieg[i]);
			ankerNode = document.getElementById(aktiverEinstieg[i]);
			closeItem(ankerNode);
			//var className=ankerNode.className.replace(" active", "");
			//ankerNode.className = className;
		}
		aktiverEinstieg = null;
	}
}


function closeItem(elem) {
	doHeightChangeMem(elem,endHeight,startHeight);
}

function openItem(elem) {
	doHeightChangeMem(elem,startHeight,endHeight);
}


function doHeightChangeMem(elem,startHeight,endHeight) {
	//Height changer with Memory by www.hesido.com
	if (elem.heightChangeMemInt) window.clearInterval(elem.heightChangeMemInt);
	var actStep = 0;
	var closeElem=null;
	if (aktiverEinstieg!=null) {
		closeElem=aktiverEinstieg[0];
	}
	elem.heightChangeMemInt = window.setInterval(
												function() {
													// document.write("sleepover with "+startHeight+", "+endHeight+", "+steps+", "+actStep+", ",powr);
													var currentHeight = easeInOut(startHeight,endHeight,steps,actStep,powr);
													elem.style.height = currentHeight+"px";
													
													if (closeElem!=null) {
														ankerNode = document.getElementById(closeElem);
														s=""+(endHeight-currentHeight);
														ankerNode.style.height=s+"px";
													}
													
													actStep++;
													if (actStep > steps) {
														window.clearInterval(elem.heightChangeMemInt);
														//document.write("finished");
														openingId=null;
														if (rememberedFutureOpeningId!=null) {
															oeffneThema(rememberedFutureOpeningId);
															rememberedFutureOpeningId=null;
														}
													}
												}
												,interval)
		
}

function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
	//Generic Animation Step Value Generator By www.hesido.com
	var delta = maxValue - minValue;
	var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
	return Math.ceil(stepp)
}
