var LOADER_DATA = [];

function stopLoader() {
  clearTimeout(LOADER_DATA[0]);
  $.unblockUI();
  LOADER_DATA[1] = 0; // Loader parado forçadamente ou parado com sucesso
}

function startLoader(message, timeout, timeoutMsg) {
  var result;
  $.blockUI({
    message: message
  });
  LOADER_DATA[1] = 1; // Loader em processo
  LOADER_DATA[0] = setInterval(function(){
    stopLoader();
    LOADER_DATA[1] = 2; // Loader com tempo esgotado
    alert(timeoutMsg == undefined ? 'Este processo está demorando muito tempo. Verifique sua conexão com a Internet.' : timeoutMsg);
  }, timeout);
}

function statusLoader(asInt) {
  asInt = asInt !== undefined ? asInt : true;
  if (asInt) return LOADER_DATA[1];
  switch (LOADER_DATA[1]) {
    case 0: return 'stopped';
    case 1: return 'processing';
    case 2: return 'timed out';
  }
}

function encrypt(s) {
  setMaxDigits(19);
  var key = new RSAKeyPair(kp.e, '0', kp.n);
  var result = '';
  
  var blocks = Math.ceil(s.length / 8);
  var slen   = s.length;
  for (var i = 0; i < blocks; i++) {
    if (result)
      result += ' ';
    result += RSAEncrypt(key, s.substring(i * 8, i * 8 + 8));
  }
  
  return result;
}

function updatePosition(noScrollTop) {
  noScrollTop = noScrollTop !== undefined ? noScrollTop : false;
  var c_wh = {
    w: $('.modalContainer').width(),
    h: $('.modalContainer').height()
  };
  var b_wh = {
    w: $(window).width(),
    h: $(window).height()
  };
  var isCenter = b_wh.h > c_wh.h + 30;
  if (noScrollTop && isCenter) {
    $('.modalContainer').css({
      position: $.browser.msie ? 'absolute' : 'fixed',
      top: ($.browser.msie ? b_wh.h / 2 - c_wh.h / 2 + $(window).scrollTop() : b_wh.h / 2 - c_wh.h / 2) + 'px',
      left: (b_wh.w / 2 - c_wh.w / 2) + 'px'
    });
  }
  else {
    $('.modalContainer').css({
      position: 'absolute',
      top: (isCenter ? b_wh.h / 2 - c_wh.h / 2 : 30) + 'px',
      left: (b_wh.w / 2 - c_wh.w / 2) + 'px'
    });
    $(window).scrollTop(0);
  }
  if ($.browser.msie && !isCenter) {
    $('body').css({
      height: (c_wh.h + 30) + 'px'
    });
    $('.modalOverlay').css({
      height: $('body').height() + 'px'
    });
  }
}

function termo(){
  $.get('?route=Principal/termo', function(data){
    $(data).modal({
      close: false,
      containerId: 'mC_Termo',
      overlayId: 'mO_Termo'
    });
    
    updatePosition();
  });
}

function contato() {
  $.get('?route=Principal/contato', function (data) {
    $(data).modal({
      close: false,
      containerId: 'mC_Contato',
      overlayId: 'mO_Contato'
    });
    
    updatePosition();
    $('#js_con_nome').focus();
    $.validator.messages.required = 'Preenchimento obrigatório.';
    $('#js_con_frm').validate({
      rules: {
        con_nome: 'required',
        con_email: {required: true, email: true},
        con_assunto: 'required',
        con_mensagem: {required: true, maxlength: 512}
      },
      messages: {
        con_email: {email: 'E-mail inválido.'},
        con_mensagem: {maxlength: $.format('A mensagem não pode ter mais que {0} caracteres.')}
      },
      errorPlacement: function (error, element) {
        element.parent().find('div').html(error);
      },
      submitHandler: function (form) {
        $(form).ajaxSubmit({
          dataType: 'json',
          beforeSubmit: function() {
            $('#js_con_frm > .formulario').block({
              message: '<img border="0" src="app/main/templates/img/ajax-loader.gif" alt=""/>',
              css: {
                backgroundColor:'#fff',
                border: '0px',
                textAlign: 'center',
                width:'',
                padding: '10px 143px'
              },
              baseZ: 3500
            });
          },
          timeout: 45000,
          error: function(xhr, textStatus, errorThrown) {
            $('#js_con_frm > .formulario').unblock();
            alert('Desculpe, ocorreu um erro.');
          },
          success: function(data) {
            $('#js_con_frm > .formulario').unblock();
            if (data) {
              $(form).resetForm();
              alert('Formulário enviado com sucesso!');
              $.modal.close();
            } else {
              alert('Desculpe, ocorreu um erro. Tente novamente.');
            }
          }
        });
      }
    });
  });
}

function politica() {
  $.get('?route=Principal/politica', function (data) {
    $(data).modal({
      close: false,
      containerId: 'mC_Politica',
      overlayId: 'mO_Politica'
    });
    
    updatePosition();
  });
}

function visualizadorFotos() {
  $('.result_img_large').cycle({
    fx: 'turnDown',
    speed: 'fast',
    timeout: 0,
    pager: '.result_num_large',
    pagerAnchorBuilder: function(i, el) {
      return '<li><a href="#">'+(i+1)+'</a></li>';
    }
  });
  $('.result_img_medium').each(function(ri) {
    $(this).cycle({
      fx: 'turnDown',
      speed: 'fast',
      timeout: 0,
      pager: '#r' + (ri + 1),
      pagerAnchorBuilder: function(i, el) {
        return '<li><a href="#">'+(i+1)+'</a></li>';
      }
    });
  });
}

function limparLista(lista, disable) {
  disable = disable === undefined ? true : disable;
  lista.empty();
  lista.append('<option value=""></option>');
  if (disable) lista.attr('disabled', true);
}

function obterTipoVeiculo(val) {
  switch (val) {
    case '1':
    case '2':
      return 1;
      break;
    case '3':
    case '4':
      return 2;
      break;
    default:
      return 0;
  }
}

function selecionarVeiculo(veiculo, marca, modelo) {
  var opt = obterTipoVeiculo(veiculo.val());
  marca.html('<option value="">Carregando...</option>');
  limparLista(modelo);
  if (opt == 0) {
    limparLista(marca);
  } else {
    marca.attr('disabled', true);
    $.getJSON('?route=Principal/fabricantes/' + opt, function(data) {
      limparLista(marca, false);
      $.each(data, function(k, v) {
        marca.append('<option value="'+v.idFabricante+'">'+v.nome+'</option>');
      });
      marca.attr('disabled', false);
    });
  }
}

function selecionarMarca(veiculo, marca, modelo) {
  var veiculo = obterTipoVeiculo(veiculo.val());
  modelo.html('<option value="">Carregando...</option>');
  if (marca.val() == '') {
    limparLista(modelo);
  } else {
    modelo.attr('disabled', true);
    $.getJSON('?route=Anuncio/modelos/' + veiculo + '/' + marca.val(), function(data) {
      limparLista(modelo, false);
      $.each(data, function(k, v) {
        modelo.append('<option value="'+v.idModelo+'">'+v.descricao+'</option>');
      });
      modelo.attr('disabled', false);
    });
  }
}

function selecionarPreco(inicial, final) {
  $(inicial).change(function() {
    var i = 0, inc = 2, first = 0;
    if (Number($(this).val()) > 0) {
      i = Number($(this).val());
      first = 1;
    }
    
    final.empty().append('<option value=""></option>');
    while (i <= 999) {
      var v = (first ? i + first : i);
      final.append('<option value="' + v + '">' + v + '.000</option>');
      if (first) first = 0;
      switch (i) {
        case 30:
        case 35:
        case 40:
        case 45: inc = 5; break;
        case 50:
        case 60:
        case 70:
        case 80:
        case 90: inc = 10; break;
        case 100: inc = 899;
      }
      i += inc;
    }
  });
}

function selecionarAno(inicial, final) {
  $(inicial).change(function() {
    var opt = $(this).children('option[value!=]');
    var vai = $(opt.get(opt.length - 1)).val();
    var vaf = $(opt.get(0)).val();
    final.empty().append('<option value=""></option>');
    for (var i = $(this).val() == '' ? vai : $(this).val(); i <= vaf; i++) {
      final.append('<option value="' + i + '">' + i + '</option>');
    }
  });
}

function busca() {
  $('#js_busca_veiculo').change(function() {
    selecionarVeiculo($(this), $('#js_busca_marca'), $('#js_busca_modelo'));
  });
  $('#js_busca_marca').change(function() {
    selecionarMarca($('#js_busca_veiculo'), $(this), $('#js_busca_modelo'));
  });
  selecionarPreco($('select[name=pi]'), $('select[name=pf]'));
  selecionarAno($('select[name=ai]'), $('select[name=af]'));
  $('#js_busca_frm').submit(function() {
    window.location = '?route=Principal/page/compra&' + $(this).formSerialize();
    return false;
  });
}

function cycleMarquee(speed) {
  speed = speed === undefined ? 30 : speed;
  
  var marquee = $('#marquee');
  marquee.css({
    position: 'relative',
    overflow: 'hidden',
    height: marquee.height() + 'px'
  });
  marquee.children().css('position', 'relative');
  $(marquee.children().get(0)).clone().appendTo(marquee);
  
  var scroll = function() {
    $('#marquee').children().each(function(i) {
      var topNum = $(this).css('top').substr(0, $(this).css('top').length - 2);
      var top = topNum == 'au' ? 0 : Number(topNum);
      if (i == 0 && top == -($(this).height() + 4)) {
        $($('#marquee').children().get(1)).clone().css('top', '0px').appendTo($('#marquee'));
        $(this).remove();
        $('#marquee').children().css('top', '0px');
      } else {
        $(this).css('top', (top - 1) + 'px');
      }
    });
  };
  
  var scroll_timer = setInterval(scroll, speed);
  marquee.hover(function() {
    clearInterval(scroll_timer);
  }, function() {
    scroll_timer = setInterval(scroll, speed);
  });
}

$(function() {
  $('#js_pri_termo').click(termo);
  $('#js_pri_privacidade').click(politica);
  $('.js_pri_contato').click(contato);
  visualizadorFotos();
  
  $('a.modal-img').click(function() {
    var dim = $(this).attr('rel').split('x');
    $('<div class="js_modal-img"><div class="fechar"><a href="javascript:;" class="modalClose">FECHAR</a></div><div><img border="0" src="'+$(this).attr('href')+'" width="'+dim[0]+'" height="'+dim[1]+'" alt=""/></div>').modal({
      cloase: false,
      containerId: 'mC_Publi',
      overlayId: 'mO_Publi'
    });
    updatePosition();
    return false;
  });
  busca();
  if ($('#marquee').length) cycleMarquee(35);
});
