
if (typeof $AkzToolTip=="undefined") 
{
	var $AkzToolTip = new function () {

    var head = document.getElementsByTagName("head")[0];
    var body = document.getElementsByTagName("body")[0];
    var tt,currentId;
    var items=[];
    var itemDiv;

    function createAkzElement(type, p)
	{
		// type = html element type (ie: link, a, p)
		// p = array of attributes for type
		var newelement = document.createElement(type);
		
		if(p) {
			createAkzObject(newelement, p);
		}
		return newelement;
	}
    
    function addAkzElement(p, element)
	{
		return p.appendChild(element);
    }

	
    function addAkzEvent(z, y, x)
	{
		if (window.attachEvent) {
			z.attachEvent("on" + y, x);
		}
		else { 
			z.addEventListener(y, x, false);
		}
    }

	
    function createAkzObject(ele,s)
	{
		for (var p in s) {
			if (typeof s[p]=="object") {
				if (!ele[p]) {
					ele[p] = {};
				}
				createAkzObject(ele[p],s[p]);
			} else {
				ele[p] = s[p];
			}
		}
    }

    function $E(e)
	{
		if (!e) { 
			e = event;
		}
		
		if (!e.button) {
			e._button = e.which ? e.which : e.button;
			e._target = e.target? e.target : e.srcElement;
		}
		return e;
    }

    function onMouseOver(e) {
		e = $E(e);
		
		var t = e._target;
		var m = [];
		var v;
		var site;
      
		if (t.nodeName!="A") { 
			return;
		}
		if (!t.href.length) { 
			return;
		}
		if (v = t.href.match(/^http:\/\/([^.]+)\.allakhazam\.com\/db\/item.html\?(.*)/i)) {
			var pairs = v[2].split(/[;&]/);
			var tmp;
			var key, value;
			var valid = 1;
			m['site'] = v[1];
        
			for (i = 0; i < pairs.length; i++) {
				tmp = pairs[i].split('=');
				key = tmp[0];
				value = tmp[1];
          
				if (value.indexOf('#') > 0) 
					valid = 0;
				if (m['site'] == 'wow' && key == 'witem')
					m['id'] = value;
				else if (m['site'] == 'lotro' && key == 'lotritem') 
					m['id'] = value;
				else if (m['site'] == 'everquest' && key == 'item') 
					m['id'] = value;
				else if (m['site'] == 'eq2' && key == 'eq2item') 
					m['id'] = value;
				else if (m['site'] == 'ffxi' && key == 'fitem')
					m['id'] = value;
				else if (key == 'locale') 
					m['locale'] = value;
				else if (key == 'source')
					m['source'] = value;
				else
					valid = 0;
			}
			m['locale'] = typeof m['locale'] != 'undefined' ? m['locale'] : 'enUS';
			m['source'] = typeof m['source'] != 'undefined' ? m['source'] : 'live';
		}
		
		if (v && valid == 1) {
			t.title = '';  //remove the title attribute from items in the forums
			if (!t.onmouseover) {
				t.onmousemove=onMouseMove;
				t.onmouseout=onMouseOut;
			}
			displayToolTip(m);
		}
	}

    function onMouseMove(e) {
		e=$E(e);
		showAtCursor(e);
    }

    function onMouseOut(e) {
		tt = null;
		itemDiv.style.display = 'none';
    }

	function displayToolTip(m) {
		tt = 1;
		currentId = m['id'];
		var key = m['site'] + m['id'] + m['locale'] + m['source'];
		
		if (typeof items[key]=="object") { //If it's already in the items array
			showToolTip(items[key].tooltip) 
		} else {
			if (!items[key]) {
				showLoading();
				requestToolTip(m);
			} else {
				showLoading(); 
			}
		}
    }

    function showToolTip(itemstr) {
		itemDiv.style.display = "block";
		itemDiv.innerHTML = itemstr;
    }

    function requestToolTip(m) {
		if (m['site'] == 'wow') {
			getToolTip("http://wow.allakhazam.com/cluster/itxt.pl?tooltip=1;id="+m['id']+";locale="+m['locale']+";source="+m['source']);
		} else if (m['site'] == 'lotro') {
			getToolTip("http://lotro.allakhazam.com/cluster/ihtml.pl?tooltip=1;item="+m['id']);
		} else if (m['site'] == 'everquest') {
			getToolTip("http://everquest.allakhazam.com/cluster/ihtml.pl?tooltip=1;item="+m['id']);
		} else if (m['site'] == 'eq2') {
			getToolTip("http://eq2.allakhazam.com/cluster/eq2item.pl?tooltip=1;eq2item="+m['id']);
		} else if (m['site'] == 'ffxi') {
			getToolTip("http://ffxi.allakhazam.com/cluster/fitem.pl?tooltip=1;id="+m['id']);
		}
    }

    function getToolTip(url) {
		addAkzElement(head,createAkzElement("script",{type:"text/javascript",src:url}));
    }

    function showLoading() {
		itemDiv.innerHTML = "<div class='wowitem'><span class='itemname'>Loading...</span></div>";
		itemDiv.style.display = 'block'; 
    }

    function showAtCursor(e) {
		var obj = itemDiv;
		var maxX;
		var maxY;
      
		obj.style.position = "absolute";
		obj.style.display = "block";
      
		if (document.all && !window.opera) {
			if (document.documentElement && document.documentElement.scrollTop) {
				maxX = document.documentElement.clientWidth + document.documentElement.scrollLeft;
				maxY = document.documentElement.clientHeight + document.documentElement.scrollTop;
				y = event.clientY + document.documentElement.scrollTop;
				x = event.clientX + document.documentElement.scrollLeft;
			} else {
				y = event.clientY + document.body.scrollTop;
				x = event.clientX + document.body.scrollLeft;
			}
		} else {
			maxX = window.innerWidth + document.documentElement.scrollLeft;
			maxY = window.innerHeight + document.documentElement.scrollTop;
			y = e.pageY;
			x = e.pageX;
		}
      
		var divW = parseInt(obj.offsetWidth);
		var divH = parseInt(obj.offsetHeight);
		divW = divW ? divW : 400;
		divH = divH ? divH : 100;
      
		if (maxX && maxY) {
			while (x + divW > (maxX - 10) && x > 0) {
				x = x - (divW + 10);
				obj.style.left = x + 5 +"px";
			}
			while (y + divH > (maxY - 10) && y > 0) {
				y = y - 1;
				obj.style.top = y +"px";
			}
		}
		obj.style.left = x + 5 +"px";
		obj.style.top = y +"px";    
    }

    this.registerItem = function(obj) {
		var site = obj.site;
		var id = obj.id;
		var locale = typeof obj.locale != 'undefined' ? obj.locale : 'enUS';
		var source = typeof obj.source != 'undefined' ? obj.source : 'live';
		var key = site + id + locale + source;
		
		items[key] = obj;
		if (tt == 1 && id == currentId) {
			showToolTip(items[key].tooltip);
		}
	}

    function init() {
		if (!document.getElementById('tmpItemFrm')) {
			addAkzElement(body, createAkzElement("div", {id:'tmpItemFrm'}));
		//	document.getElementById('tmpItemFrm').style.display = 'none';
		}
		itemDiv = document.getElementById('tmpItemFrm');
		addAkzElement(head, createAkzElement("link",{type:"text/css",href:"http://www.mmobugs.com/wiki/extensions/tooltip.css", rel:"stylesheet"}));
		addAkzEvent(document, "mouseover", onMouseOver);
    }
    init(); 
	}
}

