
function initialize() {
	cart.init();
}
Element.observe( window, 'load', initialize, false );

var cart = {
 init: function(){
	var links = $$('.change_quantity_link'); 	
 	for( var i=0; i < links.length; i++ ) {
 		var link = links[i];
 		link.observe( 'click', cart.__onChangeLinkClicked.bindAsEventListener(link), false );

		var linkId = link.id;
		var button = $( linkId + '_button' );
		if( null != button )
			button.observe( 'click', cart.__onChangeButtonClicked.bindAsEventListener(link), false );

 		var input = $(linkId + '_input');
 		if( null != input )
 			input.observe( 'keypress', cart.__onKeyPressed.bindAsEventListener(link), false );
 	}
 	
 	var links = $$('.remove_item_link');
 	for( var i=0; i < links.length; i++ ) {
 		var link = links[i];
 		link.observe( 'click', cart.__onRemoveLinkClicked.bindAsEventListener(link), false );
 	} 	
 }
 
 ,oldValue: null
 ,activeId: null
 ,__setActiveForm: function( linkId ) {
 	var activeId = cart.activeId;
 	if( activeId == linkId ) return;
 	
 	if( null!=activeId ) {
		var view = $(activeId + '_view');
		var form = $(activeId + '_form');
	 	if( null != view && null != form ) {
	 		
	 		view.style.display = 'block';
	 		form.style.display = 'none';
	 	}
	 	var input = $(activeId + '_input');
	 	if( null != input )
	 		input.value = cart.oldValue;
 	}
 	activeId = linkId;
	cart.activeId = activeId;

 	if( null!=activeId ) {
		var view = $(activeId + '_view');
		var form = $(activeId + '_form');
	 	if( null != view && null != form ) {
	 		view.style.display = 'none';
	 		form.style.display = 'block';
	 	}
 		var input = $(activeId + '_input');
 		if( null != input )
 			cart.oldValue = input.value;
 	}
 }
 ,__changeQuantity: function( link ) {
 	var linkId = link.id;
 	var input = $(linkId + '_input');
 	if( null==input ) return;
 	if( input.value == cart.oldValue ) {
 		cart.__setActiveForm( null );
 		return false;
 	}
 	if( input.value.match(/^\s*0\s*$/) ) {
 		var match = linkId.match( /change_quantity_(.*)$/ );
 		if( !('1' in match) ) return;
 		var productId = match[1];
 		var button = $('remove_' + productId + '_button');
 		if( null!=button ) {
 			button.click();
 		}
 		return false;
 	}
 	return true;
 }
	
 ,__onChangeLinkClicked: function( ev ) {
 	var link = this;
	var linkId = link.id;
	cart.__setActiveForm( linkId );
 }
 
 ,__onKeyPressed: function( ev ) {
 	if( ev.keyCode == 13 ) {
 		if( cart.__changeQuantity( this ) ) {
 			var button = $( this.id + '_button' );
 			if( null!=button )
 				button.click();
 		}
 		Event.stop( ev );
		return false;
	}
 }

 ,__onChangeButtonClicked: function( ev ) {
 	if( !cart.__changeQuantity( this ) ) {
		Event.stop( ev );
		return false;
	}
 }

 ,__onRemoveLinkClicked: function( ev ) {
 	var link = this;
	var linkId = link.id;
 	var button = $( linkId + '_button' );
 	if( null != button ) {
 		button.click();
 		ev.stop();
 		return false;
 	}
 }
}; 
