var weightKg = null;


var totalMinutes = 0;

var activityNames = new Array();
var activityMETs = new Array();
var caloriesBurned = new Array();
var activityCategoryIndex = new Array();

var activityCategoryNames = new Array();

var isCalculated = false;

var totalActivityName = new Array();
var totalActivityMinutes = new Array();
var totalActivityCalories = new Array();


function removeActivity(i){
	totalActivityName.splice(i, 1);
	totalActivityMinutes.splice(i, 1);
	totalActivityCalories.splice(i, 1);
	updateTotalTableHTML();
}

function getActivityName(i){
	alert(totalActivityName[i]);
}


function addActivityToTotal(i){
	var currIndex = totalActivityName.length;
	totalActivityName[currIndex] = activityNames[i];
	totalActivityMinutes[currIndex] =totalMinutes;
	totalActivityCalories[currIndex] = caloriesBurned[i];

	updateTotalTableHTML();
	
}

function updateTotalTableHTML(){
	var tableStr = "<table id=\"gradient-style\" >\n";
    tableStr += "<thead>\n";
    tableStr += "	<tr>\n";
    tableStr += "    	<th scope=\"col\" width=\"%40\" >Activity</th>\n";
    tableStr += "        <th scope=\"col\" >Duration</th>\n";
    tableStr += "    	<th scope=\"col\" >Calories Burned</th>\n";
    tableStr += "        <th scope=\"col\" >Remove</th>\n";
    tableStr += "    </tr>\n";
    tableStr += "</thead>\n";

    tableStr += "<tbody>\n";
	
	var i;
	var totaledMinutes = 0;
	var totaledCalories = 0;
	for (i = 0; i < totalActivityName.length; i++){
		tableStr += "	<tr>\n";
		tableStr += "    	<td><a href=\"javascript:getActivityName(" + i + ")\">" + totalActivityName[i].substring(0, 7) + "..</a></td>\n";
		tableStr += "        <td>" + getShortDurationString(totalActivityMinutes[i]) + "</td>\n";
		tableStr += "        <td>" + Math.round(totalActivityCalories[i]) + "</td>\n";
		tableStr += "		<td><a href=\"javascript:removeActivity(" + i + ")\">Remove</a></td>\n";
		tableStr += "    </tr>\n";
		
		totaledMinutes += totalActivityMinutes[i];
		totaledCalories += totalActivityCalories[i];
	}

	tableStr += "	<tr>\n";
	tableStr += "    	<td><b>Total:</b></td>\n";
	tableStr += "        <td><b>" + getShortDurationString(totaledMinutes) + "</b></td>\n";
	tableStr += "        <td><b>" + Math.round(totaledCalories) + "</b></td>\n";
	tableStr += "		<td></td>\n";
	tableStr += "    </tr>\n";


    tableStr += "</tbody>\n";
	tableStr += "</table>\n";

	document.getElementById("activityTotalsTable").innerHTML = tableStr;

	
}




function getLongDurationString(){
	var durString = "";
	var started = false;
	
	var days = Math.floor(((totalMinutes/60.0)/24.0));
	if (days > 1){
		durString += days + " Days"
		started = true;
	} else if (days == 1) {
		durString += days + " Day"
		started = true;
	}

	var currTotalMinutes = totalMinutes - (days * 60 * 24);
	
	var hours = Math.floor((currTotalMinutes/60.0));
	
	if (hours >= 1 && started) durString += ", ";
	if (hours > 1){
		durString += hours + " Hours"
		started = true;
	} else if (hours == 1) {
		durString += hours + " Hour"
		started = true;
	}

	var currTotalMinutes = currTotalMinutes - (hours * 60);
	
	if (currTotalMinutes >= 1 && started) durString += ", ";
	if (currTotalMinutes > 1){
		durString += currTotalMinutes + " Minutes"
		started = true;
	} else if (currTotalMinutes == 1) {
		durString += currTotalMinutes + " Minute"
		started = true;
	}
	return durString;
	
}


function getShortDurationString(min){
	var durString = "";
	var started = false;
	
	var days = Math.floor(((min/60.0)/24.0));
	if (days > 1){
		durString += days + "d"
		started = true;
	} else if (days == 1) {
		durString += days + "d"
		started = true;
	}

	var currTotalMinutes = min - (days * 60 * 24);
	
	var hours = Math.floor((currTotalMinutes/60.0));
	
	if (hours >= 1 && started) durString += " ";
	if (hours > 1){
		durString += hours + "h"
		started = true;
	} else if (hours == 1) {
		durString += hours + "h"
		started = true;
	}

	var currTotalMinutes = currTotalMinutes - (hours * 60);
	
	if (currTotalMinutes >= 1 && started) durString += " ";
	if (currTotalMinutes > 1){
		durString += currTotalMinutes + "m"
		started = true;
	} else if (currTotalMinutes == 1) {
		durString += currTotalMinutes + "m"
		started = true;
	}
	return durString;
	
}



function getActivityTableHTML(){
	var tableStr = "";
	
	tableStr += "<table id=\"gradient-style\" width=\"100%\">\n";
    tableStr += "<thead>\n"
    tableStr += "	<tr>\n"
    tableStr += "    	<th scope=\"col\" width=\"60%\" >Activity</th>\n"
    tableStr += "        <th scope=\"col\" width=\"5%\" >METs</th>\n"
    tableStr += "    	<th scope=\"col\" width=\"18%\" >Calories Burned</th>\n"
    tableStr += "        <th scope=\"col\" width=\"17%\" align=\"right\">Add To Total</th>\n"
    tableStr += "    </tr>\n"
    tableStr += "</thead>\n"

	tableStr += "<tbody>\n"
	
	var i;
	var currCategory = 0;
	tableStr += "<tr>\n"
    tableStr += "<td colspan=\"4\"><center><u><b>" + activityCategoryNames[currCategory] + "</b></u></center></td>\n"
    tableStr += "<tr>\n"
        
	
	
	for (i = 0; i < activityNames.length; i++){

		if (activityCategoryIndex[i] > currCategory){
			currCategory = activityCategoryIndex[i];
			tableStr += "<tr>\n"
			tableStr += "<td colspan=\"4\"><center><u><b>" + activityCategoryNames[currCategory] + "</b></u></center></td>\n"
			tableStr += "<tr>\n"
		}


		tableStr += "<tr>\n"
        	tableStr += "<td>" + activityNames[i] + "</td>\n"
            tableStr += "<td>" + activityMETs[i] + "</td>\n"
			if (isCalculated){
				tableStr += "<td><b>" + Math.round(caloriesBurned[i]) + " Kcal</b></td>\n"
				tableStr += "<td align=\"right\"><a href=\"javascript:addActivityToTotal(" + i + ")\">Add To Total</a></td>\n"
			} else {
				tableStr += "<td></td>\n";
				tableStr += "<td></td>\n";
			}
        tableStr += "</tr>\n"
	
	}
	
	tableStr += "</tbody>\n"
	tableStr += "</table>\n"
	
	return tableStr;
	
}

function initNewActivity(activityName, METs, categoryIndex) {
	var i = activityNames.length;
	
	activityNames[i] = activityName;
	activityMETs[i] = METs;
	activityCategoryIndex[i] = categoryIndex;
}


function initActivities(){
	var currCategoryIndex = 0;


	activityCategoryNames[currCategoryIndex]="Walking";

	initNewActivity("walking the dog", 3, currCategoryIndex);
	initNewActivity("walking 3mph, level, moderate pace, firm surface", 3.3, currCategoryIndex);
	initNewActivity("walking 4mph, level, very brisk pace, firm surface", 5, currCategoryIndex);
	initNewActivity("walking 5mph", 8, currCategoryIndex);

	currCategoryIndex++;
//	____

	activityCategoryNames[currCategoryIndex]="Running"

	initNewActivity("jogging, general", 7.0, currCategoryIndex);
	initNewActivity("running, 5mph (12 min/mile)", 8, currCategoryIndex);
	initNewActivity("running, 6mph (10 min/mile)", 10, currCategoryIndex);
	initNewActivity("running, 7mph (8.5 min/mile)", 11.5, currCategoryIndex);
	initNewActivity("running, 8mph (7.5 min/mile)", 13.5, currCategoryIndex);
	initNewActivity("running, 10mph (6 min/mile)", 16, currCategoryIndex);
	initNewActivity("running, cross country", 9, currCategoryIndex);
	initNewActivity("running up stairs", 15, currCategoryIndex);

	currCategoryIndex++;
//	______
	activityCategoryNames[currCategoryIndex]="Bicycling";

	initNewActivity("bicycling, <10mph, leisure..", 4, currCategoryIndex);
	initNewActivity("bicycling, general", 8, currCategoryIndex);
	initNewActivity("bicycling, 16-19mph racing/not drafting, very fast, racing general", 12, currCategoryIndex);

	currCategoryIndex++;
//	__________________________________
	activityCategoryNames[currCategoryIndex]="Conditioning Exercise";

	initNewActivity("bicycling, stationary, general", 7, currCategoryIndex);
	initNewActivity("bicycling, stationary, 50 watts, very light effort", 3, currCategoryIndex);
	initNewActivity("bicycling, stationary, 200 watts, vigorous effort", 10.5, currCategoryIndex);

	initNewActivity("calisthenics (e.g. pushups, situps, pullups, ..) heavy, vigorous effort", 8, currCategoryIndex);
	initNewActivity("circuit training, inc. some aerobic movement with minimal rest, general", 8, currCategoryIndex);

	initNewActivity("weight lifting, power lifting or body building vigorous effort", 6, currCategoryIndex);
	initNewActivity("weight lifting, (free, nautilus or universal-type) light or moderate effort, light workout, general", 3, currCategoryIndex);

	initNewActivity("health club exercise, general", 5.5, currCategoryIndex);
	initNewActivity("stair-treadmill ergometer, general", 9, currCategoryIndex);
	initNewActivity("rowing, stationary ergometer, general", 7, currCategoryIndex);
	initNewActivity("rowing, stationary, 50 watts, very light effort", 3.5, currCategoryIndex);
	initNewActivity("rowing, stationary, 200 watts, very vigorous effort", 12, currCategoryIndex);

	initNewActivity("mild stretching", 2.5, currCategoryIndex);

	currCategoryIndex++;
//	________________________________
	activityCategoryNames[currCategoryIndex]="Dancing"

	initNewActivity("aerobic, general", 6.5, currCategoryIndex);
	initNewActivity("aerobic, step, with 6 - 8 inch step", 8.5, currCategoryIndex);
	initNewActivity("aerobic, step, with 10 - 12 inch step", 10, currCategoryIndex);
	initNewActivity("aerobic, low impact", 5, currCategoryIndex);
	initNewActivity("aerobic, high impact", 7, currCategoryIndex);
	initNewActivity("ballroom dancing, fast (disco, folk, square), line dancing, ...", 4.5, currCategoryIndex);

	currCategoryIndex++;
//	____________________________
	activityCategoryNames[currCategoryIndex]="Sports"

	initNewActivity("basketball, game", 8, currCategoryIndex);
	initNewActivity("basketball, non-game, general", 6, currCategoryIndex);
	initNewActivity("basketball, shooting baskets", 4.5, currCategoryIndex);

	initNewActivity("boxing, punching bag", 6, currCategoryIndex);
	initNewActivity("boxing, sparring", 9, currCategoryIndex);
	initNewActivity("cricket (batting, bowling)", 5, currCategoryIndex);

	initNewActivity("football, competitive", 9, currCategoryIndex);
	initNewActivity("football, touch, flag, general", 8, currCategoryIndex);
	initNewActivity("football or baseball, playing catch", 2.5, currCategoryIndex);
	initNewActivity("golf, general", 4.5, currCategoryIndex);
	initNewActivity("gymnastics, general", 4, currCategoryIndex);
	initNewActivity("hockey (field or ice)",  8, currCategoryIndex);
	initNewActivity("horseback riding (general)", 4, currCategoryIndex);
	initNewActivity("judo, jujitsu, karate, kick boxing, ...", 10, currCategoryIndex);
	initNewActivity("rock climbing, ascending rock", 11, currCategoryIndex);
	initNewActivity("rope jumping, moderate, general", 10, currCategoryIndex);
	initNewActivity("skateboarding", 5, currCategoryIndex);
	initNewActivity("soccer (competitive)", 10, currCategoryIndex);
	initNewActivity("soccer, casual, general", 7, currCategoryIndex);
	initNewActivity("softball or baseball, fast or slow pitch, general", 5, currCategoryIndex);
	initNewActivity("squash", 12, currCategoryIndex);
	initNewActivity("tennis, general", 7, currCategoryIndex);
	initNewActivity("volleyball", 4, currCategoryIndex);
	initNewActivity("volleyball, beach", 8, currCategoryIndex);
	initNewActivity("track and field (high jump, long jump, triple jump, ..)", 6, currCategoryIndex);


	currCategoryIndex++;
//	____________
	activityCategoryNames[currCategoryIndex]="Inactivity"

	initNewActivity("sleeping", 0.9, currCategoryIndex);
	initNewActivity("lying/sitting quietly - watching tv, listen to music, doing nothing", 1, currCategoryIndex);
	initNewActivity("standing quietly - (standing in a line)",  1.2, currCategoryIndex);

	currCategoryIndex++;
//	_________________
	activityCategoryNames[currCategoryIndex]="Home Activities"

	initNewActivity("carpet sweeping, sweeping floors", 3.3, currCategoryIndex);
	initNewActivity("sweeping garage, sidewalk, outside", 4, currCategoryIndex);
	initNewActivity("cleaning, light (e.g. dusting, changing linen)", 2.5, currCategoryIndex);
	initNewActivity("cleaning, heavy or major (e.g. wash car, wash windows, clean garage, cleaning house), vigorous effort", 3, currCategoryIndex);
	initNewActivity("mopping", 3.5, currCategoryIndex);
	initNewActivity("multiple household tasks at one, moderate effort", 3.5, currCategoryIndex);
	initNewActivity("wash dishes, standing or in general", 2.3, currCategoryIndex);
	initNewActivity("vacuuming", 3.5, currCategoryIndex);
	initNewActivity("cooking of food preparation", 2, currCategoryIndex);
	initNewActivity("shopping standing or walking", 2.3, currCategoryIndex);
	initNewActivity("implied standing - laundry, fold/hang cloths, ...", 2, currCategoryIndex);
	initNewActivity("implied walking - putting away cloths/laundry, ...", 2.3, currCategoryIndex);
	initNewActivity("watering plants", 2.5, currCategoryIndex);
	initNewActivity("ironing", 2.3, currCategoryIndex);
	
	currCategoryIndex++;
	
//	_____________________
	activityCategoryNames[currCategoryIndex]="Home Repair"

	initNewActivity("painting", 4.5, currCategoryIndex);
	initNewActivity("roofing", 6, currCategoryIndex);

	currCategoryIndex++;
//	________________
	activityCategoryNames[currCategoryIndex]="Lawns and Garden"

	initNewActivity("chopping wood, splitting logs", 6, currCategoryIndex);
	initNewActivity("mowing lawn, general", 5.5, currCategoryIndex);
	initNewActivity("raking lawn", 4.3, currCategoryIndex);
	initNewActivity("trimming shrubs or trees, manual clutter", 4.5, currCategoryIndex);
	initNewActivity("gardening, general", 4, currCategoryIndex);

	currCategoryIndex++;
//	________________
	activityCategoryNames[currCategoryIndex]="Miscellaneous"

	initNewActivity("sitting - reading book, ...", 1.3, currCategoryIndex);
	initNewActivity("sitting, writing, desk work, typing", 1.8, currCategoryIndex);
	initNewActivity("standing - miscellaneous", 2, currCategoryIndex);

	currCategoryIndex++;
//	________________
	activityCategoryNames[currCategoryIndex]="Occupation"

	initNewActivity("bakery, general, moderate effort", 4, currCategoryIndex);
	initNewActivity("carpentry, general", 3.5, currCategoryIndex);
	initNewActivity("moving, pushing heavy objects, 75 lbs or more (desks, moving van work)", 7.5, currCategoryIndex);
	initNewActivity("shoveling, digging ditches", 8.5, currCategoryIndex);
	initNewActivity("sitting - light office work, general - sitting, reading, driving at work", 1.5, currCategoryIndex);
	initNewActivity("typing", 1.5, currCategoryIndex);

	currCategoryIndex++;
//	______________
	activityCategoryNames[currCategoryIndex]="Self Care"

	initNewActivity("eating (sitting)",  1.5, currCategoryIndex);
	initNewActivity("showing, toweling off (standing)",  2, currCategoryIndex);

	currCategoryIndex++;
//	_____
	activityCategoryNames[currCategoryIndex]="Sexual Activity"

	initNewActivity("sexual activity, general, moderate effort", 1.3, currCategoryIndex);

	currCategoryIndex++;
//	___________
	activityCategoryNames[currCategoryIndex]="Water Activities";

	initNewActivity("canoing, rowing, for pleasure, general", 3.5, currCategoryIndex);
	initNewActivity("surfing, body or board", 3, currCategoryIndex);
	initNewActivity("swimming laps, freestyle, slow, moderate or light effort", 7, currCategoryIndex);
	initNewActivity("swimming, backstroke, general", 7, currCategoryIndex);

	currCategoryIndex++;
//	___________
	activityCategoryNames[currCategoryIndex]="Winter Activities";

	initNewActivity("skating, ice, general", 7, currCategoryIndex);
	initNewActivity("skiing, general", 7, currCategoryIndex);

	currCategoryIndex++;
//	____________
	activityCategoryNames[currCategoryIndex]="Fishing"

	initNewActivity("fishing, general", 3, currCategoryIndex);

	currCategoryIndex++;
//	______________________________


	document.getElementById("activityTable").innerHTML = getActivityTableHTML();

}


function calculateCaloriesBurned() {


	if (isNull(document.getElementById("weight").value)) {
		alert ("Please input your weight.");
		return;
	}

	if (isNull(document.getElementById("activityHours").value) &&
		isNull(document.getElementById("activityMinutes").value)) {
		alert ("Please input activity duration.");
		return;
	}

	if (document.getElementById("weight").value < 30){
		alert ("Please input a valid weight.");
		return;
	}
	
	var tmpTotalMinutes = 0;
	if (!isNull(document.getElementById("activityHours").value)){
		tmpTotalMinutes += (document.getElementById("activityHours").value * 60);
	}
	if (!isNull(document.getElementById("activityMinutes").value)){
		tmpTotalMinutes += (document.getElementById("activityMinutes").value * 1.0);
	}
	
	if (tmpTotalMinutes < 1){
		alert ("Please input activity duration.");
		return;
	}

	if (document.getElementById("inputWeightKg").checked){
		weightKg = document.getElementById("weight").value;
	} else {
		weightKg = document.getElementById("weight").value * 0.45359237;
	}
	totalMinutes = tmpTotalMinutes;


	var i = 0;
	for (i = 0; i < activityMETs.length; i++){
		caloriesBurned[i] = activityMETs[i] * weightKg * (totalMinutes/60.0);
	}
	
	
	document.getElementById("activityHeading").innerHTML = "<b>Calories Burned During " + getLongDurationString() + " by a </b>";
	if (document.getElementById("inputWeightKg").checked){
		document.getElementById("activityHeading").innerHTML += "<b>" + document.getElementById("weight").value + " Kg Person</b>";
	} else {
		document.getElementById("activityHeading").innerHTML += "<b>" + document.getElementById("weight").value + " lbs Person</b>";
	}

	isCalculated = true;
	document.getElementById("activityTable").innerHTML = getActivityTableHTML();

	clicky.log('#calculate/activities');
}

initActivities();





function isNull(a){
	if (a == null || a == ""){
		return true;
	}
	return false;
}

function numbersonly(e, decimal) {
	var key;
	var keychar;

	if (window.event) {
	   key = window.event.keyCode;
	}
	else if (e) {
	   key = e.which;
	}
	else {
	   return true;
	}
	keychar = String.fromCharCode(key);

	if ((key==null) || (key==0) || (key==8) ||  (key==9) || (key==13) || (key==27) ) {
	   return true;
	}
	else if ((("0123456789").indexOf(keychar) > -1)) {
	   return true;
	}
	else if (decimal && (keychar == ".")) { 
	  return true;
	}
	else
	   return false;
}











