
function addTooltips() {
	// Find tooltip elements
	var tts = $$('.wTT');
	for (i=0; i<tts.length; i++) {
		var tt = tts[i];
		tt.observe('mouseover',onTooltipMouseOver);
		tt.observe('mouseout',onTooltipMouseOut);
	}
	$('CYANTOOLTIP').setStyle({display:"none"});
}


function onTooltipMouseOver(event) {
	if (event.target.hasAttribute('name')) {
		var text = event.target.readAttribute('name');
		if (text.length) {
			$('CYANTOOLTIP').innerHTML = text;
			onTooltipMouseMove(event);
			event.target.observe('mousemove',onTooltipMouseMove);
		}
	}
}

function onTooltipMouseOut(event) {
	$('CYANTOOLTIP').innerHTML = event.target.name;
	$('CYANTOOLTIP').setStyle({display:"none"});
	event.target.stopObserving('mousemove',onTooltipMouseMove);
}


function onTooltipMouseMove(event) {
    var mouse_x = Event.pointerX(event);
	var mouse_y = Event.pointerY(event);
	
	var dimensions = Element.getDimensions( $('CYANTOOLTIP') );
	var element_width = dimensions.width;
	var element_height = dimensions.height;
	
	var gap_x = 15;
	var gap_y = 15;
	
	if ( (element_width + mouse_x) >= ( getWindowWidth() - gap_x) ){ // too big for X
		mouse_x = mouse_x - element_width;
		// apply delta to make sure that the mouse is not on the tool-tip
		mouse_x = mouse_x - gap_x;
	} else {
		mouse_x = mouse_x + gap_x;
	}
	
	if ( (element_height + mouse_y) >= ( getWindowHeight() - gap_y) ){ // too big for Y
		mouse_y = mouse_y - element_height;
	    // apply delta to make sure that the mouse is not on the tool-tip
		mouse_y = mouse_y - gap_y;
	} else {
		mouse_y = mouse_y + gap_y;
	} 

	$('CYANTOOLTIP').setStyle({display:"block", top:mouse_y+"px", left:mouse_x+"px"});
}


function getWindowHeight(){
    var innerHeight;
	if (navigator.appVersion.indexOf('MSIE')>0) {
		innerHeight = document.body.clientHeight;
    } else {
    	innerHeight = window.innerHeight;
    }
	return innerHeight;	
}
 
function getWindowWidth(){
	var innerWidth;
	if (navigator.appVersion.indexOf('MSIE')>0) {
		innerWidth = document.body.clientWidth;
    } else {
		innerWidth = window.innerWidth;
    }
	return innerWidth;	
}
