// Copyright 2007
// Check changelog.txt for latest updates
var HEALTHY_WEIGHT = 0.45359237;
var PRINT_INFO = "";
var VER_INFO = "0.5";

// Document is ready
$(document).ready(function() {


	$("#footer").append("&nbsp;-&nbsp;v" + VER_INFO);

	// Hide errors first
	$("#ErrorMessagesContainer").hide();
	$("#ResultsSuccess").hide();
    $("#ResultsFailed").hide();

	// Clear Form
	ClearControls();

	// Set the default weight to lose
	SetDefaultWeight();

	// Hide Results
	$("INPUT").bind("click", HideResultsArea);

   	// Hide Results
	$("INPUT").bind("select", HideResultsArea);

	// Hide inches panel
	$("#inchesPanel").hide();

	// Add change event for calculate calories;
	$("#heightType").bind("change",  heightConvert_Change);

	// Add change event for calculate calories
	$("#weightType").bind("change",  WeightConvert_Change);
	$("#weightType2").bind("change",  WeightConvert_Change);

	// Set default link
	$("#setDefaultWeightLink").bind("click",SetDefaultWeight);

	// Tooltips
	DisplayToolTip('#infoTip', false);
	DisplayToolTip('#setDefaultWeightLink', true);
	DisplayToolTip('#activityLevel', false);

	// Validate form (http://bassistance.de/jquery-plugins/jquery-plugin-validation/)
	$("#myForm").validate({
		debug: false,
	  	submitHandler: Calculate_Click,
	  	errorClass: "errorMessage",
	  	errorContainer: $("#errorMessageBox"),
  		errorLabelContainer: $("#errorMessageBox ul"),
 		wrapper: "li",
 		showErrors: function(errors, errorList) {

 			if(errorList.length >0) {
 				$("#ErrorMessagesContainer").show();
 				$("#ResultsHeading").text("Error:");
 				ShowAnimatedErrors();
 			}
 			else {
 				$("#ErrorMessagesContainer").hide();
 				$("#ResultsHeading").text("");
 			}

 			this.defaultShowErrors()
 		},

 		rules: {

			weight: {
				required: true,
				number:true,
				minValue:1,
				maxValue:500
			},
			age: {
				required: true,
				digits:true,
				minValue:1,
				maxValue:150
			},
			height1: {
				required: true,
				number:true,
				minValue:1,
				maxValue:300
			},
			height2: {
				//required: false,
				digits:true,
				minValue:0,
				maxValue:11
			},
			weightToLostKg: {
				number:true,
				minValue:0.1,
				maxValue:500
			}

		},

		messages: {

			weight: {
				required: "Please enter your weight",
				number: "Please enter a weight containing numbers only (or to 2 decimal places)"
			},
			age: {
				required: "Please enter your age",
				digits: "Please enter a number for your age"
			},
			height1: {
				required: "Please enter your height",
				number: "Please enter a height containing numbers only (or to 2 decimal places)"
			},
			height2: {
				required: "Please enter your height",
				digits: "Please enter a number for inches (0-12)"
			},
			weightToLostKg: {
				required: "Please enter your desired weight to lose per week",
				number: "Please enter a weight containing numbers only (or to 2 decimal places)"
			}
		}

	});

});


function Calculate_Click() {

	// Inputs received
	var gender = $("input[name='gender']:checked").val();	// Gender
	var weightType = $("#weightType").val();				// WeightType
	var weight = $("#weight").val();						// Weight
	var heightType = $("#heightType").val();				// HeightType
	var height1 = $("#height1").val();						// Height1 (cm | ft)
	var height2 = $("#height2").val();						// Height2 (inches)
	var ageYears = $("#age").val();							// Age
	var activityLevel = $("#activityLevel").val();			// ActivityLevel
	var activityLevelText = $("#activityLevel option:selected").text();		// ActivityLevel Text
	var days = $("#days").val();							// Days
	var daysText = $("#days option:selected").text();						// Days Text
	var weightType2 = $("#weightType2").val();				// WeightType2
	var weight2 = $("#weightToLostKg").val();				// Weight2
	var extraHeightInfo = (heightType == "cm") ? "" : " " + height2 + "inches ";

	// Create PrintInfo
	var printInfo = "Gender: " + gender + "<br />";
	printInfo += "Weight: " + weight + " " + weightType + "<br />";
	printInfo += "Height: " + height1 + heightType + extraHeightInfo + "<br />";
	printInfo += "Age: " + ageYears +"<br />";
	printInfo += "Activity Level: " + activityLevelText +"<br />";
	printInfo += "Weight To Lose: " + weight2 +  weightType + " in " + daysText + "<br />";

	// Set PrintInfo
	SetPrintInfo(printInfo);

	// WEIGHT: Convert to kg
	weightKg = (weightType == "kg") ? weight : (weight / 2.20462262);

	// HEIGHT: Converto to cm
	heightCm = (heightType == "cm") ? height1 : (height1 * 30.48) + (height2 * 2.54);

	// WEIGHT TO LOSE: Convert to kg
	weight2 = (weight2 == 0.45) ? HEALTHY_WEIGHT : weight2;
	weightToLostKg = (weightType2 == "kg") ? weight2 : (weight2 / 2.20462262);

	// Ajax parameters to send to form
	///parameters = "weightKg="+weightKg+"&heightCm="+heightCm+"&ageYears="+ageYears+"&gender="+gender+"&activityLevel="+activityLevel+"&days="+days+"&weightToLostKg="+weightToLostKg;

	var parameters = {};
	parameters.weightKg=weightKg;
	parameters.heightCm=heightCm;
	parameters.ageYears=ageYears;
	parameters.gender=gender;
	parameters.activityLevel=activityLevel;
	parameters.days=days;
	parameters.weightToLostKg=weightToLostKg;
	parameters.initialWeightType=weightType;

	// Get results
	$.blockUI.defaults.pageMessage = "<img src=\"images/icon_busy.gif\" style=\"vertical-align:middle;\"/>&nbsp;Loading...";
	$.extend($.blockUI.defaults.pageMessageCSS, { fontFamily: 'Arial', fontWeight: 'bold', display: 'block', padding: '15px' });
	$().ajaxStart($.blockUI).ajaxStop($.unblockUI);

	// Get results
	Get_Result(parameters);

}

function Get_Result(parameters) {


	// Complext ajax (with error checking)
	$.ajax({
	    url: "ccprocess.asp",
	    data: parameters,
	    type: "GET",
	    dataType: "html",
	    timeout: 10000,
	    error: function(data){
	        DisplayError(data);
	    },
	    success: function(data){
	    	// Set delay so animation doesn't interfere with loading indicator
	    	window.setTimeout("DisplayData('"+data+"')",500);
	    }
	});

}


function DisplayError(result) {
	$("#resultsContainer").hide();
	$("#ResultsFailed").html("Unfortunately an error has occurred, please try again!").show();
	ShowAnimatedInfo();
}


function DisplayData(result) {

	$("#resultsContainer").show();

	// Check that we have the correct result returned (checks for <table> tag)
	if (result.indexOf("<table") != -1) {

		// Show results heading
		$("#ResultsHeading").text("Results:");

		// Results body show
		$("#ResultsSuccess").show();

		// Write the results to div tag
		$("#resultsBody").html(result);

		// Sort and Scroll
		$("#tblResults").tablesorter(
		 	{
		 	sortList: [[0,0]],
		 	//headers: { 1: {sorter: false} },
		 	widgets: ['zebra']
		 	}

		 ).Scrollable(264, 264); //.tableScroller({minimumRows: 10});

		// Show element containing results
		$("#resultsBody").hide().slideDown("slow");

		// Set Print Link handler
		$("#printResults").bind("click", PrintResults_Click);

		// extend the default setting to always include the zebra widget.
	    //$.tablesorter.defaults.widgets = ['zebra'];

	}
	else {
		$("#resultsContainer").hide();
		$("#ResultsHeading").text("Error:");
		$("#ResultsFailed").html("Unfortunately an error has occurred while processing the results, please try again!").show();
		ShowAnimatedInfo();
	}

}

function ShowAnimatedErrors() {
	$("#ErrorMessagesContainer").css("visibility", "visible");
	$("#ErrorMessagesContainer").css("background-color", "#cae3ed");
	$("#ErrorMessagesContainer").animate({ backgroundColor: "#eaacac" }, 1000);
}

function ShowAnimatedInfo() {
	$("#ResultsFailed").css("background-color", "#0277ac");
	$("#ResultsFailed").animate({ backgroundColor: "#acd9ea" }, 1000);
}

function HideResultsArea() {
	if($("#ResultsHeading").text() != "Error:") {
		$("#ResultsHeading").text("");	
	}
 	$("#ResultsSuccess").hide();
 	$("#ResultsFailed").hide();	
}

function DisplayToolTip(element, track) {
	$(element).Tooltip({
	    track: track,
	    delay: 0,
	    showURL: false,
	    showBody: " - ",
	    fixPNG: true,
	    opacity: 0.85
	});	
}

function SetPrintInfo(data) {
	PRINT_INFO = data;
}

function GetPrintInfo() {
	return PRINT_INFO;
}

function PrintResults_Click() {

	// Make a copy of the results area
	var resultsClone = $("#resultsBody").clone();

	// Remove scrolloing
	resultsClone.find("TBODY").removeAttr("style");
	resultsClone.find("DIV").removeAttr("style");
	resultsClone.find("TABLE").attr("border", "1");

	// Set the print area with results
	$("#printArea").html(GetPrintInfo() + "<br />" + resultsClone.html() + "<br />");

    // Call print function
    window.print();

	return false;
}

// Clear form
/*$.fn.clearForm = function() {
	return this.each(function() {

	var type = this.type, tag = this.tagName.toLowerCase();
    if (tag == 'form')
    	return $(':input',this).clearForm();
    if (type == 'text' || type == 'password' || tag == 'textarea')
        this.value = '';
	else if (type == 'checkbox' || type == 'radio')
    	this.checked = false;
    else if (tag == 'select')
    	this.selectedIndex = -1;
    });
};
*/

function ClearControls() {
	//$("#myForm").clearForm();
	$("#myForm")[0].reset();
}


function WeightConvert_Change(event) {

	var convertVal = 2.20462262;
	var weightType = $(this).val();
	var weightControl = (event.target.id == "weightType") ? $("#weight") : $("#weightToLostKg");
	var weight = weightControl.val();

	var convertedWeight = 0;

	if(weightType == "kg") {
		convertedWeight = weight / convertVal;
	}
	else {
		convertedWeight = weight * convertVal;
	}

	convertedWeight = (custRound(convertedWeight,2) == 0.99) ? 1 : custRound(convertedWeight,2);
	weightControl.val(convertedWeight);

}


function heightConvert_Change(event) {

	var convertvalCm = 2.54;		// 1inch = 2.54cm
	var convertvalInches = 12;		// 1ft = 12 inches

	var heightType = $(this).val();
	var heightVal1 = $("#height1").val();
	var heightVal2 = $("#height2").val();

	var ftValue = 0;
	var inchesValue = 0;


	if (heightType == "cm") {

		var cm = 0;
		cm = ((heightVal1 * convertvalInches) * convertvalCm) + (heightVal2 * convertvalCm);

		$("#height1").val(custRound(cm,0));
	}
	else {

		var inchesTotal = heightVal1 / convertvalCm;
		var ft = (inchesTotal / convertvalInches);
		var inches = (inchesTotal % convertvalInches);

		$("#height1").val(Math.floor(ft));
		$("#height2").val(Math.round(custRound(inches,2)));
	}

	$("#inchesPanel").toggle();
}


function SetDefaultWeight() {
	defaultVal = ($("#weightType2").val() == "kg") ? 0.45 : 1;
	$("#weightToLostKg").val(defaultVal);
	//$("#weightToLostKg").val(0.45359237);
	return false;
}



// Utility Functions
function custRound(x,places) {
	// Created 1997 by Brian Risk.  http://members.aol.com/brianrisk
	var result = (Math.round(x*Math.pow(10,places)))/Math.pow(10,places);
	return result;
	//return (Math.round(result));
}
