

/*

BBBop Build A Bowl UI

jQuery fuckin rocks!

*/


$(document).ready(function(){
    $('#buildBowlMenu').accordion({ active: 0
    								, animated: 'bounceslide'
    								, collapsible: false
    								, header: 'h3'
       								//, autoHeight: true
    							});
    								
  });
  


//bowl item nutrition logic

var newBowl = true;

function calcNutrition(nutVals, addTo)
{
//console.debug(nutVals);
	var nutDisplayVals = $('span.nutritionValue');
	var nutCount = nutDisplayVals.length;
	
//console.debug(nutDisplayVals);
	for(var x = 0; x < nutCount; x++)
	{
//console.debug($(nutDisplayVals[x]).attr('id') +': '+ nutVals[x]);
		var curVal = parseFloat($(nutDisplayVals[x]).html());
		if(addTo)
		{
			var roundVal = curVal + parseFloat(nutVals[x]);
			$(nutDisplayVals[x]).html(roundVal.toFixed(1));
		}
		else
		{
			var diff = (curVal - parseFloat(nutVals[x])).toFixed(1);
			$(nutDisplayVals[x]).html((diff <= 0 ? 0 : diff));
		}
	}
}


function processNutrition(bowlItem, isHTMLInput, toAdd)
{
	isHTMLInput = (isHTMLInput === undefined ? true : false);
	var nutVals = $(bowlItem).val().split('|');
	var isChecked = $(bowlItem).attr('checked');
//console.group('Process Nutrition Change...');
//console.debug(bowlItem);
	
	//radio buttons for rice are a special case
	if($(bowlItem).attr('type') == 'radio')
	{
//console.debug($(bowlItem));
//console.debug($(bowlItem).parent().siblings().children('input'));
		
		var siblingsSelected = $(bowlItem).parent().siblings().children('input[checked=true]');
//console.debug(siblingsSelected);
		
		if(siblingsSelected.length == 0 && !newBowl)
		{
		//console.debug('No Other Inputs Selected');
			return;
		}
		
		newBowl = false;			
		$(siblingsSelected).each(
									function(x)
									{
										//console.debug(this);
										if($(this).attr('checked'))
										{
											calcNutrition($(this).val().split('|'), false);
											$(this).attr('checked', false);
										}			
									}
		  						);
	}
	
	//check to see if add or subtract nutrition info
	if(isHTMLInput)
	{
//console.debug('Called using checkbox or HTML input to decide if add or subtract');
		calcNutrition(nutVals, isChecked);
	}
	else
	{
//console.debug('Called from base nutrition tab...passing in if add or subtract');
		toAdd = (toAdd === undefined ? true : toAdd);
		//toAdd = true;
		calcNutrition(nutVals, toAdd);
	}
	
//console.groupEnd();
}


/**
	Processes changes in inputs containing quantities
**/

var totalArray = [];

function calcNutritionCount(nutVals, count)
{
	var test = $(nutVals).map(function(){return parseFloat(this) * count});

	return test;
}


function processNutrictionCount(bowlItem)
{
	var oldSauceInfo = $('#curSauceInfo').val().split('|');
//console.debug(oldSauceInfo);

	if($(bowlItem).attr('name') != oldSauceInfo[0])
	{
		oldSauceInfo = $(bowlItem).attr('name') +'|'+ $(bowlItem).val();
		$('#curSauceInfo').val(oldSauceInfo);
		return;
	}
	
	var oldSauceCount = oldSauceInfo[1];
	var newSauceCount = parseInt($(bowlItem).val());
//console.debug(oldSauceCount);
//console.debug(newSauceCount);
	if(newSauceCount >= 0)
	{
		$('#curSauceInfo').val($(bowlItem).attr('name') +'|'+ newSauceCount);
		var sauceDiff = newSauceCount - oldSauceCount;
	//console.debug(sauceDiff);
		var sauceNutVals = $(bowlItem).siblings('[name="'+ $(bowlItem).attr('name') +'_values"]').val().split('|');
	//console.debug(sauceNutVals);
		var calcldNutVals = calcNutritionCount(sauceNutVals, Math.abs(sauceDiff));
	//console.debug(calcldNutVals);

		calcNutrition(calcldNutVals, (sauceDiff > 0 ? true : false));
		
		return;
	}
	
	//value is not a number...could be space or delete key was hit.
	//console.debug('EXITING "processNutrictionCount" -- '+ newSauceCount +' -- is not a number');
	return;
}


function setNutrictionData(nutDataDOMId)
{
	var nutDisplayVals = $('span.nutritionValue');
	var nutVals = [];
	
	if(nutDataDOMId != '' && $('#'+ nutDataDOMId))
	{
		nutVals = $('#'+ nutDataDOMId).val().split('|');
		
		for(var x = 0; x < nutDisplayVals.length; x++)
		{
			$(nutDisplayVals[x]).html(parseFloat(nutVals[x]));
		}
	}
	else
	{
		for(var x = 0; x < nutDisplayVals.length; x++)
		{
			$(nutDisplayVals[x]).html(0);
		}
	}
}


var sizeDifferences = ['Rice', 'Meat'];

function perserveCheckedItems(newSize)
{
	//only need to check meat and rice...no size changes with sauce and veggies
	var curSize = $('#curBowlSize').val();
	
	for(var x = 0; x < sizeDifferences.length; x++)
	{
//console.debug('#'+ curSize +'_'+ sizeDifferences[x]);
		var curCheckedSec = $('#'+ curSize +'_'+ sizeDifferences[x]).children().children('input[checked=true]');
		
//console.debug(curCheckedSec);
	
		for(var n = 0; n < curCheckedSec.length; n++)
		{
			//subtract curr...
			calcNutrition($(curCheckedSec[n]).val().split('|'), false);
			$(curCheckedSec[n]).attr('checked', false);
			
			//...then add new
			var curInputNameParts = $(curCheckedSec[n]).attr('name').split('_');
//console.debug('input[name="'+ newSize +'_'+ curInputNameParts[1] +'"]');
			var newItemInput = $('input[name="'+ newSize +'_'+ curInputNameParts[1] +'"]');
//console.debug(newItemInput);
			$(newItemInput).attr('checked', true);						//check the box
			calcNutrition($(newItemInput).val().split('|'), true);		//add the nutrition info
		}
	}
}


function swapSizeNutrition(bowlSize)
{
	var size = $(bowlSize).val();
	var curSize = $('#curBowlSize').val();
	var sizeString = (size == 1 ? 'large bowl' : 'regular bowl');
	
	//swap out all menu sections...retaining checked data
	perserveCheckedItems(size);
	for(var x = 0; x < sizeDifferences.length; x++)
	{
		var curSizeSect = $('#'+ curSize +'_'+ sizeDifferences[x]);
		$(curSizeSect).css('visibility', 'hidden');
		
		var newSizeSect = $('#'+ size +'_'+ sizeDifferences[x]);
		$(newSizeSect).css('visibility', 'visible');
	}
	
	$('#curBowlSize').val(size);
	$('#servingSize').html(sizeString);		
}


function updateServingSize(servingSize)
{
	$('#servingSize').html(servingSize);
}

