// somehow IE for cmp pages requires these 2 lines before modifying document.domain
var url_curr = document.location.href; 
var url_prev = document.referrer;
document.domain = document.domain.substring(document.domain.lastIndexOf(".", document.domain.lastIndexOf(".")-1)+1, document.domain.length);

if ( browser_type() != 'ie') exit;
var base_href = "http:/" + "/targetlink." + document.domain;
var url = base_href + "/targetlink.php";
url = url + "?url=" + url_curr + "&byline=" + escape(getByline());
var _targetlinkstat_script = base_href + "/targetlinkstat.php";
var _targetlinkstat_beacons = Array();
var _targetlinkstat_count = 0;	  

window.onload = targetlink;
document.write('<script src=' + base_href + '/overlib.js><\/script>');

var d1, t1;
var d2, t2;
var d3, t3;

// targetlink main function
function targetlink()
{
  d1 = new Date(); t1 = d1.getTime(); 
  // alert("in targetlink()");
  create_iframe_call_server();   
  // register_event(1, 0); // commented out to reduce load
}

function browser_type()
{
  var b=navigator.appName.toUpperCase();

  if (b=="NETSCAPE") 
	return "ns";
  else if (b=="MICROSOFT INTERNET EXPLORER") 
	return "ie";
  else if (b=="OPERA") 
	return "op";
  else 
	return "unknown";
}

// return byline of the page: SHOULD add check for company url?
function getByline()
{
  // alert(s_prop7);
  return s_prop7; // ride the omniture train
}

// create an iframe that calls the server
function create_iframe_call_server()
{
  var IFrameObj;

  /* use DOM creation of IFRAME to cure Safari "blanking-out" problem */
  IFrameObj = document.createElement('iframe');
  IFrameObj.frameBorder = 0;
  IFrameObj.height = 0;
  IFrameObj.width = 0;
  IFrameObj.id = "TargetFrame";
  IFrameObj.className = "markedtargetlink";

  document.body.appendChild(IFrameObj);

  if (IFrameObj.contentDocument) {    // For NS6
    var IFrameDoc = IFrameObj.contentDocument; 
    IFrameDoc.location.replace(url);    
  } 
  else { 
    IFrameObj.src = url;
  }
}

// this function is called by the Iframe
var tl_counter = 0;
function jsCallback(res)
{
  // alert("res:" + res);
  if ( tl_counter>0 ) // prevent recursive calling
    return;
  parse_response(res); 
  tl_highlight();
  tl_counter++;
}

var tl_mterm          = 3; // max #. uniq terms to highlight on a page

// minstanceXterm DOES NOT quite work: repetitive tagging. set to 1 for safety
var tl_minstanceXterm = 1; // max #. instances per term
var tl_minstance      = tl_mterm*tl_minstanceXterm; // max #. total instances on a page


var tl_nterm          = 0; // actual #. highlighted terms
var tl_termXninstance = {}; // hash: actual # instances for term
var tl_ninstance      = 0; // actual total #. instances
var tl_termXre = {}; // hash: compile regexp for term
var tl_termXlinks = {}; // hash: the "links" stuff for a term

// parse response into global variables
function parse_response(res)
{
  // alert(res);
  var lines = res.split(/\n*\s*<BR\/?>\s*/i);
  var elements, style, minstance, header, footer, term, id;
	
  var re = new RegExp("http://[^\'\"\>]*");
  var pre_link = '<span class=tl_elink style="display: list-item; margin-left: 4px; font-family: verdana; font-size: x-small;"> &raquo;';
  var post_link = '</span>';

  var idx, link_id, anchor;
  for(var i=0; i<lines.length; i++)
  {
    elements = lines[i].split("^");

    style     = elements[0];
    minstance = elements[1];
    header    = elements[2];
    footer    = elements[3];
    term      = elements[4];
    id        = elements[5];
 
    // alert(elements[6]);
    // from element[6] onto end are ^link_id1:hypertext^..

    var links = '';  
    //links += '<div class=tl_box style="border: solid 1px #006699; width: 250; background-color: white;">';
    links += "<div class=tl_box style='border:solid 1px #006699'>";
    links += '  <div class=tl_header style="font-weight: bold; background-color: white; width: 250;"> Related Info </div>';
    links += '  <div class=tl_body style="background-color:#EDECDF; width: 250; font-weight: normal;">';
    links += '  <div class=tl_elink_box>';
    links += '    <span class=tl_elink_header> </span>';
    for (var j=6; j<elements.length; j++) {
    /*
      if ( 'sponsor links' == elements[j] ) {
	links += '</div>';
        links += '<div class=tl_slink_box>';
        links += '<div class=tl_slink_header> sponsor links </div>';
      }
      else
    */

      idx = elements[j].indexOf(":"); // http also has :
      link_id = elements[j].substring(0,idx);
      anchor = elements[j].substr(idx+1);

      var url_next = anchor.match(re);
      url_next = _targetlinkstat_script + "?type_id=4&node_id=" + link_id + "&r=" +Math.random() + "&url_curr=" + escape(url_curr) + "&url_prev=" + escape(url_prev) + "&url_next=" + url_next;
      links  += pre_link + anchor.replace(re, url_next) + post_link;
    }
    links += '</div></div><div class=tl_footer></div></div>';
    // alert(links);

    tl_termXninstance[term] = 0;
    tl_termXre[term] = new RegExp().compile("\\b(" +term+ ")\\b(?![^<]*>)", "i");
    tl_termXlinks[term]     = links.replace(/"/g,'&quot;').replace(/'/g,"\\\'") ; // quotes
; 
  }
  
  d2 = new Date(); t2 = d2.getTime();
}

function tl_highlight()
{
  var divs = document.getElementsByTagName('div');
  var innerHTML;
  for ( var i=0, attrib; i<divs.length; i++ ) {
    attrib=divs[i].className; // IE doens't get right getAttribute('class');
    if ( attrib && attrib.match(/^targetlink$/i) ) {
      innerHTML = tl_highlight_innerHTML(divs[i].innerHTML);
      //alert(innerHTML);
      divs[i].innerHTML = innerHTML; // .replace(/tl_tag/gi,"span");
    }
  }  
  d3 = new Date(); t3 = d3.getTime();
  // alert((t3-t1) + ":" + t1 + "," + t2 + "," + t3);
  return;
}

// highlight the innerHTML of a tl node
function tl_highlight_innerHTML(innerHTML) 
{
  innerHTML = innerHTML.replace(/\s/g,' ');
  // alert(innerHTML);
  var rand; // intermediate random number to prevent over-replacement
  var randXinstance = new Object(); // hash rand=>actual replacement

  OUTERLOOP:
  for (var j=0; j<tl_minstanceXterm; j++) 
  { 
    for (var term in tl_termXlinks) 
    {
      if ( tl_minstance <= 0 ) // max#instance exhausted, return
	break OUTERLOOP; // return innerHTML; 
      if ( (tl_nterm>=tl_mterm && tl_termXninstance[term]==0)
        || tl_termXninstance[term]>tl_minstanceXterm)
        continue; // a new term after max#term reached, or max#instance/term reached, skip the term

//      var re = new RegExp().compile("\\b(" + term + ")\\b(?!([^<]*>|[^<]*<\/tl_tag>))", "i"); // NOT before > or </tl_tag>
      var re = new RegExp().compile("\\b(" + term + ")\\b(?![^<]*>)", "i"); // NOT before > 
      // var re = tl_termXre[term];
      var links = tl_termXlinks[term]; // alert(links);
      tl_style = "color: #ff0000; border-bottom: 3px dotted;";
      tl_header = "bogus header";
      rand = "r" + Math.floor(Math.random()*10000000) + "r";
      innerHTML = innerHTML.replace(re, rand);

      if ( RegExp.lastMatch != ' ' ) // replace occured
      { 
	randXinstance[rand] = "<span class=\"tl_instance\" onmouseover=\"register_event(3," + "111" + ");return overlib(\'" + links + "\', FULLHTML,TIMEOUT, 3000);\" onmouseout=\"return nd();\" style=\"" + tl_style + "\">" + RegExp.lastMatch + "</span>"; 
 	
        tl_minstance--;
        tl_termXninstance[term]++;
        if ( tl_termXninstance[term] == 1 )
          tl_nterm++;
	' '.match(/\s/); // trick to reset for judging next match
      }
    } // INNERLOOP
  } // OUTERLOOP

  for ( rand in randXinstance ) {
    // alert(rand + "=>" + randXinstance[rand]);
    re = new RegExp(rand,"");
    innerHTML = innerHTML.replace(re, randXinstance[rand]);
  }
  return innerHTML;
}

// for reports

function register_event(type_id, node_id)
{
  // alert("register_event(" + type_id + "," + node_id + ")");
  var url_beacon = _targetlinkstat_script + "?type_id=" + type_id + "&node_id=" + node_id + "&r=" +Math.random() + "&url_curr=" + escape(url_curr) + "&url_prev=" + escape(url_prev);
  // alert(url_beacon);
  _targetlinkstat_beacons[_targetlinkstat_count] = new Image();
  _targetlinkstat_beacons[_targetlinkstat_count].src = url_beacon;
  _targetlinkstat_count++;
}

function makeMatchNode(match, term)
{
	var style = term['style'];
	var header = term['header'];
	var links = term['links'];
	ol_texts[0] = links;
	var term_id = term['id'];

	register_event(2, term_id);

	var matchNode = document.createElement('span');
	matchNode.className = "markedtargetlink";
	matchNode.style.cssText = style; 
	// for opera but breaks netscape
	if ( navigator.userAgent.indexOf('Opera') != -1 )
		matchNode.style = style; 

	matchNode.onmouseover = function(){register_event(3, term_id); return overlib(links,FULLHTML, STICKY, MOUSEOFF);};

	matchNode.onmouseout  = function(){return nd();};

	matchNode.appendChild(document.createTextNode(match));

	return matchNode;
}


