/**
 * Initialize Dict2 javascript
 */
var dict2_JSVersion = "0.9.7";
var formPrefix = 'dict2_inputForm';
//console.log("dict2_JSVersion: " +dict2_JSVersion);

// var for current Ajax Request
var ajaxRequest     = null;
var cancelRequests  = true;
// vars for input delay
var newInput        = null;
var isLoading       = false;
// Delay doesn't apply if cancelRequest==true
var delay           = 500;
$(function()
{
    // init ajax
    $.ajaxSetup({
        type: "GET",
        url:  dictURL()
    });
    var inputSelector = formPrefix+'_input';
    // deactivate autocomplete
    $('.'+inputSelector).attr('autocomplete', 'off');
    // allowed Methods
    var allowedMethods = new Array('translate','translate_hits','synonyms','synonyms_hits');

    $('.'+inputSelector).each(
        function(){
            var classes     = $(this).attr('class').replace(inputSelector,"");
            var showOutput  = (classes.indexOf('showOutput') != -1);
            if(showOutput)
                classes     = classes.replace('showOutput',"");
            classes         = classes.trim();
            classes         = classes.split(" ");
            for(index in classes)
            {
                var isAllowed = $.inArray(classes[index], allowedMethods) != -1;
                if(!isAllowed)
                {
                    classes.splice(index,1);
                }
                
            }
            if(classes.length>0)
            {
                var method = classes[0];
                $(this).keyup(function(event)
                {
                    if(event.keyCode != 13)
                    {
                        if(isLoading)
                        {
                            newInput                = new Array();
                            newInput['input']       = $(this);
                            newInput['method']      = method;
                            newInput['showOutput']  = showOutput;
                        }
                        dict2_ajaxMethod($(this), method,showOutput);
                    }
                });
            }
        }
    );
    
    // set methods for special chars
    $('.special_chars > LI').click(function(event){
        var input = $(this).parent().parent().children('.' + formPrefix + '_input');
        dict2_inputForm_insert(input, $(this).html());
    });
})

function test_stuff(vars)
{
    alert(vars);
}

/**
 * Get Ajax Response from dict2
 * @var method   - ajaxMethod to request
 * @var vars     - associative array of arguments for ajaxMethod
 * @var callback - function to callback to on success
 */
function dict2Response(method,vars,callback)
{
    if(vars == null)
        vars = new Array();
    vars['page']   = 'ajax';
    vars['method'] = method;
    ajaxRequest = $.ajax({  data: ArrayAjaxify(vars),
                            context: vars,
                            success: callback
                        });
}
/**
 * Returns a dict Action URL
 * @var action - action to link to 
 */
function dictURL(action)
{
    var url = getCurrentURL(true);
    if(action)
        url += '?page=' + action;
    return url;
}
/**
 * Turns an associative Array into a string
 * @var array   - array to convert
 * @var prepend - wether of not '&' should be always prepended
 */
function ArrayAjaxify(array,prepend)
{
    var string = "";
    for(data in array)
    {
        if(string != "" || prepend)
            string += "&";
        string += data + "=" + array[data];
    }
    return string;

}

/**
 * Content Specific
 */
function dict2_inputForm_insert(input,string)
{
    input.val(input.val() + string);
    var method = (input.attr('class')).replace(formPrefix+'_input ','');
    dict2_ajaxMethod(input,method);
}


function dict2_inputForm_setInput(input,string)
{
    input.val(string);
    var method = (input.attr('class')).replace(formPrefix + '_input ','');
    dict2_ajaxMethod(input,method);
}

function dict2_inputForm_setInputByLanguage(from,to,string)
{
    var id = '#' + formPrefix+'_input_' + from;
    if(to != null)
        id += to;
    dict2_inputForm_setInput($(id),string);
}

function dict2_ajaxMethod(input,method,showOutput)
{
    if(cancelRequests && ajaxRequest != null)
    {
        ajaxRequest.abort();
        isLoading = false;
    }
    if(!isLoading)
    {
        var args        = new Array();
        args['string']  = input.val();
        var language    = input.parent().attr('id');
        var first       = (language.substr(-4)).substr(0,2);
        var second      = language.substr(-2);
        args['from']    = first;
        if(language.length==4)
            args['to']  = second;
        if($.trim(args['string']) != "")
        {
            isLoading       = true;
            dict2_inputForm_setStates(input,'loading');
            dict2Response(  method,
                            args,
                            function(str){dict2_inputForm_setOutput(input,str,showOutput);}
                            );

            setTimeout( function(){  isLoading=false;
                                     if(newInput != null)
                                     {
                                       var lastInput        = newInput['input'];
                                       var lastMethod       = newInput['method'];
                                       var lastShowOutput   = newInput['showOutput'];
                                       newInput             = null;
                                       dict2_ajaxMethod(lastInput,lastMethod,lastShowOutput);
                                     }
                                   }
                        , delay
                        );
        }
    }
}

/**
 * Set the output of the translate bouble AND set translation_status of all
 *  inputs
 * @var str - Output to display in the bouble
 * @var input - input element  to set the status for
 **/
function dict2_inputForm_setOutput(input,str,specificOutput)
{
    var found = (str.indexOf('notFound') == -1);
    var language    = input.parent().attr('id');
    var first       = (language.substr(-4)).substr(0,2);
    var second      = "";
    if(language.length==4)
        second      = language.substr(-2);
    var outputSelector = '.'+formPrefix+'_output';
    if(specificOutput)
        outputSelector += '#'+formPrefix+'_output_' + first + second;
    $(outputSelector).html(str);
    dict2_inputForm_setStates(input,found);
}
/**
 * Sets state of all translate_status items. sets 'id' to true and the rest to false
 */
function dict2_inputForm_setStates(input,state)
{
    $('.'+formPrefix+'_status').removeClass('true')
    .removeClass('loading').addClass('false');
    $('#'+formPrefix+'_status_' + input.attr('id').substr(-4))
    .removeClass('true')
    .removeClass('false')
    .removeClass('loading')
    .addClass(state.toString());
}
//------------------------------------------------------------------------------
// For Text to Speech
function dict2_text2speech(string,language)
{
    var baseURL = "http://translate.google.com/translate_tts";
    var query   = baseURL + "?tl=" + language + "&q=" + string;
    $("#jpId").jPlayer("destroy");
    $("#jpId").jPlayer( {
    ready: function () {
      $(this).jPlayer("setMedia", {
        mp3: query
      }).jPlayer("play");
    },
    supplied: "mp3",
    swfPath: "/scripts"
  });
}

