
var systranBox = {

    _srcBox : null,
    _tgtBox : null,
    _srcChangeTimer : null,
    _lastText : null,
    _lastLp : null,
    onLoadResult : null,
    _maxSize : null,
    _popup : null,
    _autoTrans : true,

    init : function() {
        var srcBox = document.getElementById("edit_src");
        var tgtBox = document.getElementById("edit_tgt");
        if(srcBox.addEventListener) {
            srcBox.addEventListener("keyup", systranBox.onSrcChange, true);
        }
        else if(srcBox.attachEvent) {
            srcBox.attachEvent("onkeyup", systranBox.onSrcChange);
        }
        systranBox._srcBox = srcBox;
        systranBox._tgtBox = tgtBox;
        systranBox.onLpChange(languageSelection);
    },

    doEmail : function() {
        if (!_hasEmail)
            this._popup = window.open("translateTextEmailPopup.jsp", "emailText", "scrollbars=yes,resizable=yes,toolbar=no,width=200,height=40");
        else
            this.email(null);
    },

    callEmail : function() {
        var email = document.getElementById("email").value;
        if (email != '') {
            opener.systranBox.email(email);
        }
    },

    email : function(email) {
        var options = {};
        if (email)
            options["email"] = email;
        options["template"] = "template/box/translate.html";
        options["variables"] = "srcWindow,tgtWindow";
        var sent = "srcWindow=" + this._srcBox.value + "tgtWindow=" + this._tgtBox.value;
        sai.sendGenericRequest("sai", "email_text", options, sent, systranBox.emailComplete);
    },

    emailComplete : function(request) {
        if(systranBox._popup)
            systranBox._popup.close();
        if(request.isSuccess()) {
            var response = request.getParsedResponse().body;
            alert(response);
        }
    },

    printWindow : function(url,w,h) {
        if (window.myPWin && ! myPWin.closed) { myPWin.close(); }
        myPWin = window.open(url, "print", "scrollbars=yes,resizable=yes,toolbar=no,width="+w+",height="+h);
        myPWin.focus();
    },

    translate : function() {
        systranBox.translateText(systranBox._srcBox.value);
    },

    translateText : function(text) {
        text = trim(text);
        systranBox._lastText = text;
        if(text == "") {
            systranBox.loadResult("");
            var warningDiv = document.getElementById("warningtoolbar");
            warningDiv.style.display = 'none';
            return;
        }
        if (text.toLowerCase() == "chafouin") {
            systranBox.loadResult("pepouze");
            return;
        }
        if (text.toLowerCase() == "pepouze") {
            systranBox.loadResult("chafouin");
            return;
        }
	  if (text.toLowerCase() == "chabaton") {
            systranBox.loadResult("chapute");
            return;
        }
        systranBox._lastLp = languageSelection.getSelectedLp();
        sai.translateText(text, languageSelection.getSelectedLp(), systranBox.translationComplete);
    },

    translationComplete : function(request) {
        if(request.isSuccess()) {
            var output = request.getOutput();
            systranBox.loadResult(output);
            var warning = request.getParsedResponse().options["limitwarning"];
            var warningDiv = document.getElementById("warningtoolbar");
            if (warningDiv && warning == '1')
                warningDiv.style.display = 'block';
            else
                warningDiv.style.display = 'none';
        }
    },

    loadResult : function(text) {
        systranBox._tgtBox.value = text;
        if(systranBox.onLoadResult) {
            systranBox.onLoadResult();
        }
    },

    onLpChange : function(lpSelection) {
        if(systranBox._srcBox) {
            systranBox._srcBox.dir = languagePairs.getSource(lpSelection.getSelectedLp()) == "ar" ? "rtl" : "ltr";
        }
        if(systranBox._tgtBox) {
            systranBox._tgtBox.dir = languagePairs.getTarget(lpSelection.getSelectedLp()) == "ar" ? "rtl" : "ltr";
        }
        systranBox.onSrcChange();
    },

    onSrcChange : function() {
        if(systranBox._srcChangeTimer != null) {
            clearTimeout(systranBox._srcChangeTimer);
        }
        if(systranBox._autoTrans) {
            systranBox._srcChangeTimer = setTimeout(systranBox.doTranslate, 1000);
        }
    },

    doTranslateWait : function() {
        systranBox.doTranslate();
    },

    doTranslate : function() {
        if(systranBox._maxSize != null && systranBox._maxSize < systranBox._srcBox.value.length) {
            alert(localization.getString("app.text.too.long"));
            return;
        }
        var text = trim(systranBox._srcBox.value);
        if(text != systranBox._lastText || languageSelection.getSelectedLp() != systranBox._lastLp) {
            systranBox.translateText(text);
        }
    },

    generateCharMAP : function() {
        var charMAP = "", lstCHAR = new Array("&#0161;","&#0191;","&#0162;","&#0163;","&#0165;","&#8364;","&#0164;","&#0166;","&#0167;","&#0168;","&#0169;","&#0174;","&#8482;","&#0170;","&#0172;","&#0175;","&#0176;","&#0180;","&#0181;","&#0182;","&#0183;","&#0184;","&#0186;","<br />","&#8220;","&#8221;","&#8222;","&#0171;","&#0187;","&#0185;","&#0178;","&#0179;","&#0188;","&#0189;","&#0190;","&#0247;","&#0215;","&#0177;","&#8240;","&#0402;","&#8211;","&#8212;","<br />","&#0198;","&#0230;","&#0199;","&#0231;","&#0208;","&#0240;","&#0209;","&#0241;","&#0216;","&#0248;","&#0254;","&#0222;","&#0223;","&#0140;","&#0156;","&#0352;","&#0353;","<br />","&#0192;","&#0193;","&#0194;","&#0195;","&#0196;","&#0197;","&#0200;","&#0201;","&#0202;","&#0203;","&#0204;","&#0205;","&#0206;","&#0207;","&#0210;","&#0211;","&#0212;","&#0213;","&#0214;","&#0217;","&#0218;","&#0219;","&#0220;","&#0221;","&#0376;","<br />","&#0224;","&#0225;","&#0226;","&#0227;","&#0228;","&#0229;","&#0232;","&#0233;","&#0234;","&#0235;","&#0236;","&#0237;","&#0238;","&#0239;","&#0242;","&#0243;","&#0244;","&#0245;","&#0246;","&#0249;","&#0250;","&#0251;","&#0252;","&#0253;","&#0255;");
        for(var i=0; i < lstCHAR.length; i++)
            { ( lstCHAR[i] != "<br />" ? charMAP += '<a href="javascript:void 0;" onclick="systranBox.specCHAR(innerHTML);" title="'+ lstCHAR[i] +'">'+ lstCHAR[i] +'</a>' : charMAP += lstCHAR[i] ); }
        document.write(charMAP);
    },

    specCHAR : function(x) {
        if(document.selection) {
            systranBox._srcBox.focus();
            var sel = document.selection.createRange();
            sel.text = x;
        }
        else if (systranBox._srcBox.selectionStart || systranBox._srcBox.selectionStart == '0') {
            var startPos = systranBox._srcBox.selectionStart;
            var endPos = systranBox._srcBox.selectionEnd;
            systranBox._srcBox.value = systranBox._srcBox.value.substring(0, startPos)+ x+ systranBox._srcBox.value.substring(endPos, systranBox._srcBox.value.length);
        }
        else {
            systranBox._srcBox.value += x;
        }
        systranBox.onSrcChange();
    },

    getCurrentSourceSentence : function() {
        if(document.selection) {
            systranBox._srcBox.focus();
            var sel = document.selection.createRange();
            if(sel.text != "") {
                return sel.text;
            }
            var sel2 = document.selection.createRange();
            sel2.moveToElementText(systranBox._srcBox);
            sel2.setEndPoint("EndToEnd", sel);
            return systranBox.findSentence(systranBox._srcBox.value, sel2.text.length);
        }
        else if (systranBox._srcBox.selectionStart || systranBox._srcBox.selectionStart == '0') {
            var startPos = systranBox._srcBox.selectionStart;
            var endPos = systranBox._srcBox.selectionEnd;
            if(endPos > startPos) {
                return systranBox._srcBox.value.substring(startPos, endPos);
            }
            else {
                return systranBox.findSentence(systranBox._srcBox.value, startPos);
            }
        }
        return systranBox._srcBox.value;
    },

    findSentence : function(text, caretPos) {
        var start = 0;
        if(caretPos > 0 && text.charAt(caretPos - 1) == '.') {
            caretPos--;
        }
        var re = /\n|\.(\s|$)/gim;
        var m = re.exec(text.substring(0, caretPos));
        while(m) {
            start = m.index + m[0].length;
            m  = re.exec(text.substring(0, caretPos));
        }
        m = /\n|\.(\s|$)/gim.exec(text.substring(caretPos));
        var end = text.length;
        if(m) {
            end = caretPos + m.index;
            if(m[0].indexOf(".") > -1) {
                end++;
            }
        }
        return text.substring(start, end);
    }
}


function insertAtCursor(myField, myValue) {
//IE support

}

