// ----------  Namespace
generic = {};
generic.allowAddToBasketOnOutOfStockItems = false;
generic.p = {};
generic.p.mi = {};
generic.p.mi.displays = new Array();
generic.p.mi.itemMap = new Array();
generic.p.mi.currentSwatch = 0;
generic.p.mi.currentAlt = 0;
generic.p.mi.hasClip = false;
// ----------  Namespace end


// ---------- Product Page

// init
$(document).ready(function()
{     
  setSwatchClickEvents();
  setThumbClickEvents();	
  initSwatch();
  initThumbs();

  // zoom image
  // uncomment to use jquery popup for displaying zoom img
  //  $('#zoomimg').popupWindow({
  //    centerBrowser: 1
  //  });    
  
});

function initSwatch()
{
  /// todo: 1. auto generate swatches from itemmap array.
  ///          currently generated by server side method.
  ///       2. hide swatch if outofstock
	
  // hide swatch if only 1 item exists
  if (generic.p.mi.itemMap.length == 1)
  {
    $("#swatch a").css('display','none');
  }
  // select option's image index by comparing 
  // querystring oid with itemmap array
  else
  {    
    var index = 0;
    //var oid = $('#ctl00_cpBody_hfProductOptionID').attr('value');    
    var oid = $("[id$='_hfProductOptionID']").attr('value');
    	  
    // determine swatch index 
    for (var i=0; i < generic.p.mi.itemMap.length; i++)	  
    {
      if (oid == generic.p.mi.itemMap[i].oid)
      {
        index = i;
        break;  
      }
    }
    generic.p.mi.currentSwatch = index;  
  }	  	  
}

function initThumbs()
{  
  swapImages(generic.p.mi.currentSwatch); 
}

function setSwatchClickEvents()
{
  $("#swatch a").click(function() {
    var index = 0;
    var oid = $(this).attr("oid");

    // determine which swatch was clicked
    for (var i = 0; i < generic.p.mi.itemMap.length; i++) 
    {
      if (oid == generic.p.mi.itemMap[i].oid) 
      {
        index = i;
        break;
      }
    }

    // set the current swatch
    generic.p.mi.currentSwatch = index;

    // display option price
//    //unskined control, Maggie had deleted the "$"
//    if (generic.p.mi.itemMap[index].promoprice > 0)
//      $("#productPrice").html('<span>$' + generic.p.mi.itemMap[index].price + "</span> <span class='discount'> $" + generic.p.mi.itemMap[index].promoprice + "</span>&nbsp;&nbsp;")
//    else
//      $("#productPrice").html('$' + generic.p.mi.itemMap[index].price + "&nbsp;&nbsp;")

    if (generic.p.mi.itemMap[index].promoprice > 0)
    	$("#productPrice").html("<span class='priceOld'>" + generic.p.mi.itemMap[index].price + "</span> <span class='priceSale'> " + generic.p.mi.itemMap[index].promoprice + "</span>&nbsp;&nbsp;")
    else
    	$("#productPrice").html(generic.p.mi.itemMap[index].price)

    // depending on stock, prevent add to basket + show nostock msg
    if (generic.p.mi.itemMap[index].stock > 0)// && (generic.p.mi.itemMap[index].stock >= generic.p.mi.itemMap[index].multipack)) 
    {
      $("#spanNoStock").attr('style', 'display:none');
      $("[id$='_btnAddToBasket']").attr('style', '');
    }
    else 
    {
      // only display the nostock message if we do not allow adding items which are out of stock to our basket
      if (generic.allowAddToBasketOnOutOfStockItems == false)
      {
        $("#spanNoStock").attr('style', '');
        $("[id$='_btnAddToBasket']").attr('style', 'display:none');
      }
    }

    // display ship time estimate
    if (generic.p.mi.itemMap[index].stock > 0) //&& (generic.p.mi.itemMap[index].stock >= generic.p.mi.itemMap[index].multipack)
    {
      $("#shipEstimate #stockStatus").html("In stock");
      $("#shipEstimate #shipTime").html(generic.p.mi.itemMap[index].shiptime);      
    }
    else 
    {
      $("#shipEstimate #stockStatus").html("Out of stock");
      $("#shipEstimate #shipTime").html("2 - 3 weeks"); 
    }

    // display multipack quantity notice
    if (generic.p.mi.itemMap[index].multipack > 2)
    {
      $("#spanMultipack").attr('style', '');
      $("#spanMultipackQuantity").html(generic.p.mi.itemMap[index].multipack);
    }
    else
    {
      $("#spanMultipack").attr('style', 'display:none');
    }

    // display min order quantity notice
    if (generic.p.mi.itemMap[index].minorder > 1) {
      $("#spanMinOrder").attr('style', '');
      $("#spanMinOrderQuantity").html(generic.p.mi.itemMap[index].minorder);
    }
    else {
      $("#spanMinOrder").attr('style', 'display:none');
    }    

    // set thumbnails and main image, hide or show thumb boxes depending on the quantity of images available
    swapImages(index);

    // set hidden-field to selected oid
    $("[id$='_hfProductOptionID']").attr('value', oid);

    return false;
  });  
}

function setThumbClickEvents()
{
    $("p.thumbs a").click(function() {

        var altImageArray = generic.p.mi.displays[generic.p.mi.currentSwatch].images;
        for (var i = 0; i < altImageArray.length; i++) 
        {
            // if 5 alternate images detected, exit
            if (i == 4)
                break;
            // match clicked thumbnail with imageArray thumbnail      
            if ($(this).find("img").attr("src") == altImageArray[i].thumb) {
                // set zoom image
                $("#zoomimg").attr({ href: altImageArray[i].large, alt: altImageArray[i].title, title: altImageArray[i].title });
                // set main image
                $("#largeImg").attr({ src: altImageArray[i].main, alt: altImageArray[i].title, title: altImageArray[i].title });
                break;
            }
        }

        return false;
    });
}


function swapImages(index)
{ 
  // index out of bounds prevention 
  if (index >= generic.p.mi.displays)
    return;
    
  // determine quantity of images to swap  
  var altImageArray = generic.p.mi.displays[index].images;  
    
  if (altImageArray.length > 0)  
  {
    // set out zoom image
    $("#zoomimg").attr({ href: altImageArray[0].large, alt: altImageArray[0].title, title: altImageArray[0].title });
  
    // set the main image
     $("#largeImg").attr({ src: altImageArray[0].main, alt: altImageArray[0].title, title: altImageArray[0].title });
            
    // get our thumbnails with embedded images
    var thumbs = $("p.thumbs a");
    
    // hide thumbnails
    thumbs.css('display', 'none');       
    
    // set thumbnail image
    for (var i=0; i < altImageArray.length; i++)	
    {         
      // if 5 alternate images detected, exit
      if (i == 4)
        break;   
        
      // set alt thumb
      $(thumbs[i]).find('img').attr({ src: altImageArray[i].thumb, alt: altImageArray[i].title, title: altImageArray[i].title });
            
      // display thumbnail
      $(thumbs[i]).css('display', '');    
    }    
  }
}

function fn_ValidateQuantities(isWishlist) 
{
  // validation var
  var bContinue = true;

  // get user entered quantity
  var quantity = $("[id$='_txtQuantity']").attr('value');

  // get our selected option
  var index = generic.p.mi.currentSwatch;
      
  // ensure value is more than 0 or multiple of multipack quantity
  if (quantity == 0)
  {
    bContinue = false;
    
    if (generic.p.mi.itemMap[index].multipack > 1)
    {
      $("#divQuantityError").html('Please enter a quantity of ' + generic.p.mi.itemMap[index].multipack + ' or a multiple there of.');
    }
    else
    {
      $("#divQuantityError").html('Please enter a quantity of 1 or more.');          
    }
  }

  // ensure quantity entered matches multipack or is multiple there of
  if (generic.p.mi.itemMap[index].multipack > quantity || quantity % generic.p.mi.itemMap[index].multipack > 0)
  {
    bContinue = false;
    $("#divQuantityError").html('Please enter a quantity of ' + generic.p.mi.itemMap[index].multipack + ' or a multiple there of.');
  }

  // ensure quantity set is available in stock. 
  // if we are validating the wishlist we skip this check
  if (generic.p.mi.itemMap[index].stock < quantity && generic.allowAddToBasketOnOutOfStockItems == false && isWishlist == false) 
  {
    bContinue = false;
    $("#divQuantityError").html('The quantity you entered is not available. Current stock is ' + generic.p.mi.itemMap[index].stock + ' unit(s).');
  }

  // ensure the min order quantity is met
  if (generic.p.mi.itemMap[index].minorder > quantity)
  {
    bContinue = false;
    $("#divQuantityError").html('The quantity you entered does not meet the minimum order requirement of ' + generic.p.mi.itemMap[index].minorder + ' unit(s).');    
  }

  // show error
  if (!bContinue)
    $("#divQuantityError").attr('style', ''); 
  // hide error
  else  
    $("#divQuantityError").attr('style', 'display:none');   
  
  // indicate if postback should continue or fail
  return bContinue;    
}

