/**
  $RCSfile: webTranslator.js,v $
  $Revision: 1.14 $
  $Date: 2009-04-21 16:37:12 $

  Bootstrap script for the web translation page
*/

var webTranslator = {
    _lastLocation : "",
    _sbs: false,
    _sbsSetable: true,
    _nw: false,
    _nwSetable: true,
    _popSetable: true,
    _popModeSetable: true,
    _popMode: "0",
    _lastWindow : null,
    _turl : "turl",
    _sessionOptions : {},
    _logged: null,
    _translationFrame: null,
    _sbsImgOff: "images/sbs_normal.gif",
    _sbsImgOn: "images/sbschecked_normal.gif",


    init: function() {
        setTimeout(webTranslator.checkLocation, 1000);
        if(webTranslator._sbsSetable) {
            var sbs = readCookie("wbSbs");
            if(sbs == "1") {
                webTranslator.setSbs(true);
            }
        }
        if(webTranslator._nwSetable) {
            var nw = readCookie("wbNw");
            if(nw == "1") {
                webTranslator.setNw(true);
            }
        }
        if(webTranslator._popSetable) {
            var pop = readCookie("wbPop");
            webTranslator.setPop(pop == "1");
        }
        if(webTranslator._popModeSetable) {
            var popMode = readCookie("wbPopMode");
            if(popMode == "1" || popMode == "0") {
                webTranslator.setPopMode(popMode);
            }
            else
                webTranslator.setPopMode("1");
        }
        webTranslator._translationFrame = document.getElementById("webTranslatorContent");
    },

    getCurrentTranslationUrl: function(gui) {
        var form = document.getElementById("webTranslatorForm");
        var url = form.input_url.value;
        url = trim(url);
        var fctval = webTranslator._turl;
        if(fctval.charAt(fctval.length - 1) != "/") {
            fctval += "/";
        }
        var sci = url.indexOf("://");
        if(sci == -1) {
            url = "http://" + url;
            sci = url.indexOf("://");
        }
        var qsi = url.indexOf("?");
        var fri = url.indexOf("#");
        var frii = fri < 0 ? url.length : fri;
        var qsii = qsi < 0 ? frii : qsi;
        var new_url = url.substring(0, sci) + "-"; // scheme
        new_url += url.substring(sci + 3, qsii); //  authority + path
        new_url += "/" + languageSelection.getSelectedLp();
        if(qsi < 0) {
            fctval += "?";
        }
        else {
            fctval += url.substr(qsi, frii) + "&";
        }
        if(webTranslator._sbs) {
            fctval += "systransbs=1&";
        }
        if(webTranslator._pop) {
            fctval += "systranpopup=1&";
        }
        if(webTranslator._popMode) {
            fctval += "systranpopupmode=" + webTranslator._popMode + "&";
        }
        if(gui != "url") {
            fctval += "systrangui=" + gui + "&";
        }
        if(webTranslator._logged) {
            fctval += "systranlogged=true&";
        }
        if(document.getElementById("profile")) {
            fctval += "systranprofile=" + document.getElementById("profile").value + "&";
        }
        fctval += "systranuid=" + encode64(new_url) + "&";
        if(webTranslator._sessionOptions) {
            for(var name in webTranslator._sessionOptions) {
                if(webTranslator._sessionOptions.hasOwnProperty(name)) {
                    fctval += "systran" + name + "=" + webTranslator._sessionOptions[name] + "&";
                }
            }
        }
        if(fctval.charAt(fctval.length - 1) == "?" || fctval.charAt(fctval.length - 1) == "&") {
            fctval = fctval.substring(0, fctval.length - 1);
        }
        if(fri > -1) {
            fctval += url.substring(fri);
        }
        return fctval;
    },

    go: function(e) {
        var form = document.getElementById("webTranslatorForm");
        if(form.input_url.value == "" || form.input_url.value == "http://") {
            return;
        }
        var url = webTranslator.getCurrentTranslationUrl(window.specialGui ? window.specialGui : "url");
        if(webTranslator._nw) {
            webTranslator._lastWindow = window.open(url);
        }
        else {
            document.getElementById("webTranslatorContent").src = url;
            document.getElementById("webTranslatorForm").onload
        }
    },

    parseLocation: function(src) {
        var turli = src.indexOf(webTranslator._turl);
        if(turli < 0) {
            return null;
        }
        var turll = webTranslator._turl.length;
        if(webTranslator._turl.charAt(webTranslator._turl.length) != "/") {
            turll++;
        }
        var qsi = src.indexOf("?");
        var fri = src.indexOf("#");
        var frii = fri < 0 ? src.length : fri;
        var qsii = qsi < 0 ? frii : qsi;
        var fctval = null;//src.substring(turli + turll, qsii);
        var qs = src.substring(qsii, frii);
        var syi;
        while((syi = qs.indexOf("systran")) > -1) {
            var syei = qs.indexOf("&", syi);
            var syvi = qs.indexOf("=", syi);
            if (qs.substring(syi + 7, syvi) == "uid") {
                fctval = decode64(syei < 0 ? qs.substring(syvi + 1) : qs.substring(syvi + 1, syei - syvi));
            }
            if(syei < 0) {
                qs = qs.substring(0, syi);
            }
            else {
                qs = qs.substring(0, syi) + qs.substring(syei + 1);
            }
        }
        fctval = fctval.substring(0, fctval.lastIndexOf("/")); // lpangauge pair
        fctval = fctval.substring(0, fctval.indexOf("-")) + "://" +  fctval.substring(fctval.indexOf("-") + 1);
        fctval += qs;
        if(fctval.charAt(fctval.length - 1) == "?" || fctval.charAt(fctval.length - 1) == "&") {
            fctval = fctval.substring(0, fctval.length - 1);
        }
        if(fri > -1) {
            fctval += src.substring(fri);
        }
        return fctval;
    },

    getCurrentLocation: function() {
        return webTranslator.parseLocation(document.getElementById("webTranslatorContent").contentWindow.location.href);
    },

    checkLocation: function() {
        try {
            var location = webTranslator.getCurrentLocation();
            if(location && location != webTranslator._lastLocation) {
                document.getElementById("webTranslatorInputUrl").value = location;
                webTranslator._lastLocation = location;
            }
        }
        catch(err) {}
        setTimeout(webTranslator.checkLocation, 1000);
    },

    toggleSbs: function() {
        webTranslator.setSbs(!webTranslator._sbs);
        createCookie("wbSbs", webTranslator._sbs ? "1" : "0", 365);
    },

    setSbs: function(value) {
        webTranslator._sbs = value;
        var el = document.getElementById("webTranslatorSbs");
        if(el.type == "image") {
            if (webTranslator._sbs)
                el.src = webTranslator._sbsImgOn;
            else
                el.src = webTranslator._sbsImgOff;
        }
        else {
            // checkbox
            el.checked = webTranslator._sbs;
        }
    },

    toggleNw: function() {
        webTranslator.setNw(!webTranslator._nw);
        createCookie("wbNw", webTranslator._nw ? "1" : "0", 365);
    },

    setNw: function(value) {
        webTranslator._nw = value;
        var el = document.getElementById("webTranslatorNw");
        if(el.type == "image") {
            el.src = "images/nw" + (webTranslator._nw ? "checked" : "") + "_normal.gif";
        }
        else {
            // checkbox
            el.checked = webTranslator._nw;
        }
    },

    togglePop: function() {
        webTranslator.setPop(!webTranslator._pop);
        createCookie("wbPop", webTranslator._pop ? "1" : "0", 365);
    },

    setPop: function(value) {
        webTranslator._pop = value;
        var el = document.getElementById("webTranslatorPop");
        if (el == null)
            return;
        if(el.type == "image") {
            el.src = "images/pop" + (webTranslator._nw ? "checked" : "") + "_normal.gif";
        }
        else {
            // checkbox
            el.checked = webTranslator._pop;
        }
        var elClick = document.getElementById("webTranslatorPopClick");
        var elOver = document.getElementById("webTranslatorPopOver");
        if (webTranslator._pop) {
            elClick.disabled = false;
            elOver.disabled = false;
        }
        else {
            elClick.disabled = true;
            elOver.disabled = true;
        }
        var translationFrame = webTranslator.findPopupTargetFrame();
        if (translationFrame != null)
            translationFrame.systranPopup = webTranslator._pop;
    },

    togglePopMode: function(mode) {
        webTranslator.setPopMode(mode);
        createCookie("wbPopMode", webTranslator._popMode, 365);
    },

    setPopMode: function(value) {
        webTranslator._popMode = value;
        var elClick = document.getElementById("webTranslatorPopClick");
        var elOver = document.getElementById("webTranslatorPopOver");
        if (elClick == null || elOver == null) {
            return;
        }
        // radiobuttons
        elClick.checked = webTranslator._popMode == "0";
        elOver.checked = webTranslator._popMode == "1";
        var translationFrame = webTranslator.findPopupTargetFrame();
        if (translationFrame != null
                && translationFrame.systranPopupEvents != null
                && typeof(translationFrame.systranPopupEvents) != "undefined")
            translationFrame.systranPopupEvents._popupByClick = webTranslator._popMode == "0";
    },

    browserFavorite: function() {
        var title = null;
        try {
            if(webTranslator.getCurrentLocation() == document.getElementById("webTranslatorInputUrl").value) {
                title = document.getElementById("webTranslatorContent").contentWindow.document.title;
            }
         }
         catch(ex) {}
         try {
             if(title == null || title == "") {
                if(webTranslator._lastWindow != null && webTranslator.parseLocation(webTranslator._lastWindow.location.href) ==  document.getElementById("webTranslatorInputUrl").value) {
                    title = document.getElementById("webTranslatorContent").contentWindow.document.title;
                }
            }
         }
         catch(ex) {}
        if(title == null || title == "") {
            title = document.getElementById("webTranslatorInputUrl").value;
        }
        title += " (" + localization.getString("app.url.translated") + " " + localization.localizeLp(languageSelection.getSelectedLp()) + ")";
        webTranslator.addBookmark(title, webTranslator.getCurrentTranslationUrl("fav"));
    },

    addBookmark: function(title, url) {
        if (window.sidebar) {
            // Mozilla Firefox Bookmark
           window.sidebar.addPanel(title, url, "");
        } else if(window.external ) {
           // IE Favorite
           window.external.AddFavorite(url, title);
        } else if(window.opera && window.print) {
           // Opera Hotlist
           return true;
        }
    },

    findPopupTargetFrame: function() {
        if (webTranslator._translationFrame != null) {
            if (webTranslator._translationFrame.contentWindow.systranPopup != null
                    && typeof(webTranslator._translationFrame.contentWindow.systranPopup) != "undefined")
                return webTranslator._translationFrame.contentWindow;
            if (webTranslator._translationFrame.contentWindow.frames.length > 1
                    && webTranslator._translationFrame.contentWindow.frames[1] != null
                    && webTranslator._translationFrame.contentWindow.frames[1].systranPopup != null
                    && typeof(webTranslator._translationFrame.contentWindow.frames[1].systranPopup) != "undefined")
                return webTranslator._translationFrame.contentWindow.frames[1];
        }
        return null;
    }
}
