var Express = Class.create({

	isWaiting: false,
	
	initialize: function(form, saveUrl) {
		this.form = form;
		this.saveUrl = saveUrl;
		//eventlisteners
		this.registerEvents();
	},

	registerEvents: function() {
		Event.observe(this.form,'submit', function(event) {Event.stop(event); this.post();}.bind(this));
	},
	
	setLoadWaiting: function(doDisable) {
		if(doDisable) {
			//empty cart div and show load animation
			$('form-section').setStyle({opacity:0.5});
			$('cart-container').update();
			$('wait-section').show();
			this.isWaiting = true;
		} else {
			$('form-section').setStyle({opacity:1});
			$('wait-section').hide();
			$('sku').focus();			
			this.isWaiting = false;
		}
		this.loadWaiting = doDisable;
	},
	
	reqSuccess: function(o) {
		var response = o.responseText.evalJSON();					
	
		if(response.error == 0) {
			if(response.url) {
				//additemtocartandreloadcartafterwards
				var request = new Ajax.Request(
						response.url,
						{
							method: 'get',
							parameters: {qty:response.qty},
							onComplete: this.reloadCart.bindAsEventListener(this)
						}
				);
			
				Element.removeClassName($('expressorder-message'), 'red');
				Element.addClassName($('expressorder-message'), 'green');
				
				$("expressorder-message").innerHTML = "";
				$('sku').value = "";
				return;
			}
		}
		
		Element.removeClassName($('expressorder-message'), 'green');
		Element.addClassName($('expressorder-message'), 'red');

		$("expressorder-message").innerHTML = response.message;
		this.reloadCart();
	},
	
	reloadCart: function() {
		//re-addcontentintodiv#cart-container
		var request = new Ajax.Updater($('cart-container'), '/expressorder/index/cart', {onComplete: function() {this.setLoadWaiting(false).defer()}.bindAsEventListener(this)});
	},				
	
	post: function() {
		if(!this.isWaiting) {
			var request = new Ajax.Request(
					this.saveUrl,
					{
						method: 'post',
						onComplete: this.reqSuccess.bindAsEventListener(this),
						parameters: Form.serialize(this.form)
					}		
			);
			this.setLoadWaiting(true);
		}
	}
});

