// JavaScript Document

function FdrAbas(container, imagensinativa, imagensativa)
{
  this.abas = new Array();
  this.container = container;
  this.imagensinativa = imagensinativa;
  this.imagensativa = imagensativa;
  this.indiceabaativa = 0;
  this.abaativa = null;
  this.onclick = null;
  this.onremovida = null;
  
  return this;
}

FdrAbas.prototype.AdicionaAba = FdrAbasAdicionaAba;
FdrAbas.prototype.SetaAbaAtiva = FdrAbasSetaAbaAtiva;
FdrAbas.prototype.SetaAbaAtivaPorAba = FdrAbasSetaAbaAtivaPorAba;
FdrAbas.prototype.AjustaTamanhoAbas = FdrAjustaTamanhoAbas;
FdrAbas.prototype.setaimagem = FdrAbasSetaImage;
FdrAbas.prototype.HTMLAba = FdrAbaHTMLAba;
FdrAbas.prototype.RemoveAba = FdrRemoveAba;
FdrAbas.prototype.RemoveLimiteTamanhoAba = FdrAbasRemoveLimiteTamanhoAba;
FdrAbas.prototype.AlteraCaptionAba = FdrAbasAlteraCaptionAba; 
FdrAbas.prototype.ObtemCaptionAba = FdrAbasObtemCaptionAba;


function RetornaTodosElementos(elemento)
{
  return elemento.getElementsByTagName("*");
}


function RetornaElementosComID(elemento, id)
{
  if (typeof(elemento.all) != 'undefined')
  {
    var coll = elemento.all[id];
    if (!coll) return null;
    
    if (typeof(coll.length) == 'undefined')
    {
      var resultado = new Array();
      resultado[0] = coll;
      return resultado;
    }
    else
      return coll;
  }
 
  if (!elemento) alert("Buscando " + id +  " em null !!!!");
  var coll = elemento.getElementsByTagName("*");
  var resultado = new Array();
  
  if (typeof(coll.length) != 'undefined')
  {
    for (var i=0;i<coll.length;i++)
      if (coll[i].id == id) resultado[resultado.length] = coll[i];
  } 
  else
  {
    resultado[0] = coll;
  }
    
    
  return resultado;
}

function FdrAbaHTMLAba(caption, fechavel)
{
  var tabela = document.createElement("table");
  tabela.border = "0";
  tabela.captionaba = caption;
  tabela.className =  "tabela_aba";
  tabela.cellPadding = 0;
  tabela.cellSpacing = 0;
  tabela.onmouseover = FdrAbasTrataMouseOver(this, tabela);
  tabela.onmouseout = FdrAbasTrataMouseOut(this, tabela);
  tabela.onclick = FdrAbasTrataMouseClick(this, tabela);
  
  var tbody = document.createElement("tbody");
  var tr = document.createElement("tr");
  tabela.appendChild(tbody);
  tbody.appendChild(tr);
  //imagem do canto esquerdo
  var td = document.createElement("td");
  td.id = "cantoesquerdo";
  td.innerHTML = '<img id="img_cantoesquerdo" src="' + this.imagensinativa[0] + '" border="0">';
  tr.appendChild(td);
  //div central
  td = document.createElement("td");
  td.id = "meioaba";
  td.style.background = "url(" + this.imagensinativa[1] + ") repeat-x";
  td.innerHTML = '<div id="caption_aba" title="' + caption + '">' + caption + '</div>';
  tr.appendChild(td);

  //imagem do canto direito
  var td = document.createElement("td");
  td.id = "cantodireito";
  if (fechavel)
  {
    td.innerHTML = '<img id="img_cantodireito" src="' + this.imagensinativa[3] + '" border="0">';
    RetornaTodosElementos(td)[0].onclick = FdrTrataFecharAba(this, tabela);
  }
  else 
    td.innerHTML = '<img id="img_cantodireito" src="' + this.imagensinativa[2] + '" border="0">';
  
  tr.appendChild(td);
  
  tabela.fechavel = fechavel;
  
  return tabela;
}

function FdrAbasAdicionaAba(caption, fechavel)
{
  var AbaNova = this.HTMLAba(caption, fechavel);
  this.abas[this.abas.length] = AbaNova;
  this.container.appendChild(AbaNova);
  this.AjustaTamanhoAbas();
  return AbaNova;  
}

function FdrRemoveAba(aba)
{
  var i = 0;
  for (i = 0;i<this.abas.length;i++)
  {
    if (this.abas[i] == aba)
    {
      this.container.removeChild(aba);
      this.abas.splice(i, 1);
      this.RemoveLimiteTamanhoAba();
      this.AjustaTamanhoAbas();
      
      if (this.onremovida) this.onremovida(i);
      this.SetaAbaAtiva(0);
      
      return;
    }
  }
}


function FdrAbasRemoveLimiteTamanhoAba()
{
  var abas = RetornaElementosComID(this.container, "caption_aba");
  if ((abas == null) || (!abas.length)) return;
  var i = 0;
  for (i=0;i<abas.length;i++) abas[i].style.width = "auto";
}

function ordenatamanhos(item1, item2)
{
  return parseInt(item1.offsetWidth) - parseInt(item2.offsetWidth); //menor primeiro
}

function FdrAjustaTamanhoAbas()
{
  var abas = RetornaElementosComID(this.container, "caption_aba");
  if (abas == null) return;
  var cantosesquerdos = RetornaElementosComID(this.container, "cantoesquerdo");
  var cantosdireitos = RetornaElementosComID(this.container, "cantodireito");
  var i = 0;
  var diferenca = 0;
  var largura = parseInt(this.container.offsetWidth);
  var larguraindividual = 0;
  var delta = 0;
  
  // descontando os tamanhos dos cantos esquerdos e direitos, que não são strechaveis
  
  if (cantosesquerdos.length)
  {
    for (i=0;i<cantosesquerdos.length;i++)
      largura = largura - parseInt(cantosesquerdos[i].offsetWidth);
  }
    
  if (cantosdireitos.length)
  {
    for (i=0;i<cantosdireitos.length;i++)
      largura = largura - parseInt(cantosdireitos[i].offsetWidth);
  }
  
  // para funcionar adequadamente, preciso dos tamanhos ordenados
  var Vetor = new Array();
  
  for (i=0;i<abas.length;i++)
  {
    abas[i].style.width = "auto";
    diferenca = diferenca + parseInt(abas[i].offsetWidth);
    Vetor[i] = abas[i]; 
  }
  diferenca = diferenca - largura;
  
  if (diferenca > 0)//se for negativa não preciso fazer nada
  {
    ///
    //  calculando a largura ideal
    ///
    Vetor.sort(ordenatamanhos);
    larguraindividual = largura / abas.length - 1;
    
        
    for (i=0;i< Vetor.length - 1;i++)
    {
      if (parseInt(Vetor[i].offsetWidth) < larguraindividual)
      {
        larguraindividual = larguraindividual + (larguraindividual - parseInt(Vetor[i].offsetWidth))/(abas.length - i + 1);
      }   
    }
    ///
    //   aplicando a largura
    ///
    for (i=0;i<abas.length;i++)
      if (parseInt(abas[i].offsetWidth) > larguraindividual) abas[i].style.width = larguraindividual;
  }
}

function FdrAbasAlteraCaptionAba(indiceaba, novocaption)
{
  var aba = this.abas[indiceaba];
  RetornaElementosComID(aba, 'caption_aba')[0].innerHTML = novocaption;
}


function FdrAbasObtemCaptionAba(indiceaba)
{
  var aba = this.abas[indiceaba];
  return RetornaElementosComID(aba, 'caption_aba')[0].innerHTML;
}

function FdrAbasSetaImage(aba, ativa)
{
  if ((aba == this.abaativa) && (!ativa)) return;
  
  RetornaElementosComID(aba, "img_cantoesquerdo")[0].src = (ativa)?this.imagensativa[0]:this.imagensinativa[0];
  RetornaElementosComID(aba, "meioaba")[0].style.background = (ativa)?"url(" + this.imagensativa[1] + ") repeat-x":"url(" + this.imagensinativa[1] + ") repeat-x";

  if (aba.fechavel)
    RetornaElementosComID(aba, "img_cantodireito")[0].src = (ativa)?this.imagensativa[3]:this.imagensinativa[3];
    else
    RetornaElementosComID(aba, "img_cantodireito")[0].src = (ativa)?this.imagensativa[2]:this.imagensinativa[2];
    
}

function FdrAbasTrataMouseOut(obj, aba)
{
  return function()
  {
  obj.setaimagem(aba, false);
  }
}

function FdrAbasTrataMouseOver(obj, aba)
{
  return function()
  {
  obj.setaimagem(aba, true);
  }
}

function FdrAbasTrataMouseClick(obj, aba)
{
  return function()
  {
    obj.SetaAbaAtivaPorAba(aba);
  }
}

function FdrTrataFecharAba(obj, aba)
{
  return function(evento)
  {
    obj.RemoveAba(aba);
    if (!evento) var evento = window.event;
    if (typeof(evento.stopPropagation) != 'undefined') evento.stopPropagation();
    evento.cancelBubble = true;
  }
}

function FdrAbasSetaAbaAtiva(indice)
{
  this.SetaAbaAtivaPorAba(this.abas[indice]);
}

function FdrAbasSetaAbaAtivaPorAba(aba)
{
  this.abaativa = aba;
  var i = 0;
  
  for (i=0;i<this.abas.length;i++)
  {
    this.setaimagem(this.abas[i], (this.abas[i] == aba));
    RetornaElementosComID(this.abas[i], "caption_aba")[0].style.fontWeight = (this.abas[i] == aba)?"bold":"normal";
    
    if (this.abas[i] == aba) this.indiceabaativa = i;
  }
  
  if (this.onclick) this.onclick(this, aba);
}

  

