// $Id: link.js,v 1.53 2008/02/26 22:51:59 spal Exp $
// $Source: /export/cvsrepository/healthline/web/www_root/js/partner/mw/link.js,v $
// Configuration

if (typeof(healthlineSearchTerm) == 'undefined') {
  hlSearchTerm = 'health';
} else {
  hlSearchTerm = hlTrim(healthlineSearchTerm);
  if (hlSearchTerm === '') {
    hlSearchTerm = 'health';
  }
}
hlBaseURL = typeof(healthlineHost) == 'undefined' ? 'http://www.healthline.com' : 'http://' + healthlineHost;
hlArticleCount = typeof(healthlineArticleCount) == 'undefined' ? 1 : healthlineArticleCount;
hlMaxArticleTitleLength = typeof(healthlineMaxArticleTitleLength) == 'undefined' ? 57 : healthlineMaxArticleTitleLength;
hlPopupWidth = typeof(healthlinePopupWidth) == 'undefined' ? 640 : healthlinePopupWidth;
hlPopupHeight = typeof(healthlinePopupHeight) == 'undefined' ? 480 : healthlinePopupHeight;

// Load phase

hlGetHealthlineLink();

function hlGetHealthlineLink() {
  document.write(
    '<style type="text/css">\n' +
    '.hlcomplexityorange {\n' +
    '  color:#CC6600;\n' +
    '}\n' +
    'a.hlcomplexityorange {\n' +
    '  text-decoration:none;\n' +
    '}\n' +
    'a.hlcomplexityorange:hover {\n' +
    '  text-decoration:underline;\n' +
    '}\n' +
    '</style>\n' +
    '<div id="healthlineLink"></div>\n');
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = hlBaseURL + '/service/1.0/term?output=json&callback=hlGetHealthlineTermCallback&searchTerms=' + hlSearchTerm + '&count=' + hlArticleCount + '&partnerId=51482318-2b3e-4a9c-8ea5-276676c56730';
  document.getElementsByTagName('head')[0].appendChild(script);
}

// Term Callback

function hlGetHealthlineTermCallback(response){
  var items = response.rss.channel.item;
  items = hlToArray(items);
  var searchItem = items[0];
  var isHealthRelated = searchItem.isHealthRelated.$ == 'true';
  if(isHealthRelated){
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = hlBaseURL + '/service/1.0/allContent?output=json&callback=hlGetHealthlineLinkCallback&searchTerms=' + hlSearchTerm + '&count=' + hlArticleCount + '&partnerId=51482318-2b3e-4a9c-8ea5-276676c56730';
    document.getElementsByTagName('head')[0].appendChild(script);
  }
}

// Link Callback

function hlGetHealthlineLinkCallback(response) {
  var items = response.rss.channel.item;
  items = hlToArray(items);
  var searchItem = items[0];
  var isHealthRelated = searchItem.isHealthRelated.$ == 'true';
  var articles = hlGetArticles(items);
  var healthMaps = hlGetHealthMaps(items);
  // Return content only if isHealthRelated to avoid problem terms
  //if (! isHealthRelated && articles.length === 0 && healthMaps.length === 0) {
  if (! isHealthRelated) {
    return;
  }
  var html = "";
  var term = searchItem.title.$;
  var searchLink = hlInstrument(hlBaseURL + searchItem.link.$, term, 'serp');
  var trackerLink = hlUrchinTracker
  if (articles.length > 0) {
    html += hlGetArticlesHTML(term, searchLink, articles);
  }
  if (healthMaps.length > 0) {
    html += hlGetHealthMapsHTML(term, searchLink, healthMaps);
  }
  if (articles.length === 0 && healthMaps.length === 0) {
    html += hlGetSearchHTML(term, searchLink);
  }
  var healthlineLinkDiv = document.getElementById('healthlineLink');
  healthlineLinkDiv.innerHTML = html;
}

// General-purpose

function hlTrim(string) {
  return string.replace(/^\s+/, '').replace(/\s+$/, '');
}

function hlToArray(object) {
  if (typeof(object.length) == "number") {
    return object;
  }
  var array = new Array();
  array.push(object);
  return array;
}

function hlInstrument(url, term, campaign) {
  var instrumentedURL = url;
  instrumentedURL += instrumentedURL.indexOf('?') == -1 ? '?' : '&';
  instrumentedURL += 'utm_term=' + escape(term) + '&utm_medium=mw&utm_campaign=' + campaign;
  return instrumentedURL;
}

function hlUrchinTracker(term, campaign) {
  var urchinTracker = 'javascript:urchinTracker(\'/outbound/healthline/' + campaign + '/' + escape(term) + '\')';
  return urchinTracker;
}

// Articles

function hlGetArticles(items) {
  var articles = new Array();
  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    var categories = item.category;
    if (typeof(categories.length) == "number") { // Only articles have > 1 category
      articles.push(item);
    }
  }
  return articles;
}

function hlGetArticlesHTML(term, searchLink, articles) {
  var html =
    'Physician-reviewed articles on <b>' + term + '</b> on ' +
    '<a href="' + searchLink + '" onclick="' + hlUrchinTracker(term,'serp') + '">Healthline</a>.<br />';
  for (var i = 0; i < articles.length; i++) {
    var article = articles[i];
    var link = hlInstrument(hlBaseURL + article.link.$, term, 'article');
    var urchinTrackerUrl = hlUrchinTracker(term, 'article');
    var title = article.title.$;
    title = title.charAt(0).toUpperCase() + title.substring(1);
    var imageCount = article.imageCount.$;
    var imageCountText = imageCount === 0 ? '' : (' (' + imageCount + ' image' + (imageCount == 1 ? '' : 's') + ')');
    var description = article.description.$;
    if (description.length > hlMaxArticleTitleLength) {
      description = description.substring(0, hlMaxArticleTitleLength) + '...';
    }
    html +=
      (i + 1) + '. <a href="' + link + '" onclick="' + urchinTrackerUrl + '">' + title + imageCountText + '</a><br />' + description;
  }
  return html;
}

function hlGetTrustMarkText(article) {
  var categories = article.category;
  var trustMarks = new Array();
  for (var c = 0; c < categories.length; c++) {
    var category = categories[c];
    var domain = category["@domain"];
    if (domain == 'trustMark') {
      trustMarks.push(category);
    }
  }
  var trustMarkText;
  if (trustMarks.length === 0) {
    trustMarkText = '';
  } else {
    trustMarkText = ' <span class="hlcomplexityorange">(Trust Mark: ';
    for (var i = 0; i < trustMarks.length; i++) {
      var text = trustMarks[i].$;
      trustMarkText += '<a class="hlcomplexityorange" onclick="hlPopUp(this.href);return false;" ' +
        'target="healthlineLicense" href="' + hlBaseURL;
      if (text == 'doctorReviewed') {
        var contentType = hlGetContentType(article);
        if (contentType == 'content/adam') {
          trustMarkText += '/popup_adamlicense.jsp';
        } else if (contentType == 'content/gale') {
          trustMarkText += '/popup_galelicense.jsp';
        } else if (contentType == 'content/yodo') {
          trustMarkText += '/popup_doctorreviewed.jsp';
        } else if (contentType == 'content/multum') {
          trustMarkText += '/popup_multumlicense.jsp';
        }
      } else if (text == 'URAC') {
        trustMarkText += '/popup_urac.jsp';
      } else if (text == 'HONCode') {
        trustMarkText += '/popup_honcode.jsp';
      }
      trustMarkText += '">';
      if (text == 'doctorReviewed') {
        trustMarkText += 'Doctor-Reviewed';
      } else {
        trustMarkText += text;
      }
      trustMarkText += '</a>';
      if (i != trustMarks.length - 1) {
        trustMarkText += ', ';
      }
    }
    trustMarkText += ')</span>';
  }
  return trustMarkText;
}

function hlGetContentType(article) {
  var categories = article.category;
  for (var i = 0; i < categories.length; i++) {
    var category = categories[i];
    var domain = category['@domain'];
    if (domain == 'content') {
      return category.$;
    }
  }
  return 'unknown';
}

function hlPopUp(url){
  window.open(url, 'newWin', 'toolbar,menubar,scrollbars,resizable,location,status,titlebar,' +
    'height=' + hlPopupHeight + ',width=' + hlPopupWidth + ',top=100,left=100');
}

// HealthMaps

function hlGetHealthMaps(items) {
  var healthMaps = new Array();
  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    var categories = item.category;
    if (typeof(categories.length) == "undefined" && categories.$ == "healthMap") {
      healthMaps.push(item);
    }
  }
  return healthMaps;
}

function hlGetHealthMapsHTML(term, searchLink, healthMaps) {
  var links = "";
  for (var i = 0; i < Math.min(healthMaps.length, 2); i++) {
    var healthMap = healthMaps[i];
    var link = hlInstrument(hlBaseURL + healthMap.link.$, term, 'hmap');
    var urchinTrackerUrl = hlUrchinTracker(term, 'hmap');
    var title = healthMap.title.$;
    links += (i + 1) + '. <a href="' + link + '" onclick="' + urchinTrackerUrl + '">' + title + '</a><br />';
  }
  var html =
    '<table cellpadding="0" cellspacing="0" style="margin-top:10px">' +
      '<tr>' +
        '<td colspan=2>' +
          'Visually explore <b>' + term + '</b> HealthMaps on ' +
            '<a href="' + searchLink + '" onclick="' + hlUrchinTracker(term, 'serp') + '">Healthline</a>:<br />' +
        '</td>' +
      '</tr>' +
        '<td width="30"><img src="' + hlBaseURL + '/images/nav_widget_map_icon.gif" title="Click a link to view a HealthMap" border="0" /></td>' +
        '<td>' + links + '</td>' +
      '</tr>' +
    '</table>';
  return html;
}

// Search

function hlGetSearchHTML(term, searchLink) {
  var html =
    '<table>' +
      '<tr>' +
        '<td><a href="' + searchLink + '" onclick="' + urchinTrackerUrl + '"><img src="' + hlBaseURL + '/images/icon_caduceus.gif" alt="Healthline" border="0" /></a></td>' +
        '<td>' +
          'Find Medically Guided Search<sup>SM</sup> results for ' +
          '<a href="' + searchLink + '" onclick="' + urchinTrackerUrl + '">' + term + '</a> ' +
          'on ' +
          '<a href="' + searchLink + '" onclick="' + urchinTrackerUrl + '">Healthline</a>.' +
        '</td>' +
      '</tr>' +
    '</table>';
  return html;
}
