/**
 * Prepares hotels listing from search to be able to drag and drop to your cart (suitcase).
 *
 * @package    site
 * @author     Luis Merino <mail@luismerino.name>
 */
var ListingDragAndDrop = {
	
	drop_classname: 'drop',
	opacity: 0.8,
	maskStyles: {
		'opacity': 0.55,
		'background-color': '#fff',
		'background-position': 'center center',
		'background-repeat': 'no-repeat',
		'z-index': 999999
	},
	count: '#favorites',
	counter: 0,
	
	init: function(elements, drop){
		this.drop = drop;
		elements.addEvent('mousedown', this.process, true).setStyle('cursor', 'move');
		drop.addEvent('drop', this.onDrop, true);
		// Small suitcase submit buttons setup
		elements.each(function(el){
			var li = el.getParent();
			li.getElement('form.action-basket').addEvent('submit', function(event){
				event.preventDefault();
				ListingDragAndDrop.onDrop(li, true);
			}, true);
		});
	},
	
	process: function(event){
		var self = ListingDragAndDrop;
		var li = this.getParent();
		var clone = li.clone().addClass('item-dragging').setStyles({
			visibility: 'hidden',
			left: event.page.x - this.offsetWidth / 2,
			top: event.page.y - this.offsetHeight / 2
		})
		var id = li.id.match(/\:([^$]+)/)[1];
		clone.id = 'clone:' + id;
		clone.inject(document.body);
		clone.store('pos', li.getPosition());
		
		function easeAndDestroy() {
			if (clone.retrieve('dropped') === false) {
				var pos = clone.getPosition();
				new Fx.Morph(clone, {'duration': 200, 'onComplete': function(){
					self.drag.droppables = self.drag.element = self.drag.$events = null;
					clone.destroy();
					self.drag = clone = null;
				}}).start({
					'top': [pos.y, clone.retrieve('pos').y],
					'left': [pos.x, clone.retrieve('pos').x]
				});
			} else {
				self.drag.droppables = self.drag.element = self.drag.$events = null;
				clone.destroy();
				self.drag = clone = null;
			}
		}

		self.drag = new Drag.Move(clone, {
			droppables: [self.drop],
			onStart: function() {
				clone.setStyle('opacity', self.opacity);
			},
			onComplete: easeAndDestroy,
			onCancel: easeAndDestroy,
			onDrop: function(el, overed) {
				clone.store('dropped', false);
				if (overed) {
					overed.removeClass(self.drop_classname).fireEvent('drop', [el]);
					clone.store('dropped', true);
				}
			},
			onEnter: function(el, overed) {
				overed.addClass(self.drop_classname);
			},
			onLeave: function(el, overed) {
				overed.removeClass(self.drop_classname);
			},
			preventDefault: true
		});
		self.drag.start(event);
	},
	
	onDrop: function(el, original){		
		var self = ListingDragAndDrop;
		
		if (self.counter > 9 || (document.id('favorites').get('text').toInt() >= 10)) {
			return SqueezeDialog.open(Vadingo.translationManager._('Sorry, you cannot add more than 10 items to your suitcase', 'application'));
		}
		
		var count = $(self.count) || $$(self.count)[0];
		var number = count.getElement('cufontext').get('text').toInt();
		count.empty().appendText(++number);
		Cufon.replace(count);
		
		// -----
		if (!original) {
			var id = el.id.match(/\:([^$]+)/)[1];
			var original = document.id("lodging:" + id);
		} else {
			var original = el;
		}

		// var mask = new Mask(original, {
		// 			inject: { where: 'top', target: original },
		// 			style: $extend(self.maskStyles, {'background-image': 'url(assets/images/spinner-big.gif)'})
		// 		}).show();
		
		original.getElement('form.action-basket').get('send', {
		'onRequest': function(){
			original.set('spinner', {message: Vadingo.translationManager._('One moment…', 'application')}).spin();
		},
		"onComplete": function(){
			original.get('spinner').content.destroy();
		},
		'onFailure': function(){
			original.unspin();
		}}).send();
		
		self.counter++;
	}
	
};