/* * superitems.js - Automatically makes links to TitanVault pretty :) * Made by ExJam <3 * Improved by Dae xD */ var overttMenu = false; if(typeof $VaultSuperItems == "undefined") { var $VaultSuperItems = new function() { var toolTipElements = new Array(); var toolTipCount = 0; var ttMenuUrl = false; function GetUrlAttribute(url, attrib){ return (match = url.match(new RegExp("[?|&]?" + attrib + "=([^&]*)"))) ? match[1] : null; } function CheckElement(element){ var nodeType; if(element.nodeName == "A") nodeType = 0; else if(element.nodeName == "IMG") nodeType = 1; else if(element.nodeName == "DIV") nodeType = 2; else return -1; if(element.getAttribute("tooltip") != null) return; if(nodeType == 0 && !element.href.length) return 0; if(nodeType == 1 && !element.src.length) return 0; var result; var origurl; if(nodeType == 0){ result = element.href.match(/^http:\/\/vault.titanrose.com\/(item|npc|achievement|player|map|skill|clan)\/([^/\.]+)/); origurl = element.href; }else if (nodeType == 1){ result = element.src.match(/^http:\/\/vault.titanrose.com\/icon\/(item)\/([^/\.]+)/); origurl = element.src; if((result == null || result.length != 3) && element.parentNode.href) { result = element.parentNode.href.match(/^http:\/\/vault.titanrose.com\/(item|npc|achievement|player|map|skill|clan)\/([^/\.]+)/); origurl = element.parentNode.href; } }else if (nodeType == 2){ result = element.style.backgroundImage.match(/http:\/\/vault.titanrose.com\/icon\/(item)\/([^/\.]+)/); origurl = element.style.backgroundImage; if(element.getAttribute("maploc") != null){ result = new Array(); result[0] = 0; result[1] = "npc"; result[2] = element.getAttribute("id"); } } if(result == null) return 0; if(result.length != 3) return 0; var type = result[1]; var ID = decodeURI(parseInt(result[2])); var ttUrl = origurl.replace(/['"]/g,''); if(nodeType == 2){ var ttResult = ttUrl.match('\\burl\\(([^>]*)icon/?([^?.&]*)(.png)?\\??([^>]*)\\b'); if (ttResult) { if(ttResult.length != 5) ttUrl = "Unknown"; else ttUrl = ttResult[1] + ttResult[2] + '/?' + ttResult[4]; } } if(type == "item"){ var stat = GetUrlAttribute(origurl, "stat"); var refine = GetUrlAttribute(origurl, "refine"); var lifespan = GetUrlAttribute(origurl, "lifespan"); if (parseInt(lifespan) > 100) lifespan = lifespan / 10; var durability = GetUrlAttribute(origurl, "durability"); var appraised = GetUrlAttribute(origurl, "appraised"); var socketed = GetUrlAttribute(origurl, "socketed"); var count = GetUrlAttribute(origurl, "count"); var getVars = ""; if(stat != null) getVars += "&stat=" + parseInt(stat); if(refine != null) getVars += "&refine=" + parseInt(refine); if(lifespan != null) getVars += "&lifespan=" + parseInt(lifespan)*10; if(durability != null) getVars += "&durability=" + parseInt(durability); if(appraised != null) getVars += "&appraised=" + parseInt(appraised); if(socketed != null) getVars += "&socketed=" + parseInt(socketed); if(count != null) getVars += "&count=" + parseInt(count); element.onmousemove = MouseMove; element.onmouseout = MouseOut; element.setAttribute("tooltip", "item" + toolTipCount); var nomouse = element.getAttribute("nomouse"); if(nodeType == 1 || nodeType == 2){ if(nomouse == null || nomouse == 'false'){ element.onclick = function(){ window.location.href = 'http://vault.titanrose.com/item/' + ID + '/?' + getVars }; element.style.cursor = "pointer"; } } var newToolTip = document.createElement("div"); document.body.appendChild(newToolTip); newToolTip.innerHTML = "Loading item " + ID + "..."; newToolTip.className = "ItemData Tooltip"; newToolTip.style.zIndex = 100; newToolTip.style.position = "absolute"; newToolTip.style.visibility = "hidden"; newToolTip.style.display = "none"; newToolTip.style.left = "-1000px"; toolTipElements["item" + toolTipCount] = newToolTip; AddExternalScript("http://vault.titanrose.com/tooltip.php?type=item&jscript=" + toolTipCount + "&id=" + ID + getVars); ++toolTipCount; element.setAttribute("ttUrl", ttUrl); }else if(type == "npc"){ IDOnlyToolTip(element, ID, "npc", "NPC"); element.setAttribute("ttUrl", ttUrl); }else if(type == "achievement"){ IDOnlyToolTip(element, ID, "achv", "Achievement"); element.setAttribute("ttUrl", ttUrl); }else if(type == "map"){ IDOnlyToolTip(element, ID, "map", "Map"); element.setAttribute("ttUrl", ttUrl); }else if(type == "skill"){ IDOnlyToolTip(element, ID, "skill", "Skill"); element.setAttribute("ttUrl", ttUrl); }else if(type == "player"){ IDOnlyToolTip(element, result[2], "player", "Player", "ItemData SmallTooltip"); element.setAttribute("ttUrl", ttUrl); }else if(type == "clan"){ IDOnlyToolTip(element, result[2], "clan", "Clan", "ItemData SmallTooltip"); element.setAttribute("ttUrl", ttUrl); } return 1; } function IDOnlyToolTip(element, ID, type, name, className){ className = typeof(className) != 'undefined' ? className : "ItemData Tooltip"; ID = decodeURI(ID); element.onmousemove = MouseMove; element.onmouseout = MouseOut; element.setAttribute("tooltip", type + ID); if(toolTipElements[type + ID] == undefined){ var newToolTip = document.createElement("div"); document.body.appendChild(newToolTip); newToolTip.innerHTML = "Loading " + name + " " + ID + "..."; newToolTip.className = className; newToolTip.style.zIndex = 100; newToolTip.style.position = "absolute"; newToolTip.style.visibility = "hidden"; newToolTip.style.display = "none"; newToolTip.style.left = "-1000px"; toolTipElements[type + ID] = newToolTip; var url = "http://vault.titanrose.com/tooltip.php?type=" + type + "&jscript=id&id=" + ID; AddExternalScript(url); ++toolTipCount; } } function ConvertEvent(evt){ if(!evt) evt = window.event; if(!evt._button){ evt._button = evt.which ? evt.which: evt.button; evt._target = evt.target ? evt.target: evt.srcElement; } return evt; } function MouseOut(evt){ if(ttMenuUrl) return; evt = ConvertEvent(evt); var element = evt._target; if(element.getAttribute("tooltip") == null) return; var ttElem = toolTipElements[element.getAttribute("tooltip")]; ttElem.style.visibility = "hidden"; ttElem.style.display = "none"; ttElem.style.left = "-1000px"; } function MouseMove(evt){ if(ttMenuUrl) return; evt = ConvertEvent(evt); var element = evt._target; if(element.getAttribute("tooltip") == null) return; var ttElem = toolTipElements[element.getAttribute("tooltip")]; var scrollXY = getScrollXY(); ttElem.style.left = (10 + evt.clientX + scrollXY[0]) + "px"; ttElem.style.top = (10 + evt.clientY + scrollXY[1]) + "px"; ttElem.style.visibility = "visible"; ttElem.style.display = ""; } function MouseOver(evt){ evt = ConvertEvent(evt); var target = evt._target; var level = 0; while(target != null && level < 3 && CheckElement(target) == -1){ target = target.parentNode; ++level; } } function MouseDown(evt){ if(!ttMenuUrl || overttMenu) return false; var menuElement = document.getElementById('ttUrlMenu'); if(menuElement == null) return true; menuElement.style.visibility = "hidden"; menuElement.style.display = "none"; menuElement.style.left = "-1000px"; overttMenu = false; ttMenuUrl = false; return true; } function ContextMenu(evt){ var menuElement = document.getElementById('ttUrlMenu'); if(menuElement == null) return true; evt = ConvertEvent(evt); var element = evt._target; if(element.getAttribute("ttUrl") == null) return true; if(element.getAttribute("tooltip") == null) return true; ttMenuUrl = true; var ttElem = toolTipElements[element.getAttribute("tooltip")]; ttElem.style.visibility = "hidden"; ttElem.style.display = "none"; ttElem.style.left = "-1000px"; var scrollXY = getScrollXY(); menuElement.style.left = (evt.clientX + scrollXY[0]) + "px"; menuElement.style.top = (evt.clientY + scrollXY[1]) + "px"; menuElement.style.display = ""; menuElement.style.visibility = "visible"; document.getElementById('ttUrlText').value = element.getAttribute("ttUrl"); return false; } function AddExternalScript(url){ var element = document.createElement("script"); document.getElementsByTagName("head")[0].appendChild(element); element.type = "text/javascript"; element.src = url; } function AddExternalStylesheet(url){ var element = document.createElement("link"); document.getElementsByTagName("head").item(0).appendChild(element); element.type = "text/css"; element.rel = "stylesheet"; element.href = url; } function AddEventListener(node, evt, func){ if(window.attachEvent){ node.attachEvent("on" + evt, func); }else{ node.addEventListener(evt, func, false); } } function HookPage(){ AddEventListener(document, "mouseover", MouseOver); AddEventListener(document, "mousedown", MouseDown); document.oncontextmenu = ContextMenu; AddExternalStylesheet("http://vault.titanrose.com/css/superitems.css"); } function getScrollXY() { var scrOfX = 0, scrOfY = 0; if(typeof(window.pageYOffset) == 'number'){ //Netscape compliant scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; }else if(document.body && ( document.body.scrollLeft || document.body.scrollTop)){ //DOM compliant scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; }else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)){ //IE6 standards compliant mode scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; } return [ scrOfX, scrOfY ]; } this.RegisterTT = function(itemID, itemData){ toolTipElements[itemID].innerHTML = itemData; } HookPage(); } }