// ==UserScript==
// @name           Strava Calorie Calc
// @namespace      loolix
// @description    Adds calories & calories/hour to Strava rides and segments
// @include        http://www.strava.com/rides/*
// @include        http://strava.com/rides/*
// ==/UserScript==

function GM_doit()
{
    var $ = unsafeWindow.jQuery;
    var elems = { };
    var vals = { };
    var wattsKey;
    var timeKey = 'Moving Time';
    var elevationKey = 'Elevation Gain';
    var minutes;
    var watts;

    function trim(s) {
        return s.replace(/^\s+|\s+$/g, "");
    }

    function addField(elem, label, value) {
        $('<li class="' + (elem.hasClass('primary') ? 'primary' : 'secondary') + '">' +
          '<ul>' +
          '<li class="first">' + label + '</li>' +
          '<li class="last">' + value + '</li>' +
          '</ul>').insertAfter(elem);
    }

    $("li.first").each(function (idx) {
            var key = trim($(this).text());
            elems[key] = $(this);
            vals[key] = trim($(this).next().text());
        });

    wattsKey = elems['Watts'] ? 'Watts' : 'Average Watts';
    elevationKey = elems['Elevation Gain'] ? 'Elevation Gain' : 'Total Elevation Gain';

    if (elems[timeKey]) {
        minutes = vals[timeKey].match(/(\d\d):(\d\d):(\d\d)/);
        minutes = (minutes[1] * 60) + (minutes[2] - 0) + (minutes[3] / 60);
    }

    if (elems[wattsKey]) {
        watts = vals[wattsKey].replace(/,/g).match(/\d*/) - 0;
    }

    if (elems[timeKey] && elems[wattsKey]) {
        var calories = minutes * watts * 60 / 1000;
        var parent = elems[wattsKey].parents('li');
        /*
        var kg = GM_getValue("weightLbs") * 0.45359237;
        if (kg) {
            addField(parent, 'Power to Weight', (watts / kg) + 'W/kg');
        } else {
            window.setTimeout(GM_setValue, 0, 'weightLbs', '136');
            //GM_setValue('weightLbs', '136');
        }
        */
        addField(parent, 'Metabolic Rate', Math.floor(calories * 60 / minutes) + ' Cph');
        addField(parent, 'Calories', Math.floor(calories) + ' C');
    }

    if (elems[timeKey] && elems[elevationKey]) {
        var gain = vals[elevationKey].replace(/,/g, "").match(/\d*/) - 1;
        gain = gain * 60 / minutes;
        addField(elems[elevationKey].parents('li'), 'Climbing Rate', Math.floor(gain) + ' fph');
    }
}

// Check if jQuery's loaded
function GM_wait() {
    if (typeof unsafeWindow.jQuery == 'undefined') {
        window.setTimeout(GM_wait, 100);
    } else {
        unsafeWindow.jQuery(document).ready(GM_doit);
    }
}

(function(){
    GM_wait();
})();

