// rae.js  
// -rev 14-08-2005 -- 18-12-2005 -- 05-07-2006 -- 27-10-2006 -- 28-06-2007
// -----------------------------------------------------------------------
// Basado en script de webster dictionary 
//
// Seleccionar y destacar una palabra en la pagina web 
// con la R r (codigo UTF-8  82 | 114) ---> definición de la RAE (tambien se puede con el que sigue...)
// con la D d (codigo UTF-8  68 | 100) ---> definición de la RAE (Diccionario)

// con la W w (codigo UTF-8  87 | 119) ---> definición del Webster dictionary (eliminado!!!)
// con la M m (codigo UTF-8  77 | 109) ---> definición del Webster dictionary (merriam-webster)
// con la O o (codigo UTF-8  79 | 111) ---> definición del Webster dictionary (On-line dictionary)

// con la G g (codigo UTF-8  71 | 103) ---> definición en Google

// con la C c (codigo UTF-8  67 |  99) ---> definición en Wikipedia (Castellano)
// reemplazado porque interfiere con la función cortar.
// con la W w (codigo UTF-8  87 | 119) ---> definición en Wikipedia (Castellano alternativa)
// con la I i (codigo UTF-8  73 | 105) ---> definición en Wikipedia (Ingles)
//
// con la A a (codigo UTF-8   65 |  97) ---> Ayuda
// con la H h (codigo UTF-8   72 | 104) ---> Help
// 
// Traduce del Ingles --> Castellano con Babelfish
// con la T t (codigo UTF-8   84 | 116) ---> Traduce 
//
// requiere que la página este codificada con la siguiente linea en el encabezado
//
// <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
//
// y llamar el script con:
// <script type="text/Javascript" language="javascript" src="../scripts/rae.js"></script>
//
// el script original está en:
//
// ref: http://www.htmlgoodies.com/beyond/javascript/article.php/3471141#what
//
// -----------------------------------------------------------------
//
document.onkeypress = keyhandler;
function findSelection(){
	if (document.getSelection){ txt = document.getSelection();}
	else if (document.selection){ txt = document.selection.createRange().text;}
	else {return "";}
    txt= txt.toLowerCase()
    return txt;
}
function keyhandler(e) {
    if (window.event) { Key = window.event.keyCode; }
    else { Key = e.which;}

//  Ayuda - Help (A a -- H h)
    if (Key == 65 || Key == 97 || Key == 72 || Key == 104) { 
		var toast = window.open('/scripts/ayuda.php','0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,width=600,height=400,left=1,top=100');
    }

//  Webster (O o  --- por On-line dictionary de Webster)
//    if (Key == 87 || Key == 119) { 
    if (Key == 79 || Key == 111) { 
	var result = findSelection();
	if (result != "") {
		var toast = window.open('http://www.websters-online-dictionary.org/search/?s='+encodeUTF(result),'0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,width=600,height=400,left=30,top=100');
	}
    }

//  RAE  (R r  o tambien D d)
    else if (Key == 82 || Key == 114 || Key == 68 || Key == 100) { 
	var result = findSelection();
	if (result != "") {
		var toast = window.open('http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&FORMATO=ampliado&LEMA='+ txt ,'0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,alwaysRaised=1,width=500,height=400,left=30,top=100');
// no modificar el string ni corregir los ampersand --- así funcionma
    }
    }

// Google 
    else if (Key == 71 ||Key == 103) { 
    var result = findSelection();
    if (result != "") {
    var toast = window.open('http://www.google.com/search?q='+ encodeUTF(result) ,'0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,width=600,height=400,left=30,top=100');
    }
    }

// Wikipedia Castellano (W w -- eliminada C c porque iterfiere con control-C) 
    else if (Key == 87 || Key == 119) { 
    var result = findSelection();
    if (result != "") {
    var toast = window.open('http://es.wikipedia.org/wiki/'+ encodeUTF(result) ,'0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,width=650,height=400,left=30,top=100');
    }
    }

// Wikipedia Ingles (I i)
    else if (Key == 73 || Key == 105) { 
    var result = findSelection();
    if (result != "") {
    var toast = window.open('http://en.wikipedia.org/wiki/'+ encodeUTF(result) ,'0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,width=500,height=400,left=30,top=100');
    }
    }

// Traduce del ingles --> Castellano (T t)
    else if (Key == 84 || Key == 116) { 
    var result = findSelection();
    if (result != "") {
    var toast = window.open('http://babelfish.altavista.com/babelfish/tr?doit=done&lp=en_es&intl=1&trtext='+ encodeUTF(result) ,'0','toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,modal=1,width=500,height=400,left=30,top=100');
    }
    }

}
function utf8(wide) {
  var c, s;
  var enc = "";
  var i = 0;
  while(i<wide.length) {
    c= wide.charCodeAt(i++);
    // handle UTF-16 surrogates
    if (c>=0xDC00 && c<0xE000) continue;
    if (c>=0xD800 && c<0xDC00) {
      if (i>=wide.length) continue;
      s= wide.charCodeAt(i++);
      if (s<0xDC00 || c>=0xDE00) continue;
      c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
    }
    // output value
    if (c<0x80) enc += String.fromCharCode(c);
    else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
    else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
    else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
  }
// ----
// enc= enc.toLowerCase()
// ---
  return enc;
}

var hexchars = "0123456789ABCDEF";

function toHex(n) {
  return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}

var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";

function encodeUTF(s) {
  var s = utf8(s);
  var c;
  var enc = "";
  for (var i= 0; i<s.length; i++) {
    if (okURIchars.indexOf(s.charAt(i))==-1)
      enc += "%"+toHex(s.charCodeAt(i));
    else
      enc += s.charAt(i);
  }
  return enc;
}
