function gup( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}

var Basket = Class.create({
	options: {},
	initialize: function(options){
	var code = gup( 'code' );
	this.options = Object.extend({
			container: 'basket_container',
			loader: 'loader',
			basket: 'basket',
			headerHeight: $('basket').cumulativeOffset().top+5,
			url:{
				view: 'basket/basket.php?code='+code,
				add: 'basket/add.php',
				minus: 'basket/minus.php',
				plus: 'basket/plus.php',
				remove: 'basket/remove.php'
			} ,
			buttons:{
				add: 'a.trigger-add-order',
				remove: 'a.order-cancel'
			}
		}, options);
	},
	
	addObservers: function(){
		$$(this.options.buttons.add).each(function(item, index){
			item.observe('click', function(event){
				this.add(item.rel);
			}.bind(this));
		}.bind(this));		
	},
	
	scroll: function(){
		var basket = $(this.options.container);
		
		var wHeight = window.innerHeight ? window.innerHeight : document.body.clientHeight;
		var bHeight = basket.getDimensions().height;
		var cHeight = $('first_step').getDimensions().height;
		var offset = basket.cumulativeScrollOffset()[1];
		var bTop = basket.cumulativeOffset()[1];
		
		var scrollOffset = $('basket').cumulativeScrollOffset().top;
		var minTop = this.options.headerHeight;
		//$('wrapper').cumulativeOffset().top;
		var basketHeight = $('basket').getDimensions().height+20;		
		var maxTop = $('wrapper').getDimensions().height-basketHeight;
		var basketTop = $('basket').cumulativeOffset().top;		
		var windowHeight = window.innerHeight ? window.innerHeight : document.body.clientHeight;

		if(basketHeight > windowHeight) {

			if(basketTop+basketHeight < scrollOffset + windowHeight) {
				basket.setStyle({top: Math.min(maxTop,scrollOffset-minTop+windowHeight-basketHeight)+'px'});
			};

			if(basketTop > scrollOffset) {
				basket.setStyle({top: Math.max(0,scrollOffset-minTop)+'px'});
			};
		} else {
				basket.setStyle({top: Math.max(0,scrollOffset-minTop)+'px'});
		};
		
	},
	
	loader: function(){
		if(Element.visible(this.options.loader)){
			$(this.options.loader).hide();
			$(this.options.basket).show();
		}else{
			$(this.options.loader).show();	
			$(this.options.basket).hide();
		}
	},
	
	update: function(){
		new Ajax.Updater(this.options.basket, this.options.url.view, {
			evalScripts: true,
			
			onLoading: function(transport){
				this.loader();
			}.bind(this),
			
			onComplete: function(transport){
				this.loader();
				$$(this.options.buttons.remove).each(function(item, index){
					item.observe('click', function(event){
						this.remove(item.rel);
					}.bind(this));
				}.bind(this));
			}.bind(this)
		});
	},
	
	remove: function(id){
		new Ajax.Request(this.options.url.remove, {
			parameters:{
				item_id: id
			},
			onLoading: function(){
				
			}.bind(this),
			
			onComplete: function(transport){
				this.update();	
			}.bind(this)
		});
	},
	
	add: function(id){
		new Ajax.Request(this.options.url.add, {
			parameters:{
				item_id: id
			},
			onComplete: function(transport){
				this.update();	
			}.bind(this)
		});
	},
	
	minus: function(id){
		new Ajax.Request(this.options.url.minus, {
			parameters:{
				item_id: id
			},
			onComplete: function(transport){
				this.update();	
			}.bind(this)
		});
	},
	
	plus: function(id){
		new Ajax.Request(this.options.url.plus, {
			parameters:{
				item_id: id
			},
			onComplete: function(transport){
				this.update();	
			}.bind(this)
		});
	}	
});