/* mandatory */
CEDjs.Timer = {};
CEDjs.Timer.TO = null;
CEDjs.Timer.fctList = [];

CEDjs.Timer.start = function(){
	CEDjs.Timer.isRunning=true;
	CEDjs.Timer.TO = setTimeout(CEDjs.Timer.start,20);
	var nxt = 0;
	for(var i=0;i<CEDjs.Timer.fctList.length;i++){
		if(CEDjs.Timer.fctList[i] && typeof(CEDjs.Timer.fctList[i])=="object"){
			if(!CEDjs.Timer.fctList[i].fct(CEDjs.Timer.fctList[i].args))CEDjs.Timer.fctList[i]=null;
			if(nxt<i){
				CEDjs.Timer.fctList[nxt]=CEDjs.Timer.fctList[i];
				CEDjs.Timer.fctList[i]=null;
			}
			nxt++;
		}
	}
	while(!CEDjs.Timer.fctList[CEDjs.Timer.fctList.length-1] && CEDjs.Timer.fctList.length>0){CEDjs.Timer.fctList.pop();}
	if(CEDjs.Timer.fctList.length==0)CEDjs.Timer.stop();
}

CEDjs.Timer.stop = function(){
	clearTimeout(CEDjs.Timer.TO);
	CEDjs.Timer.isRunning=false;
}

CEDjs.Timer.insert = function(f,a){
	CEDjs.Timer.fctList.push({fct:f,args:a});
	if(!CEDjs.Timer.isRunning)CEDjs.Timer.start();
}
/* mandatory */

CEDjs.Timer.displace = function(o,property,startval,inc,limit,endFct,eachFct,outerText){ /*endFct, eachFct  :  not mandatory*/
	CEDjs.Timer.insert(function(a){
		a[2]+=a[3];
		if(a[3]>0 && a[2]<a[4] || a[3]<0 && a[2]>a[4]){
			a[0].style[a[1]] = (a[7]?a[7][0]:"")+a[2]+(a[7]?a[7][1]:"")+"px";
			if(a[6])a[6]();
			return true;
		}else{
			a[0].style[a[1]] = (a[7]?a[7][0]:"")+a[4]+(a[7]?a[7][1]:"")+"px";
			if(a[6])a[6]();
			if(a[5])a[5]();
			return false;
		}
	},CEDjs.Timer.displace.arguments);
}

CEDjs.Timer.appear = function(o,inc,startval,limit,endFct,eachFct){ /*startval, limit, endFct, eachFct  :  not mandatory*/
	CEDjs.Timer.insert(function(a){
		a[0].style.display="block";
		a[2]+=a[1];
		if((a[1]>0 && a[2]<a[3]) || (a[1]<0 && a[2]>a[3])){
			a[0].style.opacity=a[2]/100;
			a[0].style.filter="Alpha(Opacity="+a[2]+")";
			if(a[5])a[5]();
			return true;
		}else{
			a[0].style.opacity=a[3]/100;
			a[0].style.filter="Alpha(Opacity="+a[3]+")";
			a[0].style.display=a[3]==0?"none":"block";
			if(a[5])a[5]();
			if(a[4])a[4]();
			return false;
		}
	},CEDjs.Timer.appear.arguments);
}
