/*
* DashCoincoin
* Developed and designed by Thenon David
* www.sveetch.biz
* 
* - Fake dashcode library methods
* - Preferences wrapper
* - Widget UI and Preferences setups
*/

/*
Faux objet interne du Widget pour permettre d'utiliser toute les méthodes 
propres à DashBoard dans le contexte d'un navigateur.
*/
widget = {
    preferences: {},

    setPreferenceForKey : function(pref, key) {
        this.preferences[key] = pref;
    },

    preferenceForKey : function(key) {
        try {
            var pref = this.preferences[key];
        } catch (e) {
            var pref;
        }
        return pref;
    },

    openURL : function(url) {
        window.open(url);
        return false;
    },

    prepareForTransition : function(blockID) {
        // Not Implemented
        return null;
    },

    performTransition : function() {
        // Not Implemented
        return null;
    }
};

// Fausse création d'une clé pour l'instance du widget courant
function createInstancePreferenceKey(key) {
    return key;
}

// Wrapper des méthodes du widget pour lire et écrire des préférences. L'appel 
// est toujours fait dans le cadre d'un widget a instances multiples.
wrapPreference = {
    /*
    / Récupère la valeure, par défaut dans les preferences du widget, mais si 
    / 'data' est rempli, on l'utilise. Ce doit etre un objet avec les mots 
    / correspondants.
    */
    getPref : function( key, presetObject ) {
        if(presetObject) {
            return presetObject[key];
        } else {
            return widget.preferenceForKey( createInstancePreferenceKey(key) );
        }
    },
    /*
    / Assigne une valeure à une clé des préférences
    */
    setPref : function( key, value ) {
        widget.setPreferenceForKey( value, createInstancePreferenceKey(key) );
    }
}


/*
/ Registre et méthodes des timers utilisés
*/
refreshTimer = {
    timers : {},
    
    /*
    / Stop un timer du registre
    */
    getTimer : function( key ) {
        try {
            var timerObj = this.timers[key];
        } catch (e) {
            var timerObj = null;
        }
        return timerObj;
    },
    
    /*
    / Stop un timer du registre
    */
    stopTimer : function( key ) {
        var timerObj = this.getTimer( key );
        if (timerObj != null) {
            if(DEBUG) console.log("Timer Object:"+key+" => clearInterval()");
            clearInterval(timerObj);
            this.timers[key] = null;
        }
    },
    
    /*
    / Créé/édite un timer dans le registre
    */
    setTimer : function( key, funcString, milliseconds, force_zero ) {
        if( typeof(milliseconds) != "number" ) milliseconds = parseInt(milliseconds);
        // Si la valeure égale zéro, par défaut on prends ça comme un stop du 
        // timer, on peut forcer l'utilisation du zéro avec l'option force_zero
        if(force_zero || milliseconds > 0) {
            if(DEBUG) console.log("Timer Object:"+key+" => setTimeout('"+funcString+"', "+milliseconds+")");
            this.timers[key] = setTimeout(funcString, milliseconds);
        } else {
            this.stopTimer(key);
        }
    }
}

/*
* Méthode à appeler lors du premier chargement du widget après son installation
*/
function setupParts() {
    if (setupParts.called) return;
    setupParts.called = true;
    
    var tribune_preset = TRIBUNES_CONF_PRESETS[TRIBUNES_CONF_PREFERENCE];
    // Par défaut au premier chargement, on utilise la configuration préremplie
    widget.preferences = {
        "tribune_label": tribune_preset["tribune_label"],
        "tribune_parser": tribune_preset["tribune_parser"],
        "tribune_root_url": tribune_preset["tribune_root_url"],
        "tribune_backend_path": tribune_preset["tribune_backend_path"],
        "tribune_post_path": tribune_preset["tribune_post_path"],
        "tribune_clock_path": tribune_preset["tribune_clock_path"],
        "tribune_lastid_arg": tribune_preset["tribune_lastid_arg"],
        "tribune_message_id": tribune_preset["tribune_message_id"],
        "tribune_form_id": tribune_preset["tribune_form_id"],
        "tribune_post_response": tribune_preset["tribune_post_response"],
        "tribune_urlopen_blank": tribune_preset["tribune_urlopen_blank"],
        "tribunes_conf_preference": TRIBUNES_CONF_PREFERENCE,
        // Chargement des divers autres preferences
        "captcha_input_name": tribune_preset["captcha_input_name"],
        "captcha_input_id": tribune_preset["captcha_input_id"],
        "captcha_hidden_id": tribune_preset["captcha_hidden_id"],
        "captcha_img_id": tribune_preset["captcha_img_id"],
        "captcha_container_id": tribune_preset["captcha_container_id"],
        "submenu_showed": tribune_preset["submenu_showed"],
        "refresh_actived": REFRESH_ACTIVED,
        "refresh_time_shifting": String(REFRESH_TIME_SHIFTING),
        "show_smileys": String(SHOW_SMILEYS),
        "smileys_host_url": SMILEYS_HOST_URL,
        "username": USER_USERNAME,
        "user-agent": USER_USERAGENT
    };
}

