
var ToolTip = {
	m_layer: 'tooltip',
	m_class: 'tooltip',
	pos_mode: 'top',
	m_pad: 10,
	_getBox: function(){
		if($(ToolTip.m_layer)) return $(ToolTip.m_layer);
		var div = document.createElement('div');
		div.setAttribute('id', ToolTip.m_layer);
		setStyle(div, 'z-index', 100000);
		setStyle(div, 'position', 'absolute');
		Element.addClassName(div, ToolTip.m_class);
		var head = document.createElement('div');
		head.setAttribute('id', ToolTip.m_layer  + '_head');
		Element.addClassName(head, ToolTip.m_class + '_head');
		div.appendChild(head);
		var body = document.createElement('div');
		body.setAttribute('id', ToolTip.m_layer  + '_body');
		Element.addClassName(body, ToolTip.m_class + '_body');
		div.appendChild(body);
		document.body.appendChild(div);
		return div;
	},
	follow: function(event){
		var d = ToolTip._getBox();
		if(!d) return false;
		//move to mouse pos;
		event = event || window.event;
		var ele = event.target || event.srcElement;
		var s_ele = ele;
		if (ele && ele.nodeType == 3) // defeat Safari bug
			ele = ele.parentNode;
		var mode;
		if(!mode) mode = ToolTip.pos_mode;
		
		var eleR = Position.getRectangle(ele);
				
		var rec = Position.getRectangle(d);
		//alert(eleR['border'] + " " + rec['border'] + " " + eleR['x'] + " " +  eleR['height']);
		//alert(rec['padding'] + " " + rec['margin'] + " " + rec['width'] + " " + rec['height'] + " " + rec['x'] + " " +rec['y']);
		var x = parseInt(event.pageX || event.clientX);
		var y = parseInt(event.pageY || event.clientY);
		
		if(mode == 'top'){
			y -=  rec['height'] + eleR['height'];
			x -=  rec['width'] + eleR['width'];
		}else if(mode == 'bottom'){
			y +=  rec['height'] + eleR['height'];
			x +=  rec['width'] + eleR['width'];
		}else if(mode == 'mouse_bottom'){
			y +=  eleR['height'];
			x +=  eleR['width'];
		}else if(mode == 'ele_bottom'){
			y =  eleR['height'] +  eleR['y'] + rec['padding']  + eleR['padding'] + rec['border'] + eleR['border'];
		}else if(mode == 'ele_bottom_left'){
			y =  eleR['height'] +  eleR['y'] + rec['border'] + eleR['border'] + rec['padding'] + eleR['padding'];
			x =  eleR['x'] + rec['border'] + eleR['border'] + rec['padding'] + eleR['padding'];
		}else if(mode == 'ele_bottom_right'){
			y =  eleR['height'] +  eleR['y'] + rec['padding'] + eleR['padding'] + rec['border'] + eleR['border'];
			x =  eleR['width'] +  eleR['x'] + rec['padding'] + eleR['padding'] + rec['border'] + eleR['border'];
		}else if(mode == 'ele_top_right'){
			y =  eleR['y'] + rec['padding'] + eleR['padding'] + rec['border'] + eleR['border'];
			x =  eleR['width'] +  eleR['x'] + rec['padding'] + eleR['padding'] + rec['border'] + eleR['border'];
		}else if(mode == 'ele_right'){
			y =  eleR['y'] + rec['padding'] + eleR['padding'] + rec['border'] + eleR['border'];
			x =  eleR['width'] +  eleR['x'] + rec['padding'] + eleR['padding'] + rec['border'] + eleR['border'];
		}else if(mode == 'follow'){
			y +=5;
			x+= 5;
		}
		
		//if larger the screen push it back
		var botTop = [ window.innerWidth  || document.body.clientWidth, window.innerHeight || document.body.clientHeight];
		botTop[0] += window.pageXOffset ||
				document.documentElement.scrollLeft 
                || document.body.scrollLeft 
                || 0;
		botTop[1] += window.pageYOffset 
                || document.documentElement.scrollTop 
                || document.body.scrollTop 
                || 0;
		//the 30 and 10 are the 'grace' padding as in some browsers the scroll bar
		// is included in the page w and h
		if(x + rec['width'] > (botTop[0] - 30)){
			x = botTop[0] - 30 - rec['width'];
		}
		if(x < 0) { x = 30 }
		if(y + rec['height'] > (botTop[1] - 10)){
			y = botTop[1] - 10 - rec['height'];
		}
		if(y < 0) { y = 10 }
		setStyle(d, 'left', x + 'px');
		setStyle(d, 'top', y + 'px');
	},
	show: function(event, msg, title, mode){
		var d = ToolTip._getBox();
		if(!d) return false;
		if(d.on) return true;
		d.on = true;
		if(!mode) mode = ToolTip.pos_mode;
		ToolTip.pos_mode = mode;
		
		
		var ele = event.target || event.srcElement;
		var s_ele = ele;
		if (ele && ele.nodeType == 3) // defeat Safari bug
			ele = ele.parentNode;
		
		setStyle(ele, 'cursor', 'hand');
		setStyle(ele, 'cursor', 'pointer');
		Event.observe(ele, 'mouseout', ToolTip.hide, false);	
		Event.observe(s_ele, 'mouseout', ToolTip.hide, false);	
		if(mode == 'follow') 
			Event.observe(document, 'mousemove', ToolTip.follow, false);
		
					
		setStyle(d, 'display', 'block');
		if($(ToolTip.m_layer + '_head')){
			$(ToolTip.m_layer + '_head').innerHTML = title;
		}
		if($(ToolTip.m_layer + '_body')){
			$(ToolTip.m_layer + '_body').innerHTML = msg;
		}
		if(document.haveEffect)
			Effect.Appear(d, {duration: 0.4});
			
		ToolTip.follow(event);
		return true;
	},
	hide: function(event){
		if(!$(ToolTip.m_layer)) return;
		
		event = event || window.event;
		var ele = event.target || event.srcElement;
		// defeat Safari bug (in inner text bits)
		if (ele && ele.nodeType == 3 && ele.parentNode.className.match(/tooltip/)) 
			return;
		
		if(ToolTip.timer)	clearTimeout(ToolTip.timer);
		ToolTip.timer = setTimeout(
			function(){
				Element.hide($(ToolTip.m_layer));
				$(ToolTip.m_layer).on = false;
			} , 0);
		return true;
	}
};

/** acts like a little bubble over an href
var BubbleTip = Class.create();

BubbleTip.prototype = {
	class: "bubble_details",
	bg_dn: global_ctheme + "bubble_dn.png",
	bg_up: global_ctheme + "bubble_up.png",
	m_div_class: 'bubble_tip_div',
	m_div_id: 'bubble_tip_id',
	
	init: function(){
		var bits = document.getElementsByClassName(BubbleTip.prototype.class);
		for(var i=0; i < bits.length; i++){
			Event.observe(bits[i], 'click', BubbleTip.prototype.showBubble, false);
			//Event.observe(bits[i], 'mouseout', BubbleTip.prototype.hideBubble, false);
		}
	},
	makeElement: function(id){
		if($(id)){
			$(id).parentNode.removeChild($(id));
		}
		var m_div=document.createElement("div");
		m_div.id = id;
		return m_div;
	},
	showBubble: function(event){
		var ele = event.target || event.srcElement;
		var m_div = BubbleTip.prototype.makeElement(BubbleTip.prototype.m_div_id)
		var x = Event.pointerX(event);
		var y = Event.pointerY(event);
		var m_bg = BubbleTip.prototype.bg_dn;
		var bW = 220;
		var bH = 170;
		//if it will scroll off screen use the top bubble
		var botTop = [ window.innerWidth  || document.body.clientWidth, window.innerHeight || document.body.clientHeight];
		botTop[0] += window.pageXOffset ||
				document.documentElement.scrollLeft 
                || document.body.scrollLeft 
                || 0;
		botTop[1] += window.pageYOffset 
                || document.documentElement.scrollTop 
                || document.body.scrollTop 
                || 0;
		if(y + bH > (botTop[1] - 10)){
			y = botTop[1] - 50 - bH;
			m_bg = BubbleTip.prototype.bg_up;
		}
		m_div.className= BubbleTip.prototype.m_div_class;
		m_div.setAttribute("style","z-index: 99999; position: absolute; top: "+ y +"px ; left: "+  x +"px ; background: url("+ m_bg +"); width: " + bW +"px; height: "+ bH +"px; padding-top: 27px;padding-left: 25px;");
		m_div.style.width=bW + "px";
		m_div.style.position="absolute";
		m_div.style.top= y + "px";
		m_div.style.zIndex=99999;
		m_div.style.left= x + "px";
		m_div.style.height= bH + "px";
		m_div.style.paddingTop="27px";
		m_div.style.paddingLeft="25px";
		m_div.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +m_bg + "',sizingMethod='scale')";
		document.getElementsByTagName("body")[0].appendChild(m_div);
	},
	
	hideBubble: function(event){
		var bits = document.getElementsByClassName(BubbleTip.prototype.m_div_class);
		for(var i=0; i < bits.length; i++){
			bits[i].parentNode.removeChild(bits[i]);
		}
	}
};
//to go live uncomment
//Event.observe(window, 'load', BubbleTip.prototype.init, false);
 **/



