/******************** Scripts related to Mutiple Add to Bag ***********************/

//global var to hold all variants (one per product)
var variants_list = new Array();

//global var for variant ItemIndex
var varItemIndex = 0;

//Add to bag Item  Class
function AddToBagItem()
{  
  this.varCode = "";  //product variant code
  this.qty = "";   //the qty to add to bag
}

//Intializes the page
function PSCInitializeOnPageLoad()
{
    
    var tempProducts=new Array();
    var selectedAddToCartProducts= new Array();
    tempProducts=variants_list;
    
    //hide shopping cart bubble and reset error message
    PSCHideShowMultiShoppingCartBubble(false);
    PSCHideShowMultiShoppingCartBubbleErrorMsg("",false);
    
    for(var i=0;i<tempProducts.length;i++)
    {        
        //Hide all the ADDED TO BAG section shopping cart bubble items
        PSCHideShowShoppingBubbleCartAddedItem(tempProducts[i], false);        
        //Hide all the Product Line Dividers in bubble
        PSCHideShowShoppingBubbleCartAddedItemLineDivider(tempProducts[i],false);        
    }   
}

//Reset all the Qty dropdowns
function ResetQtyDropdowns()
{   
    var tempProducts=new Array();    
    tempProducts=variants_list;
    
    for(var i=0;i<tempProducts.length;i++)
    { 
       //Retrieve mutiple instances of Product Dropdown
       var qtyDropdownObjs = new Array();
       var qtyDropdownObjs = document.getElementsByName(tempProducts[i]+"_QtyList");  
       
       if(qtyDropdownObjs != null)
       {           
           //Reset all the dropdown instances
           for(var j=0;j<qtyDropdownObjs.length;j++)
           {
                var qtyDropdownObj = qtyDropdownObjs[j];                 
                qtyDropdownObj.selectedIndex = 0;
           }
       }
    }  
}

//Hide or Show the Multi Shopping Cart Bubble
function PSCHideShowMultiShoppingCartBubble(display)
{
    var MultiShoppingCartBubble   = $get("ShoppingCartBubble_Div"); 
    
    if(MultiShoppingCartBubble != null)
    { 
                  
         if(display==true)
         {
            MultiShoppingCartBubble.style.display="";
            MultiShoppingCartBubble.style.visibility="visible";
         }
         else
         {
            MultiShoppingCartBubble.style.display="none";
            MultiShoppingCartBubble.style.visibility="hidden";         
         }
    }
}
 
//Hide or show the Multi Shopping Cart Error Messages 
function PSCHideShowMultiShoppingCartBubbleErrorMsg(errorMsg,display)
{
    var MultiShoppingCartBubble_ErrorMsg_Div   = $get("MultiShoppingCartBubble_ErrorMsg_Div"); 
    var MultiShoppingCartBubble_ErrorMsg_Text  = $get("MultiShoppingCartBubble_ErrorMsg_Text"); 
  
    if(MultiShoppingCartBubble_ErrorMsg_Div != null)
    { 
                  
        if(display == true)
        {
           MultiShoppingCartBubble_ErrorMsg_Div.style.display="";
           MultiShoppingCartBubble_ErrorMsg_Div.style.visibility="visible";               
        }
        else
        {
           MultiShoppingCartBubble_ErrorMsg_Div.style.display="none";
           MultiShoppingCartBubble_ErrorMsg_Div.style.visibility="hidden";
        }
        if(MultiShoppingCartBubble_ErrorMsg_Text!=null)
        { 
            MultiShoppingCartBubble_ErrorMsg_Text.innerHTML=errorMsg;
        }
    }
}

//Hide or show the "Added To Bag" section
function PSCHideShowMultiShoppingCartAddedToBagSection(display)
{
    var  MultiShoppingCartBubble_AddedToBagSection_Div   = $get("ShoppingCartBubble_AddedToBagSection_Div"); 
      
    if(MultiShoppingCartBubble_AddedToBagSection_Div != null)
    {                   
        if(display == true)
        {
           MultiShoppingCartBubble_AddedToBagSection_Div.style.display="";
           MultiShoppingCartBubble_AddedToBagSection_Div.style.visibility="visible";               
        }
        else
        {
           MultiShoppingCartBubble_AddedToBagSection_Div.style.display="none";
           MultiShoppingCartBubble_AddedToBagSection_Div.style.visibility="hidden";
        }        
    }
}

//Hide or Show Added ShoppingCartItem in the shopping cart bubble
function PSCHideShowShoppingBubbleCartAddedItem(variantCode, display)
{
    var productDivID = variantCode+"_MultiShoppingCartBubbleProduct_AddedDisplay_DIV";
    var productDivObj = $get(productDivID);
     if (productDivObj != null) 
     {  
         if(display==true)
         {
            productDivObj.style.display="";
            productDivObj.style.visibility="visible";
         }
         else
         {
            productDivObj.style.display="none";
            productDivObj.style.visibility="hidden";
         }
     }
     
}

//Hides or Show ShoppingCartItem Line Divider in the shopping cart bubble
function PSCHideShowShoppingBubbleCartAddedItemLineDivider(variantCode,display)
{
    var productDivLineDividerID = variantCode+"_line_divider";
    var productDivLineDividerObj = $get(productDivLineDividerID);
    
    if (productDivLineDividerObj != null) 
    {  
         if(display==true)
         {
            productDivLineDividerObj.style.display="";
            productDivLineDividerObj.style.visibility="visible";
         }
         else
         {
            productDivLineDividerObj.style.display="none";
            productDivLineDividerObj.style.visibility="hidden";
         }
    }
     
}

 //This function either disables the Qty dropdown for 'out of stock' or enables it for 'add to cart'
function PSCManagePrdAddToCartDropdown(variantCode, stockQty) 
{    
    //Retrieve mutiple instances of Product Dropdown
    var addToCartDropdownObjs = new Array();
    var addToCartDropdownObjs = document.getElementsByName(variantCode+"_QtyList");  
  
    //Enable or Disable each instance
    for(var i=0;i<addToCartDropdownObjs.length;i++)
    {
        var addToCartDropdown = addToCartDropdownObjs[i];
        
        if (PSCIsVariantInStock(stockQty)) 
        {       
            addToCartDropdown.disabled=false;           
        }
        else 
        {          
            addToCartDropdown.disabled=true;        
        }   
    }
}

//This function returns true if variant is in stock and false if it is out of stock
function PSCIsVariantInStock(stockQty) 
{
  
     if (AJAX_ENABLE_OUTOFSTOCK==false) return true; //if not enabled return true so treats everything in stock
     var _IsInStock = false; 
     var StockTresHold = AJAX_GetTresHoldNumber();
     if (stockQty!=null) 
     {  
        if (parseInt(stockQty)>StockTresHold) 
        { 
            _IsInStock = true;  
        }
                     
     }
           
      return  _IsInStock;
}

//returns the selected product qty
function PSCGetSelectedProductQty(variantCode) 
{
    var prdQtyIDStr = variantCode + "_QtyList";	
	
	//Retrieve all instances of product
	var objdrps = document.getElementsByName(prdQtyIDStr);
	 
	 //Retrieve the Qty dropdown value of selected one
	 for(var i=0;i<objdrps.length;i++)
     { 
         var objdrp = objdrps[i];
       
         if (objdrp != null && objdrp.value != '-') 
         {
            var _prdQty = objdrp.value;         
            return _prdQty;                 
         }
     }
     
     return '-'; //Default Value     
}

//Gets add to bag variant codes
function PSCGetAddToBasketItems()
{
    var tempProducts = new Array();
    var selectedAddToCartProducts = new Array();  

    var selectedAddToBagItems = new Array();//to be returned
    tempProducts = variants_list;    
        
    var addToCartCount = 0;
    
    for(var i=0;i<tempProducts.length;i++)
    {         
          //Retrieve all instances of the product
          var prdAddToCartDropdownObjs = document.getElementsByName(tempProducts[i]+"_QtyList");//$get(tempProducts[i]+"_QtyList");
           
          //Check each instance to see if Qty has been selected...to add to Bag
          for(var j=0;j<prdAddToCartDropdownObjs.length;j++)
          {
              var prdAddToCartDropdown = prdAddToCartDropdownObjs[j];
            
              if(prdAddToCartDropdown!=null)
              {
                 if(prdAddToCartDropdown.value != '-')
                 {                    
                    //get selected variant                    
                    var   addtoBagItem = new AddToBagItem();
                    addtoBagItem.varCode = tempProducts[i];
                    addtoBagItem.qty = prdAddToCartDropdown.value;
                    selectedAddToBagItems[addToCartCount++] = addtoBagItem;
                    
                 }
              }
           }
     } 
      
    return selectedAddToBagItems;     
}

function PSCAddSelectedProductsToBag()
{      
    var selectedAddToBagItems= new Array();//to be returned
    selectedAddToBagItems=PSCGetAddToBasketItems();
        
    var selectedVarSKU = new Array();
    var selectedVarQty = new Array();           
            
    if(selectedAddToBagItems.length > 0)
    {            
        for(var i=0; i<selectedAddToBagItems.length; i++)
        {            
            var addToBagItems=selectedAddToBagItems[i]; 
           
            selectedVarSKU[i]=addToBagItems.varCode;
            selectedVarQty[i]=addToBagItems.qty;       
            
        }                 

        //add to bag
        _WebServiceAPI.AddMultipleProductsToCart(GetCurrentCustomerID(), selectedVarSKU, selectedVarQty, PSCAddMultipleProductOnComplete);         
    }
    else
    {
         alert("Please select a product to add to bag");
    }
}

//update shopping cart bubble's product price and variant name
function PSCUpdateShoppingCartProductInfo(variantCode)
{  
  
   var ShoppingCartBubble_VariantNameStr =  variantCode + "_ShoppingCartBubble_VariantName";
   var ShoppingCartBubble_ItemQuantityStr = variantCode + "_ShoppingCartBubble_ItemQuantity";
   
   var ShoppingCartBubble_VariantNameObj  = $get(ShoppingCartBubble_VariantNameStr);
   var ShoppingCartBubble_ItemQuantityObj = $get(ShoppingCartBubble_ItemQuantityStr);   
     
   //We do not have to set the Variant Name as SHU has only 1 variant per Product
   /*if(ShoppingCartBubble_VariantNameObj != null)
   { 
        ShoppingCartBubble_VariantNameObj.innerHTML = selectedShadeName; 
   }*/
     
   var prdQty = 0;
   
   //Get the Qty added from the dropdownlist
   prdQty = PSCGetSelectedProductQty(variantCode);   
   
   if(ShoppingCartBubble_ItemQuantityObj != null)
   { 
        ShoppingCartBubble_ItemQuantityObj.innerHTML = prdQty; 
   }                                    

}

//Display Shopping bag bubble div. 
//allProductErrorMessagesArray is an array of ProductErrorMessage Objs
function PSCDisplayShoppingCartBubble(selectedAddToBagItems, productJSONErrorMessages)
{
   var productsWithErrorStr = ""; 
   var allProductErrorMessagesArrayStr = "";   
     
   //Hide all shopping cart bubble items, line dividers and plus seperators
   for(var i=0;i<variants_list.length;i++)
   {       
        PSCHideShowShoppingBubbleCartAddedItem(variants_list[i], false);       
        PSCHideShowShoppingBubbleCartAddedItemLineDivider(variants_list[i],false);
   }
    
   //Hide the "Added to Bag" section
   PSCHideShowMultiShoppingCartAddedToBagSection(false);
   
   if(productJSONErrorMessages!=null )
   {
       for(var x=0;x<productJSONErrorMessages.ErrorMessages.length;x++)
       { 
           try
           {
                allProductErrorMessagesArrayStr += productJSONErrorMessages.ErrorMessages[x].VariantCode + " "; 
                //Product   is 
                //alert(productJSONErrorMessages.ErrorMessages[x].VariantName.length+" "+productJSONErrorMessages.ErrorMessages[x].VariantName);
                var variantName = productJSONErrorMessages.ErrorMessages[x].VariantName.length > 1 ? "&nbsp;&nbsp;&nbsp;" + productJSONErrorMessages.ErrorMessages[x].VariantName + "" : "";
                productsWithErrorStr += "<span class='AMedGREY11_BTT'>" + productJSONErrorMessages.ErrorMessages[x].PrdParentName+variantName + "</span><br>" + productJSONErrorMessages.ErrorMessages[x].ErrorMessage + "<br><br>";         
             } 
             catch(err){}                
          }  
    }     
 
    //Variable to count #items actually added to cart via AJAX
    var cartItems = 0;
    
    for(var i=0;i<selectedAddToBagItems.length;i++)
    { 
         var  varCode = selectedAddToBagItems[i].varCode;
         var searchKey = varCode;
         var searchResult = allProductErrorMessagesArrayStr.search(searchKey);     
        
         if(searchResult == -1)           
         {   
             PSCUpdateShoppingCartProductInfo(varCode);             
             PSCHideShowShoppingBubbleCartAddedItem(varCode, true);             
             PSCHideShowMultiShoppingCartAddedToBagSection(true);
             
             //Increment cartItems
             cartItems++;
                
             //Except for the last item added to bag, show the product line line divider.
             if(i != (selectedAddToBagItems.length - 1))
             {                
                PSCHideShowShoppingBubbleCartAddedItemLineDivider(varCode, true);    
             }
         }        
    }     
    
    //display error message is any exists
    if(productsWithErrorStr.length > 1)
    { 
        PSCHideShowMultiShoppingCartBubbleErrorMsg(productsWithErrorStr, true);
    }
    else
    {
        PSCHideShowMultiShoppingCartBubbleErrorMsg("", false);
    }
         
    //now show the shopping cart bubble
    PSCHideShowMultiShoppingCartBubble(true);
        
}

//Parses an error message string and returns a JSON object of ErrorMessages 
//Received from WebService in the format {"ErrorMessages":[ {"PrdParentCode": "", "PrdParentName": "", "VariantCode": "", "VariantName": "", "VariantDescription": "", "ErrorCode": "", "ErrorMessage": "" }]}
function PSCGetErrorMessagesForProducts(errorString)
{
    //Construct JSON Object. 
    if(errorString!=null  )
    {
        try
        {
            var jsonErrorMessages = eval('(' + errorString + ')');
            return jsonErrorMessages;
        }
        catch(err)
        {}
    }
     else {return null;}
}


//AddMultipleProductOnComplete Handler
function PSCAddMultipleProductOnComplete(result) 
{   
   DoDefault();
   try 
   {          
        //  if(result.ActivityStatus!=null && result.ActivityStatus==false){}
        //    alert("Status:"+result.ActivityStatus+"\nError:"+result.ErrorString);
        var  productJSONErrorMessages =  PSCGetErrorMessagesForProducts(result.ErrorString);
        
        var  selectedAddToBagItems = PSCGetAddToBasketItems();
        
        PSCDisplayShoppingCartBubble(selectedAddToBagItems, productJSONErrorMessages)
        
        if (result != null) 
        {
          
          //display the shopping cart totals
           _WebServiceAPI.RetrieveShoppingCart(GetCurrentCustomerID(),_ShoppingCartBubble_Class.RetrieveShoppingCartResultHandler);
        }
        //reset value            
         
    }
    catch (err) 
    { 
        alert(err);
    }
                 
}

/*********************************/
