// SmartLink v0.2 // Grant Harding at fxcm, 2006 var baseUrl = "http://fxwords.dev.fxcm.com/"; // base url var removeWords = true; // link word once? var wordUrl = baseUrl+"Smartlink.do?url="; // url for array var wordsShowDef = true; // show definition var wordsDefTooltip = true; // show as tooltip (otherwise will create custom div tag) [wordsShowDef must be true] var _slE = document.getElementById('article'); /* load js from fxwords w/ js array */ var _ref = document.location.href.replace(/\&/g,'%26').replace(/\'/g, '%27').replace(/\"/g, '%22'); // ' var script = wordUrl+_ref; document.write(''); document.write(''); var _boxactive = 0; //window.onload = function() { loadSmartLinks(); } function loadSmartLinks() { /* load words */ } function _loadWords(req) { var _ws = req.getElementsByTagName('def'); for (i = 0; i < _ws.length; i++) { var _w = req.getElementsByTagName('def')[i]; _f['word'] = _w.getElementsByTagName('word')[0]; _f['def'] = _w.getElementsByTagName('defi')[0]; _f['link'] = _w.getElementsByTagName('link')[0]; defs.push(_f); } /* traverse through dom and check for nodeType == 3 (text) */ _travEle(document.getElementById('article')); } function startTrav() { _travEle(document.getElementById('article')); } function _travEle(e) { var c = e.childNodes; for (var i = 0; i < c.length; i++) { if (defs.length == 0) { break; } if (c[i].nodeType == 3) { if (_parseEle(c[i])) { i++; } } else if (!(c[i].nodeName == 'A' && c[i].href.length > 0)) { _travEle(c[i]); } } } function _parseEle(e) { var orig = e.nodeValue; var i = orig; if (orig.replace(/\s+/).length == 0) return; var l = i.toLowerCase(); var firstTermPos = -1; var firstTerm = null; for (j = 0; j < defs.length; j++) { var term = defs[j]['word']; var url = defs[j]['link']; var def = defs[j]['def']; var t = l.indexOf(term); if (t > -1 && (t < firstTermPos || firstTermPos < 0)) { firstTermPos = t; firstTerm = j; } } if (firstTermPos > -1) { if (firstTermPos > 0 && i.substring(firstTermPos - 1, firstTermPos).match(/[a-zA-Z]/)) { return false; } var first = document.createTextNode(i.substring(0,firstTermPos)); var second = document.createElement('a'); second.appendChild(document.createTextNode(i.substring(firstTermPos, firstTermPos+defs[firstTerm]['word'].length))); second.setAttribute("href", defs[firstTerm]['link']); if (wordsShowDef == true) { if (wordsDefTooltip == true) { second.setAttribute("title", defs[firstTerm]['def']); } else { second.setAttribute("onMouseOver", "showBox(this, event,'"+defs[firstTerm]['def']+"')"); second.setAttribute("onMouseOut", "setTimeout('hideBox()',2000)"); } } second.setAttribute("target", "_blank"); var third = document.createTextNode(i.substring(firstTermPos+defs[firstTerm]['word'].length, i.length)); var p = e.parentNode; p.replaceChild(third,e) p.insertBefore(second, third); p.insertBefore(first, second); if (removeWords == true) { defs.splice(firstTerm,1); } return true; } return false; } function _urlencode(plaintext) { var SAFECHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.!~*'()"; var HEX = "0123456789ABCDEF"; var encoded = ""; for (var i = 0; i < plaintext.length; i++ ) { var ch = plaintext.charAt(i); if (ch == " ") { encoded += "+"; // x-www-urlencoded, rather than %20 } else if (SAFECHARS.indexOf(ch) != -1) { encoded += ch; } else { var charCode = ch.charCodeAt(0); if (charCode > 255) { encoded += "+"; } else { encoded += "%"; encoded += HEX.charAt((charCode >> 4) & 0xF); encoded += HEX.charAt(charCode & 0xF); } } } // for return encoded; } function hideBox() { _boxactive--; if (_boxactive < 1) { document.getElementById('slBox').style.display = 'none'; _boxactive = 0; } } function showBox(e,event,def) { _boxactive++; var curleft = curtop = 0; if (e.offsetParent) { curleft = e.offsetLeft curtop = e.offsetTop obj = e; while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } var _b = document.getElementById('slBox'); if (_b == null) { _d = document.createElement('div'); _d.setAttribute('id','slBox'); _dh = document.createElement('h5'); _dh.appendChild(document.createTextNode('FXWords')); _dp = document.createElement('p'); _dp.appendChild(document.createTextNode('')); _d.appendChild(_dh); _d.appendChild(_dp); _d.background = 'http://fxwords.dev.fxcm.com/test/def.gif'; _d.style.width = '194px'; _d.style.height = '93px'; _d.style.display = 'none'; _d.style.position = 'absolute'; _d.setAttribute("onMouseOver", "_boxactive++"); _d.setAttribute("onMouseOut", "setTimeout('hideBox()',2000)"); document.getElementsByTagName('body')[0].appendChild(_d); } var _b = document.getElementById('slBox'); _b.getElementsByTagName('p')[0].innerHTML = def; _b.style.left = curleft + 'px'; _b.style.top = (curtop + 20) + 'px'; _b.style.display = 'block'; }