
var Order = {};

Order.List = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(url, options) {
		
		// Définition des parametres
		this.url				= url;
		this.urlSelection		= $globals['url_ajax_item_selection'];
		this.idName				= "item";
		this.itemClass			= "item";
		this.imgClass			= "illus";
		this.arrayEffect		= new Array();
		this.currentDetailRow	= null;
		this.currentDownRow		= null;
		this.currentRow			= null;
		this.currentItem		= null;
		this.isBlocked			= false;
		this.arrayOpenItem		= new Array();
		this.options			= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}

		var obj = this;

		$$("." + this.itemClass, '.' + this.itemClass + '-detail').each(function(el) {
			Event.observe(el, 'mouseenter', obj.itemOver.bindAsEventListener(obj, el));
			Event.observe(el, 'mouseleave', obj.itemOut.bindAsEventListener(obj, el));
			
			var img = el.select('.' + obj.imgClass);
			img = img[0];
			var form = $(el.id + '-form');
			var sel = $(el.id + '-sel');

			if (sel)
				Event.observe(sel, 'click', obj.itemSelectionClick.bindAsEventListener(obj, el));
			if (img)
				Event.observe(img, 'click', obj.itemClick.bindAsEventListener(obj, el));
			if (form)
				Event.observe(form, 'submit', obj.submitForm.bindAsEventListener(obj, el));
		});

	}, // fin du constructeur
	
	itemOver : function(event, o)
	{
		var top = $(o.id + "-top");
		var bottom = $(o.id + "-bottom");
		var name = $(o.id + "-name");
		var selection = $(o.id + "-sel");
		if (top) {
			if (this.arrayEffect[top.id])
				this.arrayEffect[top.id].cancel();
			this.arrayEffect[top.id] = Effect.Appear(top, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + top.id } } );	
		}
		if (bottom) {
			if (this.arrayEffect[bottom.id])
				this.arrayEffect[bottom.id].cancel();
			this.arrayEffect[bottom.id] = Effect.Appear(bottom, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + bottom.id } } );
		}
		if (name) {
			if (this.arrayEffect[name.id])
				this.arrayEffect[name.id].cancel();
			this.arrayEffect[name.id] = Effect.Fade(name, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + name.id } } );
		}
		if (selection && selection.className.indexOf('-on') == -1) {
			if (this.arrayEffect[selection.id])
				this.arrayEffect[selection.id].cancel();
			this.arrayEffect[selection.id] = Effect.Appear(selection, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + selection.id } } );
		}
	},
	
	itemOut: function(event, o)
	{
		var top = $(o.id + "-top");
		var bottom = $(o.id + "-bottom");
		var name = $(o.id + "-name");
		var selection = $(o.id + "-sel");
		if (top) {
			if (this.arrayEffect[top.id])
				this.arrayEffect[top.id].cancel();
			this.arrayEffect[top.id] = Effect.Fade(top, { duration: 0.1, queue: { position: 'end', scope: 'scop-' + top.id } } );
		}
		if (bottom) {
			if (this.arrayEffect[bottom.id])
				this.arrayEffect[bottom.id].cancel();
			this.arrayEffect[bottom.id] = Effect.Fade(bottom, { duration: 0.1, queue: { position: 'end', scope: 'scop-' + bottom.id } } );
		}
		if (name) {
			if (this.arrayEffect[name.id])
				this.arrayEffect[name.id].cancel();
			this.arrayEffect[name.id] = Effect.Appear(name, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + name.id } } );
		}
		if (selection && selection.className.indexOf('-on') == -1) {
			if (this.arrayEffect[selection.id])
				this.arrayEffect[selection.id].cancel();
			this.arrayEffect[selection.id] = Effect.Fade(selection, { duration: 0.1, queue: { position: 'end', scope: 'scop-' + selection.id } } );
		}
	},
	
	itemClick: function(event, item)
	{
		this.openItemDetail(item);
	},
	
	itemSelectionClick: function(event, item)
	{
		var id = item.readAttribute('iid');
		var fav = event.findElement();
		
		Effect.Fade(item, {to: 0.5, duration: 0.25});
		
		var url = this.urlSelection.replace("[id]", id);
		
		new Ajax.Request(url, {
			method: 'get',
			onSuccess: function(transport) {
				var data = transport.responseText.evalJSON();
				
				Effect.Appear(item, {from: 0.5, duration: 0.25});
				
				if (data.result == 1) {					
					if (fav.className.indexOf("-on") == -1) {
						fav.className = fav.className + "-on";
						fav.title = 'Retirer des favoris';
					} else {
						fav.className = fav.className.replace("-on", "");
						fav.title = 'Ajouter ce produit en favori';
					}
				} else {
					displayLogin();
				}
			}
		} );
	},
	
	openItemDetail: function(item)
	{
		var id = item.readAttribute('iid');
		var row = item.readAttribute("row");
		var url = this.url.replace('[id]', id);
		var idName = item.id.replace('-' + id, '');
		var detailRow = $(idName + '-detail-' + row);
		var downRow = $(idName + '-down-' + row);

		if (detailRow) {

			if (this.currentItem == item) {
				this.closeItemDetail();
				return;	
			}
			
			if (!this.isBlocked) {
				this.isBlocked = true;
				
				Effect.Fade(item, {to: 0.5, duration: 0.25});
				
				if (this.currentDetailRow) {
					this.closeItemDetail(item);
					return;
				}
				
				this.currentItem = item;		
	
				var obj = this;
			
				detailRow.writeAttribute('iid', id);
			
				new Ajax.Request(url + '&tt=' + new Date().getTime(), {
					method: 'get',
					onSuccess: function(transport) {					
						detailRow.update(transport.responseText);
						initPage();
						initQuantity();
						
						var form = $('item-detail-' + id + '-form');
						Event.observe(form, 'submit', obj.submitForm.bindAsEventListener(obj, detailRow));
						
						var sel = $('item-detail-' + id + '-sel');
						Event.observe(sel, 'click', obj.itemSelectionClick.bindAsEventListener(obj, detailRow));
						
						Effect.Appear(item, {from: 0.5, duration: 0.25});
						if (obj.currentDetailRow) {
							Effect.Appear(detailRow, {from: 0.5, duration: 0.25});
						} else {
							if (row != obj.currentRow) {
								if (downRow) {
									downRow.hide();
									obj.currentDownRow = downRow;
								}
								Effect.BlindDown(detailRow, { duration: 0.5, transition: Effect.Transitions.Circ.easeInOut } );	
							} else {
								Effect.Appear(detailRow, {from: 0.5, duration: 0.25});
							}
						}
						obj.isBlocked = false;
						obj.currentDetailRow = detailRow;
						obj.currentRow = row;
					}
				});
			}
		} else {
			document.location = url;
		}
	},
	
	closeItemDetail: function(item)
	{
		var obj = this;
		var row;
		if (item)
			row = item.readAttribute("row")
	
		if (this.currentRow != row) {
			Effect.BlindUp(this.currentDetailRow, { duration: 0.25, afterFinish: function() {
				obj.isBlocked = false;
				if (obj.currentDownRow) {
					obj.currentDownRow.show();
					obj.currentDownRow = null;
				}
				if (item)
					obj.openItemDetail(item);
				else
					obj.currentRow = null;
			} } );
		} else {
			Effect.Fade(this.currentDetailRow, {to: 0.5, duration: 0.25, afterFinish: function() {
				obj.isBlocked = false;
				if (item)
					obj.openItemDetail(item);
				else
					obj.currentRow = null;
			} });
		}
		this.currentDetailRow = null;
		this.currentItem = null;
	},
	
	submitForm: function(event, item)
	{
		Event.stop(event);
		var id = item.readAttribute('iid');
		var row = this.currentRow;
		var idName = item.id.replace('-' + id, '').replace('-' + row, '');
		var form = item.select("form")[0];			
		var qty = form.select(".qty")[0];
		
		Effect.Fade(item, {to: 0.5, duration: 0.25} );
		
		var obj = this;
		form.request( {
			onComplete: function(transport) {
				//alert(transport.responseText);
				var data = transport.responseText.evalJSON();
				Effect.Appear(item, {from: 0.5, duration: 0.25} );
				
				if (qty)
					qty.value = '01';
				
				if (data.result > 0) {
					if (data.result == 2) {
						var composition = new Order.ItemComposition(data.id_order_item);
					} else		
						if (typeof(caddy) != "undefined")
							caddy.updateOrder(data.order);
						else
							document.location = $globals['url_order'];	
									
				} else {
					displayLogin(document.location);
				}
			}
		});
	}
	
} ); // fin de Order.List

Order.CaddyTop = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(caddyId, options) {
		
		// Définition des parametres
		this.caddyId				= caddyId;
		this.caddyShadowId			= "shop-up-shadow";
		this.caddy					= null;
		this.caddyPe				= null;
		this.caddyInit				= 0;
		this.caddyPos				= 0;
		this.caddyPosLoop			= 0;
		this.caddyShadow			= null;
		this.caddyShadowAlpha		= 0;
		this.caddyShadowAlphaLoop	= 0;
		this.hl						= null;
		this.options				= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}

		var obj = this;

		this.caddy = $(this.caddyId);
		this.caddyShadow = $(this.caddyShadowId);
		var posP = this.caddy.positionedOffset();
		this.caddyInit = posP[1];
		this.caddyPos = this.caddyInit;
		this.caddyPosLoop = this.caddyPos;
		this.caddyPe = new PeriodicalExecuter(this.caddyLoop.bind(this), 0.01);

	}, // fin du constructeur
	
	caddyLoop: function()
	{
		var posS = document.viewport.getScrollOffsets();
		
		var h = $('container-desires') && $('container-desires').visible() ? $('container-desires').getHeight() : 0;
		var pos = this.caddyInit + h;
		
		if (posS[1] > this.caddyInit) {
			this.caddyPos = posS[1];
			this.caddyShadowAlpha = 1;
			if (!this.caddyShadow.visible())
				this.caddyShadow.show();
			this.caddy.style.zIndex = 16;
		} else {
			this.caddyPos = pos;
			this.caddyShadowAlpha = 0;
			this.caddy.style.zIndex = 5;
		}
	
		this.caddyPosLoop = this.caddyPosLoop + (this.caddyPos - this.caddyPosLoop) / 3;
		this.caddyShadowAlphaLoop = this.caddyShadowAlphaLoop + (this.caddyShadowAlpha - this.caddyShadowAlphaLoop) / 10;
		if (!$globals['is_mobile']) {
			this.caddy.style.top = Math.round(this.caddyPosLoop) + "px";
			this.caddyShadow.setOpacity(this.caddyShadowAlphaLoop);
		} else {
			this.caddy.style.top = Math.round(this.caddyPos) + "px";
			this.caddyShadow.setOpacity(this.caddyShadowAlpha);
		}
		//$('debug').update(this.caddy.style.top);
	},
	
	updateOrder: function(data)
	{
		var header = new Order.Header();
		header.updateOrder(data);
		
		if (this.hl)
			this.hl.cancel();
		this.hl = new Effect.Highlight(this.caddy, { startcolor: "#e0f0b2", endcolor: "#ffffff", restorecolor: "#ffffff" });
	}
	
} ); // fin de Order.CaddyTop

Order.Caddy = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(idCaddy, options) {
		
		// Définition des parametres
		this.urlContent				= $globals['url_ajax_order_items'];
		this.urlDeleteItem			= $globals['url_ajax_delete_item'];
		this.urlChangeCutlery		= $globals['url_ajax_change_cutlery'];
		this.urlContentPoints		= $globals['url_ajax_order_points'];
		this.idCaddy				= idCaddy;
		this.idPoints				= 'points-container';
		this.idForm					= 'form-order-items';
		this.idFormPoints			= 'form-points';
		this.container				= null;
		this.containerPoints		= null;
		this.hl						= null;
		this.openCompositionId		= null;
		this.options				= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}

		var obj = this;

		if ($(this.idCaddy)) {
			this.container = $(this.idCaddy);
			this.containerPoints = $(this.idPoints);
			this.display();
		}

	}, // fin du constructeur
	
	display: function()
	{
		var obj = this;

		if (this.container.innerHTML != "")
			Effect.Fade(this.container, {to: 0.5, duration: 0.25} );

		new Ajax.Request(this.urlContent + '?tt=' + new Date().getTime(), {
			method: 'get',
			onSuccess: function(transport) {
				if (obj.container.innerHTML == "") {
					obj.container.hide();
					Effect.Appear(obj.container, {duration: 0.25});
				} else {
					Effect.Appear(obj.container, {from: 0.5, duration: 0.25});
				}
				
				obj.container.update(transport.responseText);
				
				obj.configure();
			}
		} );

	}, // display
	
	displayPoints: function()
	{
		var obj = this;

		if (this.containerPoints.innerHTML != "")
			Effect.Fade(this.containerPoints, {to: 0.5, duration: 0.25} );

		new Ajax.Request(this.urlContentPoints + '?tt=' + new Date().getTime(), {
			method: 'get',
			onSuccess: function(transport) {
				if (obj.containerPoints.innerHTML != "") {
					obj.containerPoints.hide();
					Effect.Appear(obj.containerPoints, {duration: 0.25});
				} else {
					Effect.Appear(obj.containerPoints, {from: 0.5, duration: 0.25});
				}
				
				obj.containerPoints.update(transport.responseText);
				
				obj.configurePoints();
			}
		} );
	}, // display
	
	configure: function()
	{
		var obj = this;
		$(this.idForm).select('.btn-plus', '.btn-minus').each( function(el) {
			Event.stopObserving(el);
			Event.observe(el, 'click', obj.quantityChange.bindAsEventListener(obj));
		} );
		$(this.idForm).select('.qty').each( function(el) {
			Event.stopObserving(el);
			Event.observe(el, 'blur', obj.quantityChange.bindAsEventListener(obj));
		} );
		$(this.idForm).select('.delete').each( function(el) {
			Event.stopObserving(el);
			Event.observe(el, 'click', obj.deleteItem.bindAsEventListener(obj));
		} );
		$(this.idForm).select('.composition').each( function(el) {
			Event.stopObserving(el);
			Event.observe(el, 'click', obj.itemComposition.bindAsEventListener(obj));
		} );
		var form = $(this.idForm);
		if (form)
			Event.observe(form, 'submit', obj.submitForm.bindAsEventListener(obj));
			
		Event.observe('nb_cutlery', 'change', obj.changeCutlery.bindAsEventListener(obj));
		
		if ($(this.idForm).select('.delete').size() == 0)
			document.location = $globals['url_order'];
		
		this.displayPoints();
		
	}, // configure
	
	configurePoints: function()
	{
		var obj = this;
		var form = $(this.idFormPoints);
		if (form)
			Event.observe(form, 'submit', obj.submitFormPoints.bindAsEventListener(obj));
	}, // configurePoints
	
	deleteItem: function(event)
	{
		var obj = this;
		var el = event.findElement();
		var id = el.id.replace(el.className, "");
		
		Effect.Fade(this.container, {to: 0.5, duration: 0.25} );
		
		new Ajax.Request(this.urlDeleteItem.replace("[id]", id), {
			method: 'get',
			onSuccess: function(transport) {
				obj.display();
			}
		} );
	}, // deleteItem
	
	itemComposition: function(event)
	{
		var obj = this;
		var el = event.findElement();
		var id = el.id.replace(el.className, "");
		
		var composition = new Order.ItemComposition(id);

	}, // itemComposition
	
	quantityChange: function(event)
	{
		var el = event.findElement();
		var id = el.id.replace(el.className, "");
		var input = $('qty' + id);
		var form = $(this.idForm);
	
		switch (el.className) {
			case 'btn-plus':
				input.value = parseFloat(input.value) + 1;
			break;	
			case 'btn-minus':
				input.value = parseFloat(input.value) - 1;
			break;
		}
		input.value = parseInt(input.value);
		if (isNaN(input.value))
			input.value = 1;
		if (input.value <= 0 && !form)
			input.value = 1;
		
		if ($('composition' + id) && input.value > 0)
			this.openCompositionId = id;
		
		if (input.value < 10)
			input.value = "0" + input.value;
		
		if (this.hl)
			this.hl.cancel();
		this.hl = new Effect.Highlight(input, { queue: { position: 'end', scope: 'highlight', limit: 1 } } );
		
		this.submitForm(null);	
		
	}, // quantityChange
	
	submitForm: function(event)
	{
		if (event)
			Event.stop(event);

		var form = $(this.idForm);
		
		Effect.Fade(this.container, {to: 0.5, duration: 0.25} );
		
		var obj = this;
		form.request( {
			onComplete: function(transport) {
				obj.container.update(transport.responseText);
				Effect.Appear(obj.container, {from: 0.5, duration: 0.25} );
				obj.configure();
				
				if (obj.openCompositionId) {
					var composition = new Order.ItemComposition(obj.openCompositionId);
					obj.openComposition = null;
				}
			}
		});
	}, // submitForm
	
	submitFormPoints: function(event)
	{
		if (event)
			Event.stop(event);

		var form = $(this.idFormPoints);
		
		Effect.Fade(this.containerPoints, {to: 0.5, duration: 0.25} );
		
		var obj = this;
		form.request( {
			onComplete: function(transport) {
				//alert(transport.responseText);
				var data = transport.responseText.evalJSON();
				
				switch (data.result) {
					case -1:
						$globals['popup-error'] = new Display.Popup( {
							mode: 'div',
							url: $globals['url_ajax_promo_exists'],
							divId: 'div-popup',
							classDiv: 'popcontent',
							loadingHTML: $globals['lang_loading'],
							onFinish: initPage
						} );
					break;
				}
				
				obj.display();
			}
		});
	}, // submitFormPoints
	
	changeCutlery: function(event)
	{
		var obj = this;
		var el = event.findElement();
		
		Effect.Fade(this.container, {to: 0.5, duration: 0.25} );
		
		new Ajax.Request(this.urlChangeCutlery.replace("[nb]", el.value), {
			method: 'get',
			onSuccess: function(transport) {
				obj.display();
			}
		} );
	}, // changeCutlery
	
	updateOrder: function(data)
	{
		this.display();
		var header = new Order.Header();
		header.updateOrder(data);
	}
	
} ); // fin de Order.Caddy

Order.PromoBox = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(idBox, options) {
		
		// Définition des parametres
		this.urlContent				= $globals['url_ajax_promo_box'];
		this.idBox					= idBox;
		this.idScroller				= 'promobox-scroller';
		this.idForm					= 'promobox-form';
		this.container				= null;
		this.scroller				= null;
		this.options				= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}

		var obj = this;

		if ($(this.idBox)) {
			this.container = $(this.idBox);
			this.display();
		}

	}, // fin du constructeur
	
	display: function()
	{
		var obj = this;

		if (this.container.innerHTML != "")
			Effect.Fade(this.container, {to: 0.5, duration: 0.25} );

		new Ajax.Request(this.urlContent + '?tt=' + new Date().getTime(), {
			method: 'get',
			onSuccess: function(transport) {
				if (obj.container.innerHTML == "") {
					obj.container.hide();
					Effect.Appear(obj.container, {duration: 0.25});
				} else {
					Effect.Appear(obj.container, {from: 0.5, duration: 0.25});
				}
				obj.container.update(transport.responseText);
				initLinks();
				obj.configure();
			}
		} );
	}, // display
	
	configure: function()
	{
		var obj = this;	
		if ($(this.idScroller)) {	
			this.scroller = new Display.Scroller(this.idScroller, {
				autoStart: false,
				itemClassName: 'promobox-item',
				colWidth: 450,
				pagination: false,
				idBtnPrev: 'promobox-scroller-prev',
				idBtnNext: 'promobox-scroller-next',
				duration: 1.0,
				timerDuration: 5,
				transitionMode: 'move',
				transition: Effect.Transitions.Quint.easeInOut
			} );
			this.scroller.onChange = this.change.bind(this);
			this.scroller.start();
		}
		if ($(this.idForm))
			Event.observe(this.idForm, 'submit', this.submitForm.bindAsEventListener(this));
	}, // configure
	
	change: function()
	{
		var obj = this;
		$('promobox-pid').value = this.scroller.currentItem.readAttribute('p_pid');
		$('promobox-iid').value = this.scroller.currentItem.readAttribute('p_iid');
		if (this.scroller.currentItem.readAttribute('p_text') != $('promobox-text').innerHTML) {
			Effect.Appear('promobox-text', { from: 0, duration: 0.5 } );
			$('promobox-text').update(this.scroller.currentItem.readAttribute('p_text'));
		}
		$('promobox-info').update(this.scroller.currentItem.readAttribute('p_info'));
		Effect.Appear('promobox-name', { from: 0, duration: 0.5 } );
		$('promobox-name').update(this.scroller.currentItem.readAttribute('p_item'));
		
		Effect.Appear('promobox-price', { from: 0, duration: 0.5 } );
		$('promobox-price-item').update(this.scroller.currentItem.readAttribute('p_price_item'));
		$('promobox-price-promotion').update(this.scroller.currentItem.readAttribute('p_price'));		
	}, // change
	
	submitForm: function(event)
	{
		var obj = this;
		Event.stop(event);
		
		var div = $(this.idScroller);
		var form = $(this.idForm);
		
		Effect.Fade(div, {to: 0.5, duration: 0.25} );

		form.request( {
			onComplete: function(transport) {
				var data = transport.responseText.evalJSON();
				Effect.Appear(div, {from: 0.5, duration: 0.25} );
				
				if (data.result > 0) {
					if (data.result == 2) {
						var composition = new Order.ItemComposition(data.id_item);
					} else {
						if (typeof(caddy) != "undefined")
							caddy.updateOrder(data.order);
						else
							document.location = $globals['url_order'];	
					}					
				} else {
				
					switch (data.result) {							
						case 0:
							displayLogin(document.location);
						break;
						case -1:
							$globals['popup-error'] = new Display.Popup( {
								mode: 'div',
								url: $globals['url_ajax_promo_exists'] + '?id_item=' + data.id_item + '&qty=' + data.quantity + '&id_promotion=' + data.id_promotion,
								divId: 'div-popup',
								classDiv: 'popcontent',
								loadingHTML: $globals['lang_loading'],
								onFinish: initPage
							} );
						break;
						case -3:
							$globals['popup-error'] = new Display.Popup( {
								mode: 'div',
								url: $globals['url_ajax_error_promo_price'] + '?id_item=' + data.id_item + '&id_promotion=' + data.id_promotion,
								divId: 'div-popup',
								classDiv: 'popcontent',
								loadingHTML: $globals['lang_loading'],
								onFinish: initPage
							} );
						break;
					}
				}
			}
		});
	}, // submitForm
	
	force: function(id_item, qty, id_promotion)
	{
		var obj = this;
		
		var div = $(this.idScroller);
		var form = $(this.idForm);
		
		Effect.Fade(this.container, {to: 0.5, duration: 0.25} );
		
		$globals['popup-error'].close();
		
		var url = $globals['url_ajax_promo_force'] + '?id_item=' + id_item + '&qty=' + qty + '&id_promotion=' + id_promotion;
		
		new Ajax.Request(url + '?tt=' + new Date().getTime(), {
			method: 'get',
			onSuccess: function(transport) {
				var data = transport.responseText.evalJSON();
				if (obj.container.innerHTML == "") {
					obj.container.hide();
					Effect.Appear(obj.container, {duration: 0.25});
				} else {
					Effect.Appear(obj.container, {from: 0.5, duration: 0.25});
				}
				
				if (typeof(caddy) != "undefined")
					caddy.updateOrder(data.order);
				else
					document.location = $globals['url_order'];
				
			}
		} );
	}
} ); // fin de Order.PromoBox

Order.Header = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(options) {
		
		// Définition des parametres
		this.strOrderCount			= "[nb] article[s]";
		this.options				= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}
	}, // fin du constructeur
	
	updateOrder: function(data)
	{
		var str = this.strOrderCount.replace("[nb]", data.nb_item).replace("[s]", (data.nb_item > 1 ? "s" : ""));
		$('header-item-count').update(str);	
		if ($('order-item-count'))
			$('order-item-count').update(str);
		if ($('order-price-total'))
			$('order-price-total').update(number_format(data.price_total, 2, ',', ' ') + ' €');
	} // updateOrder

} ); // fin de Order.Header


Order.ItemComposition = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(id, options) {
		
		// Définition des parametres
		this.urlContent				= $globals['url_ajax_item_composition'];
		this.idOrderItem			= id;
		this.idDiv					= 'div-composition';
		this.classDiv				= 'popcomposition';
		this.idForm					= 'item-composition-form';
		this.itemClass				= 'item-composition';
		this.arrayEffect			= new Array();
		this.popup					= null;
		this.options				= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}

		var obj = this;
		this.display();

	}, // fin du constructeur
	
	display: function()
	{
		var obj = this;

		this.popup = new Display.Popup( {
			mode: 'div',
			url: this.urlContent.replace('[id]', this.idOrderItem),
			divId: this.idDiv	,
			classDiv: this.classDiv,
			loadingHTML: $globals['lang_loading'],
			onFinish: this.configure.bind(this)
		} );
	}, // display
	
	configure: function()
	{
		var obj = this;	
				
		$$("." + this.itemClass).each(function(el) {
			Event.observe(el, 'mouseenter', obj.itemOver.bindAsEventListener(obj, el));
			Event.observe(el, 'mouseleave', obj.itemOut.bindAsEventListener(obj, el));
		});
		
		if ($(this.idForm)) {
			Event.observe(this.idForm, 'submit', this.submitForm.bindAsEventListener(this));
			
			$(this.idForm).select('.btn-plus', '.btn-minus').each( function(el) {
				Event.stopObserving(el);
				Event.observe(el, 'click', obj.quantityChange.bindAsEventListener(obj));
			} );
		}
		
		var resultArray = this.manageQuantities();
		resultArray.each(this.resetQuantities.bind(this));
	}, // configure
	
	quantityChange: function(event)
	{
		var el = event.findElement();
		var input = $(el.readAttribute('input'));
		var form = $(this.idForm);
		var prevValue = input.value;
		switch (el.className) {
			case 'btn-plus':
				input.value = parseFloat(input.value) + 1;
			break;	
			case 'btn-minus':
				input.value = parseFloat(input.value) - 1;
			break;
		}
		input.value = parseInt(input.value);
		if (isNaN(input.value))
			input.value = 1;
		if (input.value < 0)
			input.value = 0;
		
		if (input.value < 10)
			input.value = "0" + input.value;

		var resultArray = this.manageQuantities();

		if (input.name == "qty-item") {
			resultArray.each(this.resetQuantities.bind(this));
		} else {			
			if (resultArray.length > 0)
				input.value = prevValue;
			else
				this.hl = new Effect.Highlight(input, { queue: { position: 'end', scope: 'highlight', limit: 1 } } );
		}

	}, // quantityChange
	
	manageQuantities: function()
	{
		var resultArray = new Array();
		
		var qtyBase = parseFloat($('qty-item-' + this.idOrderItem).value);
		
		$(this.idForm).select('input.qty').each( function(el) {
			if (el.readAttribute('group') == null && el.readAttribute('group') != 0) {
				var idGroup = el.id.replace("sum-composition-group-", "");
				var t = $('total-composition-group-' + idGroup);
				var q = $('qty-composition-group-' + idGroup);
				var qtyGroup = parseFloat(q.value);
				t.value = qtyBase * qtyGroup;
			}
		} );
		
		$(this.idForm).select('input.qty').each( function(el) {
			if (el.readAttribute('group') == null && el.readAttribute('group') != 0) {
				var idGroup = el.id.replace("sum-composition-group-", "");
				var c = $('composition-group-' + idGroup);
				var t = $('total-composition-group-' + idGroup);
				var qtyTotal = parseFloat(t.value);
				var total = 0;
				
				c.select('input.qty').each( function(el2) {
					var value = parseFloat(el2.value);
					total += value;			
				} );
				
				if (total > qtyTotal) {
					resultArray.push(idGroup);
				} else				
					el.value = total;
			}
		} );
		return resultArray;
	}, // manageQuantities
	
	resetQuantities: function(idGroup)
	{
		var container = $('composition-group-' + idGroup);
			
		container.select('input.qty').each( function(el) {
			el.value = "00";
			this.hl = new Effect.Highlight(el, { queue: { position: 'end', scope: 'highlight', limit: 1 } } );	
		} );
		
		this.manageQuantities();
	}, // resetQuantities
	
	itemOver : function(event, o)
	{
		var el = event.findElement();
		var top = $(o.id + "-top");
		var bottom = $(o.id + "-bottom");
		if (top) {
			if (this.arrayEffect[top.id])
				this.arrayEffect[top.id].cancel();
			this.arrayEffect[top.id] = Effect.Appear(top, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + top.id } } );	
		}
		if (bottom) {
			if (this.arrayEffect[bottom.id])
				this.arrayEffect[bottom.id].cancel();
			this.arrayEffect[bottom.id] = Effect.Appear(bottom, { duration: 0.25, queue: { position: 'front', scope: 'scop-' + bottom.id } } );
		}
	},
	
	itemOut: function(event, o)
	{
		var top = $(o.id + "-top");
		var bottom = $(o.id + "-bottom");
		if (top) {
			if (this.arrayEffect[top.id])
				this.arrayEffect[top.id].cancel();
			this.arrayEffect[top.id] = Effect.Fade(top, { duration: 0.1, queue: { position: 'end', scope: 'scop-' + top.id } } );
		}
		if (bottom) {
			if (this.arrayEffect[bottom.id])
				this.arrayEffect[bottom.id].cancel();
			this.arrayEffect[bottom.id] = Effect.Fade(bottom, { duration: 0.1, queue: { position: 'end', scope: 'scop-' + bottom.id } } );
		}
	},
	
	submitForm: function(event)
	{
		var obj = this;
		Event.stop(event);
		
		var div = $(this.idDiv);
		var form = $(this.idForm);
		
		Effect.Fade(div, {to: 0.5, duration: 0.25} );

		form.request( {
			onComplete: function(transport) {
				var data = transport.responseText.evalJSON();
				Effect.Appear(div, {from: 0.5, duration: 0.25} );
				
				if (typeof(caddy) != "undefined")
					caddy.updateOrder(data.order);
					
				obj.popup.close();
			}
		});
	} // submitForm	
	
} ); // fin de Order.ItemComposition


Order.PromotionItems = Class.create( {

	/**
	 * constructeur de la classe
	 */
	initialize: function(id, code, options) {
		
		// Définition des parametres
		this.urlContent				= $globals['url_ajax_promotion_item_select'];
		this.idPromotion			= id;
		this.code					= code;
		this.idDiv					= 'div-composition';
		this.classDiv				= 'popcomposition';
		this.idForm					= 'promotion-items-form';
		this.itemClass				= 'item';
		this.arrayEffect			= new Array();
		this.popup					= null;
		this.options				= {};
		
		Object.extend(this.options, options || {});
		
		// on affecte les propriétés des options
		for (var o1 in this) {
			for (var o2 in this.options) {
				if (o1==o2) {
					this[o1] = this.options[o2];
				}
			}
		}

		var obj = this;
		this.display();

	}, // fin du constructeur
	
	display: function()
	{
		var obj = this;

		this.popup = new Display.Popup( {
			mode: 'div',
			url: this.urlContent + '?id_promotion=' + obj.idPromotion + '&code=' + obj.code,
			divId: this.idDiv	,
			classDiv: this.classDiv,
			loadingHTML: $globals['lang_loading'],
			onFinish: this.configure.bind(this)
		} );
	}, // display
	
	configure: function()
	{
		var obj = this;	
				
		$$("." + this.itemClass).each(function(el) {
			Event.observe(el, 'mouseenter', obj.itemOver.bindAsEventListener(obj, el));
			Event.observe(el, 'mouseleave', obj.itemOut.bindAsEventListener(obj, el));
		});
		
		if ($(this.idForm)) {
			Event.observe(this.idForm, 'submit', this.submitForm.bindAsEventListener(this));
		}
	}, // configure
	
	itemOver : function(event, o)
	{
		
	},
	
	itemOut: function(event, o)
	{
		
	},
	
	submitForm: function(event)
	{
		var obj = this;
		Event.stop(event);
		
		var div = $(this.idDiv);
		var form = $(this.idForm);
		
		Effect.Fade(div, {to: 0.5, duration: 0.25} );

		form.request( {
			onComplete: function(transport) {
				var data = transport.responseText.evalJSON();
				Effect.Appear(div, {from: 0.5, duration: 0.25} );
				
				if (typeof(caddy) != "undefined")
					caddy.updateOrder(data.order);
					
				obj.popup.close();
			}
		});
	} // submitForm	
	
} ); // fin de Order.PromotionItems


function number_format(number, decimals, dec_point, thousands_sep)
{
	number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
	var n = !isFinite(+number) ? 0 : +number,
	prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
	sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
	dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
	s = '',
	toFixedFix = function (n, prec) {
		var k = Math.pow(10, prec);
		return '' + Math.round(n * k) / k;
	};
	// Fix for IE parseFloat(0.55).toFixed(0) = 0;
	s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
	if (s[0].length > 3) {
		s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
	}
	if ((s[1] || '').length < prec) {
		s[1] = s[1] || '';
		s[1] += new Array(prec - s[1].length + 1).join('0');
	}
	return s.join(dec);
}


Event.observe(window, 'load', function() { 
	initQuantity();
});
function initQuantity()
{
	$$('.btn-plus', '.btn-minus').each( function(el) {
		Event.stopObserving(el);
		Event.observe(el, 'click', quantityChange);
	} );
	$$('.qty').each( function(el) {
		Event.stopObserving(el);
		Event.observe(el, 'blur', quantityChange);
	} );	
}
function quantityChange(event)
{
	var input = $(this.readAttribute('input'));
	var formOrder;
	if (input.readAttribute('form'))
		formOrder = $('form-order');
	switch (this.className) {
		case 'btn-plus':
			input.value = parseFloat(input.value) + 1;
		break;	
		case 'btn-minus':
			input.value = parseFloat(input.value) - 1;
		break;
	}
	input.value = parseInt(input.value);
	if (isNaN(input.value)) {
		input.value = 1;
	}
	if (input.value <= 0 && !formOrder) {
		input.value = 1;
	}
	
	if (input.value < 10)
		input.value = "0" + input.value;
	
	new Effect.Highlight(input, { queue: { position: 'end', scope: 'highlight', limit: 1 } } );
	if (formOrder) {
		formOrder.select('button[type="submit"]')[0].click();
	}
}

