// adapdted directly from v6 desktop product
// see SYSTRAN.GUI.Platform.LanguagePairs for documentation
function LanguagePairs(lps) {
    this._lps = lps;

    this.getSource = function(lp) {
        return lp.substr(0,2);
    };

    this.getTarget = function(lp) {
        return lp.substr(3,2);
    };

    this.getSourceLangauges = function() {
        var sourceHash = {};
        var fctval = new Array();
        for(var i = 0; i < languagePairs._lps.length; i++) {
            var source = this.getSource(languagePairs._lps[i]);
            if(sourceHash[source] == null) {
                fctval.push(source);
                sourceHash[source] = source;
            }
        }
        return fctval;
    };

    this.getTargetLanguages = function(source) {
        var targetHash = {};
        var fctval = new Array();
        for(var i = 0; i < languagePairs._lps.length; i++) {
            if(this.getSource(languagePairs._lps[i]) == source) {
                var target = this.getTarget(languagePairs._lps[i]);
                if(targetHash[target] == null) {
                    fctval.push(target);
                    targetHash[target] = target;
                }
             }
        }
        return fctval;
    };

    this.getSelectedTarget = function(source, last) {
        // 0
        if(last != null && this.getSource(last) == source) {
            return this.getTarget(last);
        }
        var history = this.getHistory();
        // 1
        for(var i = 0; i < history.length; i++) {
            if(this.getSource(history[i]) == source && this.contains(history[i])) {
                return this.getTarget(history[i]);
            }
        }
        // 2
        if(last != null && this.contains(source + "_" + this.getSource(last))) {
            return this.getSource(last);
        }
        // 3
        if(this.contains(source + "_" + this.getPreferredTarget())) {
            return this.getPreferredTarget();
        }
        // 4
        if(last != null && this.contains(source + "_" + this.getTarget(last))) {
            return this.getTarget(last);
        }
        // 5
        return this.getTargetLanguages(source)[0];
    };

    this.getStartingSelectedPair = function() {
        var history = this.getHistory();
        for(var i = 0; i < history.length; i++) {
            if(this.contains(history[i])) {
                return history[i];
            }
        }
        var sources = this.getSourceLangauges();
        if(sources.length > 0) {
            return sources[0] + "_" + this.getSelectedTarget(sources[0], null);
        }
        return "00_00";
    };

    this.contains = function(lp) {
        for(var i = 0; i < this._lps.length; i++) {
            if(this._lps[i] == lp) {
                return true;
            }
        }
        return false;
    };

    this.getHistory = function() {
        var history = readCookie("lphistory");
        if(history == null || history == "") {
            return new Array();
        }
        else {
            return history.split(" ")
        }
    };

    this.recordHistory = function(lp) {
        var newHistory = new Array();
        newHistory.push(lp);
        var history = this.getHistory();
        for(var i = 0; i < history.length; i++) {
            if(this.getSource(history[i]) != this.getSource(lp)) {
                newHistory.push(history[i]);
            }
        }
        var strHistory = "";
        for(var i = 0; i < newHistory.length; i++) {
            strHistory += (strHistory != "" ? " " : "") + newHistory[i];
        }
        createCookie("lphistory", strHistory, 365);
    };

    this.getPreferredTarget = function() {
        return localization.lang;
    };
};
