var MNK = {}

MNK.tracker = function() {};
MNK.alert = function() {};
MNK.login = function() {};
MNK.cart = function(products, price) {
  this.init(products, parseInt(price))
};

$(function() {  
  $.extend(MNK.tracker, {
    installerDownload: function () {
      $.get('/track_installer_download');
    }
  });

  $.extend(MNK.login, {
    checkLoginData: function () {      
      var login = $("#user_login").val();
      var email = $("#user_email").val();      
      $.getJSON('/users/exists', {'login':login, 'email' : email }, function(exists) {
        $("#login_exists").css('display', exists['login'] ? 'inline' : 'none');
        $("#email_exists").css('display', exists['email'] ? 'inline' : 'none');        
      });
    }
  });
  
  $.extend(MNK.alert, {
    confirmStart: function (event) {
      starts_at = new Date(Date.parse(event.data.starts_at))
      now = new Date
      if ((starts_at - now) / 1000 < 120) {
        if (!confirm(event.data.message)) {
          event.stopImmediatePropagation();
          event.stopPropagation();
          event.preventDefault();
        }
      }
    }
  });  
  
  $.extend(MNK.cart.prototype, {
    totalPrice: 0.0,
    totalNum: 0,
    products: {},
    selectedGroups: {},

    cartElem: $('.cart'),
    cartPriceElem: $('.cart .price'),
    cartForm: $('.cart form'),
    cartTotal: $(".cart #cart_num_total"),

    init : function(products, price) {
      this.products = products;
      this.totalPrice = price;
      this.totalNum = parseInt(this.cartTotal.text());
      this.attachEventHandlers();
      var that = this;
      $.map($(".cart_product"), function(e) {
        var id = $($(e).attr("id").split("_")).get(2);
        var product = that.products[id];
        that.hideAddButton(product);        
        if (product.group && product.group != '') {
          that.selectedGroups[product.group] = product.id;
        }
      });
    },

    addToCart: function(id) {
      var product = this.products[id];
      var elem = $('#product_' + id)

      this.addProduct(product);
      this.hideAddButton(product);
      this.updateCart();
    },
    
    updateCart: function() {
      this.cartPriceElem.html(this.totalPrice.toFixed(2));
      this.cartTotal.html(this.totalNum);
    },
    
    hideAddButton: function(product) {
      $('#add_to_cart_'+product.id).hide();
    },
    
    showAddButton: function(product) {
      $('#add_to_cart_'+product.id).show();
    },
    
    attachEventHandlers: function() {
      var that = this;
      $('.delete_product').live('click', function() {
        var id = $($(this).parents(".cart_product").attr("id").split("_")).get(2);
        that.removeProduct(that.products[id]);
      });
    },

    addProduct: function(product) {
      var elem = $('#product_' + product.id);
      
      // If this is a grouped product and another product already exists in the
      // group, remove it
      if (product.group && product.group != '' && this.selectedGroups.hasOwnProperty(product.group)) {            
        var removedProduct = this.products[this.selectedGroups[product.group]];
        this.removeProduct(removedProduct);
      }

      // Update price and item status color
      this.totalPrice += product.price;
      this.totalNum += 1;
      this.updateCartHtml(product);

      // Mark product group as used
      if (product.group && product.group != '') {
        this.selectedGroups[product.group] = product.id;
      }
    },
    
    updateCartHtml: function(product) {
      // Add item to cart
      var productElem = $('<tr id="cart_product_' + product.id + '" class="cart_product"></tr>');
      productElem.append("<td class='first'>"+product.name+"</td>");
      productElem.append("<td>"+product.display_price+"&euro;</td>");      
      productElem.append("<td class='last'><a class='delete_product' href='javascript:void(0);'>x</a></td>");            
      $("tr").has("#cart_num_total").before(productElem)
      this.cartForm.append('<input type="hidden" id="cart_hidden_product_'+product.id+'" name="order[products][]" value="'+product.id+'"/>')            
    },

    removeProduct: function(product) {      
      // Remove item from cart
      $('#cart_product_' + product.id).remove();
      $('#cart_hidden_product_' + product.id).remove();
      var elem = $('#product_' + product.id);

      // Update price and item status color
      this.totalPrice -= product.price;
      this.totalNum -= 1;
      
      this.showAddButton(product);
      
      // Mark product group as non-used
      if (product.group && product.group != '') {
        delete(this.selectedGroups[product.group]);
      }
                  
      this.updateCart();      
    },

    clear: function() {
      this.totalPrice = 0;
      this.cartPriceElem.innerHTML = '0.00';
      this.totalPriceElem.innerHTML = '0.00';
      $(".cart_product").remove();
      $(".cart form input:hidden").remove();      
      $(".available_product input:checked").click();
    }

  });
      
})

