/*
It is designed for ENh-31(Discovery). It contains the javascript functions, 
which are called on mouse double click on a article page.And displays the distionary content 
for double clicked word with ajax technology.
*/

var isBrowser = new Is()
{
    InstallEventHandlers();
}
var gDblClk = false;
function browserDetect() { 
	browserOk=false; 
	bAgt = navigator.userAgent.toLowerCase();                                                                                                                 //determine what platform 
	bVer = parseInt(navigator.appVersion);     
	//determine what version of browser 
	if (bAgt.indexOf("mac") != -1 )    //determine if the user is on a Mac 
	{
		 browserOk = true;
	}
	return browserOk;
	
} 
function InstallEventHandlers()
{
  if (isBrowser.nav)
  {
	if(parseFloat(navigator.appVersion)>=5.0)
	{
		document.write("<BODY onDblClick='return handleDoubleClick();'></BODY>");
			
	}
    // Netscape Navigator.
	else
	{
		window.captureEvents (Event.DBLCLICK | Event.MOUSEUP);
		window.onDblClick = handleDoubleClick;
		window.onMouseUp  = handleMouseUp;
			
	}
  }
  else if(browserDetect())
  {
	document.write("<BODY onDblClick='return handleDoubleClick();'></BODY>");
  }
  else
  {
    // Microsoft Internet Explorer.
    document.ondblclick = handleDoubleClick;
    document.nomouseup  = handleMouseUp;

  }
}

function ShowDblClickIcon()
{
  document.writeln('<IMG SRC="/np/xxg_dblclick_long.gif" ' +
                   'WIDTH="145" HEIGHT="23" BORDER="0" ALIGN="LEFT" ' +
                   'ALT="Double-click a word to define it">');
}

//This function is added so that only non -AOL users can see the "Tell Us" icon.
// The images in the tool box for articles and special reports are processed here.

function ShowSurveyImage(category,pf)
{
	var p = pf;
	if(category == "articles")
	{
		title= "acg_tbtitle.gif";
		psear = "acb_tbpsear.gif";
		tellus = "acb_tbtellus.gif";
		bend = "acg_tbend.gif";
	}
	else if(category == "reports")
	{
			title = p+"cg_tbtitle.gif"; 
			psear = p+"cb_tbpsear.gif";
			tellus = p+"cb_tbtellus.gif";
			bend =  p+"cg_tbend.gif";
	}	
	
	var tbHtml = '';
	tbHtml = '<TABLE BGCOLOR="#FFFFCC" CELLSPACING="0" CELLPADDING="0" ' +
	'ALIGN="RIGHT" BORDER="0"><TR>\n'+
	'<TD><IMG SRC="/na/img/'+title+'" WIDTH="55" ' +
	'HEIGHT="23" BORDER="0" ALT="Tool Box:"></TD>\n';
	tbHtml += '<TD><IMG SRC="/na/img/'+psear+'" '  +
	'WIDTH="152" HEIGHT="23" BORDER="0" USEMAP="#tbpsear"></TD>\n';
	if ((document.cookie.indexOf('acct=9901AOL') == -1))
 	{
 	 tbHtml = tbHtml + 
 	 '<TD><IMG SRC="/na/img/'+tellus+'" WIDTH="55" '+
		'HEIGHT="23" BORDER="0" USEMAP="#tbtellus"></TD>\n'; 
 	}
	tbHtml = tbHtml +
	'<TD><IMG SRC="/na/img/'+bend+'" WIDTH="7" ' +
	'HEIGHT="23" BORDER="0"></TD>\n</TR></TABLE>\n';
	return tbHtml;
}

function handleDoubleClick(e)
{
  gDblClk = true;
  searchDict();
  return true;
}

function handleMouseUp(e)
{
  if (gDblClk)
    searchDict();
  return true;
}


function searchDict()
{
  var term = getSelectedText();
  if (!term || !term.length)
    return;
  popupDict(term);
}

function getSelectedText()
{
  var sSelection = "";
  if (window.getSelection)
  {
	sSelection = window.getSelection();
   
  }
  else if (document.selection &&
           document.selection.createRange)
  {
    var range = document.selection.createRange();
    if (range)
      sSelection = range.text;
  }

  else if (window.getSelection)
  {
	sSelection = window.getSelection();
  } 

  if (!sSelection)
    return "";

  // Truncate string at 30 characters
  var iMaxLength = 30;
  if (sSelection.length > iMaxLength)
  {
    sSelection = sSelection.substring(0, iMaxLength);
    var iSpacePos = sSelection.lastIndexOf(' ');
    if (iSpacePos > 0)
      sSelection = sSelection.substring(0, iSpacePos);
  }

sSelection = new String(sSelection);
  // Remove Ctrl-M's that Netscape adds between lines.
  sSelection=sSelection.replace(new RegExp('\\cM', 'g'), ' ');

  // Remove non-space whitespace characters
  sSelection=sSelection.replace(new RegExp('\\n', 'g'), '');
  sSelection=sSelection.replace(new RegExp('\t', 'g'), '');

  // Remove leading & trailing spaces
  sSelection=sSelection.replace(new RegExp('^\\s+'), '');
  sSelection=sSelection.replace(new RegExp('\\s+$'), '');

  // Compress runs of spaces
  sSelection = sSelection.replace(new RegExp('\\s+'),' ');
  return sSelection;
}

// Pop up the dictionary window sized relative to the user's screen resolution.
function popupDict(initEntryId, width, height)
{
  var minWidth  = 320; var maxWidth  = 660; var nomWidth  = minWidth;
  var minHeight = 240; var maxHeight = 418; var nomHeight = maxHeight;
  var features  = "menubar=yes,toolbar=yes,status=yes,resizable=yes,scrollbars=yes";
  var dictOrgUrl   = "/student/dictionary?"; 
  var dictUrl   = "/student/ardict?";  //to display the dictionary content in same page as popup. changed url from /dict to /ardict
  var cmd       = "sh";
  var height="";
  var width="";
  // Set the nominal size of the popup based on the user's resolution.
  if (window.screen)
  {
    
    maxWidth  = window.screen.width;
    maxHeight = window.screen.height -90;
    //alert("maxWidth:"+maxWidth+"maxheight:"+maxHeight);
    if (maxWidth==800)
    {
	    if (document.all) maxHeight -= 26;
	    nomWidth  = Math.round(maxWidth * .635);
	    nomHeight = maxHeight-64;
	    height=nomHeight;
	    width=nomWidth;
	    features += ",ScreenX=0,ScreenY=0,top=0,left=0";
	    features += ",height=" + height + ",width=" + width;
     }
    else
    {
	    if (document.all) maxHeight -= 26;
	    nomWidth  = Math.round(maxWidth * .508);
	    nomHeight = maxHeight - 232;
	    height=nomHeight;
	    width=nomWidth;
	    features += ",ScreenX=0,ScreenY=0,top=0,left=0";
	    features += ",height=" + height + ",width=" + width;
    }    
  }
 
  // Parse the size parameters.
   // Parse the initial entry ID parameter.
  if (initEntryId == null)
  {
    initEntryId = "di000000";
  }
  else if (initEntryId.length == 8 && initEntryId.substring(0, 2) == "di")
  {
    for (i = 2; i < 8; i++)
    {
      if ((ch = initEntryId.substring(i, 1)) < "0" || ch > "9")
      {
        cmd = "lu";
        break;
      }
    }
  }
  else
  {
    cmd = "lu";
  }
  
  dictUrl += cmd + "=" + initEntryId;
   dictOrgUrl += cmd + "=" + initEntryId;
  //alert("dictUrl: "+dictUrl);
  //alert("dictOrgUrl: "+dictOrgUrl);
  
   var status = retrieveURL(dictUrl+(gDblClk ? '&cl=1':''));
   //alert("am now here");
   if(status == "false"){ //go to dctionary page
   	location.href = dictOrgUrl+(gDblClk ? '&cl=1':'');
   }
}

// The following is taken from Netscape's site.
function Is ()
{   // convert all characters to lowercase to simplify testing
    var agt=navigator.userAgent.toLowerCase()

    // *** BROWSER VERSION ***
    this.major = parseInt(navigator.appVersion)
    this.minor = parseFloat(navigator.appVersion)

    this.nav  = ((agt.indexOf('mozilla')!=-1) && ((agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1)))
    this.nav2 = (this.nav && (this.major == 2))
    this.nav3 = (this.nav && (this.major == 3))
    this.nav4 = (this.nav && (this.major == 4))
    this.navonly      = (this.nav && (agt.indexOf(";nav") != -1))

    this.ie   = (agt.indexOf("msie") != -1)
    this.ie3  = (this.ie && (this.major == 2))
    this.ie4  = (this.ie && (this.major == 4))

    this.opera = (agt.indexOf("opera") != -1)

    // *** JAVASCRIPT VERSION CHECK ***
   
    if (this.nav2 || this.ie3) this.js = 1.0
    else if (this.nav3 || this.opera) this.js = 1.1
    else if (this.nav4 || this.ie4) this.js = 1.2
   
    // NOTE: In the future, update this code when newer versions of JS
    // are released. For now, we try to provide some upward compatibility
    // so that future versions of Nav and IE will show they are at
    // *least* JS 1.2 capable. Always check for JS version compatibility
    // with > or >=.
    else if ((this.nav && (this.minor > 4.05)) || (this.ie && (this.major > 4)))
         this.js = 1.2
    else this.js = 0.0 // HACK: always check for JS version with > or >=

    // *** PLATFORM ***
    this.win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) )
    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
    this.win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1))

    // is this a 16 bit compiled version?
    this.win16 = ((agt.indexOf("win16")!=-1)
               || (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1)
               || (agt.indexOf("windows 16-bit")!=-1) )

    this.win31 = (agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) ||
                 (agt.indexOf("windows 16-bit")!=-1)

    // NOTE: Reliable detection of Win98 may not be possible. It appears that:
    //       - On Nav 4.x and before you'll get plain "Windows" in userAgent.
    //       - On Mercury client, the 32-bit version will return "Win98", but
    //         the 16-bit version running on Win98 will still return "Win95".
    this.win98 = ((agt.indexOf("win98")!=-1)||(agt.indexOf("windows 98")!=-1))
    this.winnt = ((agt.indexOf("winnt")!=-1)||(agt.indexOf("windows nt")!=-1))
    this.win32 = this.win95 || this.winnt || this.win98 ||
                 ((this.major >= 4) && (navigator.platform == "Win32")) ||
                 (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1)

    this.os2   = (agt.indexOf("os/2")!=-1)
                 || (navigator.appVersion.indexOf("OS/2")!=-1)
                 || (agt.indexOf("ibm-webexplorer")!=-1)

    this.mac    = (agt.indexOf("mac")!=-1)
    this.mac68k = this.mac && ((agt.indexOf("68k")!=-1) ||
                               (agt.indexOf("68000")!=-1))
    this.macppc = this.mac && ((agt.indexOf("ppc")!=-1) ||
                               (agt.indexOf("powerpc")!=-1))

    this.sun   = (agt.indexOf("sunos")!=-1)
    this.sun4  = (agt.indexOf("sunos 4")!=-1)
    this.sun5  = (agt.indexOf("sunos 5")!=-1)
    this.suni86= this.sun && (agt.indexOf("i86")!=-1)
    this.irix  = (agt.indexOf("irix") !=-1)    // SGI
    this.irix5 = (agt.indexOf("irix 5") !=-1)
    this.irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1))
    this.hpux  = (agt.indexOf("hp-ux")!=-1)
    this.hpux9 = this.hpux && (agt.indexOf("09.")!=-1)
    this.hpux10= this.hpux && (agt.indexOf("10.")!=-1)
    this.aix   = (agt.indexOf("aix")  !=-1)      // IBM
    this.aix1  = (agt.indexOf("aix 1")  !=-1)
    this.aix2  = (agt.indexOf("aix 2")  !=-1)
    this.aix3  = (agt.indexOf("aix 3")  !=-1)
    this.aix4  = (agt.indexOf("aix 4")  !=-1)
    this.linux = (agt.indexOf("inux")!=-1)
    this.sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1)
    this.unixware = (agt.indexOf("unix_system_v")!=-1)
    this.mpras    = (agt.indexOf("ncr")!=-1)
    this.reliant  = (agt.indexOf("reliantunix")!=-1)
    this.dec   = (agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1)
           || (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1)
           || (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)
    this.sinix = (agt.indexOf("sinix")!=-1)
    this.freebsd = (agt.indexOf("freebsd")!=-1)
    this.bsd = (agt.indexOf("bsd")!=-1)
    this.unix  = (agt.indexOf("x11")!=-1) || this.sun || this.irix || this.hpux ||
                 this.sco ||this.unixware || this.mpras || this.reliant ||
                 this.dec || this.sinix || this.aix || this.linux || this.freebsd

    this.vms   = (agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1)
}

function showPopup()
{
    rt=sMasterEntryId.substring(2,3)
    var url = '/wb/content/'+edition+ '/di/co/'+ rt+ '/'+ sMasterEntryId + '.htm';
    openAWindow(0,url);
}

function showEntry(sEntryRit, sBookmark)
{
  if (sEntryRit)
  {
	if((sEntryRit.charAt(sEntryRit.length - 1)) == '.')
	{
		sEntryRit = sEntryRit.substring(0,sEntryRit.length-1);
		if(sEntryRit.indexOf('.') > -1)sEntryRit += '.';
	}
	//changed for tesing
	location.href = "/student/dictionary?lu=" + sEntryRit + (sBookmark ? ("#" + sBookmark) : '');
  }
}

  //Ajax releted functions
  var req;  //global variable to store request object.
  
  /**
   * Get the contents of the URL via an Ajax call
   * url - to get content from (e.g. /wb/ardict?lu={selected text}&cl=3 ) 
   * nodeToOverWrite - when callback is made
   * nameOfFormToPost - which form values will be posted up to the server as part 
   *					of the request (can be null)
   */
  function retrieveURL(pURL) {
    //get the (form based) params to push up as part of the get request
    dictURL=pURL;
    //Do the Ajax call
    //alert("check xmlHTTP object: "+ window.XMLHttpRequest);
    if(window.XMLHttpRequest) { // Non-IE browsers
      req = new XMLHttpRequest(); 
      req.onreadystatechange = processStateChange;
      try {
      	req.open("GET", dictURL, true); //was get
      } catch (e) {
        alert("Problem Communicating with Server\n"+e);
      }
      req.send(null); //Because mozilla browser expects an argument.
      return "true";
    } else if(window.ActiveXObject) { // IE
      req = new ActiveXObject("Microsoft.XMLHTTP"); 
      if (req) {
        req.onreadystatechange = processStateChange;
        req.open("GET", dictURL, true);
        req.send();
      }
      return "true";
    }else{
		return "false";
	}
    
  }
  
  
  /*
   * Set as the callback method for when XmlHttpRequest State Changes 
   * used by retrieveUrl
  */
  function processStateChange() {
  
   if (req.readyState == 4) { // Complete
      if (req.status == 200) { // OK response
      	var divName = document.getElementById('dictionaryOverLay');
        divName.style.display = 'block';
        //var closeButton = '<div id=\"close-button\" class=\"close-btn\"><a href=\"javascript:;\" onclick=\"javascript:var divName = document.getElementById(\'Article-DictBox\');divName.style.display = \'none\';\">close [x]</a></div>'; 
        var closeButton = '<img src=\"images/btn_quizClose.gif\" align=\"right\" alt=\"Close Quiz\" onclick=\"javascript:var divName = document.getElementById(\'dictionaryOverLay\');divName.style.display = \'none\';\" /><br />'; 
 	
 	document.getElementById("dictvalue").innerHTML=closeButton+req.responseText;
		document.selection.empty();
	 //var divImageName = document.getElementById('imageadded');
		 //divImageName.style.display = 'none';
      } 
    }
  }
