/**
 * Tooltip animation support
 * author: Alex Vigdor     copyright 2007 ABCNews Internet Ventures
 **/
var allTooltipsOnPage = new Object();
var ttLastEl;
var reset=true;
var defaultTTAnimDuration = 3000;
var defaultTooltipCSSClass = "tooltip";

var ttCont = document.createElement('div');
ttCont.style.position="absolute";
ttCont.style.visibility="hidden";
ttCont.style.zIndex = "-1";
//ttCont.className = "tooltip";
addOnload(function(){getBodyElement().appendChild(ttCont)});

var ttFadeH=function(val){
	if(val==0.9){
		unhideTooltip();
	}
	else if(val==0){
		hideTooltip();
	}
};//makeFadeHandler(function(){return ttCont;});
var ttAnIn = new Animation();
var ttZ = new Sequence();
ttZ.init = function(){
	if(reset){
		//setOpacity(ttCont,0);
	}
}
var ttFi = new Sequence();
ttFi.duration = 20;
ttFi.end=0.9;
ttFi.init = function(){
	document.onmousemove=null;
	if(window.lastTTabsTop!=null){
		updatePosition(window.lastTTabsTop,window.lastTTabsLeft);
	}
	
	//ttFi.start = getOpacity(ttCont);
};
ttFi.handler = ttFadeH;
var ttFo = new Sequence();
ttFo.duration = 20;
ttFo.start=0.9;
ttFo.end=0;
ttFo.handler = ttFadeH;
ttFo.init=function(){
	//ttFo.start = getOpacity(ttCont);
}

var ttAnOut = new Animation();
var ttFoc = ttFo.clone();
ttFoc.init=function(){
	//ttFoc.start = getOpacity(ttCont);
}
ttFoc.callback= function(){
	ttLastEl=null;
	document.onmousemove=null;
	hideTooltip();
}
ttAnOut.addSequence(150,ttFoc);

function createTTAnIn(duration){
	ttAnIn = new Animation();
	ttAnIn.addSequence(0,ttZ);
	ttAnIn.addSequence(300,ttFi);
	ttAnIn.addSequence(duration,ttFo);
}

function hideTooltip(){
	ttCont.style.visibility="hidden";
	ttCont.style.zIndex = "-1";
	ttCont.style.display="none";
}

function unhideTooltip(){
	ttCont.style.visibility="visible";
	ttCont.style.zIndex = "20000";
	ttCont.style.display="block";
}

function getTooltip(text,className){
	var textClass = className+text;
	if(!allTooltipsOnPage[textClass]){
		allTooltipsOnPage[textClass] = new TooltipImpl(text,className);
	}
	return allTooltipsOnPage[textClass];
}

function moveTT(evt){
if(!evt) var evt=event;
window.lastTTabsTop = absTop(evt);
window.lastTTabsLeft = absLeft(evt);
}

function updatePosition(absTop,absLeft){
	var minx = 0;
	var miny=0;
	var body = getBodyElement();
	var maxx = body.offsetWidth;
	var maxy = body.offsetHeight;
	ttCont.style.display="block";
	var width = ttCont.offsetWidth;
	var height = ttCont.offsetHeight;
	ttCont.style.display="none";
	var left = absLeft;
	var top = absTop+20;
	var pane = findPane(ttLastEl);
	if(!isEmpty(pane)){
		minx = calcPosition(pane.viewport,"Left");
		miny = calcPosition(pane.viewport,"Top");
		maxx = minx+pane.viewport.offsetWidth;
		maxy = miny+pane.viewport.offsetHeight;
	}
	if(left <minx){
		left = minx;
	}
	else if((left+width)>maxx){
		left = left-width;
		if(left < minx){
			left = maxx - width;
		}
	}	
	if(top<miny){
		top = miny;
	}
	else if((top+height)>maxy){
		top = absTop - height - 15;
		if(top < miny){
			top=miny;
		}
	}
	ttCont.style.left = left+"px";
	ttCont.style.top = top+"px";
}

function tooltip(event,element,text){
	customTooltip(event,element,text,defaultTooltipCSSClass,defaultTTAnimDuration);
}

function customTooltip(event,element,text,className,duration){
	var tooltip = getTooltip(text,className);
	
	if(element !=null && ttLastEl == element){
		reset=false;
	}
	else{
		reset=true;
	}
	ttAnIn.cancel();
	ttAnIn.reset();
	ttAnOut.cancel();
	ttLastEl = element;
	if(element != null){
		element.onmouseout = cancelTooltip;
	}
	if(reset){
		while(ttCont.firstChild != null){
			ttCont.removeChild(ttCont.firstChild);
		}
		ttCont.appendChild(tooltip.div);
		window.lastTTabsTop = null;
		window.lastTTabsLeft = null;
		updatePosition(absTop(event),absLeft(event));
		document.onmousemove = moveTT;
	}
	createTTAnIn(duration);
	ttAnIn.run();
}

function cancelTooltip(event){
	if(ttLastEl != null){
		ttLastEl.onmouseout = null;
	}
	ttAnIn.cancel();
	ttAnOut.reset();
	ttAnOut.run();
}

function TooltipImpl(text,className){
	this.text = text;
	this.div = document.createElement('div');
	this.div.className = className;
	this.div.innerHTML= text;
}

