// Skripta za dvosmerno srp-eng prevodjenje reci
// Verzija 1.0
// 17. Decembar 2008
// Autor Damjan Tomic (http://damjantomic.com)
// --------------------------------------------------------------------
//
// Ovo je Greasemonkey user script.
//
// Za instalaciju skripte Vam je potreban Greasemonkey: http://greasemonkey.mozdev.org/
//
// ==UserScript==
// @name MetakPrevodilac
// @namespace http://damjan.blogpsot.com
// @description Dupli klik na bilo koju rec na stranici ce oznacenu rec pokusati da prevede sa srpskog na engleski i obratno koristeci www.metak.com
// @include *
// @exclude 
// @version 1.0
// ==/UserScript==

var izvor = "http://www.metak.com/index.php/recnik/search"
var xPoz;
var yPoz;
var ispis = null;
var contentDiv;
var headerDiv;
var watching = false;
var tekst;
var enabled = true;

var dblclick = function(event)
{
	if (!enabled) return;
    //uzmi oznaceni tekst
    tekst = unsafeWindow.getSelection().toString().trim().toLowerCase();
    if ((tekst == null)||(tekst == "")) return;
	
    //napravi upit
    var upit = izvor + tekst;
    //pripremi za ispis
    xOffset = (document.documentElement.scrollLeft>0) ?document.documentElement.scrollLeft:window.pageXOffset;
    yOffset = (document.documentElement.scrollTop>0) ?document.documentElement.scrollTop:window.pageYOffset;

    xPoz = event.clientX + xOffset;
    yPoz = event.clientY + yOffset + 10;

      post(izvor, 'word='+tekst, function(s) {  
	  var ostaniNaMestu = ((ispis != null) && (ispis.style.display == "block"));
       prikazi(s, ostaniNaMestu);
     });
}
 
if (document.designMode == 'off')
	document.addEventListener("dblclick", dblclick ,true);

function post(url, data, cb) {
  GM_xmlhttpRequest({
    method: "POST",
    url: url,
    headers:{'Content-type':'application/x-www-form-urlencoded'},
    data:encodeURI(data),
    onload: function(xhr) { cb(xhr.responseText); }
  });
}
   
   
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

function prevedi()
{	
	tekst = document.getElementById("__text_polje").value.trim().toLowerCase();
	if ((tekst == null)||(tekst == "")) return;
	post(izvor, 'word='+tekst, function(s) {  
       prikazi(s, true);
     });
}

function _tekst_polje_keyPressHandler(e)
{
	 if (e.keyCode == 27) //Esc
	 {
		sakrij();
	 }
	 else
	 if (e.keyCode == 13) //Enter
      {
			prevedi();
	  }
}

function _document_keyPressHandler(e)
{
	 if (e.keyCode == 27) //Esc
	 {
		sakrij();
	 }	 
}

function kreirajPrikaz()
{
    var ispis = document.createElement("div");
    ispis.align = "left";
    ispis.id = "prevodilac_ispis";
    ispis.style.display = "none";
    ispis.style.backgroundColor = "#CCE5FF";
    ispis.style.padding = "10px";
    ispis.style.height = "auto";
    ispis.style.width = "300px";
    ispis.style.zIndex = "1002";
    ispis.style.position = "absolute";
    ispis.style.fontSize = "small";
    ispis.style.fontFamily = "arial,sans-serif";
    ispis.style.fontSize = "13px";	
    ispis.style.clear = "both";
    ispis.style.color = "black";
	var buttonStyle = "font-size: 11px; color: #000000; font-weight: normal; font-family: arial; background-color: #A5C3E2; text-decoration: none;"
	
	var inputText = "<input type = 'text' id = '__text_polje' style='float:left;'/><input type = 'button' id = '__prevodilac_prevedi' value = 'prevedi'  style='float:left;"+buttonStyle+"'/>"
	
	var slikaX = "<img id='__close_button' style=\"float:right;\" src=\"data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIgVI6Zpu0PowOJPoAPtnPn6ElBCHpcs2nfVInu+zKiUAAAOw==\" />";
	
	var slikaMove = "<img id='__move_button' style=\"float:right;margin-right:2px;\" src=\"data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIhVI6Zpu0JwFMxzouxPJbTXYEbJ3YdMp5jxrKhu7YKkwkFADs=\" />";
	
	var slikaUpitnik = "<img id='__question_button' style=\"float:right;margin-right:2px;\" src=\"data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIbVI6Zpu0P4wMUyFojPVuGfHWhRyriWKYQ4wkFADs=\" />";
	
	var header = "<div id ='__prevodilac_header' style='width:100%; text-align:left;background-color:#FFFFAA;'>"+inputText+" " +slikaX+" "+slikaMove+" "+slikaUpitnik+"</div>";	
	var content = "<div id ='__prevodilac_content' style='background-color:#CCCCAA;padding:0 0 0 0;clear:both;'></div>";
	ispis.innerHTML = header + content;
	
	document.body.appendChild(ispis);
	contentDiv = document.getElementById("__prevodilac_content");
	document.getElementById("__close_button").addEventListener("click", sakrij ,true);
	document.getElementById("__prevodilac_prevedi").addEventListener("click", prevedi ,true);
	document.getElementById("__text_polje").addEventListener("keypress", _tekst_polje_keyPressHandler ,true);
	document.addEventListener("keypress", _document_keyPressHandler ,true);	
	GM_registerMenuCommand("Prevodilac", enablePrevodilac);
	return ispis;
}

function enablePrevodilac(e)
{
	enabled = true;
}
var __tekst_polje = null;
var __prevodilac_content = null;
function prikazi(prevod, ostaniNaMestu)
{
	var regExpression = new RegExp( "<strong>"+tekst+"</strong> - ", "gi" )
	prevod = prevod.replace(regExpression, "");
	if (ispis == null)
	{
		ispis = kreirajPrikaz();
		ispis.style.left = xPoz+"px";
		ispis.style.top = yPoz+"px"; 
		ispis.style.display = "block";
		document.getElementById("__move_button").addEventListener("mousedown",mouseDown, true);
		document.addEventListener("mousemove", mouseMove ,true);
		document.addEventListener("mouseup", mouseUp ,true);		
		__tekst_polje = document.getElementById("__text_polje");
		__prevodilac_content = document.getElementById("__prevodilac_content");
	}		
	
    if (!ostaniNaMestu)
	{
		ispis.style.left = xPoz+"px";
	    ispis.style.top = yPoz+"px";    
	}
	__tekst_polje.value = tekst;
	ispis.style.display = "block";
    __prevodilac_content.innerHTML = prevod;
    
	var _srp2eng = document.getElementById("srp2eng");
    var _eng2srp = document.getElementById("eng2srp");
	prazan_eng2srp = false;
	prazan_srp2eng = false;

	if (prazanPrevod(_eng2srp)) prazan_eng2srp = true;
	if (prazanPrevod(_srp2eng)) prazan_srp2eng = true;
	
	sredisrp2eng(_srp2eng);
    sredieng2srp(_eng2srp);
	if (prazan_eng2srp && prazan_srp2eng)
	{
		postaviPrazanPrevod(); 
	}
	__tekst_polje.focus();
}

var prazan_eng2srp = false;
var prazan_srp2eng = false;


function sakrij()
{
    ispis.style.display = "none";
}

function postaviPrazanPrevod()
{   
	var nemaPrevoda = "<div style = \"margin: 10px 0pt 0pt; padding: 0pt 0pt 0pt 15px; float: left; width: 40%;\"><b>Nema prevoda.</b></div>";
	__prevodilac_content.innerHTML = nemaPrevoda;	
}

function sredisrp2eng(element)
{    
	if (prazan_srp2eng)
	{
		element.parentNode.removeChild(element);
	}
	else
	{
		element.setAttribute("style","float:left");
		if (!prazan_eng2srp) element.style.width = '40%';    
		else element.style.width = '90%';    
		element.style.backgroundColor = "#9ACBDE";
	    element.style.padding = '0 0 0 15px';    
		element.style.margin = '10px 0 0 10px';
		srediLielemente(element);
	}
}

function sredieng2srp(element)
{    
	if (prazan_eng2srp)
	{
		element.parentNode.removeChild(element);
	}
	else
	{
	    element.setAttribute("style","float:left");
		if (!prazan_srp2eng) element.style.width = '40%';
		else element.style.width = '90%';
		
		element.style.backgroundColor = "#A3E3C1";
	    element.style.padding = '0 0 0 15px';
		element.style.margin = '10px 0 0 0';
		srediLielemente(element);
	}
}
function prazanPrevod(element)
{
	var lis = element.getElementsByTagName("li");
	if (lis.length == 0)
	{
		return true;
	}
	return false;
}
function srediLielemente(element)
{	
	var lis = element.getElementsByTagName("li");
	for(var i = 0; i< lis.length; i++)
	{
		var li = lis[i];
		li.height = "16px";			
		li.style.fontSize = "13px";
	}
}

//--------------- Drag and Drop

var dragObject  = null;
var mouseOffset = null;
var moveButton = null;

function mouseCoords(ev){
	
	var xOffset = (document.documentElement.scrollLeft>0) ?document.documentElement.scrollLeft:window.pageXOffset;
    var yOffset = (document.documentElement.scrollTop>0) ?document.documentElement.scrollTop:window.pageYOffset;

    var xPoz = ev.clientX + xOffset;
    var yPoz = ev.clientY + yOffset;
	return {x:xPoz - 276,y:yPoz - 10};
}

function mouseMove(ev){
	if(dragObject){
		var mousePos = mouseCoords(ev);		
		dragObject.style.top      = mousePos.y+"px";
		dragObject.style.left     = mousePos.x+"px";
		return false;
	}
}

function mouseUp(ev){
	if (dragObject)
	{
		xOffset = (document.documentElement.scrollLeft>0) ?document.documentElement.scrollLeft:window.pageXOffset;
	    yOffset = (document.documentElement.scrollTop>0) ?document.documentElement.scrollTop:window.pageYOffset;

	    xPoz = ev.clientX + xOffset;
	    yPoz = ev.clientY + yOffset + 10;
	}
	dragObject = null;
}

function mouseDown(ev){	
	dragObject  = ispis;
	moveButton = document.getElementById("__move_button");
	return false;
}
