var BUFFED_BROWSER    		= {};
var BUFFED_CACHE  			= {};
var BUFFED_ISREQUESTACTIVE 	= false;
var BUFFED_LASTREQUEST_ID 	= null;
var BUFFED_LASTREQUEST_X  	= null;
var BUFFED_LASTREQUEST_Y	= null;
var BUFFED_BASEURL			= {deDE:"http://www.buffed.de/", enGB:"http://romdata.getbuffed.com/", ruRU:"http://romdata.buffed.ru/"};

BUFFED_BROWSER.ie 			= (navigator.appName=="Microsoft Internet Explorer");
BUFFED_BROWSER.opera 		= (navigator.userAgent.search(/Opera/)!=-1);
BUFFED_BROWSER.safari 		= (navigator.userAgent.search(/Safari/)!=-1);
BUFFED_BROWSER.gecko 		= (!BUFFED_BROWSER.safari && navigator.appName=="Netscape");

if (document.images) 
{
   var ttBackgroundImg = new Image();
   ttBackgroundImg.src = "../img/style/tooltip.png";
}

function BUFFED_INIT () {

	BUFFED_ADDEVENTLISTENER(document, "mouseover", BUFFED_HANDLEMOUSEOVER);

	var h=document.getElementsByTagName("head")[0];

	if(h) {

		var l=document.createElement("link");


		l.type="text/css";
		l.href=BUFFED_BASEURL.deDE+"css/buffed-ext-tooltip-rom.css?v=1";
		l.rel="stylesheet";
		h.appendChild(l);

		if(BUFFED_BROWSER.ie) {

			l=document.createElement("link");
			l.type="text/css";
			l.href=BUFFED_BASEURL.deDE+"css/buffed-ext-tooltip-ie.css";
			l.rel="stylesheet";
			h.appendChild(l);

		}

	}
}

function BUFFED_ADDEVENTLISTENER(obj, eventType, func) {

	if(obj.addEventListener) {

		obj.addEventListener(eventType, func, false);
		return true;

	} else if(obj.attachEvent) {

		var retVal=obj.attachEvent("on"+eventType, func);
		return retVal;

	} else {

		return false;

	}

}

function BUFFED_HANDLEMOUSEOVER(e) {

	if(!e) {
		e=window.event;
	}
	
	var t=e.target?e.target:e.srcElement;

	if(!t) return;
	
	var count = 0;

	while(t && t.nodeName!="A" && t.nodeName!="a" && count < 4) {
		t=t.parentNode;
	}

	if(!t || (t.nodeName!="A" && t.nodeName!="a") || !t.href.length) {
		return;
	}

	if(t.rel == "nott") return;
	
	var m=t.href.match(/^http:\/\/(\w+\.)?buffed\.(de|ru|es|fr)\/?\?(i|s)=([0-9]+)/);
	if(!m) {
		m=t.href.match(/^http:\/\/(\w+\.)?getbuffed\.(com)\/?\?(i|s)=([0-9]+)/);
	}

	var type,id,domain = '',tld = '';
	if(m) {
		domain = m[1];
		tld = m[2];
		type = m[3];
		id	 = m[4];
	} else {
		var m2 = window.location.hostname.match(/^(\w+\.)?buffed\.(de|ru|es|fr)$/)
		if(!m2) {
			m2 = window.location.hostname.match(/^(\w+\.)?getbuffed\.(com)$/)
		}
		if (m2) {
			domain = m2[1];
			tld = m2[2];
			m=t.href.match(/^\/?\?(i|s)=([0-9]+)/);
			if(m) {
				type = m[1];
				id	 = m[2];
			}
		}
	}

	var locale='deDE';
	if(tld == 'ru') {
		locale='ruRU';
	}
	if(tld == 'com') {
		locale='enGB';
	}

	if(m) {
		if(t.title) {
			// Titel beiÃŸt sich mit Tooltip
			t.title = '';
		}
		if(!t.onmousemove) {

			t.onmousemove=BUFFED_TTMOUSEMOVE;
			t.onmouseout=BUFFED_TTMOUSEOUT;

		}

		BUFFED_SHOWTT(locale, type, id, e, null, null);
		return;
	}
}

function BUFFED_TTMOUSEMOVE(e){
	BUFFED_SET_TOOLTIP_POS(BUFFED_GETMOUSEPOSX(e), BUFFED_GETMOUSEPOSY(e));
}

function BUFFED_TTMOUSEOUT(){
	BUFFED_LastRequest_Type=null;
	BUFFED_LastRequest_ID=null;
	BUFFED_ISREQUESTACTIVE = false;
	BUFFED_HIDETT();
}

function BUFFED_GETMOUSEPOSX(event) {
	if(BUFFED_BROWSER.ie) {
		return window.event.clientX;
	} else {
		return event.pageX;
	}
}

function BUFFED_GETMOUSEPOSY(event) {
	if(BUFFED_BROWSER.ie) {
		return window.event.clientY;
	} else {
		return event.pageY;
	}
}

function BUFFED_GETSCROLLX() {

	if(BUFFED_BROWSER.gecko || BUFFED_BROWSER.opera) {

		return window.pageXOffset;

	} else if(document.documentElement && document.documentElement.scrollLeft) {

		return document.documentElement.scrollLeft;

	} else if(document.body && document.body.scrollLeft) {

		return document.body.scrollLeft;

	} else {

		return 0;

	}
}

function BUFFED_GETSCROLLY() {

	if(BUFFED_BROWSER.gecko || BUFFED_BROWSER.opera) {

		return window.pageYOffset;

	} else if(document.documentElement && document.documentElement.scrollTop) {

		return document.documentElement.scrollTop;

	} else if(document.body && document.body.scrollTop) {

		return document.body.scrollTop;

	} else {

		return 0;

	}

}

function BUFFED_GETWINDOWWIDTH() {

  	if(window.innerWidth) {

	    return window.innerWidth;

  	} else if(document.documentElement && document.documentElement.clientWidth) {

    	return document.documentElement.clientWidth;

	} else if(document.body && document.body.clientWidth) {

		return document.body.clientWidth;

	} else {

    	return 0;

	}

}

function BUFFED_GETWINDOWHEIGHT() {

  	if(window.innerHeight) {

   		return window.innerHeight;

  	} else if(document.documentElement && document.documentElement.clientHeight) {

    	return document.documentElement.clientHeight;

	} else if(document.body && document.body.clientHeight) {

		return document.body.clientHeight;

  	} else {

    	return 0;

  	}

}

function BUFFED_SET_TOOLTIP_POS(xpos, ypos) {

	var BFDTTDIV=document.getElementById("BUFFED_TOOLTIP");

	if(BFDTTDIV) {
	
		var windowwidth=BUFFED_GETWINDOWWIDTH();
		var windowheight=BUFFED_GETWINDOWHEIGHT();
		var height=BFDTTDIV.clientHeight;
		var width=BFDTTDIV.clientWidth;
		var xoffset=25;
		var yoffset=15;
		var xscroll=BUFFED_GETSCROLLX();
		var yscroll=BUFFED_GETSCROLLY();
		var xzero=0;
		var yzero=0;
		var clientCollisionBorder=5;

		if((xpos+xoffset+width) > (windowwidth-clientCollisionBorder)) {
			xzero=(windowwidth-clientCollisionBorder) - (xpos+xoffset+width);
		}

		if((ypos+height) > (windowheight-20)) {
			yzero=-height-25+yzero;
		}

		
		if(BUFFED_BROWSER.gecko || BUFFED_BROWSER.opera || BUFFED_BROWSER.safari) { 
			var styleLeft = xpos+xoffset+xzero-12;
			var styleTop = ypos+yoffset+yzero-0;	
		}else{		
			var styleLeft = xpos+xoffset+xzero+(BUFFED_BROWSER.ie?xscroll:0);
			var styleTop = ypos+yoffset+yzero+(BUFFED_BROWSER.ie?yscroll:0);
		}

		if (styleLeft-xscroll < clientCollisionBorder) {
			styleLeft = xscroll+clientCollisionBorder;
		}

		BFDTTDIV.style.left=(styleLeft+"px");
		BFDTTDIV.style.top=(styleTop+"px");
		BFDTTDIV.style.zIndex=101;

	}

}

function BUFFED_HIDETT(){

	var BUFFEDTT = document.getElementById("BUFFED_TOOLTIP");

	if(BUFFEDTT) {
		BUFFEDTT.style.visibility="hidden";
	}
}

function BUFFED_REQUEST(adr) {

	var element=document.getElementById("BUFFED_TT_REQUEST");
	var h=document.getElementsByTagName("head")[0];

	if(element != null) {
		element.parentNode.removeChild(element);
	}

	element=document.createElement("script");
	element.id="BUFFED_TT_REQUEST";
	element.type="text/javascript";
	element.src=adr;
	h.appendChild(element);
}


function BUFFED_SHOWTT(locale, type, id, e, xpos, ypos){

	if(!BUFFED_CACHE[locale]) {
		BUFFED_CACHE[locale] = [];
	}

	if(!BUFFED_CACHE[locale][type]) {
		BUFFED_CACHE[locale][type] = [];
	}

	var cache = BUFFED_CACHE[locale][type];
	var tooltip="";

	if(!cache[id]) {

		if(e) {
				BUFFED_ISREQUESTACTIVE = true;
				BUFFED_LASTREQUEST_ID=id;
				BUFFED_LASTREQUEST_X=BUFFED_GETMOUSEPOSX(e);
				BUFFED_LASTREQUEST_Y=BUFFED_GETMOUSEPOSY(e);
				if(type == "i"){
					BUFFED_REQUEST(BUFFED_BASEURL[locale]+"tooltiprom/items/js/"+id+".js");
				}
				if(type == "s"){
					BUFFED_REQUEST(BUFFED_BASEURL[locale]+"tooltiprom/spells/js/"+id+".js");
				}
				
				tooltip = "Loading...";
			}

	}else{

		//if(!cache[id]) {
		//	return;
		//}

		tooltip=cache[id];
	}

	var ttdiv=document.getElementById("BUFFED_TOOLTIP");

	if(!ttdiv) {

		var b=document.getElementsByTagName("body")[0];
		
		if(!b) {
			return;
		}

		ttdiv=document.createElement("div");
		ttdiv.id="BUFFED_TOOLTIP";
		ttdiv.style.display="none";
		ttdiv.style.visibility="hidden";
		ttdiv.innerHTML = '<div class="db-tooltip"><table><tr><td><table><tr><td id="BUFFED_TOOLTIP_DATA"></td></tr></table></td><th style="background-position: top right"></th></tr><tr><th style="background-position: bottom left"></th><th style="background-position: bottom right"></th></tr></table></div>';
		b.appendChild(ttdiv);
	}

	ttdiv.style.display="";
	ttdiv.style.visibility="hidden";

	document.getElementById("BUFFED_TOOLTIP_DATA").innerHTML=tooltip;

	ttdiv.cheight=ttdiv.clientHeight;

	if(!(xpos && ypos) && e) {
		xpos=BUFFED_GETMOUSEPOSX(e);
		ypos=BUFFED_GETMOUSEPOSY(e);
	}

	if((xpos && ypos))
		BUFFED_SET_TOOLTIP_POS(xpos, ypos);

	ttdiv.style.visibility="visible";
	ttdiv.style.width="420px";
}


function BUFFED_ADDTOOLTIP(data) {

	var h=document.getElementsByTagName("head")[0];

	if(!data || !data.type || !data.id) {
		return;
	}

	var locale = 'deDE';
	if(data.l) {
		locale = data.l;
	}

	if(!BUFFED_CACHE[locale]) {
		BUFFED_CACHE[locale] = [];
	}

	if(!BUFFED_CACHE[locale][data.type]) {
		BUFFED_CACHE[locale][data.type] = [];
	}

	var BUFFED_ROMICONURL     = {ic64:"http://romdata.buffed.de/img/icons/rom/64/", ic40:"http://romdata.buffed.de/img/icons/rom/40/", ic32:"http://romdata.buffed.de/img/icons/rom/32/"}	
  BUFFED_CACHE[locale][data.type][data.id] = '<img ALIGN="RIGHT" src="'+BUFFED_ROMICONURL.ic32+[data.icon]+'.png">';
  BUFFED_CACHE[locale][data.type][data.id] += [data.tt];  
	
	if (BUFFED_ISREQUESTACTIVE)
		BUFFED_SHOWTT(locale, data.type, data.id, null, null );
}

function BUFFED_SPELCIALTOOLTIP(data) {
	
	var locale = 'deDE';
	if(data.l){
		locale = data.l;
	}
	if(!BUFFED_CACHE[locale]) {
		BUFFED_CACHE[locale] = [];
	}

	if(!BUFFED_CACHE[locale][data.type]) {
		BUFFED_CACHE[locale][data.type] = [];
	}
	
	BUFFED_ADDEVENTLISTENER(document, "mousemove", BUFFED_TTMOUSEMOVE);
	BUFFED_CACHE[locale][data.type][data.id] = [data.tt];
	BUFFED_SHOWTT(locale, data.type, data.id, null, BUFFED_LASTREQUEST_X, BUFFED_LASTREQUEST_Y);
}

function showSTT(text){
	BUFFED_SPELCIALTOOLTIP({"id":"null","type":"null","icon":null,"tt":text,"l":null});	
}

function hideSTT(){
	BUFFED_HIDETT();
}

BUFFED_INIT();