
var ativos = [];
var carregando = 0;
var atualizando = 0;
var timer = null;

function updateLinkThisPage() {
  if ($('linkThisPage')) $('linkThisPage').href = 'http://webhorizon.com.br/cotacoes/?ativos=' + ativos.join(',');
}

function hover(tr, className) {
  var td = tr.getElementsByTagName('td');
  for (var i=0; i<td.length; i++) td[i].className = className;
}

function msg(msg) {
  var timeout = 5000;
  if ($('msg').className!='') return;
  var old = $('msg').innerHTML;
  var isvisible = $('msgtr').style.display=='' ? true : false;
  $('msg').innerHTML = msg;
  $('msg').className = 'alert';
  $('msgtr').style.display = '';
  setTimeout(function(){
    $('msgtr').style.display = isvisible ? '' : 'none';
    $('msg').className = '';
    $('msg').innerHTML = old;
  },timeout);
}

function td(content,href,onclick,cor,align) {
  var cell = document.createElement('td');

  href = href || '';
  onclick = onclick || '';
  cor = cor || '';
  align = align || '';
  
  if (align) cell.style.textAlign = align;

  var innerHTML = href ? '<a href="'+ href +'" onclick="'+ onclick +';return false;">' : '';
  innerHTML += cor ? '<font color="' + cor + '">' : '';
  innerHTML += content;
  innerHTML += cor ? '</font>' : '';
  innerHTML += href ? '</a>' : '';

  cell.innerHTML = innerHTML;
  return cell;
}

function adicionar(ativo) {
  try {
    if ($(ativo.ativo)) {
      if ($('atualizando' + ativo.ativo)) {
        $('atualizando' + ativo.ativo).style.visibility = 'hidden';
      }
      var cell = $(ativo.ativo).getElementsByTagName('td');
      if (ativo.ultimo.length) {
        cell[1].style.textAlign = 'right';
        cell[1].innerHTML = 'R$ ' + ativo.ultimo.replace('.',',');
      }
      if (ativo.variacao.length) {
        var abreFont = "";
        if(ativo.variacao > 0) {
          abreFont = '<font color="green">';
        } else if(ativo.variacao < 0) {
          abreFont = '<font color="red">';
        } else {
          abreFont = '<font color="black">';
        }
        cell[2].innerHTML = abreFont + ativo.variacao + ' %' + '</font>';
      }
      if (ativo.hora.length) {
        var dataHora = null;
        var agora = new Date();
        var vet = (ativo.data).split("/");
        var dia = vet[0];
        var mes = vet[1];
        var ano = vet[2];
        var dataConsulta = new Date(ano, mes-1, dia, 0, 0, 0);
        if(dataConsulta.getDate() == agora.getDate() &&
        dataConsulta.getMonth() == agora.getMonth() &&
        dataConsulta.getFullYear() == agora.getFullYear()) {
          //É o mesmo dia, deve mostrar a hora.
          dataHora = ativo.hora;
        } else {
          //Dia anterior, mostrar apenas a data
          dataHora = ativo.data;
        }
        cell[3].innerHTML = dataHora;
      }
      if (ativo.negocios.length) {
        cell[4].style.textAlign = 'right';
        cell[4].innerHTML = ativo.negocios;
      }
    } else {
      var tr = document.createElement('tr');
      tr.id = ativo.ativo;
      tr.className = 'ativo';
      addEvent(tr, 'mouseover', function(){hover(tr,'hover');});
      addEvent(tr, 'mouseout', function(){hover(tr,'');});
      tr.appendChild(td(ativo.ativo,'#','window.open(\'http://www.bovespa.com.br/Home/ExecutaAcaoExibirInformacaoAtivo.asp?CodigoAtivo='+ ativo.ativo +'\',\'infomoney'+ ativo.ativo +'\',\'width=325,height=370\')'));
      tr.appendChild(td('R$ ' + ativo.ultimo.replace('.',',')));
      cor = 'black';
      if (ativo.variacao < 0) {
        cor = 'red';
      } else if(ativo.variacao > 0) {
        cor = 'green';
      }
      tr.appendChild(td(ativo.variacao + ' %','','',cor,'right'));
      dataHora = null;
      /* fazer if de data e hora */
      var agora = new Date();
      var vet = (ativo.data).split("/");
      var dia = vet[0];
      var mes = vet[1];
      var ano = vet[2];
      var dataConsulta = new Date(ano, mes-1, dia, 0, 0, 0);
      if (dataConsulta.getDate() == agora.getDate() &&
        dataConsulta.getMonth() == agora.getMonth() &&
        dataConsulta.getFullYear() == agora.getFullYear()) {
        //É o mesmo dia, deve mostrar a hora.
        dataHora = ativo.hora;
      } else {
        //Dia anterior, mostrar apenas a data
        dataHora = ativo.data;
      }
      tr.appendChild(td(dataHora));
      tr.appendChild(td(ativo.negocios,'','','','right'));
      tr.appendChild(td('<img src="images/loading.gif" style="visibility:hidden" id="atualizando'+ ativo.ativo +'" /> <a href="#" onclick="remover(this);return false;">remover</a>'));
      $('cotacoes').getElementsByTagName('tbody')[0].appendChild(tr);
    }
    atualizando = atualizando < ativos.length ? atualizando : 0;
    //if (!timer) timer = setTimeout(function(){cotacao(ativos[atualizando++]);},30000);
    if (!timer) timer = setTimeout(function(){atualizar();},30000);
  } catch(e) {
    alert("Erro (adicionar method): " + e);
  }
}

function atualizar(tr) {
  tr = tr || null;
  if (tr) {
    tr = tr.parentNode.parentNode;
    var ativo = tr.getElementsByTagName('td')[0].getElementsByTagName('a')[0].innerHTML;
    cotacao(ativo);
  } else {
    for (var i=0; i<ativos.length; i++) {
      cotacao(ativos[i]);
    }
  }
}

function remover(tr) {
  tr = tr.parentNode.parentNode;
  var ativo = tr.getElementsByTagName('td')[0].getElementsByTagName('a')[0].innerHTML;
  ativos.remove(ativo);
  updateLinkThisPage();
  tr.parentNode.removeChild(tr);
  $('ativo').focus();
}

function cotacaoComplete(result) {
  if (carregando<=0) carregando = 1;
  $('msgtr').style.display = --carregando ? '' : 'none';
  result = unescape(result.replace(/\+/g,' ')); //desfaz o urlencode
  try {
    var obj = eval(result);
  } catch(e) {
    alert("Erro (cotacaoComplete method): " + e + "\n\n" + result);
    return false;
  }
  for(var i = 0; i < obj.length; i++) {
    adicionar(obj[i]);
  }
}

Array.prototype.indexOf = function(val) {
  for (var i=0; i<this.length; i++) {
    if (this[i] == val) {
      return i;
      break;
    }
  }
  return -1;
}

function cotacao(ativo,empty) {
  if (!ativo) return;
  clearTimeout(timer);
  timer = null;
  ativo = ativo.toUpperCase();
  //var timer = setTimeout(function(){ajax.cancel();alert('cancel');},10000);
  new Ajax('cotacao.php', {
    //onComplete:function(result){clearTimeout(timer);cotacaoComplete(result);}
    method: 'post',
    data: 'ativo=' + ativo,
    onComplete:cotacaoComplete}).request();
  if (ativos.indexOf(ativo)==-1) {
    ativos.push(ativo);
    updateLinkThisPage();
    carregando++;
    $('msg').innerHTML = '<img src="images/loading.gif" /> Aguarde, carregando informações do ativo...';
    $('msgtr').style.display = '';
  } else {
    if ($('atualizando' + ativo)) {
      $('atualizando' + ativo).style.visibility = 'visible';
    }
  }
  if (ativos.indexOf(ativo)==-1 || empty) {
    $('ativo').value = '';
    $('ativo').focus();
  }
}

function enter(event) {
  var keycode = event.keyCode ? event.keyCode : event.charCode;
  if (keycode == 13) cotacao($('ativo').value,true);
}

function refreshComplete(result) {
  result = unescape(result.responseText.replace(/\+/g,' ')); //desfaz o urlencode
  try { var obj = eval(result); } catch(e) { return false; }
  alert(result);
}
