var cartEmpty = true;
var ajaxCartSummary = {

	refresh : function(parent) {
    ajaxCartSummary.clearCart(parent);
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=loadCart',
			async: false,
      cache: false,
			dataType : "json",
			data: '',
			success: function(jsonData) {
        if (jsonData !== null && typeof jsonData.items !== 'undefined') $.each(jsonData.items, function() {
          var oData = jQuery.parseJSON(this.toString());
          addCartSummaryItem(parent, oData);
          cartEmpty = false;
        });
        refreshCartSummary(parent, jsonData)
     }
    });
/*
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=loadCart',
			async: true,
      cache: false,
			dataType : "json",
			data: '',
			success: function(jsonData) {
        if (jsonData !== null && typeof jsonData.items !== 'undefined') $.each(jsonData.items, function() {
          $("#cart_block_no_products").addClass("hidden");
          if ($('#cart_block #cart_block_list').hasClass('expanded')) {
            ajaxCart.displayRow(this);
          } else ajaxCart.displayRow(this);
         }); else {
           $("#cart_block_no_products").removeClass("hidden");
         }
         $("#cart_block_total_without_tax").text(jsonData.summaryWithoutTax + " Kč");
         $("#cart_block_total").text(jsonData.summaryWithTax + " Kč");
         $("#cart_block_summary .ajax_cart_total").text(jsonData.summaryWithTax + " Kč");
         $("#cart_block_summary .ajax_cart_items").text(jsonData.totalItems);
         $("#cart_block_summary .ajax_cart_quantity").text(jsonData.totalQuantity);
         $("#shopping_cart .ajax_cart_quantity").text(jsonData.totalItems);
         $("#shopping_cart .ajax_cart_total").text(jsonData.summaryWithTax + " Kč");
         

//				ajaxCart.updateCart(jsonData)
			}, 
      error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
*/
	},

  clearCart : function(parent) {
  	if ($("#cart_summary > tbody > tr").length > 0) {
    	$("#cart_summary > tbody > tr").each(function() {
        $(this).remove();
      });
    }
  },

  cartEmpty : function() {
    return cartEmpty;
  }
}

function addCartSummaryItem(parent, data) {
  var priceWithTax = Math.round(1.2 * data.price);
  var totalWithTax = Math.round(1.2 * data.quantity * data.price);
  var tr = $("<tr></tr>").attr({ 
    "class": ["cart_item"].join(' ')            
  }).appendTo(parent);
  var td_description = $("<td></td>").attr({ 
    "class": ["cart_description"].join(' ')            
  }).appendTo(tr);
  var h5_description = $("<h5></h5>").appendTo(td_description);
  var a_description = $("<a href='detail.php?code=" + data.code + "'>" + data.name + "</a>").appendTo(h5_description);                                    
  var td_availability = $("<td></td>").attr({ 
    "class": ["cart_availability"].join(' ')            
  }).appendTo(tr);
  if (data.in_store == 1)  
    var img_availability_src = "css/img/icon/available.gif"; else var img_availability_src = "css/img/icon/available_not.gif"; 
  var img_availability = $("<img />").attr({ 
    "alt": "Skladem",
    "src": img_availability_src
  }).appendTo(td_availability);
  var td_unit = $("<td></td>").attr({ 
    "class": ["cart_unit"].join(' ')            
  }).appendTo(tr);
  var span_unit = $("<span>" + data.price + " Kč</span>").attr({ 
    "class": ["price"].join(' ')            
  }).appendTo(td_unit);
  var td_unit_with_tax = $("<td></td>").attr({ 
    "class": ["cart_unit"].join(' ')            
  }).appendTo(tr);
  var span_unit_with_tax = $("<span>" + priceWithTax + " Kč</span>").attr({ 
    "class": ["price"].join(' ')            
  }).appendTo(td_unit_with_tax);
  var td_quantity = $("<td></td>").attr({ 
    "class": ["cart_quantity"].join(' ')            
  }).appendTo(tr);
  var a_remove_from_cart = $("<a></a>").attr({ 
    "class": ["cart_quantity_delete"].join(' '),            
    "title": ["Supprimer"]           
  }).appendTo(td_quantity);
  a_remove_from_cart.click(function() {
    ajaxCart.removeItem(data.idproduct);
    ajaxCartSummary.refresh(parent);
  });                                          
  var img_quantity = $("<img />").attr({ 
    "class": ["icon"].join(' '),            
    "alt": "Supprimer",
    "src": "css/img/icon/delete.gif"
  }).appendTo(a_remove_from_cart);
  $("<p>" + data.quantity + "</p>").appendTo(td_quantity);
  var a_qty_plus = $("<a></a>").attr({ 
    "class": ["cart_quantity_up"].join(' '),            
    "title": ["Ajouter"]           
  }).appendTo(td_quantity);                                    
  var img_qty_plus = $("<img />").attr({ 
    "alt": "Supprimer",
    "src": "css/img/icon/quantity_up.gif"
  }).appendTo(a_qty_plus);
  $("<br />").appendTo(td_quantity);
  var a_qty_minus = $("<a></a>").attr({ 
    "class": ["cart_quantity_down"].join(' '),            
    "title": ["Retirer"]           
  }).appendTo(td_quantity);                                    
  var img_qty_minus = $("<img />").attr({ 
    "alt": "Retirer",
    "src": "css/img/icon/quantity_down.gif"
  }).appendTo(a_qty_minus);
  var td_total = $("<td></td>").attr({ 
    "class": ["cart_total"].join(' ')            
  }).appendTo(tr);
  var span_total = $("<span>" + totalWithTax + " Kč</span>").attr({ 
    "class": ["price"].join(' ')            
  }).appendTo(td_total);
  a_qty_plus.click(function() {
    ajaxCart.itemQtyPlus(data.idproduct);
    ajaxCartSummary.refresh(parent);
  });                                          
  a_qty_minus.click(function() {
    ajaxCart.itemQtyMinus(data.idproduct);
    ajaxCartSummary.refresh(parent);
  });                                          
}

function refreshCartSummary(parent, data) {
  parent.find("#priceWithoutTax").html(data.summaryWithoutTax + "&nbsp;Kč");
  parent.find("#priceTax").html(data.summaryTax + "&nbsp;Kč");
  parent.find("#priceWithTax").html(data.summaryWithTax + "&nbsp;Kč");
  $("#cart_summary_item_count").html(data.totalItems);
}

var ajaxCart = {

	expand : function(){
		if ($('#cart_block #cart_block_list').hasClass('collapsed')) {
			$('#cart_block #cart_block_summary').slideUp(200, function() {
				$(this).addClass('collapsed').removeClass('expanded');
				$('#cart_block #cart_block_list').slideDown({
					duration: 600,
					complete: function(){$(this).addClass('expanded').removeClass('collapsed');}
				});
			});
			// toogle the button expand/collapse button
			$('#cart_block h4 span#block_cart_expand').fadeOut('slow', function(){
				$('#cart_block h4 span#block_cart_collapse').fadeIn('fast');
			});
			
			// save the expand statut in the user cookie
/*
			$.ajax({
				type: 'GET',
				url: baseDir + 'modules/blockcart/blockcart-set-collapse.php',
				async: true,
				data: 'ajax_blockcart_display=expand' + '&rand=' + new Date().getTime()
			});
*/			
			
		}
	},
	
	collapse : function(){
		
		if ($('#cart_block #cart_block_list').hasClass('expanded'))
		{
			$('#cart_block #cart_block_list').slideUp('slow', function(){
				$(this).addClass('collapsed').removeClass('expanded');
				$('#cart_block #cart_block_summary').slideDown(700, function(){
					$(this).addClass('expanded').removeClass('collapsed');
				});
			});
			$('#cart_block h4 span#block_cart_collapse').fadeOut('slow', function(){
				$('#cart_block h4 span#block_cart_expand').fadeIn('fast');
			});
			
			// save the expand statut in the user cookie
/*
			$.ajax({
				type: 'GET',
				url: baseDir + 'modules/blockcart/blockcart-set-collapse.php',
				async: true,
				data: 'ajax_blockcart_display=collapse' + '&rand=' + new Date().getTime()
			});
*/
		}
	},
	
	refresh : function(){
    ajaxCart.clearCart();
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=loadCart',
			async: true,
      cache: false,
			dataType : "json",
			data: '',
			success: function(jsonData) {
        if (jsonData !== null && typeof jsonData.items !== 'undefined') $.each(jsonData.items, function() {
          $("#cart_block_no_products").addClass("hidden");
          if ($('#cart_block #cart_block_list').hasClass('expanded')) {
            ajaxCart.displayRow(this);
          } else ajaxCart.displayRow(this);
         }); else {
           $("#cart_block_no_products").removeClass("hidden");
         }
         $("#cart_block_total_without_tax").text(jsonData.summaryWithoutTax + " Kč");
         $("#cart_block_total").text(jsonData.summaryWithTax + " Kč");
         $("#cart_block_summary .ajax_cart_total").text(jsonData.summaryWithTax + " Kč");
         $("#cart_block_summary .ajax_cart_items").text(jsonData.totalItems);
         $("#cart_block_summary .ajax_cart_quantity").text(jsonData.totalQuantity);
         $("#shopping_cart .ajax_cart_quantity").text(jsonData.totalItems);
         $("#shopping_cart .ajax_cart_total").text(jsonData.summaryWithTax + " Kč");
 
//				ajaxCart.updateCart(jsonData)
			}, 
      error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
	},
	
	updateCart : function(jsonData) {
		//user errors display
		if (jsonData.hasError)
		{
			var errors = '';
			for(error in jsonData.errors)
				//IE6 bug fix
				if(error != 'indexOf')
					errors += jsonData.errors[error] + "\n";
			alert(errors);
		}
		ajaxCart.expand();
		ajaxCart.updateCartEverywhere(jsonData);
		ajaxCart.hideOldProducts(jsonData);
		ajaxCart.displayNewProducts(jsonData);
		ajaxCart.refreshVouchers(jsonData);
		
		//update 'first' and 'last' item classes
		$('#cart_block dl.products dt').removeClass('first_item').removeClass('last_item').removeClass('item');
		$('#cart_block dl.products dt:first').addClass('first_item');
		$('#cart_block dl.products dt:not(:first,:last)').addClass('item');
		$('#cart_block dl.products dt:last').addClass('last_item');
		
	},
  
  clearCart : function() {
  	if ($('#cart_block #cart_block_list dl.products dt').length > 0) {
    	$('#cart_block_list dl.products dt').each(function() {
        $(this).remove();
      });
    }
  },
  
  displayRow : function(jData) {
    var oData = jQuery.parseJSON(jData.toString());
    var products = $('#cart_block #cart_block_list dl.products');
    var dt = $("<dt id='cart_block_product_1_1'></dt>").attr({ 
      "class": ["first_item"].join(' ')            
    }).appendTo(products);
    dt.hide();
    var span1 = $("<span>x</span>").attr({ 
      "class": ["quantity-formated"].join(' ')            
    }).appendTo(dt);
    $("<span>" + oData.quantity + "</span>").attr({ 
      "class": ["quantity"].join(' ')            
    }).prependTo(span1);
    if ((oData.name.length) > 18) {
      var productName = oData.name.slice(0, 18) + "...";
    } else productName = oData.name;
    var ahref = $("<a href='detail.php?idprod=" + oData.idproduct + "'>" + productName + "</a>").attr({ 
      "class": ["cart_block_product_name"].join(' '),
      "title": "test"            
    }).appendTo(dt);
    var span2 = $("<span></span>").attr({ 
      "class": ["remove_link"].join(' ')            
    }).appendTo(dt);
    var a_remove_from_cart = $("<a>&nbsp;</a>").attr({ 
      "class": ["ajax_cart_block_remove_link"].join(' '),
      "title": "Odstranit položku z košíku."            
    }).appendTo(span2);
    a_remove_from_cart.click(function() {
      ajaxCart.removeItem(oData.idproduct);
    });    
    var span3 = $("<span>" + oData.price + "&nbsp;Kč</span>").attr({ 
      "class": ["price"].join(' ')            
    }).appendTo(dt);
    dt.slideDown();
  },
  
  addItem : function(id, quantity) {
    ajaxCart.clearCart();
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=addItem',
			async: false,
      cache: false,
			dataType : "json",
			data: 'id=' + id + '&quantity=' + quantity,
			success: function(jsonData) {
			}, 
      error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
    ajaxCart.refresh();    
  },  
  
  removeItem : function(id) {
    ajaxCart.clearCart();
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=removeItem',
			async: false,
      cache: false,
			dataType : "json",
			data: 'id=' + id,
			success: function(jsonData) {
			}, 
      error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
    ajaxCart.refresh();
  },

  itemQtyPlus : function(id) {
    ajaxCart.clearCart();
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=plusItem',
			async: false,
      cache: false,
			dataType : "json",
			data: 'id=' + id,
			success: function(jsonData) {
			}, 
      error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
    ajaxCart.refresh();
  },
  
  itemQtyMinus : function(id) {
    ajaxCart.clearCart();
		$.ajax({
			type: 'POST',
			url: 'ajax/cart_op.php?op=minusItem',
			async: false,
      cache: false,
			dataType : "json",
			data: 'id=' + id,
			success: function(jsonData) {
			}, 
      error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
    ajaxCart.refresh();
  }
}

//when document is loaded...
$(document).ready(function(){

	$('#block_cart_collapse').click(function(){
			ajaxCart.collapse();
	});
	$('#block_cart_expand').click(function(){
			ajaxCart.expand();
	});

	ajaxCart.refresh();
});

