// 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 += "   | ";
s += "
";
s += "";
s += "
";
return s;
}
// Load keywords
kapp.bw.getKeywords();
kapp.bw.addLoadEvent(kapp.bw.onLoad);