/*
 
 */

/* ----------------------------------------------------------------------------------------- CONSTRUTOR */
/**
 * Classe de objetos em JavaScript, que representa um preenchimento de dados em campos para envio para o servidor.
 * Um objeto desta classe vai comunicar com os campos para verificar se os campos estão preenchidos (prontos) para envio.
 * @param formulário Refere ao html:form que contem os campos/dados deste envio.
 * @param botão O html:input type="submit" que causará o atual envio dos dados para o servidor.
 */
function Envio(formulário, botão) {
   this.formulário = formulário; // <form/>
   this.botão = botão; // refere ao submit html:input; mesmo que não utilizamos aqui, poderá ser manipulado por objetos que tenham referência a este envio
   this.emPreparação = false;
   this.aviso = "O seu pedido está a ser processado. Paciente s.f.f.."; // substituido pela tradução na jsp

   this.div = formulário.parentNode;
   this.textos = new Array(); // será preenchido pelos textos próprios, que se registarão
}

Envio.prototype.visualizar = function() {
   // preparar o elemento no qual vamos incluir os elementos da autenticação
   var dimensão = ecrã.dimensão.diminuir(0.5); // window.ecrã foi definido em esboço.jsp
   // dimensão.altura = 250; // não definir para que o div se adapte em altura ao seu conteúdo
   with (this.div.style) {
      top = (ecrã.dimensão.altura - dimensão.altura) / 2;
      left = (ecrã.dimensão.largura - dimensão.largura) / 2;
      width = dimensão.largura;
      // height = dimensão.altura;
   }
   ecrã.mostrar(this.div);
   this.textos[0].focar();
}

Envio.prototype.esconder = function() {
   ecrã.esconder(this.div);
}

/**
 * Testa se os campos de texto estão todos prontos, isto é, se contêm valores válidos.
 */
Envio.prototype.estáPronto = function () {
   var está = true;
   for (var i = 0; i < this.textos.length; i++) {
      está = está && this.textos[i].pronto;
      if (!está) break;
   }
   return está;
}

Envio.prototype.verificar = function() {
   if (this.emPreparação == true) { // para os impacientes: evite que o visitante clique mais do que uma vez no botão
      this.esconder(); // esconde o formulário, e assim também o botão
      ecrã.reagir(this.aviso, 10000);
      return false;
   }
   this.emPreparação = true;
   var pronto = this.estáPronto();
   return pronto;
}

Envio.prototype.registar = function(objeto) {
   this.textos.push(objeto);
}

Envio.prototype.desativar = function() {
   this.botão.desativar();
}

Envio.prototype.ativar = function() {
   if (this.estáPronto())
      this.botão.ativar();
   else
      this.botão.desativar();
}
