var Pedido = {
  qtde: 0,
  subtotal: 0,
  frete: 0,
  desconto: 0,
  seguro: 0,
  total: 0,
  parcela: 0,
  parcelas: 1,

  toNum: function (s) { return Math.ceil(parseFloat('0'+s.replace(',', '.'))); },
  toStr: function (f) { return Math.ceil(f).toFixed(2).replace('.', ','); },

  refreshSubtotal: function() {
    var qtde = 0;
    $$('.item input.qtde').each(function(element) {
      if (element.value.length > 0) {
        qtde += Pedido.toNum(element.value);
      }
    });
    var subtotal = 0;
    $$('.item .subtotal').each(function(element) {
      if (element.innerHTML.length > 0)
        subtotal += Pedido.toNum(element.innerHTML);
    });
    Pedido.qtde = qtde;
    Pedido.subtotal = subtotal;
    Pedido.desconto = Math.max(0, Math.min(0.04 * (qtde - 1), 0.2)) * subtotal;
    Pedido.seguro = subtotal * 0.01;
    $('subtotal').innerHTML = Pedido.toStr(subtotal);
    $('desconto').innerHTML = Pedido.toStr(Pedido.desconto);
    Pedido.refreshTotal();
  },

  requestFrete: function() {
    $('frete').innerHTML = '...';
    new Ajax.Request('ajax-frete.php', {
      method: 'get',
      parameters: {
        uf: $F('pedido_estado'),
        cid: $F('pedido_cidade'),
        cep: $F('pedido_cep')
      },
      onSuccess: function(transport) {
        Pedido.frete = Pedido.toNum(transport.responseText);
        Pedido.refreshFrete();
      }
    });
  },

  refreshFrete: function() {
    Pedido.refreshTotal();
  },

  valParcela: function(n) {
    var base = (Pedido.subtotal - Pedido.desconto);
    if (n == 0) return base * 0.90;
    if (n == 1 && $F('pedido_indica') == 'superd') return base * 0.75;
    if (n == 1) return base * 0.80;
    if (n <= 2) return base / n;
    return base * (1 + n * 0.05) / n;
    //juro = Math.max(0, (n - 1) * 0.04 * Pedido.subtotal);
    //return (Pedido.subtotal - Pedido.desconto + juro) / n;
  },

  refreshTotal: function() {
    if ($F('pedido_cidade').length < 3) {
      $('frete').innerHTML = '-';
      $('total').innerHTML = '-';
      $('pagseguro').hide();
    }
    else {
      Pedido.total = Pedido.subtotal + Pedido.frete + Pedido.seguro - Pedido.desconto;
      var frete = Pedido.frete + Pedido.seguro;
      Pedido.parcela = Pedido.valParcela(Pedido.parcelas);
      $('frete').innerHTML = Pedido.toStr(frete);
      $('total').innerHTML = Pedido.toStr(Pedido.total);
      var select = $('pedido_parcelas');
      for (var i = 6; i >= 0; i--) {
        var parcela = Pedido.valParcela(i);
        var primeira = Pedido.toStr(parcela + Pedido.frete + Pedido.seguro)
        if (i == 0)
          $('pagseguro').writeAttribute('href', 'pagseguro.php?p1='+primeira);
        if (i == 0)
          var text = primeira + ' no PagSeguro';
        else if (i == 1)
          var text = '1x ' + primeira;
        else
          var text = primeira + ' + '+(i-1)+'x '+Pedido.toStr(parcela);
        select.options[i].text = text;
        // Ocultar opção se valor da parcela menor que $250
        if (parcela < 250.0 && i > 1) {
          if (select.selectedIndex == i)
            select.selectedIndex = i-1;
          // FIXME: MSIE não oculta o item
          $(select.options[i]).hide();
        }
        else
          $(select.options[i]).show();
      }
      if ($F('pedido_parcelas') == 0)
        $('pagseguro').show();
      else
        $('pagseguro').hide();
    }
  },

  qtdeChange: function(event) {
    var id = '#'+this.parentNode.parentNode.id;
    var qtde = Pedido.toNum(this.value);
    var price = Pedido.toNum($$(id+' .price')[0].innerHTML);
    var subtotal = qtde * price;
    $$(id+' .subtotal')[0].innerHTML = Pedido.toStr(subtotal);
    Pedido.refreshSubtotal();
  },

  addItem: function(qtde, produto, item, inome, pnome, val) {
    var produtoNode = $('produto_'+produto);
    if (!produtoNode) {
      produtoNode = new Element('tbody', {'id':'produto_'+produto});
      var th = new Element('th', {'colspan':'4'});
      th.update(pnome);
      var tr = new Element('tr');
      tr.appendChild(th);
      produtoNode.appendChild(tr);
      $('pedido_table').appendChild(produtoNode);
    }

    var itemNode = $('item_'+item);
    if (!itemNode) {
      itemNode = new Element('tr', {'class':'item','id':'item_'+item});

      var node = new Element('td', {'colspan':'2'});
      var input = new Element('input', {'type':'text','class':'qtde',
        'size':'2','maxlength':'2','name':'pedido[items]['+item+']',
        'id':'pedido_items_'+item,'value':qtde});
      Event.observe(input, 'change', Pedido.qtdeChange);
      node.appendChild(input);
      node.appendChild(new Element('span').update(' '));
      node.appendChild(new Element('label', {'for':'pedido_items_'+item
        }).update(inome));
      itemNode.appendChild(node);

      node = new Element('td', {'class':'numeric'});
      node.appendChild(new Element('span', {'class':'price'}).update(val));
      itemNode.appendChild(node);

      node = new Element('td', {'class':'numeric'});
      node.appendChild(new Element('span', {'class':'subtotal'}).update(
        Pedido.toStr(qtde*Pedido.toNum(val))));
      itemNode.appendChild(node);

      produtoNode.appendChild(itemNode);
      Pedido.refreshSubtotal();
      Effect.Pulsate(produtoNode.id, {pulses: 2, duration:1});
    }
  }
}


Event.observe(window, 'load', function () {
  new Validation($('pedido'), {immediate:true, stopOnFirst: true,
    onFormValidate: function(result, form) {
      if (Pedido.subtotal == 0) {
        alert('Seu pedido não contém nenhum item');
        return false;
      }
      return result;
    }});

  for (var i = 2; i <= 6; i++) {
    var node = new Element('option', {'value':i}).update(i+'x');
    $('pedido_parcelas').appendChild(node);
    node.hide();
  }

  $$('#pedido_estado, #pedido_cidade').each(function (element) {
    Event.observe(element, 'change', function(event) {
      Pedido.requestFrete();
    });
  });

  $$('.item input.qtde').each(function (element) {
    Event.observe(element, 'change', Pedido.qtdeChange);
  });


  Event.observe($('add_button'), 'click', function(event) {
    var arr = $F('add_item').split('|');
    if (arr.length < 5) return;
    Pedido.addItem(1, arr[0], arr[1], arr[2], arr[3], arr[4]);
    // Remover seleção
    var i = $('add_item').selectedIndex;
    $('add_item').selectedIndex = 0;
    $('add_item').remove(i);
  });

  Event.observe($('pedido_cep'), 'blur', function(event) {
    var cep = $F('pedido_cep');
    if (cep.length < 9) return;
    new Ajax.Request('ajax-cep.php', {
      method: 'get',
      parameters: {'cep': cep },
      onSuccess: function (transport) {
        var json = transport.responseText.evalJSON();
        if (json == null) return;
        $('pedido_endereco').value = json.logradouro+' ';
        $('pedido_bairro').value   = json.bairro;
        $('pedido_cidade').value   = json.cidade;
        $('pedido_estado').value   = json.estado;
        Pedido.frete               = json.frete;
        Validation.validate('pedido_endereco');
        Validation.validate('pedido_bairro');
        Validation.validate('pedido_cidade');
        Validation.validate('pedido_estado');
        $('pedido_endereco').focus();
        Pedido.refreshFrete();
      }
    });
  });
  Event.observe($('pedido_indica'), 'change', function(event) {
    Pedido.refreshSubtotal();
  });

  Event.observe($('pedido_parcelas'), 'change', function(event) {
    if ($F('pedido_parcelas') == 0)
      $('pagseguro').show();
    else
      $('pagseguro').hide();
  });

  $('pagseguro').hide();
  $('pagseguro').innerHTML = 'prever cart&atilde;o';
  Pedido.refreshSubtotal();
});
