var Cart = {

	cartSlide: null,

	start: function() {
//		console.log('meylah cart init');

// SLIDER
		cartSlide = new Fx.Slide('detailedview', {
			onComplete: function(){
				if(this.wrapper.getStyle('height').toInt() != "0"){	// check if the slider is open
					this.wrapper.setStyle('height', 'auto');	// <- because we may be adding things to the cart if it's open
				}
			}
		}).hide();

		$$('#togglecart').addEvents({
			click: function(){
				cartSlide.toggle();
				var offset = (cartSlide.open ? 0 : '100%');
				$('togglecart').setStyle('background-position', [0, offset]);
				$('togglecart').set('html', (cartSlide.open ? 'Show Cart' : 'Hide Cart'));
			}.bind(this),
			mouseover: function(){
				this.setStyle('cursor','pointer');
			}
		});
		this.cartSlider = cartSlide;
		if ($("detailedview").hasClass("show")) $('togglecart').fireEvent("click");


// ADD Item
		$$('#forsale, .postImage').addEvent('click:relay(.cart-add)', function(e, button){
			e.preventDefault();
			if (button.hasClass('disabled')) return;
			if($('spinner')) $('spinner').fade('in');
			var vignette = button.getParent(".item");
			var data = vignette.get("id").split("-");
//			var type = data[0];
			var id = data[1];
			var requestcomplete = false;
//			button.set('html','<img src="/static/images/updating.gif"  />');
			button.addClass("spinner");
			log('add item:'+id);
			new Request.HTML({
				url: '/' + ARTIST.username + '/api/item_save',
				data:"object_id="+id,		// +"&object_type="+type,
				update: 'detailedview',
				onSuccess: function(text, xml) {
					requestcomplete = true;
					if (!cartSlide.open) cartSlide.element.setStyle('margin-top',-cartSlide.element.offsetHeight);	// update height of slider so as not to show

					var itemButton = $$('#addToCart-'+id+'_request, #addToCart-'+id+'_request-overlay');			// have to do it this ugly way (for now) as don't know if button in overlay or in store was clicked
					itemButton.set('html','<span>Added</span>');
					itemButton.addClass('disabled');
					itemButton.removeClass('spinner');
					itemButton.set('disabled', true);

					if ($$('#numItems span').get('text') > 0 ) { $('togglecart').fade('in'); }
					else { $('togglecart').fade('out'); }

					// fancy animation here...

					if($('spinner')) $('spinner').fade('out');

				},
				onFailure: function( xhr ) {
					requestcomplete = true;
					var trace = "Request failed.";
					var el = new Element('input',
					{
						value:'1',
						name:'ajax_failover',
						type:'hidden'
					}
					);
					var el2 = new Element('input',
					{
						value:trace,
						name:'ajax_failover_trace',
						type:'hidden'
					}
					);

					$$("#addToCart-"+id).adopt(el);
					$$("#addToCart-"+id).adopt(el2);
					$("addToCart-"+id).submit();
				},
				onException: function(headerName, value){
					requestcomplete = true;
					var trace = headerName + " " + value;
					var el = new Element('input',
					{
						value:'1',
						name:'ajax_failover',
						type:'hidden'
					}
					);
					var el2 = new Element('input',
					{
						value:trace,
						name:'ajax_failover_trace',
						type:'hidden'
					}
					);

					$$("#addToCart-"+id).adopt(el);
					$$("#addToCart-"+id).adopt(el2);
					$("addToCart-"+id).submit();
				}
			}).send();

			var f = function()
			{
				if ( !requestcomplete )
				{
					var trace = "AJAX Cart request timed out";
					var el = new Element('input',
					{
						value:'1',
						name:'ajax_failover',
						type:'hidden'
					}
					);
					var el2 = new Element('input',
					{
						value:trace,
						name:'ajax_failover_trace',
						type:'hidden'
					}
					);

					$$("#addToCart-"+id).adopt(el);
					$$("#addToCart-"+id).adopt(el2);
					$("addToCart-"+id).submit();
				}
			};
			f.delay(10000);

		});


// REMOVE Item
		$('cart').addEvent('click:relay(.cart-remove)', function(e, button){
			e.preventDefault();
			$('spinner').fade('in');
			var cartid = button.get("id").split("-")[1];
//			var type = button.get("id").split("-")[2];
			var id = button.get("id").split("-")[3];
//			console.log('remove item: '+id);

			new Request.HTML({
				url : '/' + ARTIST.username + '/api/item_delete/'+cartid,
//				update: 'detailedview',
				onSuccess: function (tree, xml, html, js) {
					Cart.removeFromCart(id, html);
				}
			}).send();
		});


// UPDATE Quantity
		$('cart').addEvent('click:relay(.cart-update)', function(e, button){
			e.preventDefault();
			var quantities = {};
			var storeids = [];
			$$(".cartQuantity").each(function(input) {
				var cartid = input.get("id").split("-")[1];
				var value = input.get("value");
				quantities[cartid] = value;
				if (value == 0) storeids.push( input.get("id").split("-")[3] );	// make an array of items to delete

//				if(value == 0) {
//					log('confirming delete');
//					if (confirm("Would you like to remove item "+id+" from your cart?")) {}
//					else return false;
//				}
			});
			new Request.HTML({
				url: '/' + ARTIST.username + '/api/item_quantity',
				data: quantities,
//				update: 'detailedview',
				onSuccess: function (tree, xml, html, js) {
					if (storeids.length > 0) Cart.removeFromCart(storeids, html);
					else $('detailedview').set('html',html);
				}
			}).send();
		});

// BIND workflow
		$('cart').addEvent('click:relay(#selectionForm button, #payForm button, #shippingEditForm button)', function(e, button){   // removed: #identificationForm button
			e.preventDefault();
			$('spinner').fade('in');
			var form = button.getParent("form");
			var action = '/' + ARTIST.username + '/api/cart';
			form.set("action", action);
			new Form.Request(form, 'detailedview', {
				onSuccess: function(){
					$('spinner').fade('out');
				}
			}).send();
			return false;
		});

		$('cart').addEvent('click:relay(.step .selection)', function(e, button){
			e.preventDefault();
			$('spinner').fade('in');
			new Request.HTML({
				url: '/' + ARTIST.username + '/api/cart',
				update: $('detailedview')
			}).send();
			return false;
		});

// REQUEST forms
		setUpRequestForms();

	},

	removeFromCart: function(ids, html) {
		ids = $splat(ids);
		ids.each(function(id) {
//				console.log('removing: '+id);
				$('cart-'+id).fade(0);
				var button = $$('#addToCart-'+id+'_request', '#addToCart-'+id+'_request-overlay');
				button.removeClass('disabled');
				button.set('html','<span>Add to Cart</span>');
				button.set('disabled', false);
		});

		// fancy animation here....
		$('cart-'+ids[0]).get('tween').chain(function(){
			$('detailedview').set('html',html);
			if ($$('#numItems span').get('text') == 0 ) {
				$('togglecart').fade('out').get('tween').chain(function(){
					$('togglecart').set('text','Show Cart').setStyle('background-position', [0, 0]);
					cartSlide.slideOut();
				}); //.delay(1000);
			}
			$('spinner').fade('out');
		});
	}
};

window.addEvent('domready', function() {
  if ($("cart")) { Cart.start(); }
});
