var offsetDistance=16;
var ToolTipEvents = {
	offsetLeft : (-offsetDistance),
	offsetTop : (-offsetDistance),
	direction : ('left'),
	posRef : function(){
		return (
			(document.documentElement.scrollTop)?
				document.documentElement : document.body
			);
	},
	showTooltip : function(e){
		ToolTipEvents._cleanup();
		BubbleTips.bubbleNode.appendChild(this.tooltip);
		Effects.fadeIn(this.tooltip,BubbleTips.opacity);
		ToolTipEvents.followMouse(e);
	},
	hideTooltip : function(e){
		Effects.fadeOut(this.tooltip, ToolTipEvents._cleanup);
	},
	followMouse : function(e, direction){
		if(e == null){ e = window.event };
		var posx = ToolTipEvents.offsetLeft;
		var posy = ToolTipEvents.offsetTop;
		//alert(ToolTipEvents.direction);
		if(ToolTipEvents.direction=='right'){
			posy =0;
			posy = -BubbleTips.bubbleNode.clientHeight-offsetDistance;
			posx = offsetDistance;
		}else
		{
			posy -=BubbleTips.bubbleNode.clientHeight;
			posx -=BubbleTips.bubbleNode.clientWidth;

		}
		if(e.pageX || e.pageY){
			posx += e.pageX;
			posy += e.pageY;
		} else if(e.clientX || e.clientY) {
			posx += e.clientX + ToolTipEvents.posRef().scrollLeft;
			posy += e.clientY + ToolTipEvents.posRef().scrollTop;
		}
		BubbleTips.bubbleNode.style.top  = (posy) + "px";
		BubbleTips.bubbleNode.style.left = (posx) + "px";
	},
	_cleanup : function(){
		var bubble = BubbleTips.bubbleNode;
		if( bubble.childNodes.length > 0 ){
			bubble.removeChild(bubble.firstChild);
		}
	}
};

var Effects = {
	fadeIn : function (elem,maxOpac){
		elem.fadeIn = Effects._fadeIn;
		elem.maxOpac = maxOpac;
		elem.curOpac = 0;
		this.cancelCurrent();
		elem.fadeIn();
	},
	fadeOut : function (elem,fadeDoneF){
		elem.fadeOut = Effects._fadeOut;
		elem.fadeOutDone = fadeDoneF;
		this.cancelCurrent();
		elem.fadeOut();
	},
	cancelCurrent : function() {
		clearTimeout(window.evtId);
	},
	_fadeIn : function() {
		if( (+this.curOpac) < (+this.maxOpac) ){
			this.curOpac = (+this.curOpac)+(0.08);
			Effects.setOpacity(this,this.curOpac);
			window.fadeInElem = this;
			window.evtId = setTimeout(function(){this.fadeInElem.fadeIn()},30);
		} else {
			Effects.setOpacity(this,this.maxOpac);
			window.fadeInElem = null;
		}
	},
	_fadeOut : function() {
		if( (+this.curOpac) > 0 ){
			this.curOpac = Math.max(0,(+this.curOpac)-(0.08));
			Effects.setOpacity(this,this.curOpac);
			window.fadeOutElem = this;
			window.evtId = setTimeout(function(){this.fadeOutElem.fadeOut()},30);
		} else if(this.fadeOutDone) {
			this.fadeOutDone();
			window.fadeOutElem = null;
		}
	},
	setOpacity : function (elem,opac){
		elem.style.filter="alpha(opacity:"+ ((+opac)*100) +")";
		elem.style.KHTMLOpacity=opac;
		elem.style.MozOpacity=opac;
		elem.style.opacity=opac;
	}
};
function getElementsByClass(node,searchClass,tag) {
  var classElements = new Array();
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("\b"+searchClass+"\b");
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
return classElements;
}
var BubbleTips = {
	opacity : "0.99",
	bubbleNode : null,
	activateTipOn : function(type,searchClass, colorClass, direction){
		colorClass=colorClass||"grayColor";
		direction = direction||"right";
		var bubble = document.createElement("span");
		bubble.style.position = "absolute";
		bubble.style.zIndex = "9";
		
		this.bubbleNode = bubble;
		document.getElementsByTagName("body")[0].appendChild(bubble);
 		var els = document.getElementsByTagName(type);
		var elsLen = els.length;
// 		alert(elsLen);
		var tipTags = new Array();
		var pattern = new RegExp(searchClass,"i");
		
		for (i = 0, j = 0; i < elsLen; i++) {
		  if ( pattern.test( els[i].className)) {
				    tipTags[j] = els[i];
				    j++;
//				    alert(els[i].className);
				  }
			
		}
		
		//alert(tipTags.length);
		for(var i=0;i<tipTags.length;i++){
			this.bindBubbleTip(tipTags[i], colorClass,direction);
		}
	},
	bindBubbleTip : function(elem, colorClass, direction) {
		var tipText=elem.getAttribute("title");
		if(tipText==null || tipText.length==0){
//			tipText="No title attribute, how sad :-(";
			return;
		}
		elem.removeAttribute("title");
		var bubble = this.createElem("span","bubbleTooltip");
		bubble.className += " " +colorClass;
		var tipTop = this.createElem("span","top");
		var tipTopMiddle = this.createElem("span","middle");
		var tipTopMiddleWrapper=this.createElem("span","");
		tipTopMiddleWrapper.appendChild(document.createTextNode(tipText));
		tipTopMiddle.appendChild(tipTopMiddleWrapper);
		bubble.appendChild(tipTop);
		bubble.appendChild(tipTopMiddle);
		bubble.appendChild(this.createElem("span","bottom"));
//		Effects.setOpacity(bubble,this.opacity);
		
		elem.tooltip = bubble;
		ToolTipEvents.direction=direction;
		elem.onmouseover = ToolTipEvents.showTooltip;
		elem.onmouseout  = ToolTipEvents.hideTooltip;
		elem.onmousemove = ToolTipEvents.followMouse;
	},
	createElem : function(tag,className){
		var elem = document.createElement(tag);
		elem.className = className;
		elem.style.display = "block";
		return elem;
	}
};


