var cart = {};

cart.ajax_url = '/cart/ajax';
cart.form_url = '/cart/checkout';
cart.default_shipment = 6;
cart.default_payment = 312;

cart.big_cart = false;

cart.products = [];
cart.products_full;
cart.cities;
cart.cities_all;
cart.shipments;
cart.payment;

cart.selected_city;
cart.selected_shipment;
cart.selected_payment;
cart.total;
cart.full_weight;
cart.shipment_price;

cart.old_city;
cart.old_shipment;


$(document).ready(function()
{
  cart.render_cart();
});

// Вызывается в конце скрипта
cart.init = function()
{
  cart.products = $.cookie('cart_products') ? JSON.parse($.cookie('cart_products')) :[];
  cart.selected_city = $.cookie('cart_selected_city') ? $.cookie('cart_selected_city') : 'city--moskva';
  cart.selected_shipment = $.cookie('cart_selected_shipment') ? $.cookie('cart_selected_shipment') : cart.default_shipment;
  cart.selected_payment = $.cookie('cart_selected_payment') ? $.cookie('cart_selected_payment') : cart.default_payment;;
  
  cart.get_products();
  cart.get_cities();
  cart.get_shipments();
  cart.get_payments();
  
  cart.init_products();
}

// Полное обновление корзины
cart.render_cart = function()
{
  cart.update_products();
  cart.update_messages();
  cart.update_products_prices();
  cart.update_cities();
  cart.update_shipment_price();
  cart.update_shipments();
  cart.update_full_price();
  cart.update_payments();
  cart.update_all();
}

/*
 * Функции update_ занимаются только HTML кодом и изменяют
 * глобальные переменные только с префиксом old_
 * по которым они определяют надо ли обновлять HTML-код или нет
 */

// Обновление HTML блока с товарами
cart.update_products = function()
{
  var cart_html = '';
  
  if(cart.products.length == 0)
  {
    cart_html += '<div style="padding: 0 5px;">Ваша корзина пуста.</div><br/>'
  }
  else
  {
    cart_html += '<table class="cart_table">';
    for (var i=0;i<cart.products.length;i++) {
      var product = cart.products[i];
      var product_full = cart.products_full[product.id];
  
      if(parseInt(product.qty) == 0) continue;
      
      cart_html += '<tr class="cart_product_line">';
        cart_html += '<td><div class="cart_product_name"><a href="/item/' + product_full.link + '">' + product_full.name + '</a></div></td>';
        cart_html += '<td><input name="products[' + product.id + ']" class="cart_product_input" value="' + product.qty + '" onkeyup="this.value = cart.change_qty(' + product.id + ',this.value);" onchange="this.value = cart.change_qty(' + product.id + ',this.value);"/></td>';
        cart_html += '<td><div class="cart_product_price" id="cart_product_price_' + product.id + '"></div></td>';
        cart_html += '<td><a class="cart_product_delete" href="#" onclick="cart.delete_product(' + product.id + ');cart.render_cart();return false;" title="Убрать ' + product_full.name + ' из корзины">x</a></td>';
      cart_html += '</tr>';
    }
    cart_html += '</table>';
    
    if(cart.products.length > 1)
    {
      cart_html += '<div class="cart_total_box">Всего: <span id="cart_total"></span></div>';
      cart_html += '<div class="cart_space">&nbsp;</div>';
    }
    //cart_html += '<div class="ajax_cart_button_div2" style="border-top:1px dashed #B2B2B2;">';
    //cart_html += '<input name="submit" type="submit" onclick="window.location = \'/cart/checkout\';return false;" value="ПЕРЕЙТИ В КОРЗИНУ"/>';
    //cart_html += '</div>';
  }
  
  $('#cart_products').html(cart_html);
}

cart.update_messages = function()
{
  var message2 = false;
  var message3 = false;
  for (var i=0;i<cart.products.length;i++) {
    var product = cart.products[i];
    var product_full = cart.products_full[product.id];
    
    if(parseInt(product.qty) > parseInt(product_full.quantity) && parseInt(product.qty) <= parseInt(product_full.count))
    {
      //$('#product_stock_'+product.id).html(' ** ');
      //message2 = true;
    }
    else if(parseInt(product.qty) > parseInt(product_full.count))
    {
      //$('#product_stock_'+product.id).html(' *** ');
      //message3 = true;
    }
    else
    {
      $('#product_stock_'+product.id).html('');
    }
  }
  
  message2 ? $('#count_message2').show() : $('#count_message2').hide();
  message3 ? $('#count_message3').show() : $('#count_message3').hide();
}

// Обновление HTML городов
cart.update_cities = function()
{
  cart.update_cities_select();

  cart.update_cities_input();
  
  cart.update_city_input_value();
}

// обновление селекта с городами
cart.update_cities_select = function()
{
  var cart_html = '';

  cart_html += '<select id="cart_city_select" name="city" onchange="cart.change_city_from_select(this.value);">';
  cart_html += '<option value="--"></option>';
  cart_html += '<optgroup label=" Города">';
  for (var i=0;i<cart.cities.cities.length;i++) {
    var city = cart.cities.cities[i];

    cart_html += '<option value="' + city.code + '">' + city.name + '</option>';
  }
  cart_html += '</optgroup>';
  cart_html += '<optgroup label=" Регионы">';
  for (var i=0;i<cart.cities.regions.length;i++) {
    var city = cart.cities.regions[i];

    cart_html += '<option value="' + city.code + '">' + city.name + '</option>';
  }
  cart_html += '</optgroup>';
  cart_html += '<optgroup label=" Страны">';
  for (var i=0;i<cart.cities.countries.length;i++) {
    var city = cart.cities.countries[i];

    cart_html += '<option value="' + city.code + '">' + city.name + '</option>';
  }
  cart_html += '</optgroup>';
  cart_html += '</select>';

  $('#cart_cities').html(cart_html);
  //$('#cart_cities_select').html(cart_html);
}

cart.update_cities_input = function()
{
  var cart_html = '';
  cart_html += '<input id="cart_city_input"/>';

  $('#cart_cities').append(cart_html);

  $("#cart_city_input").autocomplete(cart.cities_all, {
    cacheLength: 0,
    selectFirst: true,
    max: 5,
    formatItem: function(item) {
      return item.name;
    }
  }).result(function(event, item) {
    cart.change_city(item.code);
  });
}

// Обновляет значение input с городом
cart.update_city_input_value = function()
{
  var value = '';
  for (var i=0;i<cart.cities_all.length;i++)
  {
    if(cart.cities_all[i].code == cart.selected_city)
    {
      value = cart.cities_all[i].name;
    }
  }
  $('#cart_city_input').val(value);
}

// Обновление HTML списка доставок
cart.update_shipments = function()
{
  var cart_html = '';
  cart_html += '<select class="cart_shipment_select" id="cart_shipment" name="shipment" onchange="cart.change_shipment(this.value);">';
  if(cart.selected_city == 'city--moskva')
  {
    for (var i=0;i<cart.shipments.moscow.length;i++) {
      var ship = cart.shipments.moscow[i];
      
      cart_html += '<option value="' + ship.id + '">' + ship.select_name + '</option>';
    }
  }
  else
  {
    for (var i=0;i<cart.shipments.all.length;i++) {
      var ship = cart.shipments.all[i];
      
      cart_html += '<option value="' + ship.id + '">' + ship.select_name + '</option>';
    }
  }
  cart_html += '</select>';
  
  $('#cart_shipments_select').html(cart_html);
  $('#cart_shipment').val(cart.selected_shipment);
  
  cart.selected_shipment = $('#cart_shipment').val()
}

//Обновление HTML списка способов оплат
cart.update_payments = function()
{
  cash = cart.get_cash(cart.selected_shipment);
  
  var cart_html = '';
  cart_html += '<select class="cart_payment_select" id="cart_payment" name="payment" onchange="cart.change_payment(this.value);">';
  for (var i=0;i<cart.payments.length;i++)
  {
    var payment = cart.payments[i];
    
    if(!cash && payment.cash) continue;
      
    cart_html += '<option value="' + payment.id + '">' + payment.name + '</option>';
  }
  cart_html += '</select>';
  
  $('#cart_payments_select').html(cart_html);
  $('#cart_payment').val(cart.selected_payment);
  
  cart.selected_payment = $('#cart_payment').val();
  cart.old_payment = cart.selected_payment;
}

// Обновление цен в корзине
cart.update_products_prices = function()
{
  cart.total = 0;
  cart.full_weight = 0;
  for (var i=0;i<cart.products.length;i++) {
    var product = cart.products[i];
    var product_full = cart.products_full[product.id];
    
    var amount = product.qty * product_full.price;
    
    $('#cart_product_price_' + product.id).html(amount + ' р');
    cart.total += amount;
    cart.full_weight += product.qty * product_full.weight;
  }

  $('#cart_total').html('<b>'+cart.total+'</b>' + ' р');
}

//Обновление цен доставки
cart.update_shipment_price = function()
{
  if(cart.full_weight == 0)
  {
    cart.full_weight = 0.1;
  }
  cart.shipment_price = 0;
  if(cart.total > 0)
  {
    var total_amount = 0;
    for (var i=0;i<cart.products.length;i++) total_amount += cart.products[i].qty;

    var data = {
      amount: cart.total,
      weight: cart.full_weight,
      city: cart.selected_city,
      size: parseFloat(1.5 * total_amount)
    }
    cart.server_ajax('shipment_price', data, function (data, textStatus) {
      cart.shipment_price = data.shipment_price;
    });
  }
}

//Обновление цен оплаты
cart.update_full_price = function()
{
  var full_price = 0;
  var full_price_name = 'р';
  
  var amount = parseInt(cart.total);
  if(cart.shipment_price != 0)
  {
    amount += parseInt(cart.shipment_price[cart.selected_shipment].price);
  }
  if(amount > 0)
  {
    var data = {
      amount: amount,
      //payment: cart.selected_payment,
      currency: 'RUR'
    }
    
    cart.server_ajax('price', data, function (data, textStatus) {
      cart.price = data.price;
    });
  }
  else
  {
    cart.price = 0;
  }
}

// Обновление всего
cart.update_all = function()
{
  if(cart.shipment_price == 0 || cart.shipment_price[cart.selected_shipment].price == 0)
  {
    $('#shipment_box').hide();
    $('#days_box').hide();
  }
  else
  {
    $('#shipment_box').show();
    $('#cart_shipment_price').html('<b>'+ cart.shipment_price[cart.selected_shipment].price + '</b> руб');
    if(cart.shipment_price[cart.selected_shipment].day_min || cart.shipment_price[cart.selected_shipment].day_max)
    {
      day_min = cart.shipment_price[cart.selected_shipment].day_min;
      day_max = cart.shipment_price[cart.selected_shipment].day_max;
      $('#days_box').show();
      if(day_min == day_max)
      {
        $('#cart_days').html('<b>'+day_min+'</b>');
      }
      else
      {
        $('#cart_days').html('<b>'+day_min+'-'+day_max+'</b>');
      }
      
    }
    else
    {
      $('#days_box').hide();
    }
  }
  if(cart.price != 0)
  {
    $('#cart_full_price').html('<b>'+ cart.price[cart.selected_payment].amount + '</b> ' + cart.price[cart.selected_payment].name);
  }
  else
  {
    $('#cart_full_price').html('-');
  }
  if(cart.full_weight != 0)
  {
    $('#cart_weight').html(cart.full_weight);
  }
  else
  {
    $('#cart_weight').html('-');
  }
  
  
  var selected_shipment = null;
  
  //cart_shipment_desc
  for (var i=0;i<cart.shipments.moscow.length;i++)
  {
    var ship = cart.shipments.moscow[i];
    if(ship.id == cart.selected_shipment)
    {
      selected_shipment = ship;
    }
  }
  for (var i=0;i<cart.shipments.all.length;i++)
  {
    var ship = cart.shipments.all[i];
    if(ship.id == cart.selected_shipment)
    {
      selected_shipment = ship;
    }
  }
  if(selected_shipment)
  {
    $('#cart_shipment_desc').html(selected_shipment.description);
    if(selected_shipment.tk == "1")
    {
      $('#cart_shipment_price').append('<br/> Цена определяется тарифами ТК');
      $('#cart_shipment_text').html('Стоимость доставки до транспортной компании');
    }
    else
    {
      $('#cart_shipment_text').html('Стоимость доставки');
    }
  }
  
  //cart_payment_desc
  for (var i=0;i<cart.payments.length;i++)
  {
    var payment = cart.payments[i];
    if(payment.id == cart.selected_payment)
    {
      $('#cart_payment_desc').html(payment.descr);
    }
  }
}

// Добавление нового товара в корзину
cart.add_product = function(id)
{
  var first_product = !cart.products.length; 

  for (var i=0;i<cart.products.length;i++)
  {
    if(cart.products[i].id == id)
    {
      cart.products[i].qty++;
      cart.render_cart();
      cart.update_cookie();
      return false;
    }
  }
 
  var product = {
    id: id,
    qty: 1
  }
  cart.products.push(product);
  
  cart.update_cookie();
  window.location.reload();
}

// удаление товара из корзины
cart.delete_product = function(id)
{
  for (var i=0;i<cart.products.length;i++) {
    if(cart.products[i].id == id)
    {
      cart.products.splice(i,1);
    }
  }
  cart.update_cookie();
}

// Изменение количества (событие onkeyup и onchange). Возвращает очищенное от мусора число
cart.change_qty = function(product_id, new_quantity)
{
  // оставляем только числа
  new_quantity = new_quantity.replace(/\D/,'');
  
  for (var i=0;i<cart.products.length;i++) {
    if(cart.products[i].id == product_id)
    {
      if(cart.products[i].qty != new_quantity)
      {
        cart.products[i].qty = new_quantity;
        cart.update_messages();
        cart.update_products_prices();
        cart.update_shipment_price();
        cart.update_shipments()
        cart.update_full_price();
        cart.update_payments();
        cart.update_cookie();
        cart.update_all();
      }
    }
  }
  
  return new_quantity;
}

//Изменение городa
cart.change_city = function(new_city)
{
  cart.selected_city = new_city;
  
  cart.set_default_shipment(new_city);
  
  cart.update_shipment_price();
  cart.update_shipments();
  cart.update_full_price();
  cart.update_payments();
  cart.update_cookie();
  cart.update_all();
}

// Изменение селекта с городом
cart.change_city_from_select = function(new_city)
{
  if(new_city != '--')
  {
    cart.change_city(new_city);
    cart.update_city_input_value();
  }
  $('#cart_city').val('--');
}

cart.set_default_shipment = function(city)
{
  //доставки по умолчанию
  if(city == 'city--moskva')
  {
    cart.selected_shipment = 1;
  }
  else
  {
    cart.selected_shipment = 12;
  }
}

//Изменение доставки (событие onchange)
cart.change_shipment = function(new_shipment)
{
  cart.selected_shipment = new_shipment;
  
  cart.update_payments();
  cart.update_full_price();

  cart.update_cookie();
  cart.update_all();
}

//Изменение оплаты (событие onchange)
cart.change_payment = function(new_payment)
{
  cart.selected_payment = new_payment;
  cart.update_cookie();
  cart.update_all();
}

// Возвращает cash (возможность оплачивать наличными в зависимости от
// выбранного способа доставки
cart.get_cash = function(shipment_id)
{
  var new_cash = -1;
  // пройдем по всем доставкам в зависимости от выбранного города и узнаем о 
  // возможности оплачивать наличными при выбранном способе доставки
  if(cart.selected_city == 'city--moskva')
  {
    for (var i=0;i<cart.shipments.moscow.length;i++) {
      if(cart.shipments.moscow[i].id == shipment_id)
      {
        new_cash = cart.shipments.moscow[i].cash;
      }
    }
  }
  else
  {
    for (var i=0;i<cart.shipments.all.length;i++) {
      if(cart.shipments.all[i].id == shipment_id)
      {
        new_cash = cart.shipments.all[i].cash;
      }
    }
  } 
  
  return new_cash;
}

// проверка на товары с количеством=0
cart.init_products = function()
{
  var new_products = cart.products;
  for (var i=0;i<cart.products.length;i++) {
    var product = cart.products[i];
    
    if(parseInt(product.qty) == 0)
    {
      new_products.splice(i,1);
    }
    
    if(cart.products_full[product.id] === undefined)
    {
      new_products.splice(i,1);
    }
  }
  
  cart.products = new_products;
  cart.update_cookie();
}

//получение списка товаров с сервера
cart.get_products = function()
{
  cart.server_ajax('products', {}, function (data, textStatus) {
    cart.products_full = data.products;
  });
}

// получение списка городов с сервера
cart.get_cities = function()
{
  /*cart.server_ajax('cities', {}, function (data, textStatus) {
    cart.cities = data;
    cart.cities_all = [].concat(cart.cities.cities, cart.cities.regions, cart.cities.countries);
  });*/
  cart.cities = global_cities;
  cart.cities_all = [].concat(cart.cities.cities, cart.cities.regions, cart.cities.countries);
}

// получение списка доставок с сервера
cart.get_shipments = function()
{
  cart.server_ajax('shipments', {}, function (data, textStatus) {
    cart.shipments = data.shipments;
  });
}

//получение списка оплат с сервера
cart.get_payments = function()
{
  cart.server_ajax('payments', {}, function (data, textStatus) {
    cart.payments = data.payments;
  });
}


cart.update_cookie = function()
{
  $.cookie('cart_products', JSON.stringify(cart.products), { expires: 30, path: '/' });
  $.cookie('cart_selected_city', cart.selected_city, { expires: 30, path: '/' });
  $.cookie('cart_selected_shipment', cart.selected_shipment, { expires: 30, path: '/' });
  $.cookie('cart_selected_payment', cart.selected_payment, { expires: 30, path: '/' });
}

// отправление запроса на сервер
cart.server_ajax = function(action, params, success_fnc)
{
  $.ajax({
      url: cart.ajax_url + '/act/' + action,
      data: params,
      dataType : "json",
      type: "post",
      async: false,
      success: success_fnc,
      error: function(data,  textStatus)
      {
        //alert('AJAX ERROR: '+data.responseText);
      }
  });
}

cart.init();


