// Objecto ao qual podem ser adicionados novos métodos que são executados na função "actualizaEscondidos()" // Serve para manipular as respostas às questões que são produzidas por classes externas function Actualiza () {}; // Objecto ao qual podem ser adicionados novos métodos que são executados na função "respondida()" // Serve para manipular as respostas às questões que são produzidas por classes externas function Respondida () {}; function limpaResposta(tipoQuestao,nome,num) { idque = eval("\"idnum_" + num + "\""); switch (tipoQuestao) { case 1: { // Radio buttons var quest; var nomes = nome.split(','); for (var i=0; i=0; i--) { // Apaga o elemento do vector deleteElement(assocs,i); } break; } case 7: { var nomes = nome.split(','); for (var i=0; i vect[j+1]) { // Ordena vector auxiliar tmp = vect[j+1]; vect[j+1] = vect[j]; vect[j] = tmp; // Ordena caixa de selecção k = j+1; tmp = vResp[k+1]; vResp[k+1] = vResp[k]; vResp[k] = tmp; } } } criaTabela(nome); } function vergrf() { document.servico.numservico.value = 924160; document.servico.submit(); } function confirmar(janela) { // Limpar todos os avisos anteriores limpaAvisos(); // Verifica questões obrigatórias if(!verificaObrigatorias()) return; // Verifica expressões regulares sobre questões if(!verificaRegEx()) return; // Verifica questões que executam funções JS no final (para validação) if(!verificaFunc()) return; // Limpar checkboxes de questões Rank, que interferem com as respostas limpaCaixasRank(); if(!janela) { actualizaEscondidos(); document.servico.reentrada.value = 1; document.servico.submit(); return; } showSubmit(); /* if (navigator.appName.indexOf ("Microsoft") != -1){ var windowWidth = 300; var windowHeight = 150; var locX = ( screen.width - windowWidth ) / 2; var locY = ( screen.height - windowHeight ) / 2; var windowFeatures = "dialogTop:" + locY + "px;" + "dialogLeft:" + locX + "px;" + "dialogWidth:" + windowWidth + "px;" + "dialogHeight:" + windowHeight + "px;" + "center:yes;help:no;status:no"; opcao = window.showModalDialog( "../confirmaenvio.php", "Confirm", windowFeatures ); if(opcao){ actualizaEscondidos(); document.servico.reentrada.value = 1; document.servico.submit(); }else window.alert("Dados NÃO enviados");: } else { if(!confirm("Quer voltar atrás?\n\nPrima OK para voltar atrás.\nPrima Cancel para continuar.")){ actualizaEscondidos(); document.servico.reentrada.value = 1; document.servico.submit(); }else return; } */ } function hideSubmit() { document.getElementById("clog").style.display = "none"; } function showSubmit() { document.getElementById("clog").style.display = "block"; } function submeteInq() { actualizaEscondidos(); document.servico.reentrada.value = 1; document.servico.submit(); } function mostraQuestao(que_id) { nomeQue = eval("\"idque_num" + _nQuestao + "\""); hiderow(nomeQue); _nQuestao = que_id; nomeQue = eval("\"idque_num" + _nQuestao + "\""); showrow(nomeQue); } function mostraAnterior() { if(_nQuestao > 1) { mostraQuestao(_nQuestao-1); } } function mostraSeguinte() { proxQue = _nQuestao + 1; x = eval("\"idque_num" + proxQue + "\""); if(document.getElementById(x)) mostraQuestao(proxQue); } // Para validar respondentes function verificar() { //document.servico.reentrada.value = 1; document.servico.submit(); } // Para construir as tabelas de perguntas do tipo Rank // Para apresentar 1ª questão em testes que apresentam 1 questão de cada vez _nQuestao = 1; function inicio() { constroiRank(); showrow('idque_num1'); } ////////////////////////////////////////////////// // Para verificar respostas abertas das checkBoxes function clickCheck(nome) { quest = eval("document.servico." + nome); if(quest.checked == false) { quest = eval("document.servico." + nome + "T"); if(quest) quest.value = ""; } } function clickCheckT(nome) { quest = eval("document.servico." + nome); quest.checked = true; } ////////////////////////////////////////////////// // Para verificar respostas abertas dos radioButtons function clickRadio(nome) { quest = eval("document.servico." + nome); if(quest) quest.value = ""; } function clickRadioT(nome,num) { quest = eval("document.servico." + nome); quest[num].checked = true; } ////////////////////////////////////////////////// // Para verificar respostas abertas dos radioButtons function clickSelect(nome,num) { quest = eval("document.servico." + nome); if(quest.selectedIndex != num) { quest = eval("document.servico." + nome + "T"); if(quest) quest.value = ""; } } function clickSelectT(nome,num) { quest = eval("document.servico." + nome); quest.selectedIndex = num; } ////////////////////////////////////////////////// // para verificar se a questão está respondida // Parâmetros: // - Número de ordem da questão (1, 2, 3, ...) function respondida(n) { var o = getRefs(n); var idque = eval("\"idnum_" + o.num + "\""); if(!document.getElementById(idque)) return; var resp = respondida2(o); if(document.getElementById(idque).className != "respDuvida") document.getElementById(idque).className = resp ? "jaRespondida" : "porResponder"; } ////////////////////////////////////////////////// // para verificar se a questão está respondida // Parâmetros: // - Um objecto com parâmetros da questão // - tipo: 1-Mutex, 2-NMutex, 3-Rank, 4-Aberta // - nome: Lista de nomes das diversas opções // - num: Número real da questão (que_id) // - nordem: Número de ordem da questão (1, 2, 3, ...) // - classe: Pode ainda receber o nome de método da classe Respondidas, para executar se "tipoQuestao=127" function respondida2(o) { var resp = false; // Se foi desactivada, devolve 'true' var des = document.getElementById("idque_desactivar" + o.nordem); if(des && des.checked) return true; var quest; //window.alert("tipo: " + o.tipo + ", nome: " + o.nome + ", num: " + o.num); //if(!o.nome || !o.nome.length) return true; var nomes = o.nome.split(','); switch (o.tipo) { case 1: // Para verificar Mutex respondidas { for (var i=0; i1) { tmp = vResp[i]; vResp[i] = vResp[i-1]; vResp[i-1] = tmp; // Altera também o vector que contém a ordem das opções k = i-1; tmp = vect[k]; vect[k] = vect[k-1]; vect[k-1] = tmp; } } criaTabela(nome); } function descerRespostas(nome) { var caixas = listaCaixas(nome + "_"); // Nome do vector que contém o texto das respostas var vResp = eval(nome + "_vResp"); // Nome do vector que contém a ordem das opções vect = eval(nome + "_vector"); for(var i=vResp.length-1; i>=1; i--) { caixa = caixas[i]; if(!caixa) continue; if(cbSeleccionada(caixa) && i= length || n<0) return; for (var i=n; i x2) { tmp = x1; x1 = x2; x2 = tmp; tmp = y1; y1 = y2; y2 = tmp; } // Corrige pontos de referência das imagens xClasse = -31; // Está relacionado com as CSSs do layout do inquérito x1 += xClasse; x2 += xClasse; if (navigator.appName.indexOf ("Microsoft") !=-1) { y1 += 5; x2 -= 11; y2 += 5; } else { x1 += 2; y1 += 5; x2 -= 9; y2 += 5; } declive = (y2-y1) / (x2-x1); // A variável yant guarda o valor de y anterior para verificar se o y desce mais de 1 unidade de cada vez // Se isso acontecer, tem que se colocar pontos na mesma vertical x, mas com os ys intermédios yant = y1; // Tem que existir um DIV com id=nome+"_assoc" antes da tabela com conteúdos a associar. var tab = document.getElementById(nome + "_assoc"); var linha = document.createElement("div"); linha.className = "ponto"; tab.appendChild(linha); for(var x=x1; x<=x2; x++) { ordOri = Math.round((y1 - declive * x1)); y = Math.round((x * declive) + ordOri); poePonto(x,y,linha); if(Math.abs(y - yant) > 1) { // Determina maior e menor de (y, yant) ym = Math.min(y, yant); yM = Math.max(y, yant); // Coloca pontos na mesma vertical x, para rectas com declive elevado for(yi=ym+1; yi dataMenor.getTime()) return retOK; else { obrigatoria(refMaior); obrigatoria(refMenor); return retNOK_Data; } } ///////////////////////////////////////////// // Verifica se existe telemóvel no caso de ter pedido para receber os dados via SMS // Recebe: // - sms: número (que_id) da questão que permite envio de SMS // - tlm: número (que_id) da questão que contém nº de telemível // Devolve um objecto com dois campos: // - ret: código de erro: 0-OK, Outro-NOK (caso haja incoerência entre as questões) // - msg: mensagem a apresentar ao utilizador em caso de erro // function verificaSMS(sms,tlm) { // Códigos (retorno) a devolver var retOK = {ret:0, msg:''}; var retNOK_Param = {ret:1, msg:'verificaSMS: valores inexistentes'}; var retNOK_Data = {ret:1, msg:'Incoerência entre os valores nos campos assinalados.'}; // Lê campo de autorização de envio de SMSs var ordSMS = getNumOrdem(sms); if(!ordSMS) return retNOK_Param; var refSMS = getRefs(ordSMS); var qSMS = eval("document.servico.Q" + sms); var valSMS = qSMS[0].checked; //window.alert(valSMS); if(!valSMS) return retOK; // Lê campo que contém o nº do telemóvel var ordTLM = getNumOrdem(tlm); if(!ordTLM) return retNOK_Param; var refTLM = getRefs(ordTLM); var qTLM = eval("document.servico.Q" + tlm + "T"); var valTLM = qTLM.value; //window.alert("tel: " + valTLM); if(!valTLM) { obrigatoria(refSMS); obrigatoria(refTLM); return retNOK_Data; } else { return retOK; } } ///////////////////////////////////////////// // Verifica se o candidato escolheu prioridades iguais // Recebe: // Lista de questões que devem ser verificadas // Devolve um objecto com dois campos: // - ret: código de erro: 0-OK, Outro-NOK (caso haja incoerência entre as questões) // - msg: mensagem a apresentar ao utilizador em caso de erro // function verificaPrioridades() { // Códigos (retorno) a devolver var retOK = {ret:0, msg:''}; var retNOK_Param = {ret:1, msg:'verificaPrioridades: valores inexistentes'}; var retNOK_Data = {ret:1, msg:'Opção repetida.'}; var opcoes = Array(); for (var i = 0; i < arguments.length; i++) { var escola = document.getElementById("Q" + arguments[i] + "_escola"); var curso = document.getElementById("Q" + arguments[i] + "_curso"); if(!escola || !curso) continue; if(!escola.value || !curso.value) continue; var opcao = escola.value + "---" + curso.value; if(opcao == "0---0") continue; //window.alert(opcao); if(in_array(opcao, opcoes)) { var ordOPC = getNumOrdem(arguments[i]); if(!ordOPC) return retNOK_Param; var refOPC = getRefs(ordOPC); obrigatoria(refOPC); return retNOK_Data; } opcoes.push(opcao); } return retOK; }