/**
 * Color/Size picker implementation with LeapFrog product bundle customizations
 * Dojo version: 1.0
 */

dojo.provide("atg.store.picker");

atg.store.bundle={
    /*
     * Determines whether or not the bundle page has had a chance to load fully, 
     * based on whether dojo.onLoad has been triggered
     * @return true if the dojo onLoad event has already occured, false otherwise
     */
    isFullyLoaded: function(){      
      return this.loaded == true;
    },
    
    /*
     * Sets the flag indicating that the dojo onLoad event has occured
     */
    setFullyLoaded: function(){
      this.loaded = true;      
    },

    addItem: function(contextPath,catalogRefId,productId,bundleType,bundleId,productName,linkId,isSingle,isColor){
      //take no action if the bundles components are not fully loaded
      if(!atg.store.bundle.isFullyLoaded()){
        console.log("the bundles functionality is not yet fully loaded! (dojo.onLoad has not yet been triggered)");
        return ;
      }

    var formId = "bundlePickerForm_"+bundleId;
    var form = dojo.byId(formId);

    var selForm = dojo.byId("bundlePickerSelections");

    var minSelections = selForm.elements[bundleType + "MinSelections"].value;
    var maxSelections = selForm.elements[bundleType + "MaxSelections"].value;
    var bundleCurrentSelections = selForm.elements[bundleType + "CurrentSelections"].value;

    if (bundleCurrentSelections < maxSelections) {
      var quantity = 1;
      var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
      var qtyCurrent = qtyField.value;

      var selForm = dojo.byId("bundlePickerSelections");

      var bundle=atg.store.bundle;
      // bundle.updateFormInput(formId,formCount,catalogRefId,productId,quantity,bundleType);

      var values = catalogRefId + "|" + productId + "|" + quantity + "|" + bundleType;
      var inputName = "item_" + catalogRefId;
      bundle.createFormInput(selForm,inputName,values,false,"bundleItem");
      bundle.setItemCount(bundleId,formId,bundleType);
      bundle.updateSelections(bundleType,productName,qtyCurrent,catalogRefId);
      bundle.updateLinkStatus(inputName,bundleType,bundleId,linkId,formId,catalogRefId,productId,productName,isColor);
      bundle.checkSelectionMinimums(formId);
      dojo.byId("lf_bundleErrors").innerHTML="";
    } else {
      if (bundleType == 'accessories') {
        dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available for: Accessory";
      } else if (bundleType == 'hardware') {
        dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available for: Learning System";
      } else if (bundleType == 'software') {
        dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available for: Title";
      } else {
        dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available";
      }
    }

  },

  addSku: function(contextPath,catalogRefId,productId,bundleType,bundleId,productName,linkId,isSingle,isColor,actionLinkId){
    //take no action if the bundle components are not fully loaded
    if(!atg.store.bundle.isFullyLoaded()){
      console.log("the bundles functionality is not yet fully loaded! (dojo.onLoad has not yet been triggered)");
      return ;
    }

    var formId = "bundlePickerForm_"+bundleId;
    var form = dojo.byId(formId);

    var skuInputName = "";
    var hwSelInputName = "";
    var itemSelected = "";

    var selForm = dojo.byId("bundlePickerSelections");

    var minSelections = selForm.elements[bundleType + "MinSelections"].value;
    var maxSelections = selForm.elements[bundleType + "MaxSelections"].value;
    var bundleCurrentSelections = selForm.elements[bundleType + "CurrentSelections"].value;

    var quantity = 1;

    var values = catalogRefId + "|" + productId + "|" + quantity + "|" + bundleType;
	
	if(bundleType == 'accessories' || bundleType == 'software') {
		if (bundleCurrentSelections < maxSelections) {
			var quantity = 1;
			var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
			var qtyCurrent = qtyField.value;

			var selForm = dojo.byId("bundlePickerSelections");

			var bundle=atg.store.bundle;
			// bundle.updateFormInput(formId,formCount,catalogRefId,productId,quantity,bundleType);

			var values = catalogRefId + "|" + productId + "|" + quantity + "|" + bundleType;
			
			if (skuInputName == "") {
				var inputName = "item_" + productId;
			} else {
				var inputName = skuInputName;
			}
			
			bundle.createFormInput(selForm,inputName,values,false,"bundleItem");
			bundle.setItemCount(bundleId,formId,bundleType);
			bundle.updateSelections(bundleType,productName,qtyCurrent,catalogRefId);
			bundle.checkSelectionMinimums(formId);
			var actionLink = dojo.byId(actionLinkId);
			actionLink.style.visibility = "visible";
			dojo.byId("lf_bundleErrors").innerHTML="";
			
		} else {
			if (bundleType == 'accessories') {
				dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available for: Accessory";
			} else if (bundleType == 'hardware') {
				dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available for: Learning System";
			} else if (bundleType == 'software') {
				dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available for: Title";
			} else {
				dojo.byId("lf_bundleErrors").innerHTML="No More Selections Available";
			}
		}
		return;
	}

    // check for max and display error if current color

    if (bundleCurrentSelections == 1) {

      dojo.query("input.bundleItem").forEach(function(node, index, arr){
        var str = node.value;
        var hwItem = str.indexOf(productId);
        if (hwItem > 0) {

          skuInputName = node.name;
          atg.store.bundle.checkSelected(skuInputName,values);
          var item = selForm.elements[skuInputName];
          selForm.removeChild(item);

          return skuInputName;

        }
      });

      if (itemSelected != "true") {
        var listContainer = dojo.byId("lf_"+bundleType+"Selections");
        var childElement = dojo.byId(listContainer.getElementsByTagName("LI")[1].id);
        listContainer.removeChild(childElement);
      }

    }

    if (itemSelected != "true") {
      var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
      var qtyCurrent = qtyField.value;

      var selForm = dojo.byId("bundlePickerSelections");

      var bundle=atg.store.bundle;

      if (skuInputName == "") {
        var inputName = "item_" + productId;
      } else {
        var inputName = skuInputName;
      }

      dojo.query(".lf_bundleColors a.removeAction").forEach(function(node, index, arr){
        dojo.removeClass(node, "removeAction");
      });

      var link = dojo.byId(linkId);
      dojo.addClass(linkId, "removeAction");

      bundle.createFormInput(selForm,inputName,values,false,"bundleItem");

      if (bundleCurrentSelections == 0) {
        bundle.setItemCount(bundleId,formId,bundleType);
      }
      bundle.updateSelections(bundleType,productName,qtyCurrent,catalogRefId);
      bundle.checkSelectionMinimums(formId);

      var actionLink = dojo.byId(actionLinkId);
      actionLink.style.visibility = "visible";

    }
  },

  removeSku: function(contextPath,catalogRefId,productId,bundleType,bundleId,productName,linkId,isSingle,isColor){
    //take no action if the bundle components are not fully loaded
    if(!atg.store.bundle.isFullyLoaded()){
      console.log("the bundles functionality is not yet fully loaded! (dojo.onLoad has not yet been triggered)");
      return ;
    }

     var formId = "bundlePickerForm_"+bundleId;
     var form = dojo.byId(formId);

     var skuInputName = "";
     var hwSelInputName = "";
     var itemSelected = "";

     var selForm = dojo.byId("bundlePickerSelections");

     var minSelections = selForm.elements[bundleType + "MinSelections"].value;
     var maxSelections = selForm.elements[bundleType + "MaxSelections"].value;
     var bundleCurrentSelections = selForm.elements[bundleType + "CurrentSelections"].value;

     var quantity = 1;

     var values = catalogRefId + "|" + productId + "|" + quantity + "|" + bundleType;

     // check for max and display error if current color

     if (bundleCurrentSelections == 1) {

       dojo.query("input.bundleItem").forEach(function(node, index, arr){
         var str = node.value;
         var hwItem = str.indexOf(productId);
         if (hwItem > 0) {

           skuInputName = node.name;
           atg.store.bundle.checkSelected(skuInputName,values);
           var item = selForm.elements[skuInputName];
           selForm.removeChild(item);

           return skuInputName;

         }
       });

       if (itemSelected != "true") {
         var listContainer = dojo.byId("lf_"+bundleType+"Selections");
         var childElement = dojo.byId(listContainer.getElementsByTagName("LI")[1].id);
         listContainer.removeChild(childElement);
       }

       dojo.query(".lf_bundleColors a.removeAction").forEach(function(node, index, arr){
         dojo.removeClass(node, "removeAction");
       });

       // remove the quantity from the addItemCount total
       var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
       var qtyCurrent = qtyField.value;
       qtyField.value = qtyCurrent - 1;

       // remove the quantity from the current bundle type selection counter
       var selForm = dojo.byId("bundlePickerSelections");
       var selField = selForm.elements[bundleType + "CurrentSelections"];
       var selCurrent = selField.value;
       selField.value = selCurrent - 1;

       if (selField.value == 0) {
         dojo.removeClass("lf_"+bundleType+"Selections", "populated");
       }

       var bundle=atg.store.bundle;
       bundle.checkSelectionMinimums(formId);
       dojo.byId("lf_bundleErrors").innerHTML="";

       var link = dojo.byId(linkId);
       link.style.visibility = "hidden";

     }

  },

  checkSelected: function(skuInputName,values) {
    var itemSelected = "";
    var form = dojo.byId("bundlePickerSelections");
    var currentValue = form.elements[skuInputName].value;

    if (currentValue == values) {
      itemSelected = "true";
    }

    return itemSelected;
  },

  checkSelectionMinimums: function(formId) {
    var selForm = dojo.byId("bundlePickerSelections");
    var hwMin = selForm.elements["hardwareMinSelections"].value;
    var accyMin = selForm.elements["accessoriesMinSelections"].value;
    var swMin = selForm.elements["softwareMinSelections"].value;
    var hwCur = selForm.elements["hardwareCurrentSelections"].value;
    var accyCur = selForm.elements["accessoriesCurrentSelections"].value;
    var swCur = selForm.elements["softwareCurrentSelections"].value;

    if ((hwMin <= hwCur) && (swMin <= swCur) && (accyMin <= accyCur)) {
      var form = dojo.byId(formId);
      var submit = form.elements["/atg/store/order/purchase/CartFormHandler.addItemToOrder"];
      submit.disabled = false;
      var submitTrigger = dojo.byId("lf_bundleAddTrigger");
      dojo.removeClass(submitTrigger, "lf_disabledButton");
    }

    if ((hwMin > hwCur) || (swMin > swCur) || (accyMin > accyCur)) {
      var form = dojo.byId(formId);
      var submit = form.elements["/atg/store/order/purchase/CartFormHandler.addItemToOrder"];
      submit.disabled = true;
      var submitTrigger = dojo.byId("lf_bundleAddTrigger");
      if(!dojo.hasClass(submitTrigger, "lf_disabledButton")){
        dojo.addClass(submitTrigger, "lf_disabledButton");
      }
    }

  },

  resetValues: function(formId) {
    var form = dojo.byId(formId);
    var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
    qtyField.value = 0;

    var selForm = dojo.byId("bundlePickerSelections");
    var selField = selForm.elements["hardwareCurrentSelections"];
    selField.value = 0;

    var selField = selForm.elements["accessoriesCurrentSelections"];
    selField.value = 0;

    var selField = selForm.elements["softwareCurrentSelections"];
    selField.value = 0;
    
    //remove any bundleItems inputs that may have been previously created to prevent an inconsistent bundle form
    dojo.query("#bundlePickerSelections .bundleItem").orphan();
    
    //Since this method is called onLoad, indicate that the bundles functionality is fully loaded
    atg.store.bundle.setFullyLoaded();
  },

  preSubmit: function(prodCount,formId){

    var form = dojo.byId(formId);
    var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
    var productCounter = qtyField.value;

    function addId(inputName,newId) {
      var el = form.elements[inputName];
      el.id = newId;
    }

    function removeInput(id) {
      var el = dojo.byId(id);
      form.removeChild(el);
    }

    for (var i = 0; i < prodCount; i++) {
      var itemNumber = "["+i+"]";

      addId("_D:/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".catalogRefId","catalogRefId_"+i+"_hid")
      addId("_D:/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".productId","productId_"+i+"_hid")
      addId("_D:/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".quantity","quantity_"+i+"_hid")
      addId("_D:/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".bundleType","bundleType_"+i+"_hid")

      productCounter++;

    } // end for

    for (var i = 0; i < prodCount; i++) {

      removeInput("catalogRefId_"+i)
      removeInput("catalogRefId_"+i+"_hid")
      removeInput("productId_"+i)
      removeInput("productId_"+i+"_hid")
      removeInput("quantity_"+i)
      removeInput("quantity_"+i+"_hid")
      removeInput("bundleType_"+i)
      removeInput("bundleType_"+i+"_hid")

    } // end for

    var bundle=atg.store.bundle;

    var selForm = dojo.byId("bundlePickerSelections");

    dojo.query("input.bundleItem").forEach(function(node, index, arr){

      var str = node.value;
      var values = str.split("|");

      var itemNumber = "["+index+"]";
      bundle.createFormInput(formId,"/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".catalogRefId",values[0],true,"bundleItemSubmit")
      bundle.createFormInput(formId,"/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".productId",values[1],true,"bundleItemSubmit")
      bundle.createFormInput(formId,"/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".quantity",values[2],true,"bundleItemSubmit")
      bundle.createFormInput(formId,"/atg/store/order/purchase/CartFormHandler.items"+itemNumber+".bundleType",values[3],true,"bundleItemSubmit")

    });
  },

  removeItem: function(inputName,bundleType,bundleId,linkId,formId,catalogRefId,productId,productName,isColor) {
    //take no action if the bundle components are not fully loaded
    if(!atg.store.bundle.isFullyLoaded()){
      console.log("the bundles functionality is not yet fully loaded! (dojo.onLoad has not yet been triggered)");
      return ;
    }

    // find the form
    var form = dojo.byId(formId);
    var link = dojo.byId(linkId);

    // remove the quantity from the addItemCount total
    var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
    var qtyCurrent = qtyField.value;
    qtyField.value = qtyCurrent - 1;

    // remove the quantity from the current bundle type selection counter
    var selForm = dojo.byId("bundlePickerSelections");
    var selField = selForm.elements[bundleType + "CurrentSelections"];
    var selCurrent = selField.value;
    selField.value = selCurrent - 1;

    if (selField.value == 0) {
      dojo.removeClass("lf_"+bundleType+"Selections", "populated");
    }

    var item = selForm.elements[inputName];
    selForm.removeChild(item);

    var bundle=atg.store.bundle;
    bundle.checkSelectionMinimums(formId);
    dojo.byId("lf_bundleErrors").innerHTML="";

    // remove the selected item from the list of items in the selection list
    var listContainer = dojo.byId("lf_"+bundleType+"Selections");
    var selId = bundleType + catalogRefId;
    var listItem = dojo.byId(selId);
    listContainer.removeChild(listItem);

    // now manipulate the link: remove the class, change the text, and reinsert the addItem onclick function
    dojo.removeClass(linkId, "removeAction");

    link.onclick = function () { atg.store.bundle.addItem(contextPath,catalogRefId,productId,bundleType,bundleId,productName,linkId,false,isColor) }

    if (isColor != true) {
      link.innerHTML = "Add to Bundle";
    }

    return;
  },

  updateLinkStatus: function(inputName,bundleType,bundleId,linkId,formId,catalogRefId,productId,productName,isColor) {
    var link = dojo.byId(linkId);
    link.onclick = function() { atg.store.bundle.removeItem(inputName,bundleType,bundleId,linkId,formId,catalogRefId,productId,productName,isColor) }
    if (isColor != true) {
      link.innerHTML = "Remove From Bundle";
    }
    dojo.addClass(linkId, "removeAction");
  },

  createFormInput: function(formId,inputName,inputValue,hidden,classname){

     var form = dojo.byId(formId);

     var inp = document.createElement("input");
     inp.type = "hidden";
     inp.name = inputName;
     inp.id = inputName;
     inp.value = inputValue;
     dojo.addClass(inp, classname);
     form.appendChild(inp);

     if (hidden == true){
       var secInp = document.createElement("input");
       secInp.type = "hidden";
       secInp.name = "_D:"+inputName;
       secInp.value = " ";
       form.appendChild(secInp);
     }

   },

  updateFormInput: function(formId,formCount,catalogRefId,productId,quantity,bundleType){

    var form = dojo.byId(formId);
    var path = "/atg/store/order/purchase/CartFormHandler";

    var formCatalogRefId = form.elements["/atg/store/order/purchase/CartFormHandler.items"+formCount+".catalogRefId"];
    formCatalogRefId.value = catalogRefId;

    var formProductId = form.elements["/atg/store/order/purchase/CartFormHandler.items"+formCount+".productId"];
    formProductId.value = productId;

    var formQuantity = form.elements["/atg/store/order/purchase/CartFormHandler.items"+formCount+".quantity"];
    formQuantity.value = quantity;

    var formBundleType = form.elements["/atg/store/order/purchase/CartFormHandler.items"+formCount+".bundleType"];
    formBundleType.value = bundleType;
  },

  setItemCount: function(bundleId,formId,bundleType){

    var form = dojo.byId(formId);
    var qtyField = form.elements["/atg/store/order/purchase/CartFormHandler.addItemCount"];
    var qtyCurrent = qtyField.value;
    qtyCurrent++;
    qtyField.value = qtyCurrent;

    var selForm = dojo.byId("bundlePickerSelections");

    var selField = selForm.elements[bundleType + "CurrentSelections"];
    var selCurrent = selField.value;
    selCurrent++;
    selField.value = selCurrent;

  },

  updateHiddenFormInput: function(formId,items,propertyType){

    var form = dojo.byId(formId);

    var itemNumber = "["+items+"]";
    var formCatalogRefId = form.elements["_D:/atg/store/order/purchase/CartFormHandler.items"+itemNumber+"."+propertyType+""];
    formCatalogRefId.value = "dajskjdas";
  },

  updateSelections: function(bundleType,productName,qtyCurrent,catalogRefId){

    var listContainer = dojo.byId("lf_"+bundleType+"Selections");

    var listItem = document.createElement("LI");
    listItem.innerHTML = productName;
    listItem.id = bundleType + catalogRefId;
    listContainer.appendChild(listItem);

    dojo.addClass("lf_"+bundleType+"Selections", "populated");

  },

  addtoCart : function (){

    //post addToCart form to richCart widget
    dijit.byId("atg_store_richCart").postForm("bundleAddToCart");

  }

}

atg.store.picker={

/**
 * Adds the item to Cart
 */
  addtoCart : function (){

    if (!this.checkAddtoCartAvailable()){
      // if product's color/size is not selected do nothing
      // just show corresponding message
      dojo.byId('promptSelectDIV').style.display='block';
      dojo.byId('promptSelectDIV2').style.display='none';
      dojo.byId('promptSelectDIV3').style.display='none';
      return;
    }
    //post addToCart form to richCart widget
    dijit.byId("atg_store_richCart").postForm("addToCart");

  },

/**
 * Check the status of addToCart form
 *
 * @return  true: if item can be added to the cart
 *     false: if not
 */
  checkAddtoCartAvailable: function(){
    var addtocartform = dojo.byId("addToCart");
    var selectedSku =  addtocartform.elements["CartFormHandler.items[0].catalogRefId"].value;

    if( !selectedSku){
      return false;
      //console.debug("checkAddtoCartAvailable: SKU not available");
    }

    return true;
  },

/**
 * Called when a user clicks on a color, it changes selected color
 * to the passed one
 * @param color: which color is selected
 */
  clickColor: function(contextPath,color,productId,prodDesc){
    //console.debug('selected color is ' + color);
    var form = dojo.byId("colorsizerefreshform_"+productId);
    var currentColor = form.elements.selectedColor.value;
	  var quickView = form.elements.quickView.value;

    //if the color is not changing, don't do anything
    if(currentColor == color){
      return;
    }

    //set the new selected color in the refresh form and submit it
    form.elements.selectedColor.value = color;
    var picker=atg.store.picker;
    picker.setQuantity(productId);
    picker.setGiftlistId(productId);

	  picker.swapAlternativeImage(contextPath,productId,color,quickView,prodDesc);
    picker.swapProductImage(contextPath,productId,color,quickView,prodDesc);

    picker.submitRefreshForm(productId);
  },


/**
 * Called when a user clicks on a size, it changes selected size
 * in the refresh form to the passed one
 * @param size: which size is selected
 */
  clickSize: function(size,productId){
    //console.debug('selected size is ' + size);
    var form = dojo.byId("colorsizerefreshform_"+productId);

    //if the user clicks the size that's already selected, don't do anything
    var currentSize = form.elements.selectedSize.value;
    if(currentSize === size){
      return;
    }

    //set the new selected size in the refresh form and submit it
    form.elements.selectedSize.value = size;
    var picker=atg.store.picker;
    picker.setQuantity(productId);
    picker.setGiftlistId(productId);
    picker.submitRefreshForm(productId);
  },

  swapAlternativeImage: function(contextPath,productId,color,quickView,prodDesc){

    var contextPath;

    if (quickView == 'true') {
      return;
    } else {
      contextPath = contextPath + "/browse/gadgets/productAlternativeImages.jsp";
    }

    if (prodDesc == 'merchantProduct'){
	  var productIdURL = "?mproductId=" + productId;
	}else{
	  var productIdURL = "?productId=" + productId;
	}
    var colorURL = "&color=" + color;

    var url = contextPath + productIdURL + colorURL;

    dojo.xhrGet( {
          // The following URL must match that used to test the server.
          url: url,

          timeout: 5000, // Time in milliseconds

          // The LOAD function will be called on a successful response.
          load: function(response, ioArgs) {
            dojo.byId("product_altImage_set_"+productId).innerHTML = response;
		        var srcNode = dojo.byId('product_altImage_set_'+productId);
            dojo.parser.parse(srcNode, true);        
            return response;
          },

          // The ERROR function will be called in an error case.
          error: function(response, ioArgs) {
            console.error("HTTP status code: ", ioArgs.xhr.status);
            return response;
            }
          });
  },

  swapProductImage: function(contextPath,productId,color,quickView,prodDesc){

	var contextPath;

	if (quickView == 'true') {
	  contextPath = contextPath + "/browse/gadgets/quickViewProductImage.jsp";
	} else {
	  contextPath = contextPath + "/browse/gadgets/productImage.jsp";
	}


	if (prodDesc == 'merchantProduct'){
	  var productIdURL = "?mproductId=" + productId;
	}else{
	  var productIdURL = "?productId=" + productId;
	}
	var colorURL = "&color=" + color;

	var url = contextPath + productIdURL + colorURL;

	dojo.xhrGet( {
		  // The following URL must match that used to test the server.
		  url: url,
		  productId: productId,
		  timeout: 5000, // Time in milliseconds

		  // The LOAD function will be called on a successful response.
		  load: function(response, ioArgs) {
		    dojo.byId("product_image_set_"+ioArgs.args.productId).innerHTML = response;
		    var srcNode = dojo.byId('product_image_set_'+ioArgs.args.productId);
        dojo.parser.parse(srcNode, true);
			  return response;
		  },

		  // The ERROR function will be called in an error case.
		  error: function(response, ioArgs) {
			console.error("HTTP status code: ", ioArgs.xhr.status);
			return response;
			}
		  });
  },

/**
 * Gets the quantity from the addToCart form and sets the refresh form quantity.
 * We do this so we can preserve the quantity between refreshes.
 */
  setQuantity: function(productId)
  {
    var currentQuantity = dojo.byId("atg_store_quantityField").value;
    var refreshform = dojo.byId("colorsizerefreshform_"+productId);
    refreshform.elements.savedquantity.value = currentQuantity;
  },


/**
 * Gets the gift list id from the addToGiftList form and sets the refreshform savedgiftlist
 * parameter.
 * We do this so we can preserve the gift list selection between refreshes
 */
  setGiftlistId: function(productId) {
    var addToGiftListForm = dojo.byId("addToGiftList_"+productId);
    if(!addToGiftListForm){
      return;
    }

    var currentGiftList = addToGiftListForm.elements["/atg/commerce/gifts/GiftlistFormHandler.giftlistId"].value;
    var refreshform = dojo.byId("colorsizerefreshform_"+productId);
    refreshform.elements.savedgiftlist.value = currentGiftList;
  },


/**
 * Resets the color and size selected and submits the refresh form
 */
  resetPicker: function(){
    var form = dojo.byId("colorsizerefreshform");
    //reset the new selected size and color in the refresh form and submit it
    form.elements.selectedSize.value = "";
    form.elements.selectedColor.value = "";

    var picker=atg.store.picker;
    picker.setQuantity();
    picker.setGiftlistId();
    picker.submitRefreshForm();
  },

/**
 * Submits the refresh form.
 */
  submitRefreshForm: function(productId){

    dojo.xhrGet({

      //url: "http://localhost:8080/store/browse/gadgets/pickerContents.jsp",
      load: function(data){
        var divColorPicker = dojo.byId("atg_store_picker_"+productId);
        //data = data.replace(/<form\s*[^>]*>|<\/form>/g,"");
        divColorPicker.innerHTML = data;
        dijit.byId('atg_store_richCart').hijackAllAddToCartNodes();
        // just check that we don't need any popuplaunchers on the new code
        atg.store.util.setUpPopupEnhance();
      },
      form:  "colorsizerefreshform_"+productId
    });
  },

/**
 * Submits the addToFavorites form.
 */
  submitAddToFavoritesForm : function(productId){


    if(!this.checkGiftListSubmitAvailable("addToFavorites_"+productId, "/atg/commerce/gifts/GiftlistFormHandler.catalogRefIds")){
     // display message that user should select product's color
     // and size before adding it to favorites list
     dojo.byId('promptSelectDIV2').style.display='block';
     dojo.byId('promptSelectDIV').style.display='none';
     dojo.byId('promptSelectDIV3').style.display='none';

     // close the popup
     dojo.byId("atg_picker_moreActionsButton").className = "more";

     return;
    }
    //console.debug(dojo.byId("atg_store_addToFavorites"));
    //alert(dojo.byId("addToFavorites").nodeName);
    dojo.byId("atg_store_addToFavorites_"+productId).click();
    // Nasty work around for an IE6 form submission bug that sometimes it just won't go the first time round.
    if(dojo.isIE && dojo.isIE < 7){
        setTimeout("atg.store.picker.submitAddToFavoritesForm('"+productId+"')", 500);
    }

  },

/**
 * Submits the addToGiftList form.
 */
  submitGiftListForm : function(giftList,productId){

    if(!this.checkGiftListSubmitAvailable("addToGiftList_"+productId,
                                           "/atg/commerce/gifts/GiftlistFormHandler.catalogRefIds")){
     // display message that user should select product's color
     // and size before adding it to gift list
     dojo.byId('promptSelectDIV3').style.display='block';
     dojo.byId('promptSelectDIV').style.display='none';
     dojo.byId('promptSelectDIV2').style.display='none';


     return;
    }

    // set form's giftListId to the one that is clicked by user
    this.setGiftlistIdOnGiftListForm(giftList,productId);
    // set quantity on gift list form
    this.setQuantityOnGiftlistForm(productId);
    // submit form
    dojo.byId("atg_store_addToGiftSubmit").click();
  },


/**
 * Checks if  addToGiftList or addToFavorites form is ready for submit
 * @param giftListForm: form id
 * @param giftListRefIdElement: id of form's element that contains  SKU id
 *                              that is going to be added
 * @return true: if can be submitted
 *          false: if not
 */
  checkGiftListSubmitAvailable : function(giftListForm, giftListRefIdElement ){
    var selectedSku = dojo.byId(giftListForm).elements[giftListRefIdElement].value;
    if(!selectedSku){
      return false;
    }
    return true;
  },

 /**
  * Used to set quantity of items to add to gift list. Quantity value is taken
  * from addToCart form.
  */
  setQuantityOnGiftlistForm: function(productId) {
    // get quantity from addToCart form
    var currentQuantity = 1;
    if(dojo.byId("atg_store_quantityField")){
      currentQuantity = dojo.byId("atg_store_quantityField").value;
    }
    var addtogiftlistform = dojo.byId("addToGiftList_"+productId);
    //set the quantity in the add to gift lsit form
    addtogiftlistform.elements.giftListAddQuantity.value = currentQuantity;
  },

/**
 * Used to set giftListId selected by user in addToGiftList from.
 */
  setGiftlistIdOnGiftListForm: function(giftListId,productId) {
    var addToGiftListForm = dojo.byId("addToGiftList_"+productId);
    if(!addToGiftListForm){
      return;
    }

    addToGiftListForm.elements["/atg/commerce/gifts/GiftlistFormHandler.giftlistId"].value = giftListId;
  }
};