/*************************************************************
* Document	: bwt_workout_util.js
* Author	: Wayne J. Earl
* Created	: 2007-03-21
* Purpose	: Common JavaScript functions for BWT workout
* Comment	: 
*************************************************************/
/*************************************************************
* Revised by	: 
* Revised date	: 
* Description	: 
*************************************************************/

var field_pfx = "bwt";

function workoutSelectChangeEvt(e)
{
	var evt = (e) ? e : ((window.event) ? window.event : "");
	if (evt) {

		var elem_target = getTarget(evt);
		if (elem_target) {
		
			workoutInfoCall(elem_target);
		}
	}
}


function workoutDeleteEvt(e)
{
	var evt = (e) ? e : ((window.event) ? window.event : "");
	if (evt) {

		var elem_target = getTarget(evt);
		if (elem_target) {
		
			workoutInfoCall(elem_target, 'd');
		}
	}
}


function workoutInfoCall(elem, oper, type)
{
	if (elem) {

		target_id = elem.id;
		if ((typeof(bwt_base_path) == "string") && (typeof(bwt_workout_url) == "string")) {
			
			if (typeof(type) == "undefined") type = 'w';
			var type_str = "&type=" + type;
			if (typeof(oper) == "undefined") oper = 'r';
			var oper_str = "&oper=" + oper;
			var id = elem.value;
			var id_num = Number(id);
		
			switch(oper) {
			
				case 'r': //read
				
					var handler = handleWorkoutChangeEvt;
					if (id_num) {
					
						var id_str = "&id=" + id;
					}
					else {
					
						return false;
					}
					break;
					
				case 'd': //delete
				
					var handler = handleWorkoutDeleteEvt;
					if (id_num) {
					
						var id_str = "&id=" + id;
					}
					else {
					
						return false;
					}
					break;

				case 'l': //list
				
					var handler = handleWorkoutListEvt;
					var id_str = "";
					break;
			}
			//build url
			var url = bwt_base_path + "/" + bwt_workout_url + "?" + id_str + type_str + oper_str + "&mode=1";
			//make ajax call
			ajaxCall(url, handler);
		}
	}
}


function handleWorkoutChangeEvt()
{
	if (xmlHttp.readyState == 4) {
		
		handleWorkoutChange();
	}
}


function handleWorkoutChange()
{
	var debug = 0;
	
	var resp_str = xmlHttp.responseText;
	var var_str = processResponseText(resp_str);
	eval(var_str);

	if (typeof(ajax_resp) != 'undefined') {
	
		if (ajax_resp == 1) {
		
			//initialize vars
			if (typeof(workout_info) == 'undefined') workout_info = new Array();
			//update exercise selects
			updateWorkoutInfo(workout_info);
		}
	}
}


function handleWorkoutDeleteEvt()
{
	if (xmlHttp.readyState == 4) {
		
		handleWorkoutDelete();
	}
}


function handleWorkoutDelete()
{
	var debug = 0;
	
	var resp_str = xmlHttp.responseText;
	var var_str = processResponseText(resp_str);
	eval(var_str);

	if (typeof(ajax_resp) != 'undefined') {
	
		if (ajax_resp == 1) {
		
			//update workout list
			//updateWorkoutList();
			if (target_id) {
			
				switch(target_id) {
				
					case 'bwt_template_base':

						var elem = document.getElementById(target_id);
						if (elem) {
						
							//get workout list
							workoutInfoCall(elem, 'l', 't');
						}
						break;

					case 'bwt_workout_no':
					
						calendarChangeCall("bwt_workout_base_build_data");
						changeDate("bwt_workout_base");
						break;
				}
			}
		}
	}
}


function handleWorkoutListEvt()
{
	if (xmlHttp.readyState == 4) {
		
		handleWorkoutList();
	}
}


function handleWorkoutList()
{
	var debug = 0;
	
	var resp_str = xmlHttp.responseText;
	var var_str = processResponseText(resp_str);
	eval(var_str);

	if (typeof(ajax_resp) != 'undefined') {
	
		if (ajax_resp == 1) {
		
			//initialize vars
			if (typeof(workout_info) == 'undefined') workout_info = new Array();
			//update exercise selects
			updateWorkoutList(workout_info);
		}
	}
}


//update workout info (display fields)
function updateWorkoutInfo(workout_info)
{
//	alert("Updating Workout Info ...");
	var obj_size = objSize(workout_info, "bwt");
//	alert("Size: " + obj_size);
	if (obj_size) {
	
		var value_disp = "";
		var field_id = "";
	//	alert(typeof(workout_info));
		for (var key in workout_info) {
		
		//	alert("Key: " + key);
			var f_valid = false;
			if (typeof(workout_info.propertyIsEnumerable) == "function") {
		
				if (workout_info.propertyIsEnumerable(key)) f_valid = true;
			}
			else {
			
				var pfx_length = field_pfx.length;
				var test_pfx = key.substring(0, pfx_length);
				if (test_pfx == field_pfx) f_valid = true;
			}
		//	if (workout_info.propertyIsEnumerable(key)) {
			if (f_valid) {
			
				var value = workout_info[key];
			//	alert("Value: " + value);
				if (typeof(value) != "object") { //skip arrays (for now)

					//alert("Field: " + key + "; Value: " + value);
					//get element ref
					switch(key) {
					
						case 'bwt_routine_date':
						
							var disp_date = value;
							/*var disp_date = "";
							if (value.length) {
							
								var date_parts = value.split('-');
								if (date_parts.length == 3) {
								
									var yr = date_parts[0];
									var mo = date_parts[1];
									var dy = date_parts[2];
									var disp_date = mo + "/" + dy + "/" + yr;
								}
							}*/
							value_disp = disp_date;
							field_id = key + "_display_2";
							var date_hold = disp_date;
							var hold_id = key + "_hold";
							break;
						/*
						case 'bwt_routine_start_hour':
						
							value_disp = value;
							continue;
							break;
							
						case 'bwt_routine_start_min':

							value_disp += ":" + ((value < 10) ? "0" + value : value);
							continue;
							break;

						case 'bwt_routine_start_ampm':

							value_disp += " " + ((value == 0) ? "AM" : "PM");
							field_id = "bwt_routine_start_display";
							break;
						*/
						case 'bwt_routine_start_ts':

							var time_array = {"hour": 12, "min": 0, "ampm": 0};
							getTimeValues(value, time_array);
							value_disp = buildTimeString(time_array);
							field_id = "bwt_routine_start_display";
							break;
						/*
						case 'bwt_routine_end_hour':
						
							value_disp = value;
							continue;
							break;
							
						case 'bwt_routine_end_min':

							value_disp += ":" + ((value < 10) ? "0" + value : value);
							continue;
							break;

						case 'bwt_routine_end_ampm':

							value_disp += " " + ((value == 0) ? "AM" : "PM");
							field_id = "bwt_routine_end_display";
							break;
						*/
						case 'bwt_routine_end_ts':
						
							var time_array = {"hour": 12, "min": 0, "ampm": 0};
							getTimeValues(value, time_array);
							value_disp = buildTimeString(time_array);
							field_id = "bwt_routine_end_display";
							break;
						/*
						case 'bwt_routine_duration_hour':
						
							value_disp = value;
							continue;
							break;
							
						case 'bwt_routine_duration_min':

							value_disp += ":" + ((value < 10) ? "0" + value : value);
							field_id = "bwt_routine_duration_display";
							break;
						*/
						case 'bwt_routine_duration':

							var time_array = {"hour": 12, "min": 0, "ampm": null};
							getTimeValues(value, time_array);
							value_disp = buildTimeString(time_array);
							//value_disp = value.substr(0,5);
							field_id = "bwt_routine_duration_display";
							break;

						case 'bwt_routine_mood':
							
							continue;
							break;
							
						case 'bwt_routine_mood_display':
						
							field_id = key;
							value_disp = value;
							break;
						
						default:
						
							field_id = key + "_display";
							value_disp = value;
					}
					//var id = key + "_display";
					var elem = document.getElementById(field_id);
					if (elem) {
					
						elem.innerHTML = value_disp;
					}
				}
			}
		}
		if (typeof(hold_id) != "undefined") {
		
			elem = document.getElementById(hold_id);
			if (elem) {
			
				elem.value = date_hold;
			}
		}
	}
	
	//handleAfterUpdateRouting();
}


function handleAfterUpdateRouting()
{
	if (target_id) {
	
		switch(target_id) {
		
			case 'bwt_template_base':
			
				updateFieldValue(target_id);
				break;
		}
	}
}


//update workout list
function updateWorkoutList(workout_list)
{
	if (target_id) {
	
		var elem = document.getElementById(target_id);
		if (elem) {
		
			switch(target_id) {
			
				case 'bwt_template_base':
				
					//alert("Updating Workout List ...");
					var extra_array = {"text" : "(Select Template)", "value" : ""};
					var option_refs = {"value" : "bs_id", "text" : "bs_name"};
					buildSelectOptions(elem, workout_list, option_refs, extra_array, 'x');
					updateFieldValue(target_id);
					break;
			}
		}
	}
}


function buildTimeString(time_array)
{
	var f_ampm_isnull = (time_array.ampm == null);
	var ampm_str = (f_ampm_isnull) ? "" : ((time_array.ampm) ? " PM" : " AM");
	var hour_str = String(time_array.hour);
	var min_str = String(time_array.min);
	hour_str = (f_ampm_isnull) ? hour_str : (((hour_str.length < 2) ? "0" : "") + hour_str);
	hour_str = ((hour_str.length < 2) ? "0" : "") + hour_str;
	min_str = ((min_str.length < 2) ? "0" : "") + min_str;
	var retval = hour_str + ":" + min_str + ampm_str;
	return retval;
}


function getTimeValues(time_string, time_array)
{
	var debug = 0;
	
	if (typeof(time_array) == "undefined") return false;
	var f_ampm_isnull = (time_array.ampm == null);
	if (typeof(time_string) != "undefined") {
	
		var re = /(\d{4}-\d{2}-\d{2})? ?(\d{2}):(\d{2})(?::\d{2})?/;
		var matches = time_string.match(re);
		if (matches.length == 4) {

			//assign parts
			var temp_hour = Number(matches[2]);
			if (f_ampm_isnull) {
			
				time_array.hour = temp_hour;
			}
			else {
			
				time_array.ampm = Number(temp_hour >= 12);
				if (time_array.ampm) temp_hour -= 12;
				time_array.hour = (temp_hour) ? temp_hour : 12;
			}
			time_array.min = Number(matches[3]);
		}
	}
}
