function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}


/* -- New popup window script --*/
var win=null;
function NewWindow(mypage,myname,w,h,scroll){

LeftPosition=(screen.width)?(screen.width-w)/2:100;
TopPosition=(screen.height)?(screen.height-h)/2:100;

settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no';
win=window.open(mypage,myname,settings);}


	/******************************************************************
  Highlight and wrap text from an array with links to the glossary
	*******************************************************************/
	function highlightText(aSourceObject){
 
 var UNIQUE_TOKEN_1 = "#!#";
 var UNIQUE_TOKEN_2 = "_!_";
 var UNIQUE_TOKEN_3 = "_|_";
 var UNIQUE_TOKEN_4 = "|!|";
  
 // check for headings | strong | standard a tags | a tags with a nested image | any other tag ?
 regexp=/(<h[0-9]>[^<]*<\/h[0-9]>|<strong[^>]*>[^<]*<\/strong>|<a[^>]*>[^<]*<\/a>|<a[^>]*>[^<]*<img[^>]*><\/a>|<[^<>]*>)/ig;
 
 //Replace HTML tags with tokens, but store the matches
 //so we can inject the data back in
 vHTMLArray = document.getElementById(aSourceObject).innerHTML.match(regexp);
 vStrippedHTML = document.getElementById(aSourceObject).innerHTML.replace(regexp,UNIQUE_TOKEN_1);
 vTemp = vStrippedHTML;
 var vHTMLArray2 = new Array();
 
 //Loop through the text replacing search words
 //As I want the first instance of each word only, I cannot do this as 
 //a single line regexp query, eg (word1|word2|word3).  If we replaced 
 //all words (i.e. use the "g" or global switch, then I could.
 for (x=0;x<myWords.length;x++){
   regexp2= new RegExp ("(\\b("+myWords[x].Term+")\\b)", "i");

   //For every matched word add a new unique start/(wordID)/middle/end token inline
   //This is to work around accidentally adding a word/tag that may break valid HTML.
   vTemp = vTemp.replace(regexp2,UNIQUE_TOKEN_2 + x + UNIQUE_TOKEN_3  + '$1' + UNIQUE_TOKEN_4);
  }

 //Reinsert initial HTML tags
 for(i=0;vTemp.indexOf(UNIQUE_TOKEN_1) > -1;i++){
  //vTemp = vTemp.replace(UNIQUE_TOKEN_1, vHTMLArray[i]);
  // Rowen - this is to get around problem introduced by Coveo 5, where the string was being globally replaced by the first item in array  
  vTemp = eval("vTemp.replace(/" + UNIQUE_TOKEN_1 + "/, vHTMLArray[i])");  
 }
 
 //insert in order the new word replacement tags
 for(i=0;vTemp.indexOf(UNIQUE_TOKEN_2) > -1;i++){
  vTemp = vTemp.replace(UNIQUE_TOKEN_2, "<dfn class='tooltip_text' onClick='showToolTip(this,");
  vTemp = vTemp.replace(UNIQUE_TOKEN_3, ");return false;'>");
  vTemp = vTemp.replace(UNIQUE_TOKEN_4, "</dfn>");
 }
 
 //Display Result
 document.getElementById(aSourceObject).innerHTML = vTemp;
 //alert(vTemp);
}


/*************************** showToolTip ***************************/
	var posx = 0;
	var posy = 0;
	
	function showToolTip(el,wordID){
		if(document.all) el = event;
    
		var obj = document.getElementById('bubble_tooltip');
		var obj1 = document.getElementById('bubble_tooltip_title');
		var obj2 = document.getElementById('bubble_tooltip_content');
		obj.style.display = 'block';
		obj1.innerHTML = "&nbsp;" + myWords[wordID].Term;
		obj2.innerHTML = myWords[wordID].Definition;
		obj.style.left = findPosX(el) + 'px';
		obj.style.top = findPosY(el) + 'px';
	}	
	
	function hideToolTip()
	{
		document.getElementById('bubble_tooltip').style.display = 'none';
	}

	function findPosX(obj)
	{
		var curleft = 0;
		var MozW = window.innerWidth-16;
		var IeW = document.body.offsetWidth-20;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
			curleft = curleft + 10;
			if (curleft + 200 > MozW){ curleft = (MozW - 210)}
		}
		else if (obj.x){
			curleft = obj.clientX;
			if (curleft + 200 > IeW){ curleft = (IeW - 210)}
		}
		return curleft;
	}

	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
			curtop = curtop + 20;
		}
		else if (obj.y){
			curtop = obj.clientY + Math.max(document.body.scrollTop,document.documentElement.scrollTop);
		}
		return curtop;
	}