Responder.create('addToFavourites', {
  initialize: function(element) {
    this.element = element;
  },

  onClickElement: function(event) {
    event.preventDefault();
    try          { window.external.AddFavorite(this.element.href, this.element.title); }
    catch(error) {}
  }
});

Responder.create('baskets', {
  initialize: function(container) {
    this.container  = container;
    this.createItem = document.getElementById('createItem');
  },
  
  onClickCreateItem: function(event) {
    event.preventDefault();    
    Page.formRequest(this.createItem.form, Fields.serialize(this.createItem.form), this.container); // replace existing #basket or append
  }
});

Responder.create('option', {
  initialize: function(element) {
    this.option = element;
  },
  
  onClickOption: function(event) {
    Page.request(this.option.form.action + '/new.json', 'GET', Fields.serialize(this.option.form), this.option.form);
  }
});


Responder.create('basket', {
  initialize: function(container) {
    this.container = container;
    this.assignByClass(container, 'roll closed button items');
  },
  
  onClickButton: function(event) {
    event.preventDefault();
    
    //Cookie.remove('basketState');
    if (this.closed) {
      Cookie.set('basketState', '', { path: '/' });
      this.removeClass(this.closed, 'closed');
    } else {
      Cookie.set('basketState', 'closed', { path: '/' });
      this.addClass(this.roll, 'closed');
    }
  } 
});

Responder.create('basketItem', {
  initialize: function(container) {
    this.assignByClass(container, 'removeItem increase decrease');
  },
  
  onClickIncrease: function(event) {
    event.preventDefault();
    Page.linkRequest(this.increase, 'PUT');
  },
  
  onClickDecrease: function(event) {
    event.preventDefault();
    Page.linkRequest(this.decrease, 'PUT');
  },
  
  onClickRemoveItem: function(event) {
    event.preventDefault();
    Page.linkRequest(this.removeItem, 'DELETE');
  }
});

Responder.create('update', {
  initialize: function(element) {
    this.update = element;
  },
  
  onClickUpdate: function(event) {
    event.preventDefault();
    Page.linkRequest(this.update, 'PUT');
  }
});


Responder.create('added', {
  initialize: function(element) {
    Cookie.set('basketState', '', { path: '/' });
    
    var effect  = new Fx.Opacity(element, { duration: 350 });
    effect.setStyle(element, 'opacity', 0);
    effect.custom(0, 1);
  }
});

Responder.create('removed', {
  initialize: function(element) {
    Page.Effects.fadeRemove(element);
  }
});

Responder.create('emptied', {
  initialize: function(element) {
    var effect = new Fx.Opacity(element, { duration: 350 });
    setTimeout(function() { effect.custom(1, 0) }, 350);
  }
});

Responder.create('submit', {
  initialize: function(element) {
    this.element = element;
    this.form    = Node.find(element, 'parentNode', function(node) { return Node.element(node, 'form') });
  },

  onClickElement: function(event) {
    event.preventDefault();
    this.form.submit();
  }
});

// From mootools
var Cookie = {
	set: function(key, value, options){
		options = base2.extend({
			domain: false,
			path: false,
			duration: 365
		}, options || {});
		value = escape(value);
		if (options.domain) value += "; domain=" + options.domain;
		if (options.path) value += "; path=" + options.path;
		if (options.duration){
			var date = new Date();
			date.setTime(date.getTime() + (options.duration * 86400000));
			value += "; expires=" + date.toGMTString();
		}
		document.cookie = key + "=" + value;
	},

	get: function(key){
		var value = document.cookie.match('(?:^|;)\\s*'+key+'=([^;]*)');
		return value ? unescape(value[1]) : false;
	},

	remove: function(key){
		this.set(key, '', {duration: -1});
	}
};


function detectSafari(){ 
if (navigator.appVersion.indexOf("Safari") != -1) 
   document.body.className += " safari"; 
} 

if (window.addEventListener) 
   window.addEventListener("load", detectSafari, false);