﻿


function GoogleTranslate(textareaID, sourceListID, targetListID) {

    var textArea = document.getElementById(textareaID);

    if (document.selection) { //IE
        textArea.selectedText = document.selection.createRange().text;
        textArea.selectionStart = textArea.value.indexOf(textArea.selectedText);
        textArea.selectionEnd = textArea.selectionStart + textArea.selectedText.length;
        if (textArea.selectionStart < 0) {
            textArea.selectionStart = 0;
            textArea.selectionEnd = 0;
        }
    }
    else if (!!textArea.setSelectionRange) { //FF
        textArea.selectedText = textArea.value.substring(textArea.selectionStart, textArea.selectionEnd);
    }

    sourceList = jQ("#" + sourceListID);
    targetList = jQ("#" + targetListID);

    var sourceCulture = sourceList.val();
    var targetCulture = targetList.val();

    google.language.translate(textArea.selectedText.replace(/\n/g, '<br />'), sourceCulture.substring(0, 2), targetCulture.substring(0, 2), function(result) {
        if (!result.error) {
            var container = document.getElementById("translation");

            textArea.value = textArea.value.replace(textArea.selectedText, result.translation).replace(/<br \/> /g, '\n').replace(/<br \/>/g, '\n');


        }
    });
    
}

function MaximizePlate(element) {

    var viewportHeight = window.innerHeight ? window.innerHeight : jQ(window).height();
    var viewportWidth = jQ(window).width();

    element.css("width", viewportWidth + "px");
    element.css("height", viewportHeight + "px");
}

var timer;

function Translator() {

    this.AttachMenu = function (sourceID, targetID) {

        clearTimeout(timer);

        Translate.RemoveMenu();

        var sourceElement = jQ("#" + sourceID);
        var targetElement = jQ("#" + targetID);
        var objMenuLink = jQ('#TranslateTextboxMenuLink');

        
        objMenuLink.unbind("click");
        objMenuLink.click(function () {
            Translate.ShowTranslationWindow(sourceID, targetID);
        })


        var objMenu = jQ('#TranslateTextboxMenu');

        objMenu.show();

        objMenu.css({ top: (parseInt(sourceElement.offset().top + parseInt(sourceElement.height()) + 5)).toString() + "px", left: (parseInt(sourceElement.offset().left)).toString() + "px" });

        timer = setTimeout("Translate.RemoveMenu()", 2000);

    }

    this.RemoveMenu = function() {

        var objMenu = jQ('#TranslateTextboxMenu');

        objMenu.hide();

    }

    this.ShowTranslationWindow = function (sourceID, targetID) {

        var sourceElement = jQ("#" + sourceID);
        var targetElement = jQ("#" + targetID);
        var hiddenElement = jQ("#" + targetID.replace(/TranslatorTextNew/, "TranslatorTextHidden"));

        var objPlateClose = jQ('#TranslateWindowCloseBack');
        var objPlateBack = jQ('#TranslateWindowPlateBack');
        var objPlate = jQ('#TranslateWindowPlate');

        var sourceElementType = jQ("#" + sourceID).attr('type');

  
        if (sourceElementType == "text" || sourceElementType == "textarea") {
            targetElement.val(sourceElement.val());
            hiddenElement.val(sourceElement.val());
        }
        else if (sourceElementType.indexOf("select") != -1) { // checks if the sourceElement is a listbox
            targetElement.val(jQ("#" + sourceID + " :selected").text());
            hiddenElement.val(jQ("#" + sourceID + " :selected").text());
        }

        objPlate.show();
        jQ('#TranslateWindowPlate').center();

        objPlateBack.show();
        jQ('#TranslateWindowPlateBack').center();

        MaximizePlate(objPlateClose);

        Translate.CheckTranslationArchive(sourceID, targetID);

        extsourceID = sourceID;
        exttargetID = targetID;

    }

    this.CheckTranslationArchive = function (sourceID, targetID) {

        jQ('#TranslationSavedHolder').html("");

        var sourceElement = jQ("#"+sourceID);
        var targetElement = jQ("#"+targetID);

        var sourceValue = "";

        var sourceElementType = jQ("#" + sourceID).attr('type');

        if (sourceElementType == "text" || sourceElementType == "textarea") {
            sourceValue = encodeURIComponent(sourceElement.val().replace(/\n/g, '<br/>').replace(/[\n\r\t]/g, ''));
        }
        else if (sourceElementType.indexOf("select") != -1) { // checks if the sourceElement is a listbox
            sourceValue = encodeURIComponent(jQ("#" + sourceID + " :selected").text().replace(/\n/g, '<br/>').replace(/[\n\r\t]/g, ''));
        }


        jQ.get('AjaxCalls/GetSavedTranslations.aspx?SourcePhrase=' + sourceValue + '&msmademedothis=' + new Date().getTime(), function (data) {
            var response = data;

            if (response != "no response text") {

                var translationStrings = response.split('||');

                for (i = 0; i < translationStrings.length; i++) {

                    var translationString = translationStrings[i].split(':TD:');

                    jQ('#TranslationSavedHolder').html(jQ('#TranslationSavedHolder').html() + "<a class=\"breadblue\" href=\"javascript:;\" onclick=\"javascript:Translate.AttachSavedTranslation('" + translationString[0] + "','" + translationString[2] + "','" + targetID + "');\">" + translationString[1] + "</a>&nbsp;&nbsp;");

                }
            }
        });

    }
    

    this.CloseTranslationWindow = function() {

        var objPlateClose = jQ('#TranslateWindowCloseBack');
        var objPlateBack = jQ('#TranslateWindowPlateBack');
        var objPlate = jQ('#TranslateWindowPlate');

        objPlate.hide();
        objPlateBack.hide();
        objPlateClose.hide();


        jQ('#TranslationSaved').hide();

    }

    this.AttachSavedTranslation = function(culture, translation, targetID) {

        var targetElement = jQ("#"+targetID);

        targetElement.val(translation.replace(/<br\/>/g, '\n'));

        jQ('#ctl00_ctl00_TranslatorLanguageChoose').val(culture);

    }
}

var Translate = new Translator();

var extsourceID;
var exttargetID;


