// JavaScript object to represent a single day within the Personal Planner
function menuDay(){							// Represents all the data for a single day within the 30 available menus
	this.soup_dt_id = -1;
	this.menu_number = -1;
	this.breakfast_long = '';				// holds the long description for the 30 meals - breakfast
	this.lunch_long = '';					// holds the long description for the 30 meals - lunch
	this.dinner_long = '';					// holds the long description for the 30 meals - dinner
	this.snack_long = '';					// holds the long description for the 30 meals - snack
	this.breakfast_short = '';				// holds the short description for the 30 meals - breakfast
	this.lunch_short = '';					// holds the short description for the 30 meals - lunch
	this.dinner_short = '';					// holds the short description for the 30 meals - dinner
	this.snack_short = '';					// holds the short description for the 30 meals - snack
	this.nutrition = '';						// holds the short description for the 30 meals - nutrition data (entire meal for each day)
}

// JavaScript object to represent a single day within the Personal Planner
function plannerDay(){						// Represents all the data for a single day in the planner
	this.soup_diet_id = -1;
	this.menu_number = -1;
	this.number_adjusters = 0;
	this.adjuster_meal_cat_ids = new Array();
	this.adjuster_ids = new Array();
}

// JavaScript object to represent a single day within the Personal Planner
function menuAdjuster(){						// Represents all the data for a single menu adjuster
	this.adjuster_id = -1;
	this.short_description = '';
}


var approot;
var current_menu_day = -1;
var dflt_planner_day_innerhtml = '<p class=\"addText\">Select a menu on the left and use the \"Add menu to My Planner\" button.</p>';
var num_adjusters = 0;						// holds the number of adjusters available in the system
var calorie_level = 0;						// indicates the calorie level at which we are working
var num_adjusters_needed = 0;				// indicates the number of adjusters required for each day
var breakfast_meal_cat_id = -1;
var lunch_meal_cat_id = -1;
var dinner_meal_cat_id = -1;
var snack_meal_cat_id = -1;
var menu_days = new Array(30);				// holds data for all 30 menu days
var planner_days = new Array(7);			// holds data for all 7 planner days
var menu_adjusters = new Array();			// holds data for all available adjusters
var nutrition_displayed = false;
var nutrition_disclaimer = '';
var imgLoading = null;
var imgLoadingTimerID = null;
var save_timer_interval = 5000;				// production very slow, so leave plenty of time


//************************ start Initialization Section **************************************************************************************
function initMenuAndPlanner(action){
	if (action == 'init')
	{	// user just changed calorie level, so blow away current planner data
		resetPersonalPlanner();
	}

	// perform standard presentation initialization
	initMenu();
	initPlanner();

	return true;
}

//************************ end Initialization Section ****************************************************************************************

//************************ start Menu Section, deals with left side of the screen ************************************************************

// Need to work around a hard-to-detect bug specifically in IEMac.
// Although it's almost never appropriate to test the user agent directly, we're going to do so here.
var isIEMac = /PowerPC/.test(navigator.userAgent) && /MSIE/.test(navigator.userAgent);


function resetPersonalPlanner(){
	for (var i = 0; i < 7; i++){
		if (planner_days.length < (i + 1)){
			// need to create a new object
			planner_days[i] = new plannerDay;
		}
		planner_days[i].soup_diet_id = -1;			// -1 means no assignment has been made to this location in the personal planner
		planner_days[i].menu_number = -1;			// -1 means no assignment has been made to this location in the personal planner
		planner_days[i].number_adjusters = 0;		// no adjusters added yet

		for (var j = 0; j < 8; j++)
		{											// initialize all the adjuster fields for this day
			planner_days[i].adjuster_ids[j] = -1;
			planner_days[i].adjuster_meal_cat_ids[j] = -1;
		}

		// persist the new adjuster values
		//saveAdjusters(i + 1);

		// update the displayed content
		document.getElementById("plannerHead" + (i + 1)).innerHTML = getPlannerHeader((i + 1));
		document.getElementById("plannerDay" + (i + 1)).innerHTML = getPlannerContent((i + 1));

		// Force move up/down images to display correctly (IE bug)
		setMoveUpDownInnerHTML(i + 1);
	}
	// persist the new values
	SavePlannerSettings();
}

function getMenuContent(menu_number){
	// Used to display the menu on the left side of the screen (long descriptions)
	var menu_content;
	var menu_index = menu_number - 1;

	menu_content = '<p>' + menu_days[menu_index].breakfast_long + '</p><p>' + menu_days[menu_index].lunch_long + '</p><p>' + menu_days[menu_index].dinner_long + '</p><p>' + menu_days[menu_index].snack_long + '</p>';
	menu_content+= '<div id="nutrition" style="display:none;">' + menu_days[menu_index].nutrition + nutrition_disclaimer + '</div>';

	return menu_content;
}


function getNextMenuLink(this_menu_number, location){
	var content;

	if (this_menu_number < 30){
		if (isIEMac) content = '<span id="nextmenulink' + location + '"><a href="javascript://Next%20Menu" onclick="menuSwap('+(this_menu_number + 1)+'); return false">next &gt;</a></span>';
		else content = '<span id="nextmenulink' + location + '"><a href="javascript://Next%20Menu" onclick="menuSwap('+(this_menu_number + 1)+'); return false"><img src="images/btn_next-small.gif" width="34" height="9" border="0" alt="Next menu" name="nextimg' + location + '" class="button dyn"></a></span>';
	}
	else{
		content = '<span id="nextmenulink' + location + '"><img src="images/btn_next-small.gif" width="34" height="9" border="0" alt="Next menu" name="nextimg' + location + '" class="buttonhidden dyn"></span>';
	}

	return content;
}

function getPreviousMenuLink(this_menu_number, location){
	var content;
	if (this_menu_number > 1){
		if (isIEMac) content = '<span id="prevmenulink' + location + '"><a href="javascript://Previous%20Menu" onclick="menuSwap('+(this_menu_number-1)+'); return false">&lt; previous</a></span>';
		else content = '<span id="prevmenulink' + location + '"><a href="javascript://Previous%20Menu" onclick="menuSwap('+(this_menu_number-1)+'); return false"><img src="images/btn_previous-small.gif" width="52" height="9" border="0" alt="Previous menu" name="previousimg' + location + '" class="button dyn"></a></span>';
	}
	else{
		content = '<span id="prevmenulink' + location + '"><img src="images/btn_previous-small.gif" width="52" height="9" border="0" alt="Previous menu" name="previousimg' + location + '" class="buttonhidden dyn"></span>';
	}

	return content;
}

function setNextMenuLinkInnerHTML(this_menu_number){
	var el;
	var htmltop = '<a href="javascript://Next%20Menu" onclick="menuSwap('+(this_menu_number + 1)+'); return false"><img src="images/btn_next-small.gif" width="34" height="9" border="0" alt="Next menu" name="nextimgtop" class="button dyn"></a>';
	var htmlbottom = '<a href="javascript://Next%20Menu" onclick="menuSwap('+(this_menu_number + 1)+'); return false"><img src="images/btn_next-small.gif" width="34" height="9" border="0" alt="Next menu" name="nextimgbottom" class="button dyn"></a>';

	var htmltophidden = '<img src="images/btn_next-small.gif" width="34" height="9" border="0" alt="Next menu" name="nextimgtop" class="buttonhidden dyn">';
	var htmlbottomhidden = '<img src="images/btn_next-small.gif" width="34" height="9" border="0" alt="Next menu" name="nextimgbottom" class="buttonhidden dyn">';
	if (this_menu_number < 30){

		if (el=document.getElementById("nextmenulinktop")) el.innerHTML = htmltop;
		if (el=document.getElementById("nextmenulinkbottom")) el.innerHTML = htmlbottom;
	}
	else{
		if (el=document.getElementById("nextmenulinktop")) el.innerHTML = htmltophidden;
		if (el=document.getElementById("nextmenulinkbottom")) el.innerHTML = htmlbottomhidden;
	}
}

function setPreviousMenuLinkInnerHTML(this_menu_number){
	// This function is needed to address IE issues (Microsoft Knowledge Base Article - 269802) related to how images don't always show when set dynamically

	var el;
	var htmltop = '<a href="javascript://Previous%20Menu" onclick="menuSwap('+(this_menu_number-1)+'); return false"><img src="images/btn_previous-small.gif" width="52" height="9" border="0" alt="Previous menu" name="previousimgtop" class="button dyn"></a>';
	var htmlbottom = '<a href="javascript://Previous%20Menu" onclick="menuSwap('+(this_menu_number-1)+'); return false"><img src="images/btn_previous-small.gif" width="52" height="9" border="0" alt="Previous menu" name="previousimgbottom" class="button dyn"></a>';

	var htmltophidden = '<img src="images/btn_previous-small.gif" width="52" height="9" border="0" alt="Previous menu" name="previousimgtop" class="buttonhidden dyn">';
	var htmlbottomhidden = '<img src="images/btn_previous-small.gif" width="52" height="9" border="0" alt="Previous menu" name="previousimgbottom" class="buttonhidden dyn">';
	if (this_menu_number > 1){
		if (el=document.getElementById("prevmenulinktop")) el.innerHTML = htmltop;
		if (el=document.getElementById("prevmenulinkbottom")) el.innerHTML = htmlbottom;
	}
	else{
		if (el=document.getElementById("prevmenulinktop")) el.innerHTML = htmltophidden;
		if (el=document.getElementById("prevmenulinkbottom")) el.innerHTML = htmlbottomhidden;
	}
}

function refreshBottomNextPreviousLinks(){
}

function toggleNutrition(id){
	if (document.getElementById){
		toggleElement = document.getElementById(id);
		toggleImage = document.getElementById("showhide");
		if (toggleElement.style.display == "none"){
			toggleElement.style.display = "";
			toggleImage.src = "images/footer_hide-nutrition.gif";
			nutrition_displayed = true;
		}
		else{
			toggleElement.style.display = "none";
			toggleImage.src = "images/footer_show-nutrition.gif";
			nutrition_displayed = false;
		}
	}
}

function menuSwap(menu_day_clicked){
	var top_previous = '&nbsp;' + getPreviousMenuLink(menu_day_clicked, 'top');
	var top_menu_header = '<span id="dayMenuNumberHeading">Menu ' + menu_day_clicked + '</span>';
	var top_next = getNextMenuLink(menu_day_clicked, 'top') + '&nbsp;';
	var bottom_previous = '&nbsp;' + getPreviousMenuLink(menu_day_clicked, 'bottom');
	var bottom_next = getNextMenuLink(menu_day_clicked, 'bottom') + '&nbsp;';

	// menu_day_clicked is one based!
	current_menu_day = menu_day_clicked;

	document.getElementById("emptyHeadDiv").innerHTML = '<table cellspacing="0" class="nextprevtable"><tr><td class="prev">' + top_previous + '</td><td class="head">' + top_menu_header + '</td><td class="next">' + top_next + '</td></tr></table>';
	document.getElementById("emptyDiv").innerHTML = getMenuContent(menu_day_clicked);
	document.getElementById("bottomNextPreviousLinks").innerHTML = '<div class="nextprevmenulinks_bottom" id="nextprevmenulinks_bot"><table cellspacing="0" class="nextprevtable"><tr><td class="prev">' + bottom_previous + '</td><td class="next">' + bottom_next + '</td></tr></table>';

	// Force next/previous images to display correctly (IE bug)
	//setNextMenuLinkInnerHTML(menu_day_clicked);
	//setPreviousMenuLinkInnerHTML(menu_day_clicked);

	if (window.last_menu_day_clicked){
		var dayT = document.getElementById('daylink_'+last_menu_day_clicked+'_top');
		var dayB = document.getElementById('daylink_'+last_menu_day_clicked+'_bot');
		if (dayT) KillClass(dayT,'current_day');
		if (dayB) KillClass(dayB,'current_day');
	}

	var dayT = document.getElementById('daylink_'+menu_day_clicked+'_top');
	var dayB = document.getElementById('daylink_'+menu_day_clicked+'_bot');
	if (dayT) AddClass(dayT,'current_day');
	if (dayB) AddClass(dayB,'current_day');

	window.last_menu_day_clicked=menu_day_clicked;

	if (nutrition_displayed == true) toggleNutrition('nutrition');

	reloadDynamicImagesBecauseIEisDumb();

	self.focus(); //defocus link to remove highlight for IEWin
}

function initMenu(){
	menuSwap(1);
}

//************************ end Menu Section, deals with left side of the screen ************************************************************


//************************ start Planner Section, deals with right side of the screen ************************************************************
function getPlannerHeader(planner_day){
	var planner_header = "";
	var planner_index = planner_day - 1;

	if (planner_day >= 1 && planner_day <= 7){
		planner_header = getMoveDownLink(planner_day);
		planner_header+= getMoveUpLink(planner_day);
		planner_header+= 'Day ' + planner_day;
		if (planner_days[planner_index].soup_diet_id != -1){
			planner_header+= ' : Menu ' + planner_days[planner_index].menu_number;
		}
	}

	return planner_header;
}

function getPlannerContent(planner_day){
	// Used to display the menu items on the right side of the screen (short descriptions)
	var planner_menu_content;
	var planner_index = planner_day - 1;
	var menu_index;
	var planner_index = planner_day - 1;
	var menu_content = "";
	var link_content = "";
	var num_adjusters_to_add;
	var num_adjusters_assigned;
	var adjuster_content, short_meal, long_meal;

	if (planner_days[planner_index].soup_diet_id == -1){
		// nothing exists for this planner_day, so display the default content
		menu_content = dflt_planner_day_innerhtml;
	}
	else{
		num_adjusters_assigned = getNumAdjustersAddedForDay(planner_day);
		num_adjusters_to_add = num_adjusters_needed - num_adjusters_assigned;

		// valid data for this planner_day, so generate the content
		menu_index = planner_days[planner_index].menu_number - 1;
		menu_content = '<div class="plannerDayBlock">';

		menu_content = '<div class="plannerDayMenuContent">';

		// breakfast
		short_meal = '<div class="planner_short_meal">' + menu_days[menu_index].breakfast_short + '</div>';
		long_meal = '<div class="planner_long_meal">' + menu_days[menu_index].breakfast_long + '</div>';
		adjuster_content = getPlannerDayMealAdjusterContent(planner_day, breakfast_meal_cat_id);
		menu_content+= short_meal + long_meal + adjuster_content;

		// lunch
		short_meal = '<div class="planner_short_meal">' + menu_days[menu_index].lunch_short + '</div>';
		long_meal = '<div class="planner_long_meal">' + menu_days[menu_index].lunch_long + '</div>';
		adjuster_content = getPlannerDayMealAdjusterContent(planner_day, lunch_meal_cat_id);
		menu_content+= short_meal + long_meal + adjuster_content;

		// dinner
		short_meal = '<div class="planner_short_meal">' + menu_days[menu_index].dinner_short + '</div>';
		long_meal = '<div class="planner_long_meal">' + menu_days[menu_index].dinner_long + '</div>';
		adjuster_content = getPlannerDayMealAdjusterContent(planner_day, dinner_meal_cat_id);
		menu_content+= short_meal + long_meal + adjuster_content;

		// snack
		short_meal = '<div class="planner_short_meal">' + menu_days[menu_index].snack_short + '</div>';
		long_meal = '<div class="planner_long_meal">' + menu_days[menu_index].snack_long + '</div>';
		adjuster_content = getPlannerDayMealAdjusterContent(planner_day, snack_meal_cat_id);
		menu_content+= short_meal + long_meal + adjuster_content;

		menu_content+= '<\div>';

		link_content = '<div class="plannerDayLinks">'
		link_content+= '<a class="disableduringsave" href="popup_view-day-detail.asp?dayid=' + planner_days[planner_index].soup_diet_id + '&day=' + planner_day + '&calorie_level=' + calorie_level + '&sample=0&preventcache=' + (new Date())*1 + '" target="popup" onclick="return PopUp(this, \'width=600,height=600\')">View Menu Details</a><br>';
		if (calorie_level != 1200){
			num_adjusters_assigned = getNumAdjustersAddedForDay(planner_day);
			num_adjusters_to_add = num_adjusters_needed - num_adjusters_assigned;

			var qs = 'dayid=' + planner_days[planner_index].soup_diet_id + '&day=' + planner_day + '&menu_number=' + planner_days[planner_index].menu_number + '&calorie_level=' + calorie_level + '&preventcache=' + (new Date())*1;
			if (num_adjusters_assigned < num_adjusters_needed){
				if (isIEMac) link_content+= '<a class="disableduringsave" href="popup_addadjusters_ie5mac.asp?'+qs+'" target="popup" onclick="return OpenSelectAdjusterPopup(this)">Add ' + num_adjusters_to_add + ' Calorie Add-ons</a><br>';
				else link_content+= '<a class="disableduringsave" href="popup_addadjusters.asp?'+qs+'" target="popup" onclick="return OpenSelectAdjusterPopup(this)">Add ' + num_adjusters_to_add + ' Calorie Add-ons</a><br>';
			}

			if (num_adjusters_assigned > 0){
				if (isIEMac) link_content+= '<a class="disableduringsave" href="popup_addadjusters_ie5mac.asp?'+qs+'" target="popup" onclick="return OpenSelectAdjusterPopup(this)">Edit Calorie Add-ons</a><br>';
				else link_content+= '<a class="disableduringsave" href="popup_addadjusters.asp?'+qs+'" target="popup" onclick="return OpenSelectAdjusterPopup(this)">Edit Calorie Add-ons</a><br>';
			}
		}
		link_content+= '<a class="disableduringsave" href="javascript://Remove%20Item" onclick="removePlannerItem(' + planner_day + '); return false">Remove</a><br>';
		link_content+= '</div>';


		menu_content= '<div class="plannerDayBlock">' + link_content + menu_content + '</div>';
	}
	planner_menu_content = menu_content;

	return planner_menu_content;
}


function getPlannerDayMealAdjusterContent(planner_day, meal_cat_id){
	// Used to display the menu items on the right side of the screen (short descriptions)
	var adjuster_content = '';
	var planner_index = planner_day - 1;
	var num_adjusters_this_meal = 0;

	if (planner_days[planner_index].soup_diet_id != -1){
		// menu item assigned to this day, so check for adjusters
		for (var i = 0; i < 8; i++){
			if (planner_days[planner_index].adjuster_meal_cat_ids[i] == meal_cat_id)
		  	{
				for (var j = 0, found=false; j < num_adjusters && found == false; j++){
					if (menu_adjusters[j].adjuster_id == planner_days[planner_index].adjuster_ids[i]){
						adjuster_content+= '<li>';
						adjuster_content+= '<span class="plannerAdjusterLabel">Calorie Add-on: </span>';
						adjuster_content+= '<span class="plannerAdjusterContent">' +  menu_adjusters[j].short_description + '</span>';
						adjuster_content+= '</li>';
						found = true;
					}
				}
		  	}
		}
		if (adjuster_content.length > 0){
			adjuster_content = '<div class="plannerAdjuster"><ul>' + adjuster_content + '</ul></div>';
		}
	}

	return adjuster_content;
}


function getMoveUpLink(planner_day){
	var link_text = "";

	// note, planner_day is one based here
	if (planner_day > 1 && planner_days[planner_day - 1].soup_diet_id != -1){
		link_text = '<span id="moveuplink' + planner_day + '" class="moveuplink"><a class="disableduringsave" href="javascript://Move%20Up" onclick="moveUp(' + planner_day + '); return false"><img src="images/btn_up.gif" width="19" height="15" border="0" alt="Move menu up" class="dyn"></a></span>';
	}

	return link_text;
}

function getMoveDownLink(planner_day){
	var link_text = "";

	if (planner_day < 7 && planner_days[planner_day - 1].soup_diet_id != -1){
		link_text = '<span id="movedownlink' + planner_day + '" class="movedownlink"><a class="disableduringsave" href="javascript://Move%20Down" onclick="moveDown(' + planner_day + '); return false"><img src="images/btn_down.gif" width="19" height="15" border="0" alt="Move menu down" class="dyn"></a></span>';
	}

	return link_text;
}

// Force move up/down images to display correctly (IE bug)
function setMoveUpDownInnerHTML(planner_day){
	var el;

	if (el=document.getElementById("moveuplink" + planner_day)) el.innerHTML = getMoveUpLink(planner_day);
	if (el=document.getElementById("movedownlink" + planner_day)) el.innerHTML = getMoveDownLink(planner_day);
}

function addCurrentDayToPlanner()
{
//	alert('here');
	addToPlanner(current_menu_day);
}

function addToPlanner(menu_day){
	// menu vars refer to the section on the left side of the screen
	// planner vars refer to the section on the right side of the screen
	var bln_added = false;
	var intMenuIndex = menu_day - 1;
	var intPlannerDay;

	// Now add this item to the arrays tracking what is in the planner (find first open spot, drop it there)
	for (var i = 0; i < 7 && bln_added == false; i++){
		if (planner_days[i].soup_diet_id == -1){
			// we found the first emtpy location, save it here
			intPlannerDay = i + 1;
			planner_days[i].soup_diet_id = menu_days[intMenuIndex].soup_diet_id;
			planner_days[i].menu_number = menu_days[intMenuIndex].menu_number;
			planner_days[i].number_adjusters = 0;		// no adjusters added yet
			for (var j = 0; j < 8; j++)
			{											// initialize all the adjuster fields for this day
				planner_days[i].adjuster_ids[j] = -1;
				planner_days[i].adjuster_meal_cat_ids[j] = -1;
			}
			document.getElementById("plannerHead" + intPlannerDay).innerHTML = getPlannerHeader(intPlannerDay);
			document.getElementById("plannerDay" + intPlannerDay).innerHTML = getPlannerContent(intPlannerDay);

			// Force move up/down images to display correctly (IE bug)
			setMoveUpDownInnerHTML(intPlannerDay);

			bln_added = true;

			SavePlannerSettings();

			reloadDynamicImagesBecauseIEisDumb();
		}
	}
}

function addToPlannerAtDay(menu_day, planner_day){
	var bln_added = false;
	var intMenuIndex = menu_day - 1;
	var intPlannerIndex = planner_day - 1;
	var intPlannerDay;

	// Now add this item to the arrays tracking what is in the planner at the requested location
	planner_days[intPlannerIndex].soup_diet_id = menu_days[intMenuIndex].soup_diet_id;
	planner_days[intPlannerIndex].menu_number = menu_days[intMenuIndex].menu_number;
	planner_days[intPlannerIndex].number_adjusters = 0;		// no adjusters added yet
	for (var j = 0; j < 8; j++)
	{											// initialize all the adjuster fields for this day
		planner_days[intPlannerIndex].adjuster_ids[j] = -1;
		planner_days[intPlannerIndex].adjuster_meal_cat_ids[j] = -1;
	}


	document.getElementById("plannerHead" + planner_day).innerHTML = getPlannerHeader(planner_day);
	document.getElementById("plannerDay" + planner_day).innerHTML = getPlannerContent(planner_day);

	// Force move up/down images to display correctly (IE bug)
	setMoveUpDownInnerHTML(planner_day);

	bln_added = true;

	SavePlannerSettings();

	reloadDynamicImagesBecauseIEisDumb();
}

function removePlannerItem(planner_day){
	var planner_index = planner_day - 1;

	if (planner_day >= 1 && planner_day <= 7){
		planner_days[planner_index].soup_diet_id = -1;
		planner_days[planner_index].menu_number = -1;
		planner_days[planner_index].number_adjusters = 0;
		planner_days[planner_index].number_adjusters = 0;		// no adjusters added yet
		for (var j = 0; j < 8; j++)
		{											// initialize all the adjuster fields for this day
			planner_days[planner_index].adjuster_ids[j] = -1;
			planner_days[planner_index].adjuster_meal_cat_ids[j] = -1;
		}

		document.getElementById("plannerHead" + planner_day).innerHTML = getPlannerHeader(planner_day);
		document.getElementById("plannerDay" + planner_day).innerHTML = getPlannerContent(planner_day);

		// Force move up/down images to display correctly (IE bug)
		setMoveUpDownInnerHTML(planner_day);

		SavePlannerSettings()

		reloadDynamicImagesBecauseIEisDumb();
	}
}


function moveDown(plannerDay){
	var tmp_day_id;
	var tmp_menu_num;
	var planner_day_1;
	var planner_day_2;

	if (plannerDay < 7){
		// get the days of the two rows in the planner
		planner_day_1 = plannerDay;
		planner_day_2 = plannerDay + 1;

		// swap the data for the two affected days in the planner arrays
		swapPlannerDays(planner_day_1, planner_day_2);

		// now update the presentation data for the two affected rows
		document.getElementById("plannerHead"+planner_day_1).innerHTML = getPlannerHeader(planner_day_1);
		document.getElementById("plannerDay"+planner_day_1).innerHTML = getPlannerContent(planner_day_1);
		document.getElementById("plannerHead"+planner_day_2).innerHTML = getPlannerHeader(planner_day_2);
		document.getElementById("plannerDay"+planner_day_2).innerHTML = getPlannerContent(planner_day_2);

		// Force move up/down images to display correctly (IE bug)
		setMoveUpDownInnerHTML(planner_day_1);
		setMoveUpDownInnerHTML(planner_day_2);

		SavePlannerSettings();
	}
}

function moveUp(plannerDay){
	var tmp_day_id;
	var tmp_menu_num;
	var planner_day_1;
	var planner_day_2;

	if (plannerDay > 1){
		// get the days of the two rows in the planner
		planner_day_1 = plannerDay - 1;
		planner_day_2 = plannerDay;

		// swap the data for the two affected days in the planner arrays
		swapPlannerDays(planner_day_1, planner_day_2);

		// now update the presentation data for the two affected rows
		document.getElementById("plannerHead"+planner_day_1).innerHTML = getPlannerHeader(planner_day_1);
		document.getElementById("plannerDay"+planner_day_1).innerHTML = getPlannerContent(planner_day_1);
		document.getElementById("plannerHead"+planner_day_2).innerHTML = getPlannerHeader(planner_day_2);
		document.getElementById("plannerDay"+planner_day_2).innerHTML = getPlannerContent(planner_day_2);

		// Force move up/down images to display correctly (IE bug)
		setMoveUpDownInnerHTML(planner_day_1);
		setMoveUpDownInnerHTML(planner_day_2);

		SavePlannerSettings();
	}
}


function swapPlannerDays(day1, day2){
	var index_1 = day1 - 1;
	var index_2 = day2 - 1;
	var tmp_planner_day = new plannerDay();

	// swap the days by making copies of the objects
	tmp_planner_day = copy_obj(planner_days[index_1]);
	planner_days[index_1] = copy_obj(planner_days[index_2]);
	planner_days[index_2] = copy_obj(tmp_planner_day);

	// NOTE:  let save up to the caller, as otherwise the links will be "enabled" when they shouldn't be

	reloadDynamicImagesBecauseIEisDumb();

	return true;
}

function copy_obj(o){
	var c = new Object();

	for (var e in o){
		c[e] = o[e];
	}

	return c;
}

function SavePlannerSettings(){
	DisableEditLinks();

	(/cpovisq=([^&]+)/i).test(location.search);
	var visID = RegExp.$1;
	var params;
	var status;
	var commbadge=new Image();

	params = 'cache=' + (new Date())*1 +
	         '&day1=' + planner_days[0].menu_number +
			 '&day2=' + planner_days[1].menu_number +
             '&day3=' + planner_days[2].menu_number +
             '&day4=' + planner_days[3].menu_number +
	         '&day5=' + planner_days[4].menu_number +
	         '&day6=' + planner_days[5].menu_number +
	         '&day7=' + planner_days[6].menu_number +
	         '&cpovisq=' + visID;

	commbadge.src = approot + "soupforlife/savePlannerDays.asp?" + params;
	
	// only do this on IE Mac (becuase onload doesn't work)
	if(isIEMac) {
		//alert("is IE Mac");
		imgLoading = commbadge;
		imgLoadingTimerID = setTimeout('checkPlannerSettingSaveStatus()', 100);
		
		// production really really slow, so allow plenty of time for the save
		window.enableTimer = setTimeout("EnableEditLinks()",save_timer_interval);
		
	} else {
		commbadge.onload = function() { saveAdjusters(1); }
		commbadge.onerror = function() { EnableEditLinks(); }
	}
	
	return true;
}

function checkPlannerSettingSaveStatus()
{
	var status = imgLoading.readyState;
	if (status == 'complete')
	{
		if (imgLoadingTimerID != null)
		{
			// turn off timer that calls this function
			clearTimeout(imgLoadingTimerID);
		}
		// setup for next time this is called (cleanup)
		imgLoadingTimerID = null;
		imgLoading = null;

		// now save the adjuster data
		saveAdjusters(1);
	}
	else
	{
		// call us again
		imgLoadingTimerID = setTimeout('checkPlannerSettingSaveStatus()', 100);	
	}
}

function saveAdjusters(planner_day){
	var day, adjuster_num, adjuster_index, param_list, meal_id;
	var commbadge=new Image();

	(/cpovisq=([^&]+)/i).test(location.search);
	var status;
	var visID = RegExp.$1;

	param_list = "&cache="+(new Date())*1;
	for (day = 1; day <= 7; day++){
		for (adjuster_num = 1, adjuster_index = 0; adjuster_num <= 8; adjuster_num++, adjuster_index++){
			param_list+= '&d' + day + '_a' + adjuster_num + '_id=' + planner_days[day-1].adjuster_ids[adjuster_index];
			param_list+= '&d' + day + '_a' + adjuster_num + '_mid=' + planner_days[day-1].adjuster_meal_cat_ids[adjuster_index];
		}
	}

	// pass in "-1" as the day for save module, as that forces saving of all the adjusters, not just for this specific day
	commbadge.src = approot + 'soupforlife/savePlannerAdjusters.asp?day=-1' + param_list + '&cpovisq=' + visID + '&preventcache=' + (new Date())*1;
	
	// only do this on IE Mac (becuase onload doesn't work)
	if(isIEMac) {
		//alert("is IE Mac");
		imgLoading = commbadge;
		imgLoadingTimerID = setTimeout('checkAdjusterSaveStatus()', 100);
		
		// production really really slow, so allow plenty of time for the save
		window.enableTimer = setTimeout("EnableEditLinks()",save_timer_interval);
		
	} else {
		commbadge.onload = function() { EnableEditLinks(); }
		commbadge.onerror = function() { EnableEditLinks(); }
	}

	return true;
}


function checkAdjusterSaveStatus()
{
	var status = imgLoading.readyState;
	if (status == 'complete')
	{
		if (imgLoadingTimerID != null)
		{
			// turn off timer that calls this function
			clearTimeout(imgLoadingTimerID);
		}
		// now enable the links on the page
		EnableEditLinks();
	}
	else
	{
		// call us again
		imgLoadingTimerID = setTimeout('checkAdjusterSaveStatus()', 100);	
	}
}


function DisableEditLinks(a){
//alert('disable');
	var anchors = document.getElementsByTagName('a');
	for (var i=anchors.length-1;i>=0;i--) if (HasClass((a=anchors[i]),'disableduringsave')){
		AddClass(a,'disabled');
		a.disabled=true;
		a.savedOnClick = a.onclick;	// save current onclick so we can restore it later
		a.onclick=PreventDefault;
	}
	if (window.enableTimer) clearTimeout(window.enableTimer);
}

function EnableEditLinks(a){
//alert('enable');
	var anchors = document.getElementsByTagName('a');
	var onclickReset = false;	// debugging var
	for (var i=anchors.length-1;i>=0;i--) if (HasClass((a=anchors[i]),'disableduringsave')){
		KillClass(a,'disabled');
		a.disabled=false;
		if (a.savedOnClick != null)
		{
			a.onclick = a.savedOnClick;
			onclickReset = true;
			//a.savedOnclick = null;
		}
		else if (HasClass(a,'addtoplannerbtn'))
		{
			// for some reason, the saved onclick is not always set, so force it here
			a.onclick = addCurrentDayToPlanner;
			onclickReset = true;
		}
//alert('a=' + a + '\n\n\nonclick=' + a.onclick + '\n\n\nsavedOnClick=' + a.savedOnClick + '\n\n\nonclickReset=' + onclickReset);
	}
}

function OpenSelectAdjusterPopup(a){
	// Save menu selections for each of the planner days
	// JSP - shouldn't need to do this, as they are saved when items added, edited, moved, etc.
	//SavePlannerSettings();

	// Open the "add adjusters" popup
	var popVal = PopUp(a,'width=720,height=600');
	return popVal;
}

function initPlanner(){
	for (var i = 0; i < 7; i++){
		if (planner_days[i].soup_diet_id != -1){
			// we found a planner day that must be displayed (values loaded from cookie or query string during page load)
			document.getElementById("plannerHead" + (i + 1)).innerHTML = getPlannerHeader(i + 1);
			document.getElementById("plannerDay" + (i + 1)).innerHTML = getPlannerContent(i + 1);

			// Force move up/down images to display correctly (IE bug)
			setMoveUpDownInnerHTML(i + 1);
		}
	}
}

function getNumAdjustersAddedForDay(planner_day){
	var num_adjusters = 0;
	var planner_index = planner_day - 1;

	if (planner_days[planner_index].soup_diet_id != -1){
		// menu item assigned to this day, so check for adjusters
		for (var i = 0; i < 8; i++){
			if (planner_days[planner_index].adjuster_ids[i] != -1){
				num_adjusters++;
		  	}
		}
	}

	return num_adjusters;
}


function reloadDynamicImagesBecauseIEisDumb(){
	//normally a poor test for IE, but this is a bug we're working around, so bug/feature detection is not possible

	if (!document.all || navigator.platform!='Win32') return;
	setTimeout('reloadDynamicImagesBecauseIEisDumb_actual()',500);
}
function reloadDynamicImagesBecauseIEisDumb_actual(){
	var imgs = document.getElementsByTagName('img');
	var nocache = '?nocache='+(new Date())*1;
	for (var i=imgs.length-1;i>=0;i--){
		var img = imgs[i];
		if (!HasClass(img,'dyn')) continue;
		var noQueryURL = /^[^?]+/.exec(img.src);
		img.src=noQueryURL[0]+nocache;
	}
}
//************************ end Planner Section, deals with right side of the screen ************************************************************
