var Panier = (function () {
	var _PANIER_VALIDATION_URL = '/MaSelection/MesProduits.html';

	function initAddProduct() {
		$$(".add_product").each(function (link) {
			var idAct = parseInt(link.href.split("/").last());

			link.observe("click", function(event) {
				event.stop();
				new Ajax.Request(link.href + '/ajax/1', {
					method: 'get',
					requestHeaders: { 'Content-type':'application/json; charset=iso-8859-1' },
					onSuccess: function(transport) {
						if (idAct) {
							var response = transport.responseJSON;
							showModalBox(response.description);
							initPageAfterAddingProduct(response);
							//var mb_content_height = $("MB_content").getDimensions().height;
							//$("MB_window").setStyle({ "height": mb_content_height + "px" }); // :(
							var color = $("suggested_packs") ? 'white' : '#DCDCDC';
							$("MB_frame").setStyle({ "background": color });
						} else {
							window.location = _PANIER_VALIDATION_URL;
						}
					}
				});
			});
		});
	}

	function addProductFromModalBox(element) {
		var url;
		if (element.match("a")) {
			url = element.href;
		} else if (element.match("input")) {
			url = element.value;
		}

		new Ajax.Request(url + '/ajax/1/mb/1', {
			method: "get",
			onSuccess: function(transport) {
				var response = transport.responseJSON;
				var suggested_packs = $("suggested_packs");
				suggested_packs = suggested_packs ? suggested_packs : $("suggested_packs2");
				if (suggested_packs) {
					$('mb_wrapper').setStyle({overflowY: 'visible', maxHeight: '10000px'});
					var suggested_packs_left = $("suggested_packs_left");
					$("MB_window").addClassName("window_replaced");
					suggested_packs_left.addClassName("replaced");
					var description_box_height = $("description_box_top").getDimensions().height;
					$("MB_window").setStyle({"height": description_box_height + "px"});
					$("new_product").insert({"before": suggested_packs_left});
					$("new_product", "suggested_packs", "suggested_packs2", "small_bg", "profit").each(function (item) {
						if (item)
							item.remove();
					});
				}
				initPageAfterAddingProduct(response);
			}
		});
		// equivalent au event.stop()
		// <a ... onclick="return Panier.addProductFromModalBox(this);">...
		return false;
	}

	function addProductsFromCheckBox() {
		$$("#suggested_products input[type=checkbox]").each(function (checkBox) {
			if (checkBox.checked)
				addProductFromModalBox(checkBox);
		});
	}

	// url ajax ?
	function addProductsFromModalBoxFromCheckBox(button) {
		var id = button.id;
		if (id == "mb_continu") {
			addProductsFromCheckBox();
			Modalbox.hide();
			return false;
		} else if (id == "mb_finish") {
			var idProductsTab = [];
			$$("#suggested_products input[type=checkbox]").each(function (checkBox) {
				if (checkBox.checked) {
					// '/MaSelection/AddProposition?get=/idpp/9/act/add' -> 9
					var productId = checkBox.value.sub(/.*idpp\/(\d+).*/, function (match) {
						return match[1];
					});
					idProductsTab.push(productId);
				}
			});
			if (idProductsTab.size() > 0) {
				button.href = '/ModifSelection/AddProposition/Propositions/' + idProductsTab.join(',');
				//alert(button.href);
			}
		}
	}

	function initPageAfterAddingProduct(response) {
		$("panier").update(response.panier);
		$("panier_desc").update(response.panier_desc);
		initDeleteProduct();
		initTogglePanierDesc();
	}

	function initDeleteProduct() {
		$$("a.del").each(function (link) {
			var url = link.href;
			url += '/ajax/1';
			link.observe("click", function(event) {
				event.stop();
				new Ajax.Request(url, {
					method: "get",
					onSuccess: function(transport) {
						var response = transport.responseJSON;
						// il existe des dépendances (produits suggérés dans la mb)
						// sur le produit a effacer
						if (response.modalbox_products) {
							var q = "En supprimant ce produit, vous supprimerez aussi le(s) suivant(s) :\n\n";
							q += response.modalbox_products.join("\n").unescapeHTML();
							var b = confirm(q);
							if (b) {
								deleteProductWhithMb(url);
							}
						}
						initPageAfterDeletingProduct(response);
					}
				});
			});
		});
	}

	function initPageAfterDeletingProduct(response) {
		// page panier
		var panier = $("panier");
		if (panier)
			panier.update(response.panier);
		var panier_desc = $("panier_desc");
		if (panier_desc)
			panier_desc.update(response.panier_desc);
		if (response.is_empty) {
			togglePanierDesc();
		}
		initDeleteProduct();
		initTogglePanierDesc();
	}

	function deleteProductWhithMb(url) {
		url += "/force_sup/1";
		new Ajax.Request(url, {
			method: "get",
			onSuccess: function(transport) {
				initPageAfterDeletingProduct(transport.responseJSON);
			}
		});
	}

	// http://www.wildbit.com/labs/modalbox/
	// http://code.google.com/p/modalbox/wiki/MethodsReference
	function showModalBox(html) {
		var div = new Element('div', { 'id': 'mb_wrapper' }).update(html);
		div.setStyle({overflowY: 'scroll', maxHeight: (document.viewport.getHeight() - 70) + 'px'});
		Modalbox.show(div, {
			title: "Vous venez d'ajouter au panier l'article suivant :",
			overlayClose: false,
			transitions: false,
			autoFocusing: false,
			overlayOpacity: .3,
			width: 900
		});
		var leftCenter = Math.round(document.viewport.getWidth() / 2) - 450;
		// old widht 587px
		$("MB_window").setStyle({marginTop: "40px", width: "900px", height: "400px", left: leftCenter + 'px'});
	}

	function initTogglePanierDesc() {
		$$(".panier_toggle").each(function (button) {
			button.observe("click", togglePanierDesc);
		});
	}

	function togglePanierDesc(event) {
		event.stop();
		var panier_desc = $("panier_desc");
		if (panier_desc)
			panier_desc.toggle();
	}

	function initTogglePanierSideBar()
	{
		$$('.toggle_div').each(function (div) {
		  div.observe('click', function (event) {
			event.stop();
			var elementToToggle = div.next('div');
			var fxOptions = { duration: .5 };

			if (elementToToggle.visible()) {
			  new Effect.BlindUp(elementToToggle, fxOptions);
			  this.removeClassName('hover');
			  //this.setStyle({ backgroundImage: 'fleche-droite.gif' });
			} else {
			  new Effect.BlindDown(elementToToggle, fxOptions);
			  this.addClassName('hover');
			  //this.setStyle({ backgroundImage: 'fleche-en-bas.gif' });
			}
		  });
		});
	}

	function init() {
		//alert('init');
		initAddProduct();
		initDeleteProduct();
		initTogglePanierDesc();
		initTogglePanierSideBar();
	}

	return {
		"init": init,
		"addProductFromModalBox": addProductFromModalBox,
		"addProductsFromModalBoxFromCheckBox": addProductsFromModalBoxFromCheckBox
	}
})();

document.observe("dom:loaded", Panier.init);

