
	iona.cart = (function(){
		var api = {};
		var dom, form, cookie;
		var init = function(){
			dom = $("div#cart");
			cookie = iona.state.getState();
			updateNav();
			if(dom.length == 0)
				return;
			activateSideForm();
			activateGrid();
		};
		
		// -- Handle Side Form Events:
		var activateSideForm = function(){
			form = dom.find("form#side-form");
			form.find("a.send-btn").click(function(){
				form.submit();
				return false;
			});
			
			form.find("div.field.incentive a").click(function(){
				if($(this).hasClass("active"))
					return false;
				$(this).parent().find("a.active").removeClass("active");
				$(this).addClass("active");
				return false;
			});
			
			var sendCall = function(d){
				form.find("a.send-btn").hide();
				var data = {};
				data.email = d.target_email;
				data.subject = "A Message from the IONA Cart Page";
				data.message = [];
				data.message.push("",
				"Message Information:\n",
				"Name: ",d.name,"\n",
				"Email: ",d.email,"\n",
				"Company: ",d.company,"\n",
				"Date: ",d.date,"\n",
				"Location: ",d.location,"\n",
				"Message: ",d.message,"\n",
				"");
				
				if(d.website)
					data.message.push("Website: ",d.website,"\n");
				if(d.incentive)
					data.message.push("Incentive:",(d.incentive?"YES":"NO"),"\n\n");
				
				if(d.characters.length > 0){
					data.message.push("",
					"Creative Services Requested:\n",
					"----------------------------\n",
					"");

					for(var i=0; i<d.characters.length; i++)
						data.message.push(d.characters[i].name," - ",d.characters[i].url,"\n");
				}
				
				data.message = data.message.join('');
				$.ajax({
					'url':"/send_email",
					'data':data,
					'complete':sentCall,
					'type':"POST"
				});
			};
			
			var sentCall = function(){
				form.parent().find('div#sent-state').show();
				form.css('visibility','hidden').hide('slow');
			};
			
			form.submit(function(){
				var data = {};
				data.email = $.trim(form.find("input#email-input").val());
				data.name = $.trim(form.find("input#name-input").val());
				data.company = $.trim(form.find("input#company-input").val());
				data.website = $.trim(form.find("input#website-input").val());
				data.date = $.trim(form.find("input#date-input").val());
				data.location = $.trim(form.find("input#location-input").val());
				data.target_email = $.trim(form.find("input#target-email").val());
				data.incentive = $("div.incentive a.yes").hasClass("active");
				data.message = $.trim($("textarea#message-input").val());
				
				var e;
				if($("input#target-email-1").length > 0) {
					e = $.trim($("input#target-email-1").val());
					if(e.length > 0)
						data.target_email += ", " + e;
				}
				if($("input#target-email-2").length > 0) {
					e = $.trim($("input#target-email-2").val());
					if(e.length > 0)
						data.target_email += ", " + e;
				}
				if($("input#target-email-3").length > 0) {
					e = $.trim($("input#target-email-3").val());
					if(e.length > 0)
						data.target_email += ", " + e;
				}
				
				data.characters = [];
				var items = $("div.item");
				for(var i=0; i<items.length; i++){
					data.characters.push({
						'url':$(items[i]).find("a").attr("href"),
						'name':decodeURIComponent($(items[i]).attr("name"))
					});
				}
				
				var error = !(data.email && data.name);

				if(!data.email)
					form.find("input#email-input").val("").blur().parent().addClass("error");
				if(!data.name)
					form.find("input#name-input").val("").blur().parent().addClass("error");

				if(!error)
					sendCall(data);

				return false;
			});
		};
		
		// -- Handle grid layout/interaction
		var activateGrid = function(){
			
			// -- Fill in data:
			var cookie = iona.state.getState();
			var markup = [];
			var header, description, small_carousel_image;
			for(var i=0; i<cookie.length; i++){
				header = cookie[i].header;
				description = cookie[i].description;
				small_carousel_image = cookie[i].cart_image;
				
				cookie[i].url += "#" + cookie[i].id;
				markup.push("",
				"<div class='item' rel='",cookie[i].id,"' name='",encodeURIComponent(header),"'>",
				"	<a href='",cookie[i].url,"' class='thumb'>",
				"		<img src='",small_carousel_image,"' />",
				"		<div class='hover_border'>",
				"			<img src='/static/images/big_tout_hover_bg.png' />",
				"		</div>",
				"	</a>",
				"	<div class='title font-header'>",
				"		<a href='",cookie[i].url,"'>",header,"</a>",
				"	</div>",
				"	<div class='date'><em>",description,"</em></div>",
				"	<a href='#' class='remove_btn'></a>",
				"</div>",
				
				/*				
				"<div class='item' rel='",cookie[i].id,"'>",
				"	<div>",
				"		<img src='",small_carousel_image,"' />",
				"	</div>",
				"	<div class='title font-header'>",header,"</div>",
				"	<div class='date'><em>",description,"</em></div>",
				"	<a href='#' class='remove_btn'></a>",
				"</div>",
				*/
				"");
			}
			$("div#full").html(markup.join(''));
			
			var fixGridMargins = function(){
				var items = dom.find("div.item");
				if(items.length == 0){
					dom.find("div#full").hide();
					dom.find("div#empty").show();
				}
				
				var item;
				for(var i=0;i<items.length;i++){
					item = $(items[i]);
					if(i%2==0)
						item.addClass("even");
					else
						item.removeClass("even");
				}
			};
			
			dom.find("a.remove_btn").click(function(){
				$(this).parent().remove();
				fixGridMargins();
				var id = $(this).parent().attr("rel");
				api.removeItem(parseInt(id, 10));
				return false;
			});
						
			
			// -- start grid off:
			fixGridMargins();
		};
		
		var updateNav = function(total){
			total = cookie.length;
			if(total > 0){
				//$("div#nav a.cart").find("span").remove();
				$("div#nav a.cart").html("CART <span>("+total+")");
			} else if(total == 0)
				$("div#nav a.cart").html("CART");
		};
		
		api.addItem = function(item){
			if(!cookie)
				cookie = [];
			for(var i=0; i<cookie.length; i++){
				if(cookie[i].id == item.id)
					return;
			}
			item.url = location.href.split("#")[0];
			var newItem = {};
			newItem.id = item.id;
			newItem.url = item.url;
			for(var i=0; i<item.children.length; i++){
				if(item.children[i].name == "header")
					newItem.header = item.children[i].value;
				else if(item.children[i].name == "description")
					newItem.description = item.children[i].value;
				else if(item.children[i].name == "cart_image")
					newItem.cart_image = item.children[i].value;
			}

			cookie.push(newItem);
			updateCookie();
			updateNav();
		};
		
		api.removeItem = function(id){
			var data = [];
			for(var i=0; i<cookie.length; i++){
				if(cookie[i].id != id)
					data.push(cookie[i]);
			}
			cookie = data;
			updateCookie();
			updateNav();
		};
		
		var updateCookie = function(){
			iona.state.setState(cookie);
		};
		
		
		
		init();
		return api;
	})();

