/******************************************************************************
* OLaAjaxAddRef.js
*******************************************************************************

*******************************************************************************
*                                                                             *
* Copyright 2010
*                                                                             *
******************************************************************************/

isoYUILoader.onReady( function() {
		
		(function ($) {
			$(".gshpCategoryProductListStyle_detailed").ready(function(){
				$(".OLa-btAddToBasket").click(function(e){
					e.preventDefault();
					var refToBeAdded = parseInt($(this).attr("id").split("_")[1]);
					gshp.basket.addReference(refToBeAdded,parseInt($("#gshpBasketQuantityInput" + refToBeAdded).val(),10));
				});
			});
			
			$(".OLa-productCard").ready(function(){
				$(".gshpProductReferencesAction #addToBasket a").removeAttr("onclick").click(function(e){
					e.preventDefault();
					gshp.basket.addReference(OLaProductPage_currentRef,parseInt($("#gshpBasketQuantityInput").val(),10));
				});
			});
			
		})(jQuery);
			
    YAHOO.util.Event.onContentReady("OLaAjaxAddRefForm", function() {
	  var bBusy = false;
      var oid = null;
      var form = document.getElementById("OLaAjaxAddRefForm");
      var spanLabel = document.getElementById("OLaAjaxAddRefLabel");
	  var button = document.getElementById("OLaAjaxAddRefButton");
	  var quantityInput = document.getElementById("OLaAjaxAddRefQuantity");
	  clear();
	  gshp.basket.on("actionFail",function (msg) {
		bBusy = false;
		alert(msg);
		form.submit();
	  });
	  gshp.basket.on("actionSuccess",function () {
		form.submit();
	  });
	  YAHOO.util.Event.addListener(form, "submit", function (e) {
		YAHOO.util.Event.stopEvent(e);
		if (oid != null && !bBusy)
		{
			var q = quantityInput.value;
			if (q.match(/^[1-9][0-9]*$/))
			{
				bBusy = true;
				gshp.basket.addReference(oid,parseInt(q,10));
			}
			else
				alert("La quantité saisie n'est pas valide");
		}
	  });
	  var maxResultDisplay = 10;	// nombre maximum d'items a afficher
    var dataSource = new YAHOO.widget.DS_XHR(gshp.catalog.getAPIURL(), ["product","publicCode","label","mainReference"]);
	  dataSource.responseType = YAHOO.widget.DS_XHR.TYPE_XML;
	  dataSource.scriptQueryAppend = "f=productsByPublicCodeStartsWith&limit="+(maxResultDisplay+1);	// on demande un item de plus
	  dataSource.scriptQueryParam = "code";
	  var input = document.getElementById("OLaAjaxAddRefInput");
	  input.disabled = false;
      var control = new YAHOO.widget.AutoComplete(input,"OLaAjaxAddRefContainer", dataSource);
  	  control.maxResultsDisplayed = maxResultDisplay;
  	  control.animVert = false;
	  control.forceSelection = true;
	  function clear()
	  {
		oid = null;
		spanLabel.innerHTML = "";
		button.disabled = true;
	  }
	  control.unmatchedItemSelectEvent.subscribe(clear);
	  control.selectionEnforceEvent.subscribe(clear);
	  control.textboxKeyEvent.subscribe(clear);
	  control.itemSelectEvent.subscribe( function(sType, aArgs) {
	    var data = aArgs[2]; 
		oid = data[2];
		spanLabel.innerHTML = ajax.util.strToHTML(data[1]);
		button.disabled = false;
	  });
	  control.formatResult = function(aResultItem, sQuery)
	  { 
		   var sKey = aResultItem[0];
		   var sKeyQuery = sKey.substr(0, sQuery.length);
		   var sKeyRemainder = sKey.substr(sQuery.length);
		   var sLabel = ajax.util.strToHTML(aResultItem[1]);
		   var aMarkup = ["<span class='publicCode'>",
		      "<b>", 
		      sKeyQuery, 
		      "</b>", 
		      sKeyRemainder, 
		      "</span> - ", 
		      sLabel]; 
		  return aMarkup.join("");
		};  
		control.doBeforeExpandContainer = function(elTextbox, elContainer, sQuery, aResults)
		{
			control.setFooter(aResults.length>this.maxResultsDisplayed ? "Il existe plus de résultats. Précisez la recherche." : "");
			return true;
		};
    });
		
});

