/**
  $RCSfile: webTranslator.js,v $
  $Revision: 1.12.2.2 $
  $Date: 2009/01/26 15:43:43 $

  Bootstrap script for the web translation page
*/

var webTranslator = {
    _lastLocation : "",
    _sbs: false,
    _sbsSetable: true,
    _nw: false,
    _nwSetable: true,
    _lastWindow : null,
    _turl : "turl",
    _sessionOptions : {},
    _logged: null,

    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);
            }
        }
    },

    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(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 = src.substring(turli + turll, qsii);
        fctval = fctval.substring(0, fctval.lastIndexOf("/")); // lpangauge pair
        fctval = fctval.substring(0, fctval.indexOf("-")) + "://" +  fctval.substring(fctval.indexOf("-") + 1);
        var qs = src.substring(qsii, frii);
        var syi;
        while((syi = qs.indexOf("systran")) > -1) {
            var syei = qs.indexOf("&", syi);
            if(syei < 0) {
                qs = qs.substring(0, syi);
            }
            else {
                qs = qs.substring(0, syi) + qs.substring(syei + 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") {
            el.src = "images/sbs" + (webTranslator._sbs ? "checked" : "") + "_normal.gif";
        }
        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;
        }
    },

    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;
        }
    }
}