var tooltip="";

var tooltip_list = new Array();
var tooltip_timeout = null;
var tooltip_fadeout = null;
var tooltip_xoffset = 15;
var tooltip_fadepercent = 100;
var genkeycount = 0;	// a title-bol generalt cimkek mennyinel is tartunt szamlaloja, valamint az azonositojukat szolgaltatja


function preg(str) {
	str = str.replace(/\[/g, "<");
	str = str.replace(/\]/g, ">");
	return str;
}

function fps_tooltip_show(str, timeout) {

	if (!document.getElementById('fps_tooltip')) {
		var tt = document.createElement('div');
		tt.id = 'fps_tooltip';
		tt.className = 'fps_tooltip';
		document.body.appendChild(tt);
	}

	tooltip_fadepercent = 90;
	tooltip=str;

	if (typeof timeout == 'undefined') var timeout = 2000 + str.length * 50;	// karakterenkent 0.05 sec? jo?

	if (timeout > 0) {
		clearTimeout(tooltip_fadeout);
		clearTimeout(tooltip_timeout);	// ugy nez ki megis kell, pedig aszittem nem
		tooltip_timeout = setTimeout('fps_tooltip_hide();', timeout);
	}
	fps_tooltip_setfadelevel();

	document.onmousemove = fps_tooltip_mouseMove;
}

function fps_tooltip_hide() {
	if (tooltip_fadepercent > 0) {
		tooltip_fadepercent -= 10;
		fps_tooltip_setfadelevel();
		tooltip_fadeout = setTimeout('fps_tooltip_hide();', 25);
	} else {
		fps_tooltip_faded();
	}
}

function fps_tooltip_setfadelevel() {

	if (!document.getElementById('fps_tooltip')) return;

	var browserName = '';
	var ua = navigator.userAgent.toLowerCase();

	if ( ua.indexOf( "opera" ) != -1 ) {
		browserName = "opera";
	} else if ( ua.indexOf( "msie" ) != -1 ) {
		browserName = "msie";
	} else if ( ua.indexOf( "safari" ) != -1 ) {
		browserName = "safari";
	} else if ( ua.indexOf( "mozilla" ) != -1 ) {
		if ( ua.indexOf( "firefox" ) != -1 ) {
			browserName = "firefox";
		} else {
			browserName = "mozilla";
		}
	}

	if (browserName == 'msie') document.getElementById("fps_tooltip").style.filter = 'alpha(opacity='+tooltip_fadepercent+')';
	if (browserName == 'opera' || browserName == 'safari') document.getElementById("fps_tooltip").style.opacity = tooltip_fadepercent/100;
	if (browserName == 'firefox' || browserName == 'mozilla') document.getElementById("fps_tooltip").style.MozOpacity = tooltip_fadepercent/100;
}

function fps_tooltip_faded() {
	clearTimeout(tooltip_timeout);
	clearTimeout(tooltip_fadeout);
	document.onmousemove = null;
	if (!document.getElementById("fps_tooltip")) return;
	var c=document.getElementById("fps_tooltip");
	c.style.display = 'none';
}

function fps_tooltip_mouseMove(event) {
	if (tooltip == null) { return; }
	var c=document.getElementById("fps_tooltip");

	if (tooltip == '') { c.style.display = 'none'; return; }

	if (!event) var event = window.event;
	if (event.pageX) {
		var cx = event.pageX;
		var cy = event.pageY;
	} else if (event.clientX) {
		var cx = event.clientX;
		var cy = event.clientY;
	} else return;

	var x = event.pageX || (cx + (document.documentElement.scrollLeft || document.body.scrollLeft));
	var y = event.pageY || (cy + (document.documentElement.scrollTop || document.body.scrollTop));

	c.innerHTML = preg(tooltip);

	c.style.left = x+tooltip_xoffset + 'px';
	c.style.top = y+15 + 'px';
	c.style.display = 'block';

	var x_var = document.body.clientWidth - c.scrollWidth - 20;
	if (x > x_var) c.style.left = x_var + tooltip_xoffset + 'px';

	var ch = c.scrollHeight;	// tooltip magassag

	var dbst = window.pageYOffset ? window.pageYOffset : document.body.scrollTop;	// FIXME csekkolni IE-ben

	// FIXME csekkolni IE-ben
	if (window.innerHeight) {	// nem IE
		var wh = window.innerHeight;
	} else if (document.documentElement.clientHeight) {
		var wh = document.documentElement.clientHeight;
	} else {
		var wh = document.body.clientHeight;
	}

	if (y - dbst + ch + 20 > wh) c.style.top = y - 15 - ch + 'px';

}

function fps_tooltip(myform) {

	if (typeof myform == 'undefined') {
		var myform = document.body;
	} else {
		if (document.getElementById(myform)) {
			var myform = document.getElementById(myform);
		} else {
			//alert('FIXME: Missing element (Nem létezik): '+myform);
			return;
		}
	}

	if (!document.getElementById('fps_tooltip')) {
		var tt = document.createElement('div');
		tt.id = 'fps_tooltip';
		tt.className = 'fps_tooltip';
		document.body.appendChild(tt);
	}

	if (myform.tagName == 'form') {
		var formel = myform.elements;
	} else {
		var formel = myform.getElementsByTagName('input');
	}

	var l = myform.getElementsByTagName('a');
	var img = myform.getElementsByTagName('img');
	var sp = myform.getElementsByTagName('span');
	var labels = myform.getElementsByTagName('label');

	var el = new Array();
	var j = 0;
	for (var i = 0; i < formel.length; i++) { el[j] = formel[i]; j++; }
	for (var i = 0; i < l.length; i++) { el[j] = l[i]; j++; }
	for (var i = 0; i < img.length; i++) { el[j] = img[i]; j++; }
	for (var i = 0; i < sp.length; i++) { el[j] = sp[i]; j++; }
	for (var i = 0; i < labels.length; i++) { el[j] = labels[i]; j++; }

	for (var i = 0; i < el.length; i++) {
		var obj = el[i];
		var myclass = obj.getAttributeNode('class');

		if (myclass) {
			var splitted = myclass.nodeValue.split(' ');
			for (var j = 0; j < splitted.length; j++) {
				var c = splitted[j];
				var b = c.split('_');

				if (b[0] == "tooltip") {

					// ha title-bol vesszuk
					if (!b[1] && obj.title) {
						tooltip_list['key'+genkeycount] = obj.title;
						obj.title = '';
						obj.className = myclass.nodeValue.replace(/tooltip/, 'tooltip_key'+genkeycount);
						genkeycount++;
					}

					obj.onmouseover = function() {
						var myclass = this.getAttributeNode('class');
						if (myclass) {
							var splitted = myclass.nodeValue.split(' ');
							for (var j = 0; j < splitted.length; j++) {
								var c = splitted[j];
								var b = c.split('_');

								if (b[0] == "tooltip") {
									if (b[1]) {
										var tt = tooltip_list[b[1]];
									} else if (this.title) {	// elvileg nem lesz ilyen
										var tt = this.title;
									} else {	// ez viszont lehet
										alert('rossz a tooltip, ide kellett volna eljutnia? - azaz sem title, sem key nincs megadva...');
									}

									fps_tooltip_show(tt);
									return;
								}

							}
						}
					}

					obj.onmouseout = function() {
						fps_tooltip_hide();
					}
				}

			}
		}

	}
}

