// ==UserScript==
// @name           Estraviz
// @namespace     *
// @include        http://dicionarios.blogaliza.org/
// ==/UserScript==


(function()
{

var bgColor = "#DDEEAA";
var mouse = {dx:10,dy:10};

// dicionarios soportados por defecto: 0 => ningún, 1 => estraviz, 2=> estraviz compatíbel con RAG 
var defaultDic = 1;

var word, originalWord; // word to search
var dicSel, dicWnd, dicContent;

var init = function () {

    // create window layer
    var galDicDiv = document.createElement("div");
    galDicDiv.innerHTML = '<div style="position:fixed;width:140px;height:20px;right:20px;bottom:20px;' +
        'background-color:'+bgColor+';z-index:10000;border:1px solid black; font-size:15px;font-face:verdana,arial;'+
        '" id="gmDicSelector">&nbsp;' +
        '<select id="gmSelDic" style="font-size:12px;">' +
            '<option value=""></option>'+
            '<option value="estraviz">Estraviz</option>'+
            '<option value="estravizRAG">Estraviz (RAG)</option>'+
        '</select>' +
        ' <a href="javascript:gmDic.closeWin();">X</a>' +
        '</div>';
    document.body.insertBefore(galDicDiv, document.body.firstChild);

    // create dic layer
    var logo = document.createElement("div");
    logo.innerHTML = '<div style="position:absolute;width:320px;height:240px;visibility:hidden;top:0;left:0;' +
        'text-align:right;font-size:12px;overflow:scroll;' +
        'background-color:'+bgColor+';z-index:10000;border:1px solid black; font-size:15px;font-face:verdana,arial;'+
        '" id="gmDicWnd">&nbsp;' +
        '<div id="gmDicContent" style="font-size:10px;text-align:justify;font-face:verdana,arial;padding:3px;"></div>' +
        '</div>';
    document.body.insertBefore(logo, document.body.firstChild);

    dicSel = document.getElementById('gmSelDic');
    dicWnd = document.getElementById('gmDicWnd');
    dicContent = document.getElementById('gmDicContent');

    dicSel.selectedIndex = defaultDic; // sets default dictionary

    window.addEventListener("mouseup", getWord, false);

}

var getError = function(e) {
   GM_log(e); 
}

var getResult = function(a) {
   var r = a.responseText.match(/["]justify["]>(.*)<[/]div>/); 
   if (r == null) r=['','Non se atopou ningunha coincidencia para a palabra <b>"'+originalWord+'"</b>']; 
   showResponseWindow(r[1]);
};

var getWord = function(e) {
   if (dicSel.value == '') return; // do nothing
   
   mouse.x = e.pageX;
   mouse.y = e.pageY;
   
   word = window.getSelection().toString();
   
   if (word.length==undefined) { 
       dicWnd.style.visibility = "hidden";
       return;
   };
   if (word.length<2) { 
       dicWnd.style.visibility = "hidden";
       return;
   };
   
   originalWord = word;
   word = word.replace('ç','c').replace('Ç','C').
            replace('á','a').replace('é','e').replace('ó','o').replace('í','i').replace('ú','u').
            replace('Á','a').replace('É','e').replace('Ó','o').replace('Í','i').replace('Ú','u');
   word = encodeURIComponent(word);
   
   if (dicSel.value == 'estraviz') {
       var base_url = "http://www.agal-gz.org/estraviz/modules.php?name=Dictionary&file=pesquisar&dicSearch=";
   } else if (dicSel.value == 'estravizRAG') {
       var base_url = "http://www.agal-gz.org/estraviz/modules.php?name=Dictionary&file=pesquisarcomp&dicSearch=";
   }
   
   GM_xmlhttpRequest({method:"GET",
     url: base_url + word,
     onload:getResult,
     onerror:getError,
     overrideMimeType : "text/html; charset=ISO-8859-1"
     }
   );
   
};  

var showResponseWindow = function(text) {
   unsafeWindow.rtext = text;
   dicContent.innerHTML = text;
   dicWnd.style.left=mouse.x + mouse.dx;
   dicWnd.style.top=mouse.y + mouse.dy;
   dicWnd.style.visibility='visible';
}

init();
  
})();

unsafeWindow.gmDic = {
   closeWin: function() {
       var e = document.getElementById("gmDicSelector");
       e.parentNode.removeChild(e);
       
       e = document.getElementById("gmDicWnd");
       e.parentNode.removeChild(e);
       
       for (var k = 0; k<window.frames.length; k++) {
          
          e = window.frames[k].document.getElementById("gmDicSelector");
          if (e) e.parentNode.removeChild(e);          
          
          e = window.frames[k].document.getElementById("gmDicWnd");
          if (e) e.parentNode.removeChild(e);          

       }

   }
}

