/* global functions */

if(LJAnimation==undefined) var LJAnimation={
	
	//declare variables
	arrFadeElements:new Array(), //array of elements undergoing fade animation
	arrFadeIntervals:new Array(), //array of timer intervals fading the elements above
	intFadeTime:1000, //default fade time in milliseconds
	intFadePercent:3, //default percent to change at each step
	
	//fade functions
	
	//fade an element in
	fadeIn:function(ele,intTime,intPercent)
	{
		//set default values
		if(!intTime)
		{
			intTime=this.intFadeTime;
		}
		if(!intPercent)
		{
			intPercent=this.intFadePercent;
		}
		
		//return interval object so fade can be cancelled manually
		return this.fade(ele,intTime,intPercent);
	},
	
	//fade an element out
	fadeOut:function(ele,intTime,intPercent)
	{
		//set default values
		if(!intTime)
		{
			intTime=this.intFadeTime;
		}
		if(!intPercent)
		{
			intPercent=this.intFadePercent;
		}
		
		intPercent=intPercent*-1;
		
		//return interval object so fade can be cancelled manually
		return this.fade(ele,intTime,intPercent);
	},
	
	//fade an element in or out (pass negative percent to fade out)
	fade:function(ele,intTime,intPercent)
	{
		//declare variables
		var intIndex=null;
		var objInterval=null;
		
		//check if element has undergone any fade
		for(var i=0;i<this.arrFadeElements.length;i++)
		{
			if(this.arrFadeElements[i]==ele)
			{
				//cancel current fade
				clearInterval(this.arrFadeIntervals[i]);
				//store current index
				intIndex=i;
				
				break;
			}
		}
		//check if index has been set (above)
		if(intIndex==null)
		{
			//set new fade index
			intIndex=this.arrFadeElements.length;
			//store element for new fade
			this.arrFadeElements[intIndex]=ele;
		}
		
		//set interval
		this.arrFadeIntervals[intIndex]=setInterval("LJAnimation.fadeStep("+intIndex+","+intPercent+");",intTime/(100/Math.abs(intPercent)));
	
		//return interval object so fade can be cancelled manually
		return this.arrFadeIntervals[intIndex];
	},
	
	//perform one step in the fade animation
	fadeStep:function(intIndex,intPercent)
	{
		//calculate intended opacity
		var intOpacity=this.getOpacity(this.arrFadeElements[intIndex])+intPercent;
		//set opacity
		this.setOpacity(this.arrFadeElements[intIndex],intOpacity);
		
		//check for end of animation
		if(intOpacity<=0 || intOpacity>=100)
		{
			clearInterval(this.arrFadeIntervals[intIndex]);
		}
	},
	

	//set the opacity of an element
	setOpacity:function(ele, intOpacity)
	{
		//limit passed opacity value to between 0 and 100
		if(intOpacity<0)
		{
			intOpacity=0;
		}
		else if(intOpacity>100)
		{
			intOpacity=100;
		}
		
		//set display
		if(intOpacity>0)
		{
			ele.style.display="block";
		}
		else
		{
			ele.style.display="none";
		}
		ele.style.position="absolute";
		
		//set opacity
		//ele.style.filter="alpha(opacity="+intOpacity+")"; //IE deprecated
		ele.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+intOpacity+")"; //IE
		ele.style.MozOpacity=intOpacity/100; //Mozilla/Netscape
		ele.style.opacity=intOpacity/100; //Opera + W3C standard
		
		if(intOpacity==100)
		{
			if(isSafari())
			{
				ele.style.opacity=.9999; //objects in Safari disappear at 100 opacity (for some unknown reason)
			}
		}
	},
	
	//return the current opacity of an element
	getOpacity:function(ele)
	{
		//check if opacity has been set
		if(!ele.style.opacity && ele.style.filter.indexOf("opacity") == -1)
		{
			//return 100% as default current opacity
			return 100;
		}
		else
		{
			return ele.style.opacity*100;
		}
	},

	//load an image into the browser's cache for faster access later
	imagePreload:function(strSrc)
	{
		var img=document.createElement("img");
		img.src=strSrc;
	},

	//detect if browser is Safari
	blnIsSafari:null,
	
	isSafari:function()
	{
		//declare variables
		var returnValue=false;
		
		//check if browser has been determined already
		if(this.blnIsSafari!=undefined)
		{
			returnValue=this.blnIsSafari;
		}
		else
		{
			if(navigator.vendor)
			{
				if(navigator.vendor.indexOf("Apple") != -1)
				{
					returnValue=true;
				}
			}
		}
		
		return returnValue;
	}

}