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;
	    if (t.nodeName!="A") {
		if (t.parentNode && t.parentNode.nodeName=="A") {
		    t=t.parentNode;
		} else if (t.parentNode.parentNode && t.parentNode.parentNode.nodeName=="A") {
		    t=t.parentNode.parentNode;
		} else {
		    return;
		}
	    }
	    if (!t.href.length) {
		return;
	    }
	    var m = [];
	    var site;
	    var v;
            var valid = 0;

	    if (v = t.href.match(/^http:\/\/(.+)\.zam\.com\/(.+)\/([^\?]+)\?(.*)$/i)) {
		m['domain'] = "zam.com";
		m['host'] = v[1];
		m['path'] = v[2];
		m['file'] = v[3];
		m['qs'] = v[4];
		m['id'] = m['qs'].replace(/[;&=]/g,"");
                if (m['file'] == 'item.html') {valid = 1;}
		
	    } else if (v = t.href.match(/^http:\/\/(.+)\.zam\.com\/wiki\/([^\:]+)\:([^\/\?]+)/i)) {
                m['domain'] = "zam.com";
                m['host'] = v[1];
		var cat = v[2];
                valid = 1;

		if(cat.match(/lon[_ ]card/i)) {
		    m['site'] = 'lon';
		    var card = v[3]; 
		    var w = [];
		    w = card.match(/%28(\d\w\d+)%29/);
		    m['id'] = w[1];
		} else if (cat.match(/eq2[_ ]item/i)) {
                    m['qs'] = 'eq2itemname=' + v[3];
                    m['name'] = 'eq2itemname' + v[3]; 
                /*
		} else if (cat.match(/ffxi[_ ]item/i)) {
		    m['site'] = 'ffxi';
		    m['name'] = v[3];
		    m['type'] = '';
		} else if (cat.match(/wow[_ ]mob/i)) {
		    m['site'] = 'wow';
		    m['name'] = v[3];
		    m['type'] = 'mob';
		} else if (cat.match(/wow[_ ]quest/i)) {
		    m['site'] = 'wow';
		    m['name'] = v[3];
		    m['type'] = 'quest';
		} else if (cat.match(/wow[_ ]item/i)) {
		    m['site'] = 'wow';
		    m['name'] = v[3];
		    m['type'] = 'item';
		} else if (cat.match(/war[_ ]item/i)) {
		    m['site'] = 'war';
		    m['name'] = v[3];
		    m['type'] = 'item';
                */
		} else { valid = 0; }
            }
            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;
	    if (m['id']) {
		currentId = m['id'];
	    } else {
		currentId = decodeURI(m['name']);
	    }
	    var key = m['site'] + currentId + m['locale'] + m['source'] + m['type'];
	    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) {
	    var url = "http://" + m['host'] + "." + m['domain'] + "/db/tooltip.html?" + m['qs'];
	    getToolTip(url);
	}

	function getToolTip(url) {
	    addAkzElement(head,createAkzElement("script",{type:"text/javascript",src:url}));
	}
	
	function showLoading() {
	    itemDiv.innerHTML = "";
	    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 {
		if(document.body.scrollTop) {
		    maxX = window.innerWidth + document.body.scrollLeft;
		    maxY = window.innerHeight + document.body.scrollTop;
		} 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);
		}
		while (y + divH > (maxY - 25) && y > 0) {
		    y = y - 1;
		}
	    }
	    obj.style.left = x + 15 +"px";
	    obj.style.top = y + 15 +"px";    
	}
	
	this.registerItem=function(obj) {
	    var site = obj.site;
	    var id;
	    if(obj.key) {id = obj.key}
	    else if (obj.id) {id = obj.id}
	    else {
		id = obj.name;
		id = id.replace(/\+/g,'%2B');
	    }
	    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 onPageShow(e) {
	    if (e.persisted) {
		tt = null;
		itemDiv.style.display='none';
	    }
	}
	
	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://common.zam.com/shared/tooltip.css",rel:"stylesheet"}));
	    addAkzEvent(document,"mouseover",onMouseOver);
	    addAkzEvent(window,"pageshow",onPageShow);
	}
	init();
    }
}
    
    
