// Kosmix blog widget namespace if(typeof kapp=="undefined") { var kapp = {} } kapp.bw = {} // Globals kapp.bw.popupDelay = 250; kapp.bw.scriptCounter = 1; // Static script ID counter kapp.bw.keywordsUrl = "http://blogwidget.kosmix.com/"; kapp.bw.contentUrl = "http://www.kosmix.com/csp/blogwidgetcontent.csp?t=vhealth.all"; kapp.bw.contentElementName = 'content'; kapp.bw.relatedTopics = '6'; kapp.bw.viewing = ''; kapp.bw.requestObjs = new Array(); kapp.bw.keywordContent = {}; kapp.bw.stopMatching = false; kapp.bw.exactMatch = true; kapp.bw.maxElements = 1000; // // JSON Request class // kapp.bw.JSONRequest = function(url) { this.url = url; // REST request path this.noCache = '&noCache=' + (new Date()).getTime(); // Keep IE from caching requests this.headLoc = document.getElementsByTagName("head").item(0); // Get the DOM location to put the script tag this.scriptId = 'kosmix_script_id_' + kapp.bw.scriptCounter++; // Generate a unique script tag id this.get = function(url) { this.scriptObj = document.createElement("script"); // Create the script tag this.scriptObj.setAttribute("type", "text/javascript"); // Add script object attributes this.scriptObj.setAttribute("src", this.url + this.noCache); this.scriptObj.setAttribute("id", this.scriptId); this.headLoc.appendChild(this.scriptObj); // Add script tag to page to initiate JSON loading } this.cleanUp = function() { this.headLoc.removeChild(this.scriptObj); // Destroy the script tag } } // Perform a JSON request. The script that is loaded determines the callback function. kapp.bw.doJSONRequest = function(url) { req = new kapp.bw.JSONRequest(url); kapp.bw.requestObjs.push(req); req.get(); } // Retrieve keywords kapp.bw.getKeywords = function () { p = kapp.bw.keywordsUrl + '?url=' + encodeURIComponent(location.href); kapp.bw.doJSONRequest(p); } // Retrieve content for a given keyword kapp.bw.requestContent = function(keyword) { p = kapp.bw.contentUrl + '&q=' + keyword + '&id=' + keyword + '&noads=1&nrt=' + kapp.bw.relatedTopics; kapp.bw.doJSONRequest(p); } // Open popup on onHover kapp.bw.openPopup = function(obj, keyword) { var content = 'Loading...'; kapp.bw.viewing = keyword; // If we don't have content, request it. if (!kapp.bw.keywordContent[keyword]) { kapp.window.infoPop(obj, 'open_horizontal_loading', '

Loading...
', 250, '', kapp.bw.popupDelay); kapp.bw.timeout = setTimeout("kapp.bw.requestContent('"+keyword+"');", kapp.bw.popupDelay); } // If we've stored content, show it directly. else { content = kapp.bw.keywordContent[keyword].content; document.getElementById('infoPopFill').innerHTML = content; kapp.window.infoPop.object = obj; kapp.window.infoPop(obj, 'open_horizontal_loading_recall', content, 450, '', kapp.bw.popupDelay); } } // Close popup when leaving kapp.bw.closePopup = function(obj) { kapp.window.infoPop(obj, 'close_horizontal_loading', '', '', '', 0); // Cancel content retrieval if moved out of hover. Only clear if timeout is running if (kapp.bw.timeout!="") { clearTimeout(kapp.bw.timeout); kapp.bw.timeout = ""; } } // Creates a regexp string from keyword list kapp.bw.queryRegExp = function (query) { var qre = new Array(); for (var i = 0; i < query.length; i ++) { query[i][0] = query[i][0].toLowerCase(); if (kapp.bw.exactMatch) // exact match qre.push('\\b'+query[i][0]+'\\b'); else qre.push(query[i][0]); } return new RegExp(qre.join("|"), "i"); } // Removes an element from the keyword query array kapp.bw.reduceQuery = function (query, val) { var newquery = new Array(); for(var i=0; i < query.length; i++) if (query[i][0].toLowerCase()!=val.toLowerCase()) newquery.push(query[i]); return newquery; } // Utility function to add events to an element kapp.bw.addEvent = function(elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; } else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r; } else { elm['on' + evType] = fn; } } // Add keywords to page kapp.bw.addKeywords = function (data) { var elem = document.getElementById(kapp.bw.contentElementName) || document.body; var qre = kapp.bw.queryRegExp (data); var textproc = function(node) { var match = qre.exec(node.data); if (match) { var val = match[0]; var k = ''; var node2 = node.splitText(match.index); var node3 = node2.splitText(val.length); var tag = document.createElement('span'); node.parentNode.replaceChild(tag, node2); tag.style.textDecoration = "none"; tag.style.borderBottom = "1px solid orange"; tag.style.fontWeight = "bold"; tag.style.cursor = "pointer"; tag.appendChild(node2); tag.innerHTML = val; kapp.bw.addEvent(tag, 'mouseover', function() {kapp.bw.openPopup(tag, val);}, false ); kapp.bw.addEvent(tag, 'mouseout', function() {kapp.bw.closePopup(tag);}, false ); // If found, remove query from qre. Only one instance of keyword on page data = kapp.bw.reduceQuery(data,val); qre = kapp.bw.queryRegExp (data); if (data.length==0) kapp.bw.stopMatching = true; return tag; } else { return node; } }; kapp.bw.walkElements(elem.childNodes[0], 1, textproc); } // Walk through DOM, searching and replacing content in nodes kapp.bw.walkElements = function(node, depth, textproc) { var skipre = /^(script|style|textarea|h1|h2|h3|h4|h5|a)/i; // Tags not to search in var count = 0; while (node && depth > 0) { count ++; if (count >= kapp.bw.maxElements) { var handler = function() { kapp.bw.walkElements(node, depth, textproc); }; setTimeout(handler, 50); return; } if (node.nodeType == 1) { // ELEMENT_NODE if (!skipre.test(node.tagName) && node.childNodes.length > 0) { node = node.childNodes[0]; depth ++; continue; } } else if (node.nodeType == 3) { // TEXT_NODE node = textproc(node); if (kapp.bw.stopMatching) break; } if (node.nextSibling) { node = node.nextSibling; } else { while (depth > 0) { node = node.parentNode; depth --; if (node.nextSibling) { node = node.nextSibling; break; } } } } }; // Add content to a popup kapp.bw.addKeywordContent = function (data) { kapp.bw.keywordContent[data.id] = data; if (kapp.bw.viewing == data.id) { // Only set contents if we are still viewing it. var div = document.getElementById('infoPopFill'); div.innerHTML = data.content; try{ if(document.getElementById('infoPop').style.display == 'block') kapp.window.infoPop(kapp.window.infoPop.object, 'open_loading_horizontal_recall','none', 450, 'none', 0); }catch(err){} } } // Callbacks kapp.bw.keywordsCallback = function(data) { kapp.bw.addKeywords(data); } kapp.bw.contentCallback = function(data) { kapp.bw.addKeywordContent(data); } // Add a load event kapp.bw.addLoadEvent = function (func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } // onLoad event - load necessary code kapp.bw.onLoad = function() { // Load window library headLoc = document.getElementsByTagName("head").item(0); // Get the DOM location to put the script tag scriptObj = document.createElement("script"); // Create the script tag scriptObj.setAttribute("type", "text/javascript"); // Add script object attributes scriptObj.setAttribute("src", "http://www.kosmix.com/js/window.js"); headLoc.appendChild(scriptObj); // Add script tag to page to initiate JSON loading // Add styles styleObj = document.createElement("style"); styleObj.setAttribute("type", "text/css"); var cssStr = kapp.bw.getStyling(); if(styleObj.styleSheet){// IE styleObj.styleSheet.cssText = cssStr; } else {// w3c var cssText = document.createTextNode(cssStr); styleObj.appendChild(cssText); } headLoc.appendChild(styleObj); // Add html for popup bubble bodyLoc = document.getElementsByTagName("body").item(0); divObj = document.createElement("div"); divObj.innerHTML = kapp.bw.getPopupHTML(); bodyLoc.appendChild(divObj); } // Styles for popup kapp.bw.getStyling = function () { var s = ""; s += " td.infoPop_top_1 { background: url(http://www.kosmix.com/img/popup/topLeft-white.png) no-repeat; height:60px; padding-right:50px; }"; s += " td.infoPop_arrowTop { background: url(http://www.kosmix.com/img/popup/arrowTop-white.png) no-repeat; height:60px; padding-right:36px; }"; s += " td.infoPop_tdTop { background: url(http://www.kosmix.com/img/popup/topRepeat-white.png) repeat-x; height:60px; width:100%; }"; s += " td.infoPop_top_2 { height:60px; width:100%; }"; s += " td.infoPop_top_3 { background: url(http://www.kosmix.com/img/popup/topRight-white.png) no-repeat; height:60px; padding-right:56px; border:solid 0px red; }"; s += " td.infoPop_mid_1 { background: url(http://www.kosmix.com/img/popup/leftRepeat-white.png) repeat-y; vertical-align:top; height:auto; }"; s += " div.infoPop_arrowLeft { background: url(http://www.kosmix.com/img/popup/arrowLeft-white.png) no-repeat; height:45px; width:58px; display:none; }"; s += " td.infoPopFill { font:normal 12px Arial;background-color: #FFFFFF; height:auto; width:100%; }"; s += " td.infoPop_mid_3 { background: url(http://www.kosmix.com/img/popup/rightRepeat-white.png) repeat-y; vertical-align:top; height:auto; border:solid 0px red; }"; s += " div.infoPop_arrowRight { background: url(http://www.kosmix.com/img/popup/arrowRight-white.png) no-repeat; height:47px; width:64px; display:none; border:solid 0px blue; }"; s += " div.infoPop_arrowRight_wrap { background: url(http://www.kosmix.com/img/popup/arrowRight_wrap.gif) no-repeat; height:47px; width:64px; display:none; border:solid 0px blue; }"; s += " td.infoPop_bottom_1 { background: url(http://www.kosmix.com/img/popup/bottomLeft-white.png) no-repeat; height:61px; padding-right:53px; }"; s += " td.infoPop_arrowBottom { background: url(http://www.kosmix.com/img/popup/arrowBottom-white.png) no-repeat; height:61px; padding-right:36px;}"; s += " td.infoPop_tdBottom { background: url(http://www.kosmix.com/img/popup/bottomRepeat-white.png) repeat-x; height:61px; width:100%; }"; s += " td.infoPop_bottom_2 { height:61px; width:100%; }"; s += " td.infoPop_bottom_3 { background: url(http://www.kosmix.com/img/popup/bottomRight-white.png) no-repeat; height:61px; padding-right:56px; border:solid 0px red; }"; s += " * html td.infoPop_top_1 { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/topLeft-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_arrowTop { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/arrowTop-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_tdTop { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/topRepeat-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_top_3 { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/topRight-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_mid_1 { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/leftRepeat-white.png', sizingMethod='scale'); }"; s += " * html div.infoPop_arrowLeft { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/arrowLeft-white.png', sizingMethod='scale'); }"; s += " * html td.infoPopFill { font:normal 12px Arial;background-color: #FFFFFF; height:auto; width:auto; }"; s += " * html td.infoPop_mid_3 { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/rightRepeat-white.png', sizingMethod='scale'); }"; s += " * html div.infoPop_arrowRight { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/arrowRight-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_bottom_1 { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/bottomLeft-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_arrowBottom { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/arrowBottom-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_tdBottom { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/bottomRepeat-white.png', sizingMethod='scale'); }"; s += " * html td.infoPop_bottom_3 { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.kosmix.com/img/popup/bottomRight-white.png', sizingMethod='scale'); }"; // Styles for popup content s += "#kosmix_bw {margin:0;padding:0;font:normal 11px Arial, Helvetica, sans-serif;text-align:left;text-transform:none;letter-spacing:normal}"; s += "#kosmix_bw a {margin:0;padding:0;color:#0066CC;text-decoration:none;}"; s += "#kosmix_bw a img {border:0}"; s += "#kosmix_bw a:hover {text-decoration:underline; color:#EB8313; }"; s += "#kosmix_bw p {margin:10px 0 0 0;padding:0;}"; s += "#kosmix_bw h1 {margin:0;padding:0;font:bold 15px Arial, Helvetica, sans-serif;background:none;border:0}"; s += "#kosmix_bw h2 {clear:both;font:bold 13px Arial, Helvetica, sans-serif;color:#555;margin:1.0em 0 0.3em 0;padding:0;text-transform:none;letter-spacing:normal;border:0}"; s += "#kosmix_bw table,#kosmix_bw td,#kosmix_bw tr {margin:0;padding:0}"; s += "#kosmix_bw img.kosmix_bw_thumb {float:left;margin:10px 10px 0 0;height:60px;padding:0}"; s += "#kosmix_bw .kosmix_bw_explore {table-layout:fixed;border:1px solid #ccc;font:normal 11px Arial, Helvetica, sans-serif;}"; s += "#kosmix_bw .kosmix_bw_explore td {cursor:pointer;white-space: nowrap; padding:2px;border-right:1px solid #ccc;border-bottom:1px solid #ccc;font:normal 11px Arial, Helvetica, sans-serif;}"; s += "#kosmix_bw .kosmix_bw_explore td.kosmix_bw_active {background-color:#ddd}"; s += "#kosmix_bw .kosmix_bw_explore td.kosmix_bw_active a {color:#EB8313}"; return s; } // HTML for popup kapp.bw.getPopupHTML = function() { var s = ""; s += ""; s += "  "; s += " "; s += " "; s += " "; s += "
 
"; s += "  "; s += "
 
"; s += " "; s += " "; s += " "; s += "  "; s += "
  
"; s += "  "; s += " "; s += ""; s += ""; return s; } // Load keywords kapp.bw.getKeywords(); kapp.bw.addLoadEvent(kapp.bw.onLoad);