/**
 * => Mootools 1.2
 * 	=> Core
 * @classDescription
 * Classe qui permet de se greffer à des formulaires dans le but de modifier le panier du client en AJAX par l'intérmédiaire de ShoppingCartUpdater.
 * @author M@nu/Baphira
 */
var ShoppingCartForms = new Class({

	/**
	 * Constructor
	 * @param {String} classForms class des formulaires sur lesquels on doit se greffer
	 * @param {String} errQtyMsg
	 * @param {ShoppingCartUpdater} updater
	 * @param {AttributesChecker} attributesChecker (optional)
	 */
	initialize: function(classForms, errQtyMsg, errQtyMMsg, errQtyM2Msg, updater, attributesChecker){
		this.classForms = classForms;
		this.attributesChecker = attributesChecker;
		
		this.forms = $$('.'+classForms);
		for(var i = 0; i < this.forms.length; i++) {
			this.forms[i].addEvent("submit", function(event) {
				var form = new Helper().getTarget(event);

				var strErr = '';
				if ($chk(this.attributesChecker)) {
					strErr = this.attributesChecker.check(form);
				}
				if (strErr != '') {
					alert(strErr);
				} else {
					if(isAddToWishlistButtonClicked || updater == $empty) {
						return;	
					}
					var qtyNum = form.products_quantity.value.toInt();
					var qty_min = form.products_quantity.getParent().getElement('.qty_min span');
					var err = false;
					//spec cordage
					if (isNaN(qtyNum) || qtyNum <= 0) {
						alert(errQtyMsg);
						err = true;
					} else if($chk(qty_min)) {
						if($chk($('products_quantity_m2'))) {
							//vendu au m²
							if($('products_quantity_m2').value.toFloat() < qty_min.get('text').toInt()) {
								alert(errQtyM2Msg);
								err = true;
							}
						} else if ($chk($('products_quantity_longueur'))) {
							//vendu au m
							if($('products_quantity_longueur').value.toFloat() < qty_min.get('text').toInt()) {
								alert(errQtyMMsg);
								err = true;
							}
						} else {
							//vendu à la pièce ou au K
							if(qtyNum < qty_min.get('text').toInt()) {
								alert(errQtyMsg);
								err = true;
							}
						}
					}
					//
					if(!err) {
						var idProduct = form.products_id.value;
						var longueur = form.products_quantity_longueur ? form.products_quantity_longueur.value : '';
						var largeur = form.products_quantity_largeur ? form.products_quantity_largeur.value : '';
						var attributes = new Helper().getAttributes(form);
						var qty = qtyNum + updater.cart.getProductQty(idProduct, attributes); //TODO fix quantité en fonction de la longueur/largeur/surface
						updater.updateCartBox(idProduct, qty, longueur, largeur, attributes, this.showConfirmCoordinates(event, form));
					}
				}
				new Event(event).stop();
			}.bind(this));
			
			var submitImgs = this.forms[i].getElements('img.submitBt');
			for (var j = 0; j < submitImgs.length; j++) {
				submitImgs[j].addEvent("click", function(event) {
					new Helper().setTarget(event, this);
					this.fireEvent('submit', event);
				}.bind(this.forms[i]));
			}
		}
    },
	
	showConfirmCoordinates: function(event, form) {
		var submitBtn = $chk(event.realTarget) ? event.realTarget : form.getElement('input[type=submit]');
		if(!$chk(submitBtn)) {
			submitBtn = form.getElement('input[type=image]')
		}
		var ajustForIE = $chk(event.realTarget) && window.ie ? -310 : 0;
		var coord = {
	        left: (submitBtn.getLeft() + (submitBtn.getSize().x / 2) + ajustForIE),
	        top: (submitBtn.getTop() + (submitBtn.getSize().y + 10))
    	};
		return coord;
	}
	
});