/*
 *	Scripts.js
 *
 *		Scripts na linguagem javascript utilizados principalmente pelas páginas de configuração
 */

 /* --------------------------------------------------------------------------
 *	Funções de validação dos dados antes do envio
 * ------------------------------------------------------------------------ */

function confirmaTesteBaterias()
{
	var msg;
	var go;

	// tentativa de testar banco de baterias
	msg = "Confirma a execução do comando \"Testar Baterias\"?\n\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado.";
	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

function ajustaCamposCarregador() {
//	var f;
//	var CarregAuto;
//	var CarregEqual;
//	var CarregFlut;
//	
//	f = document.form1;
//
//	CarregAuto  = f.modocarga[0].checked;
//	CarregEqual = f.modocarga[1].checked;
//	CarregFlut  = f.modocarga[2].checked;
//
//	f.horaequalizacao.disabled     = !CarregAuto;
//	f.minutoequalizacao.disabled   = !CarregAuto ;
//	
//	f.compensatemperatura.disabled = CarregEqual;
}

function confirmaLigaDesliga()
{
	var msg;
	var go;
	var f;
	var acao;

	f = document.form2;
	acao = parseInt(f.msg_liga_desliga.value);

	switch(acao)
	{
		case 0:
			msg = "Atenção!\n\nO nobreak será ligado e a carga passará a ser alimentada pelo inversor.\nConfirma a execução do comando \"Ligar Nobreak\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado.";
			break;
		case 1:
			msg = "Atenção!\n\nO equipamento será desligado e a carga passará a ser alimentada pelo bypass.\nSe não houver rede presente, a carga será desligada.\nConfirma a execução do comando \"Desligar Nobreak\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento continuará energizado."; 
		   break;
		case 2:
			msg = "Atenção!\n\nO Bypass não está operacional!\nO equipamento será desligado e o fornecimento de energia será interrompido.\nConfirma a execução do comando \"Desligar Nobreak\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento continuará energizado.";
		   break;
		case 3:
			msg = "Atenção!\n\nO equipamento será desligado e deixará de alimentar a carga.\nConfirma a execução do comando \"Desligar Nobreak\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento continuará energizado.";
			break;
		default: // nunca entra aqui
			msg = "Erro(1)";
			break;
	}

	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

function confirmaLigaDeslInv(acao)
{
	var msg;
	var go;
	var f;
	var acao;

	f = document.form2;
	acao = parseInt(f.msg_liga_desliga.value);

	switch(acao)
	{
	
			case 0:
			msg = "Atenção!\n\nO inversor será ligado.\nConfirma a execução do comando \"Ligar Inversor\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado.";
			break;
		case 1:
			msg = "Atenção!\n\nO inversor será desligado.\nConfirma a execução do comando \"Desligar Inversor\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado."; 
		   break;
		default: // nunca entra aqui
			msg = "Erro(1)";
			break;
	}

	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

function confirmaLigaDeslRetif(acao)
{
	var msg;
	var go;

	switch(acao)
	{
		case 0:
			msg = "Atenção!\n\nO retificador e as baterias serão ligados.\nConfirma a execução do comando \"Ligar Retificador\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado.";
			break;
		case 1:
			msg = "Atenção!\n\nO retificador será desligado e a carga passará a ser alimentada somente pelas baterias.\nConfirma a execução do comando \"Desligar Retificador\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado."; 
		   break;
		case 2:
			msg = "Atenção!\n\nA carga das baterias está baixa!\nDesligador o retificador fará com que o fornecimento de energia seja interrompido.\nConfirma a execução do comando \"Desligar Retificador\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado.";
		   break;
		default: // nunca entra aqui
			break;
	}

	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

function confirmaDeslBateriasRetif(acao)
{
	var msg;
	var go;

	switch(acao)
	{
		case 0:
			msg = "Atenção!\n\nAs baterias serão desligadas e deixarão de alimentar a carga.\nConfirma a execução do comando \"Desligar Baterias\"?\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento continuará energizado.";
			break;
		default: // nunca entra aqui
			break;
	}

	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

function confirmaRearmeRetif(acao){
	return true;
}

function confirmaAtivaDesatSonoroRetif(acao){
	return true
}

function validaFrequencia()
{
	var f = document.form1;
	if( f.tempo.value.length == 0 || f.tempo.value < 5 || f.tempo.value > 99 ) 
	{
		window.alert("Freqüência inválida. Informe uma freqüência entre 5 e 99 segundos.");
		return false;
	}
	return true;
}

function validaNobreak(){
	return true;
}
function validaChave()
{
	var f = document.form1;
	if( f.Tinterr.value.length == 0 ) 
	{
		window.alert("O tempo de interrupção não foi preenchido, digite o tempo de interrupção e tente novamente");
		return false;
	}
	else
	{
		if( f.Tinterr.value < 0  || f.Tinterr.value > 85 )
		{
			window.alert("O tempo de interrupção deve ser um valor de 0 a 85 ms.");
			return false;
		}
	}
	if( f.Tretrf.value.length == 0 ) 
	{
		window.alert("O atraso de retransferência não foi preenchido, digite o atraso de retransferência e tente novamente");
		return false;
	}
	else
	{
		if( f.Tretrf.value < 5  || f.Tretrf.value > 999 )
		{
			window.alert("O atraso de retransferência deve ser um valor de 5 a 999 segundos.");
			return false;
		}
	}
	if( f.Nretrf.value.length == 0 ) 
	{
		window.alert("O limite de retransferências não foi preenchido, digite o limite de retransferências e tente novamente");
		return false;
	}
	else
	{
		if( f.Nretrf.value < 1  || f.Nretrf.value > 5 )
		{
			window.alert("O limite de retransferências deve ser um valor de 1 a 5.");
			return false;
		}
	}
	return true;
}


function validaEthernet()
{
	var f = document.form1;
	if( f.ip.value.length == 0 ) {
		window.alert("O endereço IP não foi preenchido, digite o endereço do CP Agent e tente novamente");
		return false;
	}
	if( f.msk.value.length == 0 ) {
		window.alert("A máscara de rede não foi preenchida, digite este valor e tente novamente");
		return false;
	}
	if( f.ip.value != f.old_ip.value || f.msk.value != f.old_msk.value || f.gtw.value != f.old_gtw.value || f.dns.value != f.old_dns.value || ( f.dhcp.checked==true && f.old_dhcp.value=='0' ) || ( f.dhcp.checked==false && f.old_dhcp.value=='1' ))
	{
		if(window.confirm("Ao salvar, o CP Agent será reiniciado para que as novas configurações sejam aplicadas.\nDependendo da alteração efetuada, o CP Agent poderá ficar inacessível através do endereço atual.\nDeseja continuar?"))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	return true;
}

function reiniciarAgent()
{
	var f = document.form1;
	if(window.confirm("O CP Agent será reiniciado.\nDependendo da alteração efetuada, o CP Agent poderá ficar inacessível através do endereço atual.\n\nO CP Agent ficará inacessível por alguns instantes e talvez seja necessário atualizar seu navegador!\n\nDeseja continuar?"))
	{
		f.reset.value='1';
		return true;
	}
	else
	{
		f.reset.value='0';
		return false;
	}
}

function validaPermissoes(){
	var f = document.form1;
	var escrita = false;
	var anonimo;
	// Verifica permissão do usuário anônimo
	for( var i = 0; i < f.ano.length; i++ )
		if( f.ano[i].checked == true )
			anonimo = f.ano[i].value;
	if( anonimo == 2 )
		escrita = true;
	for( i = 0; i < f.length - 1; i++ ) {
		// Verifica se as senhas são iguais as suas respectivas confirmações
		if( f.elements[i].type == "password" && f.elements[i+1].type == "password" ) {
			if( f.elements[i].value != f.elements[i+1].value ) {
				window.alert("A senha do usuario " + f.elements[i-1].value + " não corresponde com a confirmação");
				f.elements[i].select();
				f.elements[i].focus();
				return false;
			}
			i++;
		}
		// Verifica se existe algum usuário com permissão de escrita
		if( f.elements[i].type == "checkbox" && escrita == false )
			if( f.elements[i].checked && (f.elements[i-2].value != "" || f.elements[i-3].value != "") )
				escrita = true;
	}
	if( !escrita ) {
		window.alert("Nenhum usuário tem permissão de escrita, dê permissão a algum dos usuários");
		return false;
	}
	if( anonimo == 2 )
		if ( !window.confirm("Você configurou o usuário anônimo (usuário sem necessidade de senha) com permissão de escrita, isto pode ocasionar falhas na segurança. Deseja continuar e salvar estas configurações ?") )
			return false;
	// Desabilita confirmação de senha
	for( i = 0; i < f.length - 1; i++ ) {
		if( f.elements[i].type == "password" && f.elements[i+1].type == "password" ) {
			f.elements[i+1].disabled = true;
		}
	}
	return true;
}

function validaEMail()
{
	var f = document.form1;
	if( f.srv.value.length == 0 ) {
		window.alert("O Servidor SMTP não foi preenchido, digite o endereço do seu servidor e tente novamente");
		return false;
	}
	if( f.prt.value.length == 0 ) {
		window.alert("A porta para comunicação SNMP não foi preenchida, digite este valor e tente novamente");
		return false;
	}
	if( f.de.value.length == 0 ) {
		window.alert("O rementente das mensagens de e-mail não foi preenchido, digite este valor e tente novamente");
		return false;
	}
	return true;
}

function validaTesteAutomatico()
{
	var f = document.form1;
	if( f.confAutoteste[1].checked && f.diateste.value == 0 ) {
		window.alert("Selecione um dia para agendar testes automáticos das baterias.");
		return false;
	}
	return true;
}

function validaConfRetificador()
{
	var f = document.form1;
	if(!( f.horaequalizacao.value>=0   && f.horaequalizacao.value<=23 &&
	      f.minutoequalizacao.value>=0 && f.minutoequalizacao.value<=59))
	{
		window.alert("Tempo de equalizacao deve estar entre 0h00min e 23h59min.");
		return false;
	}
//	else
//		window.alert("Tempo de equalizacao OK.("+f.minutoequalizacao.value+" "+);

	if (f.tempocontatora.value<3 || f.tempocontatora.value>99)
	{
		window.alert("Tempo de acionamento da contatora de rede deve estar entre 3 e 99 segundos.");
		return false;
	}
//	else
//		window.alert("Tempo de acionamento da contatora de rede OK.");

	if (f.termostato.value<30 || f.termostato.value>50)
	{
		window.alert("Temperatura de desumidificação deve estar entre 30 e 50 graus Celsius.");
		return false;
	}
//	else
//		window.alert("Temperatura de desumidificação OK.");
		
	if (f.varcompensacao.value<10 || f.varcompensacao.value>40)
	{
		window.alert("Variação percentual da compensação térmica deve estar entre 0,10 e 0,40 por cento.");
		return false;
	}
//	else
//		window.alert("Variação percentual da compensação OK.");
	
	if (f.tempmaxbaterias.value<15 || f.tempmaxbaterias.value>55)
	{
		window.alert("Temperatura máxima das baterias deve estar entre 15 e 55 graus Celsius.");
		return false;
	}
//	else
//		window.alert("Temperatura máxima das baterias OK.");
	
	return true;
}

/* --------------------------------------------------------------------------
 *	Funções de ajuste dos campos abilitados e desabilitados
 * ------------------------------------------------------------------------ */

function habilitaCamposCpCtrl20()
{
	var f;
	f = document.form1;

	f.tipoBroadcast[0].disabled = !f.statusCpCtrl2.checked;
	f.tipoBroadcast[1].disabled = !f.statusCpCtrl2.checked;
}

function ajustaCamposNobreak()
{
	f = document.form1;
	switch( f.mod.value ) {
		case "0":	// Breakless New/Fit
			f.meco.disabled = false;
			f.msil.disabled = false;
			f.idn.disabled = true;
			f.aut.disabled = false;
			f.tre.disabled = false;
			break;
		case "1":	// Breakless PRO / RMS
			f.meco.disabled = true;
			f.msil.disabled = true;
			f.idn.disabled = true;
			f.aut.disabled = false;
			f.tre.disabled = false;
			break;
		case "2":	// Trunny
			f.meco.disabled = false;
			f.msil.disabled = false;
			f.idn.disabled = true;
			f.aut.disabled = true;
			f.tre.disabled = true;
			break;
		case "3" :	// Top-DSP/Classic-DSP
		case "4" :	// Top-DSP Paralelo Ativo
		case "5" :	// Top
		case "6" :	// Top Paralelo Ativo
		case "7" :	// Top-DSP Paralelo Ativo CE
			f.meco.disabled = true;
			f.msil.disabled = true;
			f.idn.disabled = false;
			f.aut.disabled = true;
			f.tre.disabled = true;
			break;
	}
}

function ajustaCamposEthernet() {
	f = document.form1;
	aux = f.dhcp.checked;
	f.ip.disabled = aux;
	f.msk.disabled = aux;
	f.gtw.disabled = aux;
	f.dns.disabled = aux;
}
// Fucao que desabilita os campos de ajuste da hora 
// de acordo com a escolha do usuario, sendo da forma
// manual ou automatica.
function ajustaCamposHorario() {
	var f;
	var confAut;
	var confManual;
	f = document.form1;
	confManual = f.confHorario[0].checked; // 0
	confAut    = f.confHorario[1].checked; // 1
	// Configuracao manual
	f.dia.disabled = !confManual;
	f.mes.disabled = !confManual;
	f.ano.disabled = !confManual;
	f.hora.disabled = !confManual;
	f.minuto.disabled = !confManual;
	f.segundo.disabled = !confManual;
	f.setAgent.disabled = !confManual;
	f.setEquipo.disabled = !confManual;
	f.pegaHorarioLocal.checked = f.pegaHorarioLocal.checked && confManual
	f.pegaHorarioLocal.disabled = !confManual;
	// Configuracao Automatica
	f.servidor.disabled = !confAut;
	f.porta.disabled = !confAut;
	//f.fuso.disabled = !confAut;
	f.intervalo.disabled = !confAut;
	f.autEquipo.disabled = !confAut;
}

// Traps
function ajustaCamposTraps() {
	var f = document.form1;
	var stat = f.trapStatus.checked;
	for( var i = 0; i < f.elements.length; i++ )
		if( f.elements[i].type == "text" || f.elements[i].type == "button" )
			f.elements[i].disabled = !stat;
}

// Traps Valida IP
function maskIP(e,obj){
	if (document.all)
	{
		var evt=event.keyCode;
	} // caso seja IE
	else
	{
		var evt = e.charCode;
	}    // do contrário...
	if(evt < 20)
		return true;    // liberando teclas de controle
	if (evt =='99')return true;  // liberando teclas de controle ctrl+c
	if (evt =='118')return true; // liberando teclas de controle ctrl+v	
	if (evt =='120')return true; // liberando teclas de controle ctrl+x
	if (evt =='122')return true; // liberando teclas de controle ctrl+z
	if( (/^(\d{1,3}\.){3}\d{3}$/).test(obj.value) )
		return false;
	var chr= String.fromCharCode(evt);    // pegando a tecla digitada
	if(! (/[\d\.]/).test(chr))
		return false; // testando se é uma tecla válida (um digito ou um ponto)
	if(chr=='.')
		return (!(/\.$|^(\d{1,3}\.){3}/).test(obj.value) );
	else 
		if( (/\d{3}$/).test(obj.value) )
			obj.value+='.';            
	return true;
}
// Traps Valida IP
function validateIP(ip,showErrMsg){
	if(ip==""){
		return 1;
	}
	a = (/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/).test(ip);
	if (!a && showErrMsg){
		alert(ip+' não é um ip válido!');
	}
	return a;
}

function ajustaCamposPermissoes(indice) {
	var f = document.form1;
	var selecionado = -1;
	for( var i = 0; i < f.elements.length; i++ )
		if( f.elements[i].type == "checkbox" ){
			selecionado++;
			i++;
			if(selecionado==indice)
				break;
		}
	f.elements[i].checked = f.elements[i-1].checked;
}

function ajustaCamposAutoteste() {
	var f;
	var AutotesteHab;
	var AutotesteDes;
	f = document.form1;
	AutotesteHab = f.confAutoteste[1].checked;
	AutotesteDes = f.confAutoteste[0].checked;
	f.diateste.disabled = !AutotesteHab;
	f.horateste.disabled = !AutotesteHab;
	f.minutoteste.disabled = !AutotesteHab;
}

function ajustaCamposLigamento() {
	var f;
	var LigarHab;
	var LigarDes;
	f = document.form1;
	LigarHab = f.confLigamento[1].checked;
	LigarDes = f.confLigamento[0].checked;
	f.horaligar.disabled = !LigarHab;
	f.minutoligar.disabled = !LigarHab;
}

function ajustaCamposDesligamento() {
	var f;
	var DesligarHab;
	var DesligarDes;
	f = document.form1;
	DesligarHab = f.confDesligamento[1].checked;
	DesligarDes = f.confDesligamento[0].checked;
	f.horadesligar.disabled = !DesligarHab;
	f.minutodesligar.disabled = !DesligarHab;
}

function proxima_caixa(x, y)
{
	if (y.length==x.maxLength)
	{
		var next=x.tabIndex+2
		if (next<8)
		{
			document.getElementById("form1").elements[next].focus()
		}
	}
}

function setValorPermitir()
{
	var f1 = document.form1;
	var f2 = document.form2;

	if( f1.escrita.checked )
	{
		f2.permitir.value = 1;
	}
	else
	{
		f2.permitir.value = 0;
	}
	if( f2.edit.value == 0 )
	{
		f2.temp_comunidade.value = f2.comunidade.value;
	}
}

function setValorComun()
{
	var f1 = document.form1;
	var f2 = document.form2;
	
	if( !f2.comunidade.disabled )
	{
		f1.comun.value = f2.comunidade.value;
	}
	else
	{
		f1.comun.value = f2.temp_comunidade.value;
	}
	return true;
}

function setValorProteger()
{
	var f1 = document.form1;
	var f2 = document.form2;

	if( f2.usa_senha.checked )
	{
		f2.proteger.value = 1;
	}
	else
	{
		f2.proteger.value = 0;
	}
	if( f2.edit.value == 0 )
	{
		f2.temp_senha.value = f2.senha2.value;
	}
}

function setValorSenha()
{
	var f1 = document.form1;
	var f2 = document.form2;
	
	if( !f2.senha2.disabled )
	{
		f1.senha.value = f2.senha2.value;
	}
	else
	{
		f1.senha.value = f2.temp_senha.value;
	}
	if( f2.usa_senha.checked )
	{
		f1.usasenha.value = 1;
	}
	else
	{
		f1.usasenha.value = 0;
	}
	return true;
}

/* --------------------------------------------------------------------------
 *	Outras Funções
 * ------------------------------------------------------------------------ */

function Enviar(opc)
{
	var f = document.form1;
	for( var i = 0; i < f.elements.length; i++ )
		if( f.elements[i].type == "hidden" || f.elements[i].name == "submitsom" )
		{
			if(opc == 1)
			{
				f.elements[i].value=1;
			}
			if(opc == 2)
			{
				f.elements[i].value=2;
			}
			if(opc == 0)
			{
				f.elements[i].value=0;
			}
			document.form1.submit();		
		}

}
/*
	var p = document.getElementById("submitsom");
	if(opc == 1)
	{
		p.value=1;
	}
	if(opc == 2)
	{
		p.value=2;
	}
	if(opc == 0)
	{
		p.value=0;elements
	}else
	{
		p.value=9;
	}
	document.form1.submit();*/

function abreSelecionaEventos(tipo, id){
	window.open("confSelecEventos.html?tipo="+tipo+"&id="+id,"","width=565,height=565,scrollbars=yes,resizable=no")
}

function abreProgressoTeste(){
	window.open("testar_agora.html","","width=250,height=150,scrollbars=auto,resizable=no")
}

function abreGraficos(){
	//window.open("graficos.html","","width=580,height=535,scrollbars=yes,resizable=no")
	window.open("graficos.html","","width=580,height=535,scrollbars=auto,resizable=no")
}

function selecionaTodas()
{	
	var f = document.selec;
	for( var i=0; i < f.elements.length; i++ ){
		if( f.elements[i].type == "checkbox" )	
			f.elements[i].checked = true;
	}
	for( i=1; i<=document.images.length; i++ )	
	{
		document.getElementById('selgrp'+i).src = "total.gif";
	}
}

function limpaTodas()
{
	var f = document.selec;
	for( var i=0; i < f.elements.length; i++ ){
		if( f.elements[i].type == "checkbox" )	
			f.elements[i].checked = false;
	}
	for( i=1; i<=document.images.length; i++ )
	{
		document.getElementById('selgrp'+i).src = "nenhum.gif";
	}
}
// Tem um bando de bugs nas funcoes referentes a datas no javascript,
// entao o melhor e simplificar: vamos comparar a hora local da maquina
// cliente com a hora da cidade desejada e calcular o horario da cidade
// a cada segundo de acordo com essa diferenca. Nao vamos usar tempos
// UTC porque ha varios problemas com timezones e horario de verao.

var contagemID = null;
//var contagemAtivada = false;
var acerta_agent = 0;
var acerta_equipo = 0;

// Array relacionando o numero do mes ao nome
mes_port = new Object();
mes_port[0] ="01"; mes_port[1] ="02"; mes_port[2] ="03"; mes_port[3] ="04";
mes_port[4] ="05"; mes_port[5] ="06"; mes_port[6] ="07"; mes_port[7] ="08";
mes_port[8] ="09"; mes_port[9] ="10"; mes_port[10] ="11"; mes_port[11] ="12";

// Vamos usar sempre o ano com 4 digitos; como ha diferencas entre
// o explorer e o navigator, precisa desta funcaozinha.
function getFullYear(date) {
 var ano = date.getYear();
 if (ano < 1000) ano += 1900;
 return ano;
}

// Calculemos a diferenca entre o horario enviado pelo servidor e o horario da
// maquina cliente; com esse numero, podemos recalcular a cada segundo o horario
// correto da cidade independente do horario da maquina cliente.
// Somamos 2 segs a data enviada pelo servidor porque
// ha um certo atraso entre o momento em que o servidor "gera" a data e o momento
// em que o javascript e executado; "adiantando" o relogio 2 segundos, esse erro
// e minimizado (mas nao eliminado, pois nao da pra determinar o erro com precisao).
function iniciaconta(hora_inicial){
 var diferenca = 0;
 hora_inicial_local=new Date;
 diferenca = hora_inicial.getTime() - hora_inicial_local.getTime() + 2;
 return diferenca;
}

function mostrarTempoAgent(acerta_agent){
 // Pega a hora local atual:
 var agora = new Date();
 // Acerta de acordo com a diferenca calculada antes:
 agora.setTime(agora.getTime() + acerta_agent);
 // Divide em ano, mes, dia etc.
 var ano = getFullYear(agora);
 var mes = mes_port[agora.getMonth()];
 var dia = agora.getDate();

 var data_cidade=((dia < 10) ? "0" : "") + dia +"/" +mes+"/" + ano + " ";

 var hora = agora.getHours();
 var minuto = agora.getMinutes();
 var segundo = agora.getSeconds();

 //var hora_cidade = ((((hora >12) ? hora -12 :hora) ) < 10 ? "0" : "") + ((hora >12) ? hora -12 :hora); //AM/PM
 var hora_cidade = (hora  < 10 ? "0" : "") + hora;
 hora_cidade += ((minuto < 10) ? ":0" : ":") + minuto;
 hora_cidade += ((segundo < 10) ? ":0" : ":") + segundo;
// hora_cidade += (hora >= 12) ? " PM" : " AM" ; // Foi retirado AM/PM

 // Lanca a data correta na pagina HTML.
 document.form1.initial_agent.value = data_cidade + hora_cidade;

 // Atualiza a cada segundo.
 contagemID = setTimeout("mostrarTempoAgent (acerta_agent)",1000);

// contagemAtivada = true;
}

function mostrarTempoEquipo(acerta_equipo){
 // Pega a hora local atual:
 var agora = new Date();
 // Acerta de acordo com a diferenca calculada antes:
 agora.setTime(agora.getTime() + acerta_equipo);
 // Divide em ano, mes, dia etc.
 var ano = getFullYear(agora);
 var mes = mes_port[agora.getMonth()];
 var dia = agora.getDate();

 var data_cidade=((dia < 10) ? "0" : "") + dia +"/" +mes+"/" + ano + " ";

 var hora = agora.getHours();
 var minuto = agora.getMinutes();
 var segundo = agora.getSeconds();

 var hora_cidade = ((((hora >12) ? hora -12 :hora) ) < 10 ? "0" : "") + ((hora >12) ? hora -12 :hora);
 var hora_cidade = (hora < 10 ? "0" : "") + hora;
hora_cidade += ((minuto < 10) ? ":0" : ":") + minuto;
 hora_cidade += ((segundo < 10) ? ":0" : ":") + segundo;
// hora_cidade += (hora >= 12) ? " PM" : " AM" ;

 // Lanca a data correta na pagina HTML.
 document.form1.initial_equipo.value = data_cidade + hora_cidade;

 // Atualiza a cada segundo.
 contagemID = setTimeout("mostrarTempoEquipo (acerta_equipo)",1000);

// contagemAtivada = true;
}

function iniciar_relogio() {
 // Os parametros que representam a data sao colocados aqui pelo servidor;
 // O formato e: ano, mes, dia, hora, minuto, segundo.
 str_A = document.form1.initial_agent.value.split(' ');
 str_B = document.form1.initial_equipo.value.split(' ');
 // Os meses no javascript comecam em zero...
 str_A[1]--;
 str_B[1]--;
 hora_inicial_cpagent = new Date( str_A[2], str_A[1], str_A[0], str_A[3], str_A[4], str_A[5]);
 hora_inicial_equipo = new Date( str_B[2], str_B[1], str_B[0], str_B[3], str_B[4], str_B[5]);
 
 // Cpagent nao tem controle de erro
 acerta_agent=iniciaconta(hora_inicial_cpagent);
 mostrarTempoAgent(acerta_agent);
 
 if(str_B[2]!="0000")// verifica ano
 {	 
	acerta_equipo=iniciaconta(hora_inicial_equipo);
	mostrarTempoEquipo(acerta_equipo);
 }
}

/**
 * Função que incrementa o horario na pagina.
 */
//function atualizaHorarioPagina() {
//	var horarioDownload = new Date()
//	setTimeout("verificaDiferenca(horarioDownload)", 1000) // Atualiza acada 1 segundo
//}
//function verificaDiferenca(horarioDownload) {
//	var f = document.form1
//	var horarioAtual = new Date()
//	var diferencaH = horarioAtual.getHours() - horarioDownload.getHours()
//	var diferencaM = horarioAtual.getMinutes() - horarioDownload.getMinutes()
//	
//	var horaAgent = f.hora.value + diferencaH
//	var minutoAgent = f.minuto.value + diferencaM
//	f.horaAgent.value = horaAgent
//	f.minutoAgent.value = minutoAgent
//	
//	var horaEqui = f.hora.value + diferencaH
//	var minutoEqui = f.minuto.value + diferencaM
//	f.horaEqui.value = horaEqui
//	f.minutoEqui.value = minutoEqui
//	
//	setTimeout("verificaDiferenca(horarioDownload)", 1000) // Atualiza acada 1 segundo	
//}
/**
 * Função que ajusta o horario na pagina de acordo com o horário da maquina local.
 */
function atualizaDeHorarioLocal() {
	var f = document.form1
	if(f.pegaHorarioLocal.checked) {
		var horarioLocal = new Date()
		var dia = horarioLocal.getDate()
		var mes = horarioLocal.getMonth()+1
		var ano = horarioLocal.getFullYear()
		var hora = horarioLocal.getHours()
		var minuto = horarioLocal.getMinutes()
		var segundo = horarioLocal.getSeconds()
		f.dia.value = ((dia < 10)?"0":"") + dia // Para manter alinhado
		f.mes.value = ((mes < 10)?"0":"") + mes // Para manter alinhado
		f.ano.value = ano
		f.hora.value = ((hora < 10)?"0":"") + hora // Para manter alinhado
		f.minuto.value = ((minuto < 10)?"0":"") + minuto // Para manter alinhado
		f.segundo.value = ((segundo < 10)?"0":"") + segundo // Para manter alinhado
		setTimeout("atualizaDeHorarioLocal()", 1000) // Atualiza acada 1 segundo
	}
}

function atualizaDeHorarioLocal_pt() {
	var f = document.form1
	var horarioLocal = new Date()
	var dia = horarioLocal.getDate()
	var mes = horarioLocal.getMonth()+1
	var ano = horarioLocal.getFullYear()
	var hora = horarioLocal.getHours()
	var minuto = horarioLocal.getMinutes()
	f.dia.value = ((dia < 10)?"0":"") + dia
	f.mes.value = ((mes < 10)?"0":"") + mes
	f.ano.value = ano
	f.hora.value = ((hora < 10)?"0":"") + hora
	f.minuto.value = ((minuto < 10)?"0":"") + minuto
}

function desabilita_campos_pt() {
	var f;
	var confManual;
	f = document.form1;
	confManual = f.desprogramarAutoteste.checked;
	f.dia.disabled = confManual;
	f.mes.disabled = confManual;
	f.ano.disabled = confManual;
	f.hora.disabled = confManual;
	f.minuto.disabled = confManual;
	f.pegaHorarioLocal.disabled = confManual;
	f.periodoAutoteste[0].disabled = confManual;
	f.periodoAutoteste[1].disabled = confManual;
	f.periodoAutoteste[2].disabled = confManual;
	f.periodoAutoteste[3].disabled = confManual;
}

function verifica_desabilita(repeticao) {
	var f;
	var confManual;
	f = document.form1;
	if(repeticao==0){
		f.dia.disabled = true;
		f.mes.disabled = true;
		f.ano.disabled = true;
		f.hora.disabled = true;
		f.minuto.disabled = true;
		f.pegaHorarioLocal.disabled = true;
		f.periodoAutoteste[0].disabled = true;
		f.periodoAutoteste[1].disabled = true;
		f.periodoAutoteste[2].disabled = true;
		f.periodoAutoteste[3].disabled = true;
	}
	else{
		f.dia.disabled = false;
		f.mes.disabled = false;
		f.ano.disabled = false;
		f.hora.disabled = false;
		f.minuto.disabled = false;
		f.pegaHorarioLocal.disabled = false;
		f.periodoAutoteste[0].disabled = false;
		f.periodoAutoteste[1].disabled = false;
		f.periodoAutoteste[2].disabled = false;
		f.periodoAutoteste[3].disabled = false;
	}
}

function valida_campos_pt() {
	var f;
	var flag;
	flag = 0;
	f = document.form1;
	if(f.desprogramarAutoteste.checked==true){
		f.dia.value = 0;
		f.mes.value = 0;
		f.ano.value = 0;
		f.hora.value = 0;
		f.minuto.value = 0;
		f.periodoAutoteste[0].checked = true;
		f.periodoAutoteste[1].checked = false;
		f.periodoAutoteste[2].checked = false;
		f.periodoAutoteste[3].checked = false;
	}
	else{
		if(f.dia.value=="")
			flag = 1;
		if(f.mes.value=="")
			flag = 1;
		if(f.ano.value=="")
			flag = 1;
		if(f.hora.value=="")
			flag = 1;
		if(f.minuto.value=="")
			flag = 1;
	}
	if(flag==0)
		return true;
	else{
		alert("Preencha a data e a hora.");
		return false;
	}
}

var visivel = 0;
function showConfig(mantem)
{
	var c = document.getElementById("config");
	if(mantem!=0)
		c.style.visibility='visible';
	else
		if(visivel==0){
			c.style.visibility='visible';
			visivel = 1;
		}
		else{
			c.style.visibility='hidden';
			visivel = 0;
		}
}

function escondePBuscando()
{
	var p = document.getElementById("buscando");
	p.style.visibility='hidden';
}

function escondePExecutando()
{
	var p = document.getElementById("executando");
	p.style.visibility='hidden';
}

function escondePStatus()
{
	var p = document.getElementById("status");
	p.style.visibility='hidden';
	p.style.display='none';
}

function mostraPStatus()
{
	var p = document.getElementById("status");
	p.style.visibility='visible';
	p.style.display='block';
}

function confirmaLigaDesligaEstabilizador(acao)
{
	var msg;
	var go;

	if( acao == 1 )
	{
		// tentativa de ligar estabilizador
		msg = "Atenção!\n\nO equipamento será ligado e durante o tempo de chaveamento poderá ocorrer falha na\nalimentação da carga.\nConfirma a execução do comando \"Ligar Estabilizador\"?\n\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento está energizado."
	}
	else
	{
		// tentativa de desligar o estabilizador
		msg = "Atenção!\n\nO estabilizador será desligado e deixará de alimentar a carga.\nConfirma a execução do comando \"Desligar Estabilizador\"?\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento continuará energizado."
	}
	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

function confirmaAtivaDesativaEstabilizador(acao)
{
	var msg;
	var go;

	if( acao == 1 )
	{
		// tentativa de ativar bypass
		msg = "Atenção!\n\nA carga será transferida para o bypass.\nConfirma a execução do comando \"Ativar Bypass\"?\n\n(Para maiores informações sobre o comando e seus efeitos, consulte o manual do equipamento)\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento continuará energizado."
	}
	else
	{
		// tentativa de desativar bypass
		msg = "Atenção!\n\nO equipamento já está desligado. A carga deixará de ser alimentada.\nConfirma a execução do comando \"Desativar Bypass\"?\n\nCuidado!\nNão abra o gabinete. Há risco de choque elétrico. O equipamento ainda está energizado."
	}
	go = confirm(msg);
	if( go == true )
	{
		// usuario pressionou "Sim"
		return true;
	}
	else
	{
		// usuario pressionou "Nao"
		return false;
	}
}

Date.prototype.format=function(format){var returnStr='';var replace=Date.replaceChars;for(var i=0;i<format.length;i++){var curChar=format.charAt(i);if(replace[curChar]){returnStr+=replace[curChar].call(this);}else{returnStr+=curChar;}}return returnStr;};Date.replaceChars={shortMonths:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],longMonths:['January','February','March','April','May','June','July','August','September','October','November','December'],shortDays:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],longDays:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],d:function(){return(this.getDate()<10?'0':'')+this.getDate();},D:function(){return Date.replaceChars.shortDays[this.getDay()];},j:function(){return this.getDate();},l:function(){return Date.replaceChars.longDays[this.getDay()];},N:function(){return this.getDay()+1;},S:function(){return(this.getDate()%10==1&&this.getDate()!=11?'st':(this.getDate()%10==2&&this.getDate()!=12?'nd':(this.getDate()%10==3&&this.getDate()!=13?'rd':'th')));},w:function(){return this.getDay();},z:function(){return"Not Yet Supported";},W:function(){return"Not Yet Supported";},F:function(){return Date.replaceChars.longMonths[this.getMonth()];},m:function(){return(this.getMonth()<9?'0':'')+(this.getMonth()+1);},M:function(){return Date.replaceChars.shortMonths[this.getMonth()];},n:function(){return this.getMonth()+1;},t:function(){return"Not Yet Supported";},L:function(){return"Not Yet Supported";},o:function(){return"Not Supported";},Y:function(){return this.getFullYear();},y:function(){return(''+this.getFullYear()).substr(2);},a:function(){return this.getHours()<12?'am':'pm';},A:function(){return this.getHours()<12?'AM':'PM';},B:function(){return"Not Yet Supported";},g:function(){return this.getHours()%12||12;},G:function(){return this.getHours();},h:function(){return((this.getHours()%12||12)<10?'0':'')+(this.getHours()%12||12);},H:function(){return(this.getHours()<10?'0':'')+this.getHours();},i:function(){return(this.getMinutes()<10?
'0':'')+this.getMinutes();},s:function(){return(this.getSeconds()<10?'0':'')+this.getSeconds();},e:function(){return"Not Yet Supported";},I:function(){return"Not Supported";},O:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+'00';},T:function(){var m=this.getMonth();this.setMonth(0);var result=this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/,'$1');this.setMonth(m);return result;},Z:function(){return-this.getTimezoneOffset()*60;},c:function(){return"Not Yet Supported";},r:function(){return this.toString();},U:function(){return this.getTime()/1000;}};

