// JavaScript Document
function fadeobject()
{
	this.changeOpac=changeOpac;
	this.floop=floop;
	this.stopFade=stopFade;
	this.goto=goto;
	this.allFadeOut=allFadeOut;
	
	var fadeTime=1000;
	var showTime=2000;
	var objName="";
	var listObj=new Array();
	var ir=false;
	var fadeStep=new Array();
	var opaInId=new Array();
	var lIndex=0; //Index of next list
	var cIndex=0; //Index of current list
	
	this.init=function()
	{
		if(listObj.length>1)
		{
			if(fadeTime>showTime) fadeTime=showTime;
			setAllHide();
			floop();
		}
	}
	
	this.setFadeTime=function(value)
	{
		fadeTime=value;
	}
	this.setShowTime=function(value)
	{
		showTime=value;
	}
	this.addObj=function(id,script)
	{
		var arr=new Array();
		arr['id']=id;
		if(script){
			arr['script']=script;
		}else{
			arr['script']="";
		}
		listObj.push(arr);
	}
	this.setThisName=function(name)
	{
			objName=name;
	}
	function upZIndex(id)
	{
		for(var i in listObj)
		{
			document.getElementById(listObj[i]['id']).style.zIndex="0";
		}
		eval(listObj[getIndex(id)]['script']);
		document.getElementById(id).style.zIndex="1";
	}
	//set all see object become to alpha 0 as instantly.
	function setAllHide()
	{
		for(var i in listObj)
		{
			changeOpac(0,listObj[i]['id']);
		}
	}
	//set all see object become to alpha o as fading.
	function allFadeOut(skip)
	{
		if(!skip) skip=-1;
		for(var i in opaInId)
		{
			if(opaInId[i]>0)
			{
				if(skip==i) continue;
				
				opacity(i,opaInId[i],0,fadeTime);
			}
		}
	}
	//run loop for fading each step.
	function floop()
	{
		opacity(listObj[cIndex]['id'],opaInId[listObj[cIndex]['id']],0,fadeTime);
		cIndex=lIndex;
		
		upZIndex(listObj[lIndex]['id']);
		opacity(listObj[lIndex]['id'],opaInId[listObj[lIndex]['id']],100,fadeTime);
		
		lIndex++;
		if(lIndex>=listObj.length) lIndex=0;
		
		fadeStep[fadeStep.length]=setTimeout(objName+".floop()",showTime);
	}
	//opearte object fading.
	function opacity(id, opacStart, opacEnd, millisec) 
	{ 
		//speed for each frame 
		var speed = Math.round(millisec / 100); 
		var timer = 0; 
		
		//determine the direction for the blending, if start and end are the same nothing happens 
		if(opacStart > opacEnd) { 
			for(i = opacStart; i >= opacEnd; i--) { 
				fadeStep[fadeStep.length]=setTimeout(objName+".changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
				timer++; 
			} 
		} else if(opacStart < opacEnd) { 
			for(i = opacStart; i <= opacEnd; i++) 
				{ 
				fadeStep[fadeStep.length]=setTimeout(objName+".changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
				timer++; 
			} 
		} 
	} 
	//change the opacity for different browsers 
	function changeOpac(opacity, id)
	{ 
		var object = document.getElementById(id).style; 
		object.opacity = (opacity / 100); 
		object.MozOpacity = (opacity / 100); 
		object.KhtmlOpacity = (opacity / 100); 
		object.filter = "alpha(opacity=" + opacity + ")";
		opaInId[id]=opacity;
		
		//document.getElementById("s"+id).innerHTML=opaInId[id];
	}
	function stopFade()
	{
		for(var i in fadeStep)
		{
			clearTimeout(fadeStep[i]);
		}
	}
	function goto(id)
	{
		stopFade();
		allFadeOut(id);
		
		lIndex=getIndex(id);
		cIndex=getIndex(id);
		upZIndex(id);
		opacity(id,opaInId[id],100,fadeTime);
		
		lIndex++;
		if(lIndex>=listObj.length) lIndex=0;
		
		fadeStep[fadeStep.length]=setTimeout(objName+".floop()",showTime);
	}
	
	function getIndex(id)
	{
		for(var i in listObj)
		{
			if(id==listObj[i]['id']) return i;
		}
	}
}

