if (!window.cooliris) {
    cooliris = {};
}

cooliris.settings = (function(){
    var last_mode;
    
    var effectsModeTable = {
        'all'  : 'Effects On', 
        'none' : 'Effects Off', 
        'auto' : 'Effects Auto', 
        'opengl'    : 'OpenGL', 
        'direct3d'  : 'Direct3D', 
        'software'  : 'Software Only', 
        'pixodx'    : 'PixoDX', 
        'pixomatic' : 'Pixomatic' 
    };
    
    var effectsModeTableReversed = function() {
        var emr = {};
        for (var em in effectsModeTable){
            emr[effectsModeTable[em]] = em;
        }
        return emr;
    }();

 
    // if (mode == 'all' || mode == 'basic') {
    //     return 'Effects On';
    // } else if (mode == 'auto' || mode == '' || mode == null) {
    //     return 'Effects Auto';
        
    var hasAtLeastCoolirisVersion = function(major, minor, maintenance, build) {
        var installed_version;
        try {
            installed_version = window.piclens.version; 
        } catch (e) { return false; }

        var compare_versions = function(actual_version, required_version, required_version_next_part){
            if (actual_version) {
                if (actual_version > required_version) {
                    return {'continue': false, 'return_value': true} ;
                } else {
                    if (actual_version == required_version ) {
                        if (typeof required_version_next_part != 'undefined') return {'continue': true, 'return_value': undefined};
                        else return {'continue': false, 'return_value': true};
                    } else {
                        // actual_version < required_version
                        return {'continue':false, 'return_value':false};
                    }

                }
            }
            return {'continue':false, 'return_value':false};
        };

        var required_parts = {0: major, 1: minor, 2: maintenance, 3: build, 4: undefined};
        var installed_parts = installed_version.split('.'); // e.g., minimum version is: 1.6.0.824

        for (var i = 0; i < installed_parts.length; i++) {
            var compare_result = compare_versions(installed_parts[i], required_parts[i], required_parts[i+1]);
            if (!compare_result['continue']) {
                return compare_result['return_value'];
            }
        };
    };
    
    
    return {
        effectsModeInit: function() {
            if (!window.piclens || !hasAtLeastCoolirisVersion(1,9,0,0) ) {
                document.getElementById('effectsswitch').style.display = 'none';
                document.getElementById('effectsswitch-not-supported').style.display='block';
                
            } else {
                var current_mode = document.getElementById('current_mode');
                last_mode = effectsModeTable[piclens.getConfigProperty('com.cooliris.gfx.effects')];
                //current_mode.innerHTML = 'Your current mode is: ' + last_mode;
            }
        },
        
        setEffectsMode : function(mode) {
            var message = document.getElementById('message');
                        
            if (!window.piclens || !hasAtLeastCoolirisVersion(1,9,0,0)){
                document.getElementById('effectsswitch').style.display = 'none';
                document.getElementById('effectsswitch-not-supported').style.display='block';
            } else {
                piclens.setConfigProperty('com.cooliris.gfx.effects', effectsModeTableReversed[mode]); 
            }

            message.innerHTML = 'The new mode is: ' + mode;

            var restart = false;

            if ((mode == 'Effects On' || mode == 'OpenGL' || mode == 'Direct3D') && 
                (last_mode == 'Software Only' || last_mode == 'PixoDX' || last_mode == 'Pixomatic')) {
                restart = true;
            } else if ((last_mode == 'Effects On' || last_mode == 'OpenGL' || last_mode == 'Direct3D') && 
                (mode == 'Software Only' || mode == 'PixoDX' || mode == 'Pixomatic')) {
                restart = true;
            }

            if (restart) {
                message.innerHTML += '. <b>You must restart your browser for this setting to take effect.</b>';
            }

            message.style.display = 'block';
        }

    };
})();

