/* 
 * The MIT License
 *
 * Copyright 2015 Valerio.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
function changeTheme() {

    //Inizializziamo la variabile al valore di default
    var style = "default";

    //Controlla se è possibile usare lo storage locale

    //Se non è stato scelto un tema viene aggiunto quello di default
    if (localStorage.getItem("theme") == "undefined") {
        localStorage.setItem("theme", style);
    }
    else {
        //Altrimenti prende il tema salvato
        style = localStorage.getItem("theme");
    }


    //Prende il link al css dal documento
    var oldCss = document.getElementById("bootstrapStyle").getAttribute("href");

    //Controlla che il tema impostato nel documento sia diverso da quello voluto
    var pattern = new RegExp(style);

    if (!pattern.test(oldCss)) {
        oldCss = oldCss.replace("default", style);
        document.getElementById("bootstrapStyle").setAttribute("href", oldCss);
    }
}

/*
 * Ricalcola il colore e la distanza dall'alto della sidebar in base al foglio
 * di stile in uso
 * 
 * @returns {undefined}
 */
function reStyle() {
    var navBackColor = getRule(document.styleSheets[0].cssRules, "navbar-default", "background-color");
    var navHeight = getRule(document.styleSheets[0].cssRules, "navbar", "min-height");

    var side = document.getElementById("side");
    var foot = document.getElementById("foot");

    side.setAttribute("style", "background-color: " + navBackColor+
            "; top: "+navHeight);
    foot.setAttribute("style", "background-color: " + navBackColor)
}


/**
 * Cerca la regola all'interno dell'array
 * @param {type} rulesList Lista di regole in cui cercare
 * @param {type} pattern nome della regola da cercare
 * @param {type} property proprietà da ricercare
 * @returns {getRule.rulesList} regola trovata o null se non esiste
 */
function getRule(rulesList, pattern, property) {
    var i;
    var reg = new RegExp(pattern);
    var selector;

    //Ricerca il pattern all'interno delle regole
    for (i = 0; i < rulesList.length; i++) {
        selector = rulesList[i].selectorText;
        if (selector !== undefined) {
            if (reg.test(rulesList[i].selectorText)) {
                //Se trova una regola che corrisponde cerca di 
                //ottenere la proprietà desiderata
                var propertyValue = getPropertyValue(rulesList[i], property);
                if (propertyValue !== null) {
                    return propertyValue;
                }
            }
        }
    }
    return null;
}


function getPropertyValue(rule, property) {

    var reg = new RegExp(property + "(.*?);");
    var text = rule.cssText;
    var values = reg.exec(text);
    if (values !== null) {
        var stringToReplace = new RegExp(property + "\\W*\\s|(;$)", "g");
        var value = values[0].replace(stringToReplace, "");
        return value;
    }
    else {
        return null;
    }
}

function setStyle(styleFolder){
    localStorage.setItem("theme", styleFolder);
    location.reload();
}