var COMMAND_ADD    = "add";
var COMMAND_REMOVE = "remove";
var COMMAND_INFO   = "info";
var COMMAND_TOGGLE = "toggle";
var COMMAND_SUBMIT = "submit";

var MIX_BASE  = "B";
var MIX_FRUIT = "F";
var MIX_NUT   = "N";
var MIX_EXTRA = "E";
var MIX_ENHANCERS = "H";

var DEFAULT_MIX_BASE = "B1";
var SHIPPING_PRICE = 5.99;
var GRAMS_PER_OUNCE = 28.3495231;

var linksDisabled = false;

app.addEventListener( document, "click", mouseClick );

function arrayIndexOf( arr, value )
{
	var i = -1;
	var j = arr.length;

	while( ++ i < j )
	{
		if( arr[ i ] === value )
		{
			return i;
		}
	}

	return -1;
}

function round( value )
{
	var str = Math.round( Number(value) * 100 ) / 100;

	str = String(str);

	if( str.indexOf( "." ) == -1 )
	{
		str += ".0";
	}
	else if( str.substr( -2, 1 ) == "." )
	{
		str += "0";
	}

	return str;
}

function percent( value, of )
{
	return round( ( 100 / of ) * value );
}

function mouseClick( e )
{
	
	var event = app.normaliseEvent( e );

	var et = event.target;
	var nn = event.target.nodeName;

	if( linksDisabled )
	{
		if( nn == "A" && et.href.substr( -10, 10 ) == "info:close" )
		{
			//
		}
		else
		{
			event.preventDefault();
			return;
		}
	}


	if( event.target.nodeName == "A" )
	{
		var href = event.target.href;
		var i = href.indexOf( ":" );

		if( i != -1 )
		{
			var command = href.substr( 0, i );
			var parameter = href.substr( i + 1, href.length );

			if( executeCommand( command, parameter ) )
			{
				event.preventDefault();
			}
		}
	}
}

function executeCommand( id, parameter )
{
	switch( id )
	{
		case COMMAND_ADD:
		{
			addItem( parameter );
			return true;
		}

		case COMMAND_REMOVE:
		{
			removeItem( parameter );
			return true;
		}

		case COMMAND_INFO:
		{
			if( parameter == "close" )
			{
				hideInfo();
			}
			else if( parameter == "container" )
			{
				showContainerInfo();
			}
			else
			{
				showInfo( parameter );
			}
			return true;
		}

		case COMMAND_TOGGLE:
		{
			toggleElement( parameter );
			return true;
		}

		case COMMAND_SUBMIT:
		{
			submitForm( parameter );
			return true;
		}

		default:
		{}
	}

	return false;
}

function addItem( id )
{
	var type = id.substr( 0, 1 );

	if( type == MIX_BASE )
	{
		if( arrayIndexOf( containerProducts, id ) != -1 )
		{
			return;
		}

		var i = containerProducts.length;

		while( i -- )
		{
			if( containerProducts[ i ].substr( 0, 1 ) == MIX_BASE )
			{
				drawTabButton( containerProducts[ i ], true );
				containerProducts.splice( i, 1 );
			}
		}
	}
	var i = containerProducts.length;
	var enhancercount=0;
	//alert(enhancercount);
	while( i -- )
	{
		if( containerProducts[ i ].substr( 0, 1 ) == MIX_ENHANCERS )
		{
			
			enhancercount++;
		}
	}
	if(enhancercount > 1 &&  type == MIX_ENHANCERS )
	{
		//alert( "Sorry, you cannot add more than 2 enhancers!" );
		showAlertMsg(this,'');
		return;
	}
	//alert(enhancercount);
	if( getContainerWeight( productList[ id ].grams ) > 16 )
	{
		showAlertMsg(this,'');
		//alert( "Sorry, you cannot add any more to your container!" );
		return;
	}

	containerProducts.push( id );
	drawContainer();
	saveContainer();
}

function removeItem( id )
{
	var type = id.substr( 0, 1 );
	var i = arrayIndexOf( containerProducts, id );

	if( i == -1 )
	{
		return;
	}

	if( type == MIX_BASE )
	{
		var i = containerProducts.length;

		while( i -- )
		{
			if( containerProducts[ i ].substr( 0, 1 ) == MIX_BASE )
			{
				drawTabButton( containerProducts[ i ], true );
				containerProducts.splice( i, 1 );
			}
		}

		containerProducts.push( DEFAULT_MIX_BASE );
		drawTabButton( DEFAULT_MIX_BASE, false );
	}
	else
	{
		var i = containerProducts.length;

		while( i -- )
		{
			if( containerProducts[ i ] == id )
			{
				containerProducts.splice( i, 1 );
			}
		}
	}

	drawContainer();
	saveContainer();
	
	document.getElementById('container_holder').style.height = document.getElementById('container').clientHeight + 10 + 'px';
}

function showContainerInfo()
{
	var label = document.getElementById( "label" );

	if( label == null )
	{
		return;
	}

	linksDisabled = true;

	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "label" )
			{
				node.style.opacity = "0.5";
			}
		}

		node = node.nextSibling;
	}

	var ingredientsIndex = {};
	var ingredients = [];

	var gra    = 0;
	var cal    = 0;
	var car    = 0;
	var carPer = 0;
	var cho    = 0;
	var fat    = 0;
	var fatPer = 0;
	var fib    = 0;
	var fibPer = 0;
	var pro    = 0;
	var sat    = 0;
	var satPer = 0;
	var sod    = 0;
	var sodPer = 0;
	var sug    = 0;

	var base = null;

	var i = 0;
	var j = containerProducts.length;

	while( i < j )
	{
		var uid = containerProducts[ i ];
		var product = productList[ uid ];

		if( uid.substr( 0, 1 ) == MIX_BASE )
		{
			ingredients.push( product.name );

			base = product;

			gra    += product.grams    * 16;
			cal    += product.calories * 16;
			car    += product.carGram  * 16;
			carPer += product.carPer   * 16;
			cho    += product.choGram  * 16;
			fat    += product.fatGram  * 16;
			fatPer += product.fatPer   * 16;
			fib    += product.fibGram  * 16;
			fibPer += product.fibPer   * 16;
			pro    += product.proGram  * 16;
			sat    += product.satGram  * 16;
			satPer += product.satPer   * 16;
			sod    += product.sodGram  * 16;
			sodPer += product.sodPer   * 16;
			sug    += product.sugGram  * 16;

			break;
		}

		i ++;
	}

	i = 0;
	j = containerProducts.length;

	while( i < j )
	{
		uid = containerProducts[ i ];
		product = productList[ uid ];

		if( product != base )
		{
			if( ingredientsIndex[ uid ] == undefined )
			{
				ingredientsIndex[ uid ] = 1;
				ingredients.push( product.name );
			}

			gra    -= product.grams;
			cal    -= (base.calories/28.34) * product.grams;
			car    -= (base.carGram/28.34) * product.grams;
			carPer -= (base.carPer/28.34) * product.grams;
			cho    -= (base.choGram/28.34) * product.grams;
			fat    -= (base.fatGram/28.34) * product.grams;
			fatPer -= (base.fatPer/28.34) * product.grams;
			fib    -= (base.fibGram/28.34) * product.grams;
			fibPer -= (base.fibPer/28.34) * product.grams;
			pro    -= (base.proGram/28.34) * product.grams;
			sat    -= (base.satGram/28.34) * product.grams;
			satPer -= (base.satPer/28.34) * product.grams;
			sod    -= (base.sodGram/28.34) * product.grams;
			sodPer -= (base.sodPer/28.34) * product.grams;
			sug    -= (base.sugGram/28.34) * product.grams;

			gra    += product.grams;
			cal    += product.calories;
			car    += product.carGram;
			carPer += product.carPer;
			cho    += product.choGram;
			fat    += product.fatGram;
			fatPer += product.fatPer;
			fib    += product.fibGram;
			fibPer += product.fibPer;
			pro    += product.proGram;
			sat    += product.satGram;
			satPer += product.satPer;
			sod    += product.sodGram;
			sodPer += product.sodPer;
			sug    += product.sugGram;
		}

		i ++;
	}
	gra    = gra /14.5;
	cal    = cal /14.5;
	car    = car /14.5;
	carPer = carPer /14.5;
	cho    = cho /14.5;
	fat    = fat /14.5;
	fatPer = fatPer /14.5;
	fib    = fib /14.5;
	fibPer = fibPer /14.5;
	pro    = pro /14.5;
	sat    = sat /14.5;
	satPer = satPer /14.5;
	sod    = sod /14.5;
	sodPer = sodPer /14.5;
	sug    = sug /14.5;
	
	setInfo( "Type", "Serving", "" );
	setInfo( "Grams", 31, "g (1.1 oz)" );

	setInfo( "Cal",    cal,    ""   );
	setInfo( "Car",    car,    "g"  );
	setInfo( "CarPer", carPer, "%"  );
	setInfo( "Cho",    cho,    "mg" );
	setInfo( "Fat",    fat,    "g"  );
	setInfo( "FatPer", fatPer, "%"  );
	setInfo( "Fib",    fib,    "g"  );
	setInfo( "FibPer", fibPer, "%"  );
	setInfo( "Pro",    pro,    "g"  );
	setInfo( "Sat",    sat,    "g"  );
	setInfo( "SatPer", satPer, "%"  );
	setInfo( "Sod",    sod,    "mg" );
	setInfo( "SodPer", sodPer, "%"  );
	setInfo( "Sug",    sug,    "g"  );

	var labelserv = document.getElementById( "labelServing" );

	if( labelserv )
	{
		labelserv.innerHTML = "Servings Per Container 14";
	}
	
	var element = document.getElementById( "labelIngredients" );

	if( element )
	{
		element.innerHTML = "<strong>Ingredients:</strong> " + ingredients.join( ", " );
	}

	if( window.pageXOffset !== undefined )
	{
		var wx = window.pageXOffset;
		var wy = window.pageYOffset;
		var ww = document.getElementsByTagName( "html" )[ 0 ].clientWidth;
		var wh = document.getElementsByTagName( "html" )[ 0 ].clientHeight;
	}
	else
	{

		var wx = document.documentElement.scrollLeft;
		var wy = document.documentElement.scrollTop;
		var ww = document.documentElement.clientWidth;
		var wh = document.documentElement.clientHeight;
	}

	label.style.display = "block";

	var w = label.offsetWidth;
	var h = label.offsetHeight;
	var x = Math.round( ( ww - w ) / 2 ) + wx;
	var y = Math.round( ( wh - h ) / 2 ) + wy;

	label.style.top = y + "px";
	label.style.left = x + "px";
}

function CheckMaxLength(Object, MaxLen)
{
  if(Object.value.length > MaxLen)
  {      
    Object.value = Object.value.substring(0, MaxLen);
  }
  //var str="\n";
  //alert(str.match(Object.value));
  //alert("S");
}

function limitTextarea(el,maxLines,maxChar)
{
	if(!el.x)
	{
	el.x=uniqid();
	el.onblur=function(){clearInterval(window['int'+el.x])}
	}
	window['int'+el.x]=setInterval(function()
	{
	var lines=el.value.replace(/\r/g,'').split('\n'),
	i=lines.length,
	lines_removed,
	char_removed;
	total_linelength = 0;
	saveline = -1;
	available_char_slot = -1;
	//alert(i + "i");
	for (k=0;k<i;k++)
	{
		linelength = lines[k].length/maxChar;
		if (linelength == 0) linelength = 1;
		// available_line_slot = maxLines - total_linelength;
		// if (available_line_slot < Math.ceil(linelength)&&available_char_slot<0)
		// {
			// available_char_slot=available_char_slot*maxChar;
		// }
		//alert (linelength + "linelength");
		total_linelength += Math.ceil(linelength);
		//alert (total_linelength);
		if(total_linelength>maxLines&&saveline<0) saveline= k;
	}
		//alert (total_linelength +"end");
	
	 if(maxLines&&total_linelength>maxLines){
		//alert(saveline);
		//alert("here2");
	 //alert (lines[saveline+1] + " before1");
	 lines=lines.slice(0,saveline+1);
	 //alert (lines[saveline] + " before");
	 if(lines[saveline].length>maxChar){
		//lines[saveline]=lines[saveline].slice(0,maxChar);
		lines[saveline]=lines[saveline].substring(0,lines[saveline].length-1);
		//alert("here");
	 }
	 else
	 {
		lines=lines.slice(0,saveline);
	 }
	 
	 //alert (lines[saveline] + " after");
	 
	 lines_removed=1;
	
	 el.value=lines.join('\n')
	 }
	
	// if(maxChar){
	// i=lines.length;
	// maxl=i;
	// while(i-->0)if(lines[i].length>maxChar){
	// charremvalue=lines[i].slice(maxChar,lines[i].length);
	// lines[i]=lines[i].slice(0,maxChar);
	// char_removed=1
	// }
	// if (!lines_removed) lines[maxl]=charremvalue;
	 //if (!lines_removed) document.getElementById('a').innerHTML='none';
	 if (lines_removed) 
	 {
		document.getElementById('a').innerHTML='Some text was truncated as you<br/>execeeded maximum message size';
		timer=0;
	 }
	//if(char_removed)alert('You can not enter more\nthan '+maxChar+' characters per line')
	// }
	
	//if(char_removed||lines_removed) el.value=lines.join('\n')
	if (timer==2000)
	{
		document.getElementById('a').innerHTML='';
	}
	timer+=5;
},5);
}

function uniqueInt()
{
	var num,maxNum=100000;
	if(!uniqueInt.a||maxNum<=uniqueInt.a.length)uniqueInt.a=[];
	do num=Math.ceil(Math.random()*maxNum);
	while(uniqueInt.a.hasMember(num))
	uniqueInt.a[uniqueInt.a.length]=num;
	return num
}

 function uniqid()

          {

          var newDate = new Date;

          return newDate.getTime();

          }



function light(obj,msg){

	var label = document.getElementById( "greeting_light" );

	if( label == null )
	{
		return;
	}		
		
	if( window.pageXOffset !== undefined )
	{
		var wx = window.pageXOffset;
		var wy = window.pageYOffset;
		var ww = document.getElementsByTagName( "html" )[ 0 ].clientWidth;
		var wh = document.getElementsByTagName( "html" )[ 0 ].clientHeight;
	}
	else
	{
		var wx = document.documentElement.scrollLeft;
		var wy = document.documentElement.scrollTop;
		var ww = document.documentElement.clientWidth;
		var wh = document.documentElement.clientHeight;
	}

	label.style.display = "block";

	var w = label.offsetWidth;
	var h = label.offsetHeight;
	var x = Math.round( ( ww - w ) / 2 ) + wx;
	var y = Math.round( ( wh - h ) / 2 ) + wy;		
	
	linksDisabled = true;
	
	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "greeting_light" )
			{
				node.style.opacity = "0.5";
			}
		}

		node = node.nextSibling;
	}

	label.style.top = y + "px";
	label.style.left = x + "px";
			
			
}    

function hideAlertMsg_light()
{
	var label = document.getElementById( "greeting_light" );
	
	if( label == null )
	{
		return;
	}

	label.style.display = "";

	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "greeting_light" )
			{
				node.style.opacity = "";
			}
		}

		node = node.nextSibling;
	}

	linksDisabled = false;

}

function clearText(thefield){
if (thefield.defaultValue==thefield.value)
thefield.value = ""
}
function HideContent(d) {
if(d.length < 1) { return; }
document.getElementById(d).style.display = "none";
}
function ShowContent(d) {
if(d.length < 1) { return; }
document.getElementById(d).style.display = "block";
}
function ReverseContentDisplay(d) {
if(d.length < 1) { return; }
if(document.getElementById(d).style.display == "none") { document.getElementById(d).style.display = "block"; }
else { document.getElementById(d).style.display = "none"; }
}

function showAlertMsg(obj,msg)
{

	
	var label = document.getElementById( "alertMsg" );

	if( label == null )
	{
		return;
	}


	if( window.pageXOffset !== undefined )
	{
		var wx = window.pageXOffset;
		var wy = window.pageYOffset;
		var ww = document.getElementsByTagName( "html" )[ 0 ].clientWidth;
		var wh = document.getElementsByTagName( "html" )[ 0 ].clientHeight;
	}
	else
	{
		var wx = document.documentElement.scrollLeft;
		var wy = document.documentElement.scrollTop;
		var ww = document.documentElement.clientWidth;
		var wh = document.documentElement.clientHeight;
	}

	label.style.display = "block";

	var w = label.offsetWidth;
	var h = label.offsetHeight;
	var x = Math.round( ( ww - w ) / 2 ) + wx;
	var y = Math.round( ( wh - h ) / 2 ) + wy;
	
	linksDisabled = true;
	

	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "alertMsg" )
			{
				node.style.opacity = "0.5";
			}
		}

		node = node.nextSibling;
	}

	label.style.top = y + "px";
	label.style.left = x + "px";
}

function hideAlertMsg()
{
	var label = document.getElementById( "alertMsg" );

	if( label == null )
	{
		return;
	}

	label.style.display = "";

	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "alertMsg" )
			{
				node.style.opacity = "";
			}
		}

		node = node.nextSibling;
	}

	linksDisabled = false;
}


function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop]; 
}


function showInfo( uid )
{
	var label = document.getElementById( "label" );
	
	if( label == null )
	{
		return;
	}

	linksDisabled = true;

	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "label" )
			{
				node.style.opacity = "0.5";
			}
		}

		node = node.nextSibling;
	}

	var product = productList[ uid ];

	var type = uid.substr( 0, 1 );
	if (type=="H")
	{
		setInfo( "Type", "Serving", "" );
		setInfo( "Grams", "1/2", " teaspoon" );
	}
	else
	{
		setInfo( "Type", "Serving", "" );
		setInfo( "Grams", product.grams, "g (1oz)" );
	}

	setInfo( "Cal",    product.calories, ""   );
	setInfo( "Car",    product.carGram,  "g"  );
	setInfo( "CarPer", product.carPer,   "%"  );
	setInfo( "Cho",    product.choGram,  "mg" );
	setInfo( "Fat",    product.fatGram,  "g"  );
	setInfo( "FatPer", product.fatPer,   "%"  );
	setInfo( "Fib",    product.fibGram,  "g"  );
	setInfo( "FibPer", product.fibPer,   "%"  );
	setInfo( "Pro",    product.proGram,  "g"  );
	setInfo( "Sat",    product.satGram,  "g"  );
	setInfo( "SatPer", product.satPer,   "%"  );
	setInfo( "Sod",    product.sodGram,  "mg" );
	setInfo( "SodPer", product.sodPer,   "%"  );
	setInfo( "Sug",    product.sugGram,  "g"  );

	var labelserv = document.getElementById( "labelServing" );

	if( labelserv )
	{
		labelserv.innerHTML = "";
	}

	var element = document.getElementById( "labelIngredients" );

	if( element )
	{
		element.innerHTML = product.moreinfo;
	}

	if( window.pageXOffset !== undefined )
	{
		var wx = window.pageXOffset;
		var wy = window.pageYOffset;
		var ww = document.getElementsByTagName( "html" )[ 0 ].clientWidth;
		var wh = document.getElementsByTagName( "html" )[ 0 ].clientHeight;
	}
	else
	{
		var wx = document.documentElement.scrollLeft;
		var wy = document.documentElement.scrollTop;
		var ww = document.documentElement.clientWidth;
		var wh = document.documentElement.clientHeight;
	}

	label.style.display = "block";

	var w = label.offsetWidth;
	var h = label.offsetHeight;
	var x = Math.round( ( ww - w ) / 2 ) + wx;
	var y = Math.round( ( wh - h ) / 2 ) + wy;

	label.style.top = y + "px";
	label.style.left = x + "px";
}

function hideInfo()
{
	var label = document.getElementById( "label" );

	if( label == null )
	{
		return;
	}

	label.style.display = "";

	var node = document.getElementsByTagName( "body" )[ 0 ].firstChild;

	while( node )
	{
		if( node.nodeType == 1 )
		{
			if( node.id != "label" )
			{
				node.style.opacity = "";
			}
		}

		node = node.nextSibling;
	}

	linksDisabled = false;
}

function setInfo( id, value, unit )
{
	if( isNaN( value ) == false )
	{
		value = String( Math.round( value ) );
	}

	var element = document.getElementById( "label" + id );

	if( element )
	{
		element.innerHTML = value + unit;
	}
}

function toggleElement( id )
{
	var element = document.getElementById( id );

	if( element.className == "visible" )
	{
		element.className = "";
	}
	else
	{
		element.className = "visible";
	}
}

function submitForm( id )
{
	var form = document.getElementById( id );

	if( form )
	{
		form.submit();
	}
}

function numContainerItems( type )
{
	var count = 0;
	var i = containerProducts.length;

	while( i -- )
	{
		if( containerProducts[ i ].substr( 0, 1 ) == type )
		{
			count ++;
		}
	}

	return count;
}

function getProductsByType( type )
{
	var list = [];
	var i = 0;
	var j = containerProducts.length;

	while( i < j )
	{
		var id = containerProducts[ i ];

		if( id.substr( 0, 1 ) == type )
		{
			list.push( productList[ id ] );
		}

		i ++;
	}

	return list;
}

function drawTabButton( id, defaultState )
{
	var button = document.getElementById( "button" + id );

	if( button == null )
	{
		return;
	}

	if( defaultState )
	{
		button.className = "button add";
		button.href = "add:" + id;
		button.innerHTML = "add item";
	}
	else
	{
		button.className = "button remove";
		button.href = "remove:" + id;
		button.innerHTML = "remove item";
	}
}

function drawContainer()
{
	var lines = [ "\t\t<strong class=\"title\">Your Mix (16 oz.)</strong>" ];

	var bases  = getProductsByType( MIX_BASE );
	var fruits = getProductsByType( MIX_FRUIT );
	var nuts   = getProductsByType( MIX_NUT );
	var extras = getProductsByType( MIX_EXTRA );
	var enhancers = getProductsByType( MIX_ENHANCERS );	

	var totalPrice = 0;

	if( bases.length )
	{
		lines.push( "\t\t<ul id=\"baseList\">" );
		lines.push( "\t\t\t<li class=\"title\">Granola Base</li>" );

		totalPrice += bases[ 0 ].price;
		lines.push( "\t\t\t<li id=\"item" + bases[ 0 ].id + "\" class=\"item\"><span>" + bases[ 0 ].name + "</span></li>" );

		lines.push( "\t\t</ul>" );
	}

	if( fruits.length != 0 )
	{
		lines.push( "\t\t<ul id=\"fruitList\">" );
		lines.push( "\t\t\t<li class=\"title\">Fruits</li>" );

		var list = [];
		var i = 0;
		var j = fruits.length;

		while( i < j )
		{
			var data = fruits[ i ];

			if( list[ data.id ] )
			{
				list[ data.id ].total ++;
			}
			else
			{
				list[ data.id ] = { data:data, total:1 };
			}

			price = ( data.price / GRAMS_PER_OUNCE ) * data.grams;
			price = Math.ceil( price * 100 ) / 100;

			totalPrice += price;

			i ++;
		}

		for( var id in list )
		{
			var item = list[ id ];

			if( item.total == 1 )
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Click to delete this item\">" + item.data.name + "</a></li>" );
			}
			else
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Click to delete this item\">" + item.data.name + " (" + item.total + ")</a></li>" );
			}
		}

		lines.push( "\t\t</ul>" );
	}

	if( nuts.length )
	{
		lines.push( "\t\t<ul id=\"nutList\">" );
		lines.push( "\t\t\t<li class=\"title\">Nuts and Seeds</li>" );

		var list = [];
		var i = 0;
		var j = nuts.length;

		while( i < j )
		{
			var data = nuts[ i ];

			if( list[ data.id ] )
			{
				list[ data.id ].total ++;
			}
			else
			{
				list[ data.id ] = { data:data, total:1 };
			}

			price = ( data.price / GRAMS_PER_OUNCE ) * data.grams;
			price = Math.ceil( price * 100 ) / 100;

			totalPrice += price;

			i ++;
		}

		for( var id in list )
		{
			var item = list[ id ];

			if( item.total == 1 )
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Remove this item\">" + item.data.name + "</a></li>" );
			}
			else
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Remove this item\">" + item.data.name + " (" + item.total + ")</a></li>" );
			}
		}

		lines.push( "\t\t</ul>" );
	}

	if( extras.length )
	{
		lines.push( "\t\t<ul id=\"extraList\">" );
		lines.push( "\t\t\t<li class=\"title\">Extras</li>" );

		var list = [];
		var i = 0;
		var j = extras.length;

		while( i < j )
		{
			var data = extras[ i ];

			if( list[ data.id ] )
			{
				list[ data.id ].total ++;
			}
			else
			{
				list[ data.id ] = { data:data, total:1 };
			}

			price = ( data.price / GRAMS_PER_OUNCE ) * data.grams;
			price = Math.ceil( price * 100 ) / 100;

			totalPrice += price;

			i ++;
		}

		for( var id in list )
		{
			var item = list[ id ];

			if( item.total == 1 )
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Click to delete this item\">" + item.data.name + "</a></li>" );
			}
			else
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Click to delete this item\">" + item.data.name + " (" + item.total + ")</a></li>" );
			}
		}

		lines.push( "\t\t</ul>" );
	}
	if( enhancers.length )
	{
		lines.push( "\t\t<ul id=\"enhancersList\">" );
		lines.push( "\t\t\t<li class=\"title\">Enhancers</li>" );

		var list = [];
		var i = 0;
		var j = enhancers.length;

		while( i < j )
		{
			var data = enhancers[ i ];

			if( list[ data.id ] )
			{
				list[ data.id ].total ++;
			}
			else
			{
				list[ data.id ] = { data:data, total:1 };
			}

			price = ( data.price / GRAMS_PER_OUNCE ) * data.grams;
			price = Math.ceil( price * 100 ) / 100;

			totalPrice += price;

			i ++;
		}

		for( var id in list )
		{
			var item = list[ id ];

			if( item.total == 1 )
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Remove this item\">" + item.data.name + "</a></li>" );
			}
			else
			{
				lines.push( "\t\t\t<li id=\"item" + id + "\" class=\"item\"><a href=\"remove:" + id + "\" title=\"Remove this item\">" + item.data.name + " (" + item.total + ")</a></li>" );
			}
		}

		lines.push( "\t\t</ul>" );
	}

	totalPrice = Math.floor( totalPrice * 100 ) / 100;

	var tString = String(totalPrice);

	if( tString.substr( -2, 1 ) == "." )
	{
		tString += "0";
	}

	lines.push( "\t\t<ul>" );
	lines.push( "\t\t\t<li class=\"titleID\">Mix-ID</li>" );
	lines.push( "\t\t\t<li class=\"itemID\">" + containerID + "</li>" );
	lines.push( "\t\t</ul>" );
	lines.push( "\t\t<ul>" );
	lines.push( "\t\t\t<li class=\"titleCost\">$" + tString +"</li>" );
	

	// current cart price retrieved from php session cart + the current added element price
	sum_total = window.total_price + totalPrice;
	if( sum_total > 40 )
	{
		lines.push( "\t\t\t<li class=\"itemCost\"><b>Congratulations!<br/>Your order will ship for free!</b></li>" );
	}
	else
	{

			var sum_add=(40-sum_total);
			sum_add=sum_add.toFixed(2)
			lines.push( "\t\t\t<li class=\"itemCost\"><span style=\"color:#2288de;\"><b>(add $" + sum_add +" for free shipping)</span></b></li>" );
		}
	
	lines.push( "\t\t</ul>" );
	lines.push( "\t\t<div id=\"containerBase\"><a href=\"info:container\" title=\"Click here to see Nutrition Facts of your mix\">nutrition calculator</a></div>" );

	document.getElementById( "container" ).innerHTML = lines.join( "\n" );
}

function saveContainer()
{
	var value = containerProducts.join( "|" );
	document.cookie = "container=" + value + "; path=/";
}

function getContainerWeight( additionalWeight )
{
	var weight = 0;
	var i = containerProducts.length;

	while( i -- )
	{
		var product = productList[ containerProducts[ i ] ];
		weight += product.grams;
	}

	if( additionalWeight )
	{
		weight += additionalWeight;
	}

	return Math.ceil( ( weight / GRAMS_PER_OUNCE ) * 10 ) / 10;
}

function getContainerList( type )
{
	switch( type )
	{
		case MIX_BASE:
		{
			return document.getElementById( "baseList" );
		}

		case MIX_FRUIT:
		{
			return document.getElementById( "fruitList" );
		}

		case MIX_NUT:
		{
			return document.getElementById( "nutList" );
		}

		case MIX_EXTRA:
		{
			return document.getElementById( "extraList" );
		}

		case MIX_ENHANCERS:
		{
			return document.getElementById( "enhancersList" );
		}

		default:
		{
			return null;
		}
	}
}

function toggleShippingAddress()
{
	var e = document.getElementById( "shippingAddress" );

	if( e )
	{
		if( e.style.display != "block" )
		{
			e.style.display = "block";
		}
		else
		{
			e.style.display = "none";
		}
	}
}

var sentForms = {};

function sendForm( form )
{
	if( form.elements.formID )
	{
		if( sentForms[ form.elements.formID.value ] )
		{
			return false;
		}

		sentForms[ form.elements.formID.value ] = form;
	}

	return true;
}



function popup(url) 
{
 var width  = 270;
 var height = 480;
 var left   = (screen.width  - width)/2;
 var top    = (screen.height - height)/2;
 var params = 'width='+width+', height='+height;
 params += ', top='+top+', left='+left;
 params += ', directories=no';
 params += ', location=no';
 params += ', menubar=no';
 params += ', resizable=no';
 params += ', scrollbars=yes';
 params += ', status=no';
 params += ', toolbar=no';
 newwin=window.open(url,'windowname5', params);
 if (window.focus) {newwin.focus()}
 return false;
}

function movepic(img_name,img_src,num) {
	document[img_name].src=img_src;
	z=document.getElementById('link');
	z.href="/src/pdf/sample_" +num + ".pdf";
}