function timeLabelFunction(value) {
    var min = value.getMinutes();
    if (min < 10) {
        min = "0" + min;
    }

    var hour = value.getHours();
    if (hour < 10) {
        hour = "0" + hour;
    }

    return hour + ":" + min;
}

function bytesLabelFunction(value) {
    if (value < 1024) {
        return value  + " B";
    }

    value = value / 1024;
    if (value < 1024) {
        if (value < 10) {
            return formatNumber(value, 2) + " KB";
        } else {
            return formatNumber(value, 1) + " KB";
        }
    }

    value = value / 1024;

    if (value < 1024) {
        if (value < 10) {
            return formatNumber(value, 2) + " MB";
        } else {
            return formatNumber(value, 1) + " MB";
        }
    }

    value = value / 1024;

    if (value < 10) {
        return formatNumber(value, 2) + " GB";
    } else {
        return formatNumber(value, 1) + " GB";
    }
}

function responseTimeLabelFunction(value, round) {
    var round = (round === true) ? true : false;

    if (value < 1000) {
        return value  + " ms";
    }

    value = value / 1000;
    if (value < 10) {
        return formatNumber(value, round ? 0 : 2) + " secs";
    }

    if (value < 60) {
        return formatNumber(value, round ? 0 : 1) + " secs";
    }

    value = value / 60;
    if(value < 60) {
        return formatNumber(value, round ? 0 : 1) + " min";
    }

    value = value / 60;
    if(value < 24) {
        return formatNumber(value, round ? 0 : 1) + " hrs";
    }

    value = value / 24;
    return formatNumber(value, round ? 0 : 1) + " days";
}

function formatNumber(value, decimalPlaces) {
    value = new Number(value);
    value = decimalPlaces ? value.toFixed(decimalPlaces) : Math.round(value);

    return addCommas(new String(value));
}

function addCommas(nStr) {
	nStr += '';
	var x = nStr.split('.');
	var x1 = x[0];
	var x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function formatDate(d, fmt, monthNames, useUTCTime) {
    var useUTCTime = !!useUTCTime;

    var leftPad = function(n) {
        n = "" + n;
        return n.length == 1 ? "0" + n : n;
    };

    var r = [];
    var escape = false;
    if (monthNames == null)
        monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    for (var i = 0; i < fmt.length; ++i) {
        var c = fmt.charAt(i);

        if (escape) {
            if(!useUTCTime) {
                switch (c) {
                case 'h': c = "" + d.getHours(); break;
                case 'H': c = leftPad(d.getHours()); break;
                case 'M': c = leftPad(d.getMinutes()); break;
                case 'S': c = leftPad(d.getSeconds()); break;
                case 'd': c = "" + d.getDate(); break;
                case 'm': c = "" + (d.getMonth() + 1); break;
                case 'y': c = "" + d.getFullYear(); break;
                case 'b': c = "" + monthNames[d.getMonth()]; break;
                }
            } else {
                switch (c) {
                case 'h': c = "" + d.getUTCHours(); break;
                case 'H': c = leftPad(d.getUTCHours()); break;
                case 'M': c = leftPad(d.getUTCMinutes()); break;
                case 'S': c = leftPad(d.getUTCSeconds()); break;
                case 'd': c = "" + d.getUTCDate(); break;
                case 'm': c = "" + (d.getUTCMonth() + 1); break;
                case 'y': c = "" + d.getUTCFullYear(); break;
                case 'b': c = "" + monthNames[d.getUTCMonth()]; break;
                }
            }

            r.push(c);
            escape = false;
        }
        else {
            if (c == "%")
                escape = true;
            else
                r.push(c);
        }
    }
    return r.join("");
}

function localTime(d) {
    return d.getTime() - (d.getTimezoneOffset() * 60 * 1000);
}

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

function softWrap(str, len) {
    var len = len || 32,
        re = new RegExp('.{' + len + '}[^\/_=\-]*[\/_=\-]', 'ig');

    return str.replace(re,'$&\&shy;');
}