/******* DOCUMENT READY *******/
$(document).ready(function(){

  // price details : toggle
  $('#price_details_show').hide();
  $('#price_details_toggle').click(function(){ togglePriceDetails(); return false; });
  togglePriceDetails();

  // open prices popup (from popup add cart)
  $("#popupCart.add #prices").live('click', function(){
    popupPricesFromAddUpdateCart.dialog('option', 'modal', false);
    popupPricesFromAddUpdateCart.dialog('option', 'position', ['right','center']);
    popupPricesFromAddUpdateCart.dialog('open');
    return false;
  });

  // open prices popup (from popup update cart)
  $("#popupCart.update #prices").live('click', function(){
    var url = $(this).attr('href');
    $("#popupPrices").load(url+' #popupPrices > *', null, function(){
      popupPricesFromAddUpdateCart.dialog('option', 'modal', false);
      popupPricesFromAddUpdateCart.dialog('option', 'position', ['right','center']);
      popupPricesFromAddUpdateCart.dialog('open');
    });
    return false;
  });

  // prices popup instance (from popup add/update cart)
  var popupPricesFromAddUpdateCart = $("#popupPrices").dialog({
    autoOpen: false,
    bgiframe: true,
    width: 450,
    height: 400,
    minWidth: 450,
    minHeight: 200,
    modal: false,
    position: ['right','center']
  });

  // open cart popup
  $("#addcart a, .addcart a").live('click', function(){
    var url = $(this).attr('href');
    $("#popupCart.add").load(url, null, function(){ popupCartAdd.dialog('open'); });
    return false;
  });

  // cart popup instance
  var popupCartAdd = $("#popupCart.add").dialog({
    autoOpen: false,
    bgiframe: true,
    width: 450,
    height: 206,
    minWidth: 450,
    minHeight: 200,
    position: ['center','center'],
    modal: true,
    closeOnEscape: false,
    dialogClass: 'no-close-cross'
  });
  
  //  open update cart popup
  $('#cart .media-actions-edit a').click(function(){
    var url = $(this).attr('href');
    $("#popupCart.update").load(url, null, function(){ popupCartUpdate.dialog('open'); });
    return false;
  });

  // update cart popup instance
  var popupCartUpdate = $("#popupCart.update").dialog({
    autoOpen: false,
    bgiframe: true,
    width: 450,
    height: 206,
    minWidth: 450,
    minHeight: 200,
    position: ['center','center'],
    modal: true,
    beforeclose: function(event, ui){ popupPricesFromAddUpdateCart.dialog('close'); }
  });

  // cart remove confirm popup instance
  var popupCartRemoveConfirm = $("#popupCartRemoveConfirm").dialog({
    autoOpen: false,
    bgiframe: true,
    minWidth: 280,
    minHeight: 110,
    resizable: true,
    position: ['center','center'],
    modal: true,
    open: function(event, ui){
      var removeUrl = $('#popupCart.update .formButtons a#doRemove').attr('href');
      $('#popupCartRemoveConfirm .actions #yes a').attr('href', removeUrl);
    }
  });

  // go to order button
  $('#popupCart.add .formButtons #order').live('click', function(){ return addToCart(); });
  
  // continue button
  $('#popupCart.add .formButtons #moreMedias').live('click', function(){ if(addToCart()) { popupCartAdd.dialog('close'); } });
  
  // update
  $('#popupCart.update .formButtons input#doUpdate').live('click', function(){
    popupCartUpdate.dialog('disable');
    var updated = updateCart();
    if(!updated){
      popupCartUpdate.dialog('enable');
    }
    return updated;
  });

  // confirm before remove
  $('#popupCartRemoveConfirm .actions #yes a').live('click', function(){
    popupCartRemoveConfirm.dialog('close');
    popupCartUpdate.dialog('disable');
  });
  $('#popupCartRemoveConfirm .actions #no a').live('click', function(){
    popupCartRemoveConfirm.dialog('close');
    return false;
  });

  // remove
  $('#popupCart.update .formButtons a#doRemove').live('click', function(){
    popupCartRemoveConfirm.dialog('open');
    return false;
  });
  
  // add format button
  $('#popupCart #addFormat a').live('click', function(){
    var newFormatContainer = $(this).parent().prev('.formatContainer').clone();
    var idExploded = explode('-', $(newFormatContainer).attr('id'));
    var newId = idExploded[0]+'-'+(parseInt(idExploded[1])+1);
    $(newFormatContainer).attr('id', newId);
    $(newFormatContainer).children('.remove').css('display', 'block');
    $(newFormatContainer).children('.errorContainer').html('');
    //$('#popupCart').parent().css('height', '300px');
    //$("#popupCart").data("height.dialog", 300);
    //var dlg = $("#popupCart").parents(".ui-dialog:first");
    //dlg.animate({ height: 300});
    //$('#popupCart').css('height', '300px');
    $(this).parent().before(newFormatContainer);
    return false;
  });
  
  // remove format button
  $('#popupCart .formatContainer .remove a').live('click', function(){
    if($('#popupCart .formatContainer').length > 1){
      $(this).parents('.formatContainer').remove();
    }
    return false;
  });
  
  // quantity buttons in popup
  $('#popupCart input[type=button][name^=quantityMinus]').live('click', function(){ decreaseQuantity($(this)); });
  $('#popupCart input[type=button][name^=quantityPlus]').live('click', function(){ increaseQuantity($(this)); });

  // refresh cart full page
  $('#cart #country').change(function(){ $(this).parents('form').submit(); });

});
/******* END OF DOCUMENT READY *******/


/**
 * This function will update cart when adding a media with its format and quantity.
 */
function addToCart(){
  var added = true;
  $.ajax({
    type  : 'POST',
    async : false,
    url   : $('#popupCart form#frm-addCart').attr('action'),
    data  : $('#popupCart form#frm-addCart').serializeArray(),
    success : function(msg){
      var response = msg.documentElement || msg;
      var errors = $(response).find('errors');
      var cart = $(response).find('cart');
      
      // errors in form
      if($(errors).length > 0){
        added = false;
        var allErrors = $(errors).find('error');
        var currentFormatContainerIndex = 0;
        $('#popupCart .formatContainer').each(function(){
          var formatContainer = $(this);
          var errorContainer = $(formatContainer).find('.errorContainer');
          $(errorContainer).html('');
          $(allErrors).each(function(){
            var errorFieldName = $(this).attr('id');
            var errorFieldIndex = $(this).attr('index');
            if(errorFieldIndex == currentFormatContainerIndex){
              var errorContent = $(this).text();
              $(errorContainer).html(errorContent);
            }
          });
          currentFormatContainerIndex++;
        });
      }
      
      // no error
      else {
        var media = $(cart).attr('lastMedia');
        var quantity = 0;
        $(cart).find('item[media='+media+']').each(function(){ quantity += parseInt($(this).attr('quantity')); });
        var mediaInGallery = $('#media-'+media);
        if($(mediaInGallery).length > 0){
          $(mediaInGallery).find('.mediaCartQuantity').html('('+quantity+')');
        }
        else {
          $('.mediaCartQuantity').html('('+quantity+')');
        }
        $('#sidcart small').html($(cart).attr('formattedPrice'));
        $('#sidcart p').html($(cart).attr('formattedQuantity'));
        $('#sidcart #sidcart-order-action a').removeClass('no-action').addClass('order');
      }
    }
  });
  return added;
}

/**
 * This function will update cart when updating an item with its format and quantity.
 */
function updateCart(){
  var updated = true;
  $.ajax({
    type  : 'POST',
    async : false,
    url   : $('#popupCart form #action-update').val(),
    data  : $('#popupCart form#frm-updateCart').serializeArray(),
    success : function(msg){
      var response = msg.documentElement || msg;
      var errors = $(response).find('errors');
      var cart = $(response).find('cart');
      
      // errors in form
      if($(errors).length > 0){
        updated = false;
        var allErrors = $(errors).find('error');
        var currentFormatContainerIndex = 0;
        $('#popupCart .formatContainer').each(function(){
          var formatContainer = $(this);
          var errorContainer = $(formatContainer).find('.errorContainer');
          $(errorContainer).html('');
          $(allErrors).each(function(){
            var errorFieldName = $(this).attr('id');
            var errorFieldIndex = $(this).attr('index');
            if(errorFieldIndex == currentFormatContainerIndex){
              var errorContent = $(this).text();
              $(errorContainer).html(errorContent);
            }
          });
          currentFormatContainerIndex++;
        });
      }
    }
  });
  return updated;
}

/**
 * This function increases quantity for an item to add/update in cart.
 */
function increaseQuantity(element){
  var currentValue = $(element).prev('input').val();
  currentValue = parseInt(currentValue);
  if(isNaN(currentValue)){
    $(element).prev('input').val(1);
  }
  else {
    $(element).prev('input').val(currentValue+1);
  }
}

/**
 * This function decreases quantity for an item to add/update in cart.
 */
function decreaseQuantity(element){
  var currentValue = $(element).next('input').val();
  currentValue = parseInt(currentValue);
  if(isNaN(currentValue)){
    $(element).next('input').val(1);
  } else if(currentValue>1){
    $(element).next('input').val(currentValue-1);
  }
}

/**
 * This function toggles price details rows (taxes, etc.).
 */
function togglePriceDetails(){
  $('.price_details').toggle();
  $('#price_details_show').toggle();
  $('#price_details_hide').toggle();
}
