(function($) {
	$.fn.rental = function(options) {
		// extend and save the default options
		var opts = $.extend({}, $.fn.rental.defaults, options);

		// $.Jookie.Delete("rental");
		$.Jookie.Initialise("rental", -1);
		makeOrderList();
		
		$("li a.rentalArrow").draggable({
			revert: 'invalid',
			helper: 'clone',
			cursor: 'move'
		});
		$(".rentalDropzone div").droppable({
			accept: 'li a.rentalArrow',
			drop: function(ev, ui) {
				updateBasket(ui);
			}
		});
		
		$(".rentalSidebar a.deleteOrder").live('click', function(){
			var id = $(this).parent("li").metadata().id;
			deleteItem(id);
			countItems();
		});
		
		$(".rentalSidebar input").live('keyup', function(){
			var id = $(this).parent("li").metadata().id;
			var amount = $(this).attr("value");
			updateAmount(id, amount);
			countItems();
			$(this).parent("li").find("span").effect('highlight', { color: "#E28A33" });
		});
		
		$(".requestFormList").requestFormList();
		
		$("form").submit(function(){
			if ($("#RentalCategoryName").attr("value") == "") {
				alert("Please enter your name.")
				return false;
			}
			else if ($("#RentalCategoryPhone").attr("value") == "") {
				alert("Please enter your phone number.")
				return false;
			}
			else if ($("#RentalCategoryEmail").attr("value") == "") {
				alert("Please enter your e-mail address.")
				return false;
			}
			else {
				return true;
			}
		});
		$(".rentalOpenImage").each(function(){
			var href = $(this).attr("href");
			var id = $(this).parent('li').find(".rentalArrow").metadata().id;
			var left = 96;
			var top = $(this).offset().top - 203;
			
			$("#content")
				.append('<img class="rentalImageLarge" id="rentalImageLarge-'+id+'" src="' + href + '" style="top: '+top+'px; left:'+left+'px" />');
		
			$(this)
				.removeAttr("href")
				.click(function(){
					if (!$(this).hasClass("imgOpen")) {
						$(".rentalOpenImage").removeClass("imgOpen");
						$(this).addClass("imgOpen");
						$(".rentalImageLarge").hide();
						$("#rentalImageLarge-"+id).show();
					}
					else {
						$(this).removeClass("imgOpen");
						$(".rentalImageLarge").hide();
					}
				})
		});
		
		$(".rentalImageLarge").live("click", function(){
			$(this).hide();
			$(".rentalOpenImage").removeClass("imgOpen");
		});
		
		return this;
	}
	
	$.fn.requestFormList = function(){
		var $list = $(this);
		var orders = $.Jookie.Get("rental", "orders");
		if(orders != undefined) {
			for(var id in orders) {
				var id = orders[id]['id'];
				var name = orders[id]['name'];
				var amount = orders[id]['amount'];
				
				var newHtml = '<li>'
					+ '<span>' + amount + '</span>'
					 + name
					+ '<input type="hidden" name="data[RentalItem][]" value="' + name + ': ' + amount + ' Stk." />'
					+ '</li>';
				$list.append(newHtml);
			}
			var totalHtml = '<li class="requestFormTotal"><span class="listTotal">0</span>Total</li>';
			$list.append(totalHtml);
		}
		countItems();
		return this;
	}
	
	function makeOrderList() {
		var orders = $.Jookie.Get("rental", "orders");
		if(orders != undefined) {
			for(var id in orders) {
				var id = orders[id]['id'];
				var name = orders[id]['name'];
				var amount = orders[id]['amount'];
				
				var newHtml = '<li id="orderItem-' + id + '" class="{id: ' + id + '}">'
					+ '<span>' + name + '</span>'
					+ '<a class="deleteOrder"></a>'
					+ '<input class="orderAmount" value="' + amount + '" />'
					+ '</li>'
				
				$(".rentalOrders").append(newHtml);
			}
		}
		countItems();
	}
	
	function updateBasket(ui) {
		$helper = ui.helper;
		$item = ui.draggable;
		$helper.fadeOut(function(){
			
			var id = $item.metadata().id;
			var name = $item.metadata().name;
			
			var orders = $.Jookie.Get("rental", "orders");
			if(orders == undefined) {
				var orders = new Object();
			}
			if (orders[id] == undefined) {
				// build object
				var item = new Object();
				item['id'] = id;
				item['name'] = name;
				item['amount'] = 1;
				
				orders[id] = item;
				
				$.Jookie.Set("rental", 'orders', orders);
				
				var newHtml = '<li id="orderItem-' + id + '" class="{id: ' + id + '}">'
					+ '<span>' + name + '</span>'
					+ '<a class="deleteOrder"></a>'
					+ '<input class="orderAmount" value="1" />'
					+ '</li>'
				$(".rentalOrders").append(newHtml);
				$("#orderItem-"+id).find("span").effect('highlight', { color: "#E28A33" });
			}
			else {
				alert("Item is already in the basket.");
			}
			countItems();
		});
		
		
	}
	
	function countItems() {
		var orders = $.Jookie.Get("rental", "orders");
		if(orders == undefined) {
			var orders = new Object();
			$(".listAmount").text(0);
		}
		else {
			var listAmount = new Number();
			for(var id in orders) {
				var amount = orders[id]['amount'];
				listAmount += Number(amount);
			}
			$(".listTotal").text(listAmount);
		}
	}
	
	function deleteItem(id) {
		var orders = $.Jookie.Get("rental", "orders");
		$.Jookie.Unset("rental", "orders");
		delete orders[id];
		$("#orderItem-"+id).remove();
		countItems();
		orders = $.Jookie.Set("rental", "orders", orders);
	}
	
	function updateAmount(id, amount) {
		var orders = $.Jookie.Get("rental", "orders");
		$.Jookie.Unset("rental", "orders");
		orders[id]['amount'] = amount;
		countItems();
		$.Jookie.Set("rental", "orders", orders);
	}
	
	/**
	 * Default settings for the jQuery plugin
	 */	
	$.fn.rental.defaults = {
	}; 
}(jQuery));

