var cur_alpha=0;
var tcode;
var refresh_msec=20;
var tcode_obj = new Object;
var fading_obj = new Object(1);
fading_obj[0]=false;
var fadestamp_obj = new Object;
var abort_obj = new Object;


function is_opera()
{
 	if (navigator.userAgent.indexOf("Opera") != -1)
		return true;
	return false;
}

function get_opacity(obj)
{
	if (!document.all || is_opera())
	{
		if (obj.opacity)
			return obj.opacity;
		else if (obj.MozOpacity)
			return obj.MozOpacity;
	}
	else
	{
		var str = obj.filter;
		return parseFloat(str.substr(14,str.length-15))/100;
	}
}

function set_opacity(ref_id,opac)
{
  var obj;
  if (document.getElementById(ref_id))
		obj=document.getElementById(ref_id).style;
	else
		obj=parent.document.getElementById(ref_id).style;

	if (document.all && !is_opera())
	{
		obj.filter="alpha(opacity=" + 100*opac + ")";
	}
	else
	{
		obj.opacity=opac;
		obj.MozOpacity=opac;
	}
}

function fade(ref_id,start,end,time_msec,uid)
{
	if (fading_obj[uid])
	{
	 	window.clearTimeout(tcode_obj[uid]);
	}

	fading_obj[uid] = true;
 	var time = new Date();
 	fadestamp_obj[uid] = parseFloat(time.getTime());
 	fade_internal(ref_id,start,end,time_msec,uid);
}

function fade_internal(ref_id,start,end,time_msec,uid)
{
  var obj;
  if (document.getElementById(ref_id))
		obj=document.getElementById(ref_id).style;
	else
		obj=parent.document.getElementById(ref_id).style;

	var time = new Date();
	t = parseFloat(time.getTime());
	alpha = parseFloat(start) + ((t - fadestamp_obj[uid]) / time_msec) * (end-start);

	finished = (end>start) ? alpha>=end : alpha<=end;
	if (!finished)
		tcode_obj[uid] = window.setTimeout("fade_internal('"+ref_id+"','"+start+"','"+end+"','"+time_msec+"','"+uid+"')",refresh_msec);
	else
	{
	  if (end<=0)
	  {
	     obj.visibility="hidden";
			 set_opacity(ref_id,0);
	  }
		fading_obj[uid] = false;
		alpha = end;
	}
	
	set_opacity(ref_id,alpha);
}
