
var is = new Is()
if (is.js >= 1.2 && self.parent == self)
  InstallEventHandlers();

var gDblClk = false;

var gQuery;

function InstallEventHandlers()
{
	if (is.nav)
	{
		// Netscape Navigator.
		window.captureEvents (Event.DBLCLICK | Event.MOUSEUP | Event.KEYDOWN);
		window.onDblClick = DblClickHandler;
		window.onMouseUp = MouseUpHandler;
		window.onKeyDown = KeyDownHandler;
	}
	else
	{
	  // Microsoft Internet Explorer.
		document.ondblclick = DblClickHandler;
		document.onmouseup = MouseUpHandler;
		document.onkeydown = KeyDownHandler;
	}
}


function KeyDownHandler(e)
{ 
 
  if ( (is.nav && e.which == 13) ||
     (is.ie && event.keyCode == 13)) 
  {
    // User hit carriage return while reading
    // the page.  Search on selected text.
    // Make sure the form value hasn't changed.  
    // If it's different, search on the form value instead.

//    var selectedText = GetSel(); 
//   if (selectedText.length && document.forms[0] 
//      && gQuery == document.forms[0].query.value
//     )
//    {
//      top.document.forms[0].query.value = selectedText;
//      top.document.forms[0].submit();
//    }
  } 

  // Continue normal processing for this keystroke.
  return true;
} 

function DblClickHandler(e)
{
	// Set global variable.
	
	gDblClk = true;
	// If selection is set now, then search the quran for that word.
	SearchQuran();
	return true;
}

function MouseUpHandler(e)
{
  // If selection is only set here on double-click, then search the quran for that word.
  if (gDblClk) SearchQuran();

  return true;
} 


function SearchQuran()
{
	var word = GetSel(); 
		// don't allow the text box to be double click searched.
	if(document.all['searchTextBox'] && document.all['searchTextBox'].value == word)
	{
		return(false);
	}
	
	if (!word || !word.length) return; 
	
	gDblClk = false;
	
	// Do some cheap plural stemming.
	// girdles -> girdle
	word = Fix (word, /(le)s$/);
	// estimates -> estimate
	word = Fix (word, /([aeiou][^aeiou]e)s$/);
	// faces -> face, gauges -> gauge
	word = Fix (word, /([cg]e)s$/);
	// flies -> fly
	re = /ies$/;
	word = word.replace (re, "y");
	// most words are like this, e.g., dogs -> dog, fishes -> fish 
	word = Fix (word, /([^aeioucs])e?s$/);
	
	// remove all the diacritical marks
	var mw = (document.all['mw'] ? document.all['mw'].value : 'p');
	var ae = (document.all['ae'] ? document.all['ae'].value : 'a');
	var alef = (document.all['alef'] ? document.all['alef'].value : 'ON');
	var sc = (document.all['sc'] ? document.all['sc'].value: '1');
	var sv = (document.all['sv'] ? document.all['sv'].value : '1');
	var ec = (document.all['ec'] ? document.all['ec'].value : '114');
	var ev = (document.all['ev'] ? document.all['ev'].value : '6');
	dictURL = "/cgi-bin/qsearch.pl?mw=" + mw + "&ae=" + ae + "&alef=" + alef + "&sc=" + sc + "&sv=" + sv + "&ec=" + ec + "&ev=" + ev + "&st=" + word;
	window.location.href = dictURL;
	//dictWin = window.open(dictURL, "dictWin",
	//"resizable=yes,scrollbars=yes,status=yes,width=350,height=350,screenX=430,screenY=50");
	//dictWin.focus();
}

function GetSel () 
{
  var str = "";
  if (top.document.getSelection) 
  { 
    str = top.document.getSelection(); 
  } else if (top.document.selection && 
    top.document.selection.createRange) 
  { 
      var range = top.document.selection.createRange(); 
      if (range) str = range.text; 
  } 
  if (!str) 
    {return "";}

  /* Truncate string at 30 characters. */ 
  max = 30; 
  if (str.length > max)
  {
    str = str.substr (0, max);
    var iEnd = str.length - 1;
    while (iEnd > 0)
    {
      ch = str.charAt (iEnd);
      /* Stop when the character you just removed was a blank */ 
      if (ch == ' ') {break;}
      iEnd--;
    }
    str = str.substring (0, iEnd); 
  }
  /* Remove tabs, newlines. */ 
  /* (Don't use /[nt]/, to avoid Netscape bomb) */
  /* Remove ^M's which Netscape adds between lines */
  re=/\cM/g;
  str = str.replace (re,' ');
  re=/\n/g;
  str = str.replace (re,'');
  re=/\t/g;
  str = str.replace (re,'');

  /* Remove double spaces */ 
  re=/\s\s/g;
  len=str.length;
  oldlen=len+1;
  while (len < oldlen)
  {
    str = str.replace (re,' ');
    oldlen = len;
    len = str.length;
  }
  return str;
}

function Fix (word, re)
{
  re.exec (word);
  word = word.replace (re, RegExp.$1);
  return word;
}


// 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 *** 
    // Useful to workaround Nav3 bug in which Nav3 
    // loads <SCRIPT LANGUAGE="JavaScript1.2">.
    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 >=

}



