/******************************************************************************
* ixgardAjaxAddRef.js
*******************************************************************************

*******************************************************************************
*                                                                             *
* Copyright 2008
*                                                                             *
******************************************************************************/

isoYUILoader.onReady( function() {
    YAHOO.util.Event.onContentReady("ixgardAjaxAddRefForm", function() {
	  var bBusy = false;
      var oid = null;
      var form = document.getElementById("ixgardAjaxAddRefForm");
      var spanLabel = document.getElementById("ixgardAjaxAddRefLabel");
	  var button = document.getElementById("ixgardAjaxAddRefButton");
	  var quantityInput = document.getElementById("ixgardAjaxAddRefQuantity");
	  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(), ["reference","publicCode","label","oid"]);
	  dataSource.responseType = YAHOO.widget.DS_XHR.TYPE_XML;
	  dataSource.scriptQueryAppend = "f=referencesByPublicCodeStartsWith&limit="+(maxResultDisplay+1);
	  dataSource.scriptQueryParam = "code";
	  var input = document.getElementById("ixgardAjaxAddRefInput");
	  input.disabled = false;
      var control = new YAHOO.widget.AutoComplete(input,"ixgardAjaxAddRefContainer", 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 = ajax.util.strToHTML(sKey.substr(0, sQuery.length));
		   var sKeyRemainder = ajax.util.strToHTML(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;
		};		
    });
});
