﻿function Fade(obj, opacity_begin, opacity_end, tick)
{
	if (!obj.id)
	{
		obj.id = obj.tagName + "generated_id_" + (Math.random()); 
	} 

	if (obj.fadetimer)
	{
		clearInterval(obj.fadetimer); 
		obj.fadetimer = null; 
	}
	
	obj.endopacity =  opacity_end; 
	if (!obj.fadeopacity)
	{     
		obj.fadeopacity = opacity_begin;
	}
	else
	{
		if (opacity_end - opacity_begin > 0 && obj.fadeopacity < opacity_begin)
		{
			obj.fadeopacity = opacity_begin;
		}
		else if(opacity_end - opacity_begin < 0 && obj.fadeopacity > opacity_begin)
		{
			obj.fadeopacity = opacity_begin;
		}
	}   
	
	if (opacity_begin == 0)
	{
		obj.style.display = "inline"; 
	}    
	
	obj.fadetimer =  setInterval(new Function("changeOpacity('" + obj.id +"')"), tick ? tick : 10);
}

/*
改變透明度
   內部方法，計時器執行時代碼
*/
function changeOpacity(id){
	var obj = $id(id);

	if (obj.endopacity > obj.fadeopacity)
	{ 
		if (obj.fadeopacity < obj.endopacity - 9)
		{
			obj.fadeopacity += 10;
			if (obj.filters)
			{
				obj.style.filter = "alpha(opacity=" + obj.fadeopacity +")";
			}
			else
			{
				obj.style.opacity = obj.fadeopacity / 100; 
			}
		}
		else
		{
			clearInterval(obj.fadetimer); obj.fadetimer = null;
		}
	}
	else
	{
		if (obj.fadeopacity > obj.endopacity + 9)
		{
			obj.fadeopacity -= 10;
			if (obj.filters)
			{
				obj.style.filter = "alpha(opacity=" + obj.fadeopacity +")";
			}
			else
			{
				obj.style.opacity = obj.fadeopacity / 100; 
			}
		}
		else
		{
			if (obj.fadeopacity == 0)
			{
				obj.style.display = "none";
			}
			clearInterval(obj.fadetimer); obj.fadetimer = null;
			if (obj.fadetoclose)
			{
				RemoveTag(obj);
			}
		} 
	}   
}

function FadeToClose(obj, opacity_begin, opacity_end, tick)
{
	obj.fadetoclose = true;
	Fade(obj, opacity_begin, opacity_end, tick);
}
