var ActualTextElem;
var pageextract;
var source;
var provider;
var MultiTab;
var sensefolder;

function isOldIE() {
  if (navigator.appVersion.indexOf("MSIE") == -1) return false;
  var temp=navigator.appVersion.split("MSIE");
  return parseFloat(temp[1]) < 7;
}

function sbInText(numtabs, folder){
sensefolder = folder;
if (numtabs == 0)
    MultiTab = false;
else
    MultiTab = true;

if (isOldIE())       
    prehtml2 = (MultiTab==true) ? '<iframe style=%22background-color:#F2F2F2;%22 width=485 height=150 src=' :
                                '<iframe style=%22background-color:#F2F2F2;%22 width=360 height=150 src=';
else
    prehtml2 = (MultiTab==true) ? '<iframe style=%22background-color:#F2F2F2;%22 width=485 height=150 src=' :
                                '<iframe style=%22background-color:#F2F2F2;%22 width=360 height=130 src=';

midhtml2 = (MultiTab==true) ? '\',1,485)\">' :
                                '\',1,360)\">';

var headID = window.document.getElementsByTagName("head")[0];
var newScript = window.document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://yui.yahooapis.com/2.3.0/build/yahoo-dom-event/yahoo-dom-event.js';
headID.appendChild(newScript);
newScript = window.document.createElement('script');
newScript.type = 'text/javascript';
//newScript.src = 'http://www.sensebot.net/balloon.js';
newScript.src = folder + 'balloon.js';

headID.appendChild(newScript);

var arStart = new Array(
'class=\"entries\"',
'class=\"entry_body_post\"',
'class=\"entry_body_text\"',
'class=\"entry-body\"',
// WP:
'class=\"entry\"',
// Blogger:         
'class=\'post-body entry-content\'',
'class=\"post-body\"',
// Other:
'class=\"postBody\"',
'class=\"article\"',
'class=\"storycontent\"',
'class=\'story\'',
'class=\"postcontent\"',
'class=\"post\"',
'class=\"asset-body\"',
'class=\"blogContent\"',

'id=\"article\"',
'id=\"content\"',
'id=\"Output\"'
);

pageextract = "";
source = "";
provider = "Blog";

for (j=0; j < arStart.length; j++)
{
    if (arStart[j].substring(0, 5) == 'class')
        getContentByDivClass(arStart[j].substring(6));
    else if (arStart[j].substring(0, 2) == 'id')
        getContentByDivId(arStart[j].substring(3));
    else
        continue;
    
    if (pageextract != "")
    {
        source = arStart[j];
        provider = "Related articles";
        break;
    }
}        
if (pageextract == "")
{
	return;
}

var numconcepts = 3;
var sbUrl = folder + 'extconcone.aspx?' + 'userName=' + window.location.hostname + '&numConcepts=' + numconcepts + '&artClass=' + source + '&artLength=' + pageextract.length
+ '&allURLs=' + escape(window.location.href);

  var obj=new JSONscriptRequest(sbUrl);
  if (obj == null)
    return;
    
  obj.buildScriptTag();
  obj.addScriptTag();

return; 
}


function getContentByDivClass(DivClass)
{
    if (DivClass.charAt(0) == '\"'  ||  DivClass.charAt(0) == '\'')
        DivClass = DivClass.substring(1, DivClass.length - 1);
    var tempArray = getElementsByClassName(DivClass, 'div' );
    if (tempArray.length > 0)
    {
	    ActualTextElem = tempArray[0];
	    var fullpagestr = ActualTextElem.innerHTML;
	    pageextract = fullpagestr;
    }
}

function getContentByDivId(DivId)
{
    if (DivId.charAt(0) == '\"')
        DivId = DivId.substring(1, DivId.length - 1);

    ActualTextElem = window.document.getElementById(DivId);
    if (ActualTextElem)
    {
	    var fullpagestr = ActualTextElem.innerHTML;
	    pageextract = fullpagestr;
    }
}

var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
  {// code for all new browsers
  xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// code for IE5 and IE6
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if (xmlhttp!=null)
  {
  xmlhttp.onreadystatechange=state_Change;
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
  }
else
  {
  alert("Your browser does not support XMLHTTP.");
  }
}

function state_Change()
{
if (xmlhttp.readyState==4)
  {
  if (!xmlhttp.status||xmlhttp.status==200)
    {
	processResults(xmlhttp.responseText);
    }
  else
    {
    alert(xmlhttp.status);
    }
  }
}
 
function processResults(ListOfConcepts)
{
    if (ListOfConcepts == null  ||  ListOfConcepts == "")
        return;

   	if (ListOfConcepts.indexOf("Authentication failed") >= 0)
	{
		alert("Your access credentials for LinkSensor have expired - please contact www.LinkSensor.com.");
		return;
	}

	var	indconstart = 0;
	var indconnext;
	var curcon;
	var bMarked;
	var MAX_CONCEPTS = 3;
	var totalMarked = 0;
	var ArCon = new Array();
	var j=0;

	for (var i=0; i < MAX_CONCEPTS; i++)
	{
		indconnext = ListOfConcepts.indexOf(":", indconstart);
		if (indconnext == -1)
			break;
		curcon = ListOfConcepts.substring(indconstart, indconnext);
		ArCon[j] = curcon;
		j++;
		indconstart = indconnext + 3;	// skip :,1,space
	}

    ArCon.sort(function(a,b){return b.length - a.length});

	for (i=0; i < ArCon.length  &&  totalMarked < MAX_CONCEPTS; i++)	// take up to 3 only
	{
		bMarked = markConcept(ArCon[i]);
		if (bMarked)
		    totalMarked++;
    }
} 

    function markConcept(concept)
    {
        var bMarked = false;
	    var indconnext;
	    var condition = new RegExp("[ (/>)\\(\\r\\n\\t]" + concept + "[ \\.,;:!\\?\\)\\r\\n\\t]", "gi");
        var myArray;
        while ((myArray = condition.exec(ActualTextElem.innerHTML)) != null)	{	// TODO: need to allow br or p in front, or crlf
		    indconnext = myArray.index;
		    // check if not inside an <a tag
		    var indAtag = ActualTextElem.innerHTML.lastIndexOf('<a ', indconnext);
		    if (indAtag == -1)
		        indAtag = ActualTextElem.innerHTML.lastIndexOf('<A ', indconnext);
		    if (indAtag >= 0)
		    {
		        var indClosetag = ActualTextElem.innerHTML.lastIndexOf('</a>', indconnext);
		        if (indClosetag == -1)
		            indClosetag = ActualTextElem.innerHTML.lastIndexOf('</A>', indconnext);
		        if (indClosetag == -1  ||  indClosetag < indAtag)
                {
                    condition.lastIndex = indconnext + 1 + concept.length;
                    continue;
                }
		    }    
		    indAtag = ActualTextElem.innerHTML.lastIndexOf('<img', indconnext);
		    if (indAtag >= 0)
		    {
		        var indClosetag = ActualTextElem.innerHTML.lastIndexOf('>', indconnext);
		        if (indClosetag == -1  ||  indClosetag < indAtag)
                {
                    condition.lastIndex = indconnext + 1 + concept.length;
                    continue;
                }
		    }    
		    prelength = ActualTextElem.innerHTML.length;
		    turnIntoLink(ActualTextElem.innerHTML.substring(indconnext+1, indconnext+1 + concept.length), indconnext+1);
		    bMarked = true;
		    condition.lastIndex += ActualTextElem.innerHTML.length - prelength;
	    }
	    return bMarked;
    }

var prehtml = '<a style=\"text-decoration: none; color: #CD6F6F; border-bottom: 3px double;\" href=\"#\" onmouseover=\"whiteBalloon = new Balloon; whiteBalloon.showTooltip(event,\'';

var prehtml2;

var midhtml = '></iframe>';

var midhtml2;

var posthtml = '</a>';

function turnIntoLink(concept, indconnext)
{
	var editedtext = ActualTextElem.innerHTML.substring(0, indconnext) +
				prehtml +
				prehtml2 +
				(MultiTab==false ? escape('\"' + sensefolder + 'sensetabTwo.htm?concept=') : escape('\"' + sensefolder + 'sensetabAd.htm?concept=')) + escape(concept) + escape('&provider=') + escape(provider) + escape('&story=') + escape(window.location.href) + escape('\"') + 
                midhtml +
                midhtml2 +
				concept + 
				posthtml +
				ActualTextElem.innerHTML.substring(indconnext + concept.length);
	ActualTextElem.innerHTML = editedtext;
}


function getElementsByClassName(className, tag, elm){

	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elements = window.document.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}	
	}
	return returnElements;
}

