var interfacePage = "/ajax";
var translatePage = "/translate";

function lookup(path)
{
    var str = $("#text_word").val();
    str = jQuery.trim(str);  
    document.location.href = path + translatePage + "/" + encodeURIComponent(str); 
    return false;
}

function getSelectedText(){ 
    if(window.getSelection){ 
        return window.getSelection().toString(); 
    } 
    else if(document.getSelection){ 
        return document.getSelection(); 
    } 
    else if(document.selection){ 
        return document.selection.createRange().text; 
    } 
} 

function dictionary(event, path) {
    var $target = $(event.target);
    
    if ($target.is("#text_word"))
        return;
        
    var str = getSelectedText();
    str = jQuery.trim(str);        
    if (str.length > 0)
    {
        window.open(path + translatePage + '/' + encodeURIComponent(str));
    }
}

function suggestOverPrev($obj) {
    var $objPrev = $obj.prev();
    if ($objPrev.length)
    {
        if ($objPrev.html().indexOf('--') >= 0)
        {
            suggestOverPrev($objPrev);
        }
        else
        {
            suggestOver($objPrev);
        }
    }
}

function suggestOverNext($obj) {
    var $objNext = $obj.next();
    if ($objNext.length)
    {
        if ($objNext.html().indexOf('--') >= 0)
        {
            suggestOverNext($objNext);
        }
        else
        {
            suggestOver($objNext);
        }
    }
}

function suggestOver($obj) {
    if ($obj.html().indexOf('--') < 0)
    {
	    $obj.addClass('suggest_link_over').removeClass('suggest_link');
    }
}

function suggestOut($obj) {
	$obj.addClass('suggest_link').removeClass('suggest_link_over');
}

function searchSuggest(event, path) 
{
    var str = $("#text_word").val();
    str = jQuery.trim(str);  
    
    var ENTER = 13;
	var ESC = 27;
	var KEYUP = 38;
	var KEYDN = 40;
    
    if (event.keyCode == KEYDN || event.keyCode == KEYUP || event.keyCode == ESC || event.keyCode == ENTER)
    {
        if (event.keyCode == ESC)
        {
            $("#search_suggest").hide();
        }
        else if (event.keyCode == ENTER)
        {
            $highlighted = $("#search_suggest .suggest_link_over");
            if ($highlighted.length)
            {
                setSearch($highlighted, path);
            }
        }        
        else if (event.keyCode == KEYDN)
        {
            $highlighted = $("#search_suggest .suggest_link_over");
            if ($highlighted.length)
            {
                suggestOut($highlighted);
                suggestOverNext($highlighted);
            }
            else
            {
                suggestOver($("#search_suggest .suggest_link").eq(1));
            }
        }
        else if (event.keyCode == KEYUP)
        {
            $highlighted = $("#search_suggest .suggest_link_over");
            if ($highlighted.length)
            {
                suggestOut($highlighted);
                suggestOverPrev($highlighted);
            }
            else
            {
                $suggests = $("#search_suggest .suggest_link");
                suggestOver($suggests.eq($suggests.length-1));
            }
        }
    }
    else
    {    
        if (str.length > 2)
        {
            $.get(path + interfacePage + '?word=' + encodeURIComponent(str), function(data)
            {
                $search_suggest = $("#search_suggest");
                var items = data.split("\n");
                if (items.length > 1)
                {
                    var html = "";
                    for(i=0; i < items.length - 1; i++) 
                    {
                        html += '<span style="display:block;" class="suggest_link">' + items[i] + '</span>';
                    }
                    $search_suggest.html(html);
                    
                    $(".suggest_link").mouseover(function() 
                    {
                        suggestOver($(this));
                    }).mouseout(function() 
                    {
                        suggestOut($(this));
                    }).click(function() 
                    {
                        setSearch($(this), path);
                    });                    
                    
                    var input = $("#text_word").get(0);
                    var pos = findPos(input);
                    $search_suggest.css({
			            top: (pos.y + input.offsetHeight) + "px",
			            left: pos.x + "px"
		            }).show();
                }
                else
                {
                    $search_suggest.hide();
                }
            });
        }
        else
        {
            $("#search_suggest").hide();
        }
    }
}

function setSearch($suggestSpan, path)
{
    var word = $suggestSpan.html();
    if (word.indexOf('--') < 0)
    {
        $("#text_word").val(word);
        document.location.href = path + translatePage + "/" + encodeURIComponent(word);
	    $("#search_suggest").hide();
    }
}

function findPos(obj) 
{
	var curleft = obj.offsetLeft || 0;
	var curtop = obj.offsetTop || 0;
	while (obj = obj.offsetParent) {
		curleft += obj.offsetLeft
		curtop += obj.offsetTop
	}
	return {x:curleft,y:curtop};
}
