/** converts a time value (hh:mm:ss) into seconds */
function convertToSeconds(val) {
	if($.trim(val) == "") return 0;
	
	var values = val.split(":");
	
	try {
		if(values.length == 1) return values[0];
		else if(values.length == 2) return values[0] * 60 + values[1] * 1.0;
		else if(values.length == 3) return values[0] * 60 * 60 + values[1] * 60 + parseDouble(values[2]);
	} catch(e) {
		return 0;
	}
	
	return 0;
}

function initBodyWeight() {
	$("#weight").keyup(function(e) {
		recalculateBasedOnWeight();
	});
}

function recalculateBasedOnWeight() {
	var val = $("#weight").val();
	if(val != "") {
		for(var i = 0; i < chartObject.length; i++) {
			if(chartObject[i].ProficiencyChart.male == isMale && chartObject[i].ProficiencyChart.type == "strength") {
				var id = chartObject[i].ProficiencyChart.workout_id;
				
				$("#untrained_"+id).html((chartObject[i].ProficiencyChart.untrained * val).toFixed(0));
				$("#average_"+id).html((chartObject[i].ProficiencyChart.average * val).toFixed(0));
				$("#good_"+id).html((chartObject[i].ProficiencyChart.good * val).toFixed(0));
				$("#excellent_"+id).html((chartObject[i].ProficiencyChart.excellent * val).toFixed(0));
				$("#elite_"+id).html((chartObject[i].ProficiencyChart.elite * val).toFixed(0));
				
				var best = $("#"+id).val();
				var elite = $("#elite_"+id).html();
				
				if(elite > 0) elite = (best / elite) * 100;
				
				if(isNaN(elite)) elite = 0;
				else if(elite > 100) elite = 100;
				
				$("#elite_perc_"+id).html(elite.toFixed(2));
			}
		}
	}
}

function getProficiencyChart(id) {
	for(var i = 0; i < chartObject.length; i++) {
		if(chartObject[i].ProficiencyChart.workout_id == id) return chartObject[i];
	}
	return null;
}

function initBestItems() {
	// set up all the current best items to update the elite strength % when changed
	for(var i = 0; i < chartObject.length; i++) {
		$("#"+chartObject[i].ProficiencyChart.workout_id).keyup(function(e) {
			var id = $(this).attr("id");
			var profChart = getProficiencyChart(id);
			
			calcEliteValue(id, profChart);
		});
	}
}

function recalculateEliteValues() {
	for(var i = 0; i < chartObject.length; i++) {
		var id = chartObject[i].ProficiencyChart.workout_id;
		var profChart = chartObject[i];
		
		if(chartObject[i].ProficiencyChart.male == isMale) {
			calcEliteValue(id, profChart);
		}
	}
}

function calcEliteValue(id, profChart) {
	if(profChart.ProficiencyChart.type == "strength" || profChart.ProficiencyChart.type == "calisthenics") {
		if($("#"+id).val() != "") {
			var val = $("#"+id).val();
			var elite = $("#elite_"+id).html();
			elite = elite.replace("&nbsp;", "");
			
			elite = (val / elite) * 100;
			if(elite > 100) elite = 100;
			
			if(isNaN(elite) || elite == 0) $("#elite_perc_"+id).html("0.00");
			else $("#elite_perc_"+id).html(elite.toFixed(2));
		}
	}
	else if(profChart.ProficiencyChart.type == "run" || profChart.ProficiencyChart.type == "row" || profChart.ProficiencyChart.type == "time") {
		var val = convertToSeconds($("#"+id).val());
		
		var elite = $("#elite_"+id).html();
		elite = elite.replace("&nbsp;", "");
		elite = convertToSeconds(elite);
		
		elite = (elite / val) * 100;
		if(elite > 100) elite = 100;
		
		if(isNaN(val) || val == 0) $("#elite_perc_"+id).html("0.00");
		else $("#elite_perc_"+id).html(elite.toFixed(2));
	}
}

function resetCellValues() {
	for(var i = 0; i < chartObject.length; i++) {
		if(chartObject[i].ProficiencyChart.male == isMale && chartObject[i].ProficiencyChart.type != "strength") {
			var id = chartObject[i].ProficiencyChart.workout_id;
			
			var untrained = format(chartObject[i].ProficiencyChart.untrained, chartObject[i].ProficiencyChart.type);
			var average = format(chartObject[i].ProficiencyChart.average, chartObject[i].ProficiencyChart.type);
			var good = format(chartObject[i].ProficiencyChart.good, chartObject[i].ProficiencyChart.type);
			var excellent = format(chartObject[i].ProficiencyChart.excellent, chartObject[i].ProficiencyChart.type);
			var elite = format(chartObject[i].ProficiencyChart.elite, chartObject[i].ProficiencyChart.type);
			
			$("#untrained_"+id).html("&nbsp;"+untrained);
			$("#average_"+id).html("&nbsp;"+average);
			$("#good_"+id).html("&nbsp;"+good);
			$("#excellent_"+id).html("&nbsp;"+excellent);
			$("#elite_"+id).html("&nbsp;"+elite);
		}
	}
}

function format(val, chart_type) {
	if(chart_type == "time" || chart_type == "run" || chart_type == "row") return formatTime(val);
	else if(val == "") return "";
	else if(val == parseInt(val)) return val;
	return val;
}
	
function formatTime(val) {
	if(val == "-" || val == "") return "";
	else if(val == "N/A") return val;
	
	var totalTime = val;
	var hours = Math.floor(totalTime / (60*60));
	totalTime -= (hours * 60 * 60);
	var minutes = Math.floor(totalTime / 60);
	var seconds = totalTime - (minutes * 60);
	var secondsAsString = seconds + "";
	
	if(secondsAsString.indexOf(".") != -1) {
		var temp = secondsAsString.split(".");
		var num = temp[0];
		var dec = seconds - num;
		dec *= 1000;
		
		seconds = num + "." + dec.toFixed(0);
	}
	
	var time = "";
	if(hours != 0) time = hours + ":";
	
	return time + minutes + ":" + pad(seconds);
}

function pad(val) {
	var valAsString = val + "";
	var length = valAsString.length;
	if(valAsString.indexOf(".") != -1) {
		length = valAsString.indexOf(".");
	}
	if(length < 2) return "0" + valAsString;
	return valAsString;
}

/** creates a tooltip to display a chart value */
function showTooltip(x, y, contents) {
    $('<div id="tooltip">' + contents + '</div>').css( {
        position: 'absolute',
        display: 'none',
        top: y + 5,
        left: x + 5,
        border: '1px solid #fdd',
        padding: '2px',
        'background-color': '#fee',
        opacity: 0.80
    }).appendTo("body").fadeIn(200);
}
