﻿var blocksize = 500;
var array;
var delimiter = String.fromCharCode(10);
var delimiterHtml = "<br/>";
var sesion = 0;
var tduration = 0.0;
var twcount = 0;
var tscount = 0;
var pageTracker;

function doTranslation() {
    if (!($("#source_text").hasClass("tempText")))
        {
             var source = $("#source_text").val();
             if (source.length>0) {
                 $("textarea").removeClass("tempText")
                 $("#resultBox").html("");
                 $("#translHid").val("");                 
                    sesion = Math.random();    
                    $("#translationComplete").hide();
                    $("#translating, #ajaxLoader").show();  
                    formTextAreas();
                    array = source.split(delimiter);
                    //array = removeEmptyElements(array); // bugfix: translate is finished, but animation still running
                    tduration = 0;
                    twcount = 0;
                    tscount = 0;
                    translateBlock(0, sesion);
               }       
        }
}

function removeEmptyElements(array) {
    var newArray = [];
    for (var index = 0; index < array.length; index++) {
        if (array[index].length > 0) {
            newArray.push(array[index]);
        }
    }
    return newArray;
} 


function formTextAreas() {   
        var h = 250;
        if ($("#source_text").attr("scrollHeight") > h) { h = $("#source_text").attr("scrollHeight"); }
        $("#source_text, #resultBox").css("height", h + 'px');
        if (($("#resultBox").attr("scrollHeight")-10) > h) {
            h = $("#resultBox").attr("scrollHeight");
            $("#source_text, #resultBox").css("height", h + 'px');
        }
    }

    function fillTextAreas() {
        
    if ($("#source_text").val().length == 0) {
        if (!$("#source_text").hasClass("tempText")) $("#source_text").addClass("tempText");
        $("#source_text").val($("#sourceTextTemplate").val());
    }
    else {
        // fill source and result boxes if content is saved in state
        $("source_text").removeClass("tempText");
        $("#resultBox").html($("#translHid").val());
        if ($("#resultBox").hasClass("tempText"))
            $("#resultBox").removeClass("tempText");
    }
    
    if ($("#resultBox").html().length == 0) {
        if (!$("#resultBox").hasClass("tempText")) $("#resultBox").addClass("tempText");
        $("#resultBox").text($("#outputTextTemplate").val());
    }
    }

function translateBlock(start, ses) {
    var i;
    var temp = "";
    for (i = start; i < array.length; i++) {
        temp += array[i];
        if (temp.length < blocksize) {
            temp += delimiter;
        }
        else {
            break;
        }
    }

    if (temp.length > 0) {
        translateThis(temp, i, array.length, ses);
        temp = "";
    }
    else {
        endTranslation();
    }
}

function registerEvent(category,label, value) {
    try
    {
        pageTracker._trackEvent("translation", $("#systemID").val(), label, value);
    }
    catch(err) {
        err = err;
    }
}

function translateThis(texts, nr, total, ses) {
    $.getJSON("getTranslation.aspx?&sid=" + Math.random(), { text: texts, system: $("#systemID").val(), lang: $("#ui_lang").val() },
        function(data) {
            if (ses == sesion) {
                try {
                    registerEvent("fragment", "duration", parseInt((parseFloat(data.duration) * 1000)));
                    tduration += parseFloat(data.duration);
                    registerEvent("fragment", "word count", parseInt(data.wordcount));
                    twcount += parseInt(data.wordcount);
                    registerEvent("fragment", "symbol count", texts.length);
                    tscount += texts.length;
                } catch (err) { }


                if ($("#resultBox").hasClass("tempText"))
                    $("#resultBox").removeClass("tempText");

                if ($("#resultBox").html() == '') {
                    $("#resultBox").html($("#resultBox").html() + data.translation);
                }
                else {
                    $("#resultBox").html($("#resultBox").html() + delimiterHtml + data.translation);
                }
                $("#translHid").val($("#resultBox").html());

                if (nr < total - 1) {
                    translateBlock(nr + 1, ses);
                }
                else {
                    endTranslation();
                }
            }
        });
}

function endTranslation() {
    formTextAreas();
    array = null;  
    $("#translating, #ajaxLoader").hide();
    $("#translationComplete").show();  
    registerEvent("total", "total duration", parseInt(tduration*1000));
    registerEvent("total", "total symbol count", tscount);
    registerEvent("total", "total word count", twcount);   
}

function clickInTextArea(obj) {
    if ($(obj).hasClass("tempText")) {
        $(obj).val("");
        $(obj).removeClass("tempText")    
   }}

function resetFields() {
    sesion = Math.random();
    $("#translationComplete, #translating, #ajaxLoader").hide();
    $("#source_text").val("");
    $("#resultBox").html("");
    formTextAreas();
    fillTextAreas();
}

$(document).ready(function() {
    $("#lang" + $("#ui_lang").val()).addClass("currentLang").attr("href", "#");
    formTextAreas();
    fillTextAreas();
    try {
        $.getJSON("getrss.aspx", { lang: $("#ui_lang").val() }, function(data) {
            for (var i = 0; i < data.items.length; i++) {
                var obj = $("<div/>").addClass("blog").html('<b>' + data.items[i].Title + '</b>. ' + data.items[i].Description);
                $("<a target='_blank'/>").attr("href", data.items[i].Link).html($("#blogRead").val()).appendTo(obj);
                $("<span class='blogFooter'/>").html("<br/>" + $("#blogWrote").val() + ": <b>" + data.items[i].Author + "</b>. " + $("#blogDate").val() + ": " + data.items[i].Date).appendTo(obj);
                obj.appendTo(".rss_feed");
            }
            var ob = $("<div class='subscribe' />");            
            $("<img src='img/subscribe.png' />").appendTo(ob);
            $("<a target='_blank'/>").attr("href", data.url + 'feeds/posts/default').html($("#blogSubscribe").val()).appendTo(ob);
            ob.appendTo(".rss_feed")

        });
    } catch (err) { }
    try {
        pageTracker = _gat._getTracker("UA-11083087-1");
        pageTracker._trackPageview();
    } catch (err) { }

});


function ismaxlength(obj) {
    var mlength = obj.getAttribute ? parseInt(obj.getAttribute("maxlength")) : "";
    if (obj.getAttribute && obj.value.length > mlength) {
        obj.value = obj.value.substring(0, mlength - 3)+"...";
    }
};

