// ----------------------------------------------- PRETRAITEMENT DES DONNEES ----------------------------------------------

/* Parse les dates des données pour avoir des objets Date
 data : données brutes contenus dans le CSV
 */
function parseData(data) {
    var format = d3.time.format("%d/%m/%Y");
    for(var i = 0; i < data.length; i++) {
        data[i].Date = format.parse(data[i].Date);
    }
}

/* Calcule la moyenne quotidienne des vélos
 Crée une nouvelle propriété "Moyenne" dans data pour indiquer cette moyenne
 data : données brutes contenus dans le CSV
 */
function procMean(data) {
    for(var i = 0; i < data.length; i++) {
        var moyenne = 0.0;

        var rues = d3.keys(data[i]);
        for(var j=0; j<rues.length; j++) {
            if(rues[j] != "Date")
                moyenne += parseInt(data[i][rues[j]]);
        }
        moyenne /= rues.length-1;
        data[i].Moyenne = moyenne;
    }
}

// Scale permettant d'associer 10 valeurs à 10 couleurs différentes
var color = d3.scale.category10();

/* Précise le domaine de color en associant un nom de rue à une couleur
 data : données brutes contenues dans le CSV
 color : fonction scale précédente
 */
function domainColor(color, data) {
    var domain = d3.keys(data[0]).filter(function(key) {
        if(key != "Date")
            return key;
    });
    color.domain(domain);
}

/* Tri les données par nom de rue puis par date
 La variable retournée sources doit être une Array de n objets (n = nb de rues) de la forme suivante :
 sources[0] = {name: le nom de la rue, values: Array[365]{.date : la date,.nbVelo : le nombre de vélo compté ce jour là}}
 data : données du CSV
 color : son domain contient déjà les noms des rues
 */
function createSources(color, data) {
    var sources = [];
    var rues = color.domain();
    for(var i = 0; i < rues.length; i++) {
        sources[i] = {
            name: rues[i],
            values: []
        };
        for(var j = 0; j < data.length; j++) {
            sources[i].values.push({
                date: data[j].Date,
                nbVelo: parseInt(data[j][rues[i]])
            });
        }
    }
    return sources;
}

// Précise le domaine des échelles x (focus) et x2 (context)
// data: données du CSV
function domainX(x, x2, data) {
    x.domain([data[0].Date, data[data.length - 1].Date]);
    x2.domain([data[0].Date, data[data.length - 1].Date]);
}

// Précise le domaine des échelles y (focus) et y2 (context)
// sources : données de data triées par nom puis par date
function domainY(y, y2, sources) {
    var max = d3.max(sources, function(s) {
        return d3.max(s.values, function(d) {
            return d.nbVelo;
        });
    });
    y.domain([0, max]);
    y2.domain([0, max]);
}