
// Funções de JavaScript para o IDC


//----------------------------------------------------------------------------------
//	Função para validar os dados do inquérito no IDC e auxiliares
//
//	validate() - vai validar a coerência dos dados preenchidos
//	getHidden() - vai ler os campos hidden de controlo do inquérito
//	changeImage( field, bImage ) - troca a imagem que indica se a resposta está certa ou errada
//	checkSomaControlo(i, somaControlo) - verifica se a soma de controlo das respostas está correcta
//
//	07Ago2002 - v1.00 - Nuno Simões - Contraste, Innovagency
//----------------------------------------------------------------------------------

function validatewithSubmit() {
	if (validateForm(0)){
		window.document.forms[0].submit();	
	}
}
//----------------------------------------------------------------------------------
//	Função para validar os dados do inquérito no IDC e auxiliares
//
//	validate() - vai validar a coerência dos dados preenchidos
//	getHidden() - vai ler os campos hidden de controlo do inquérito
//	changeImage( field, bImage ) - troca a imagem que indica se a resposta está certa ou errada
//	checkSomaControlo(i, somaControlo) - verifica se a soma de controlo das respostas está correcta
//
//	07Ago2002 - v1.00 - Nuno Simões - Contraste, Innovagency
//----------------------------------------------------------------------------------
function validate() {
	void(validateForm(1));
}

function validateForm(iTest) {

	var nQuestoes, i, j, any, fixedResp, maxResp, somaControlo, maxOrder;

	bValido = true;
	nQuestoes = getHidden( 'nQuestoes', 'value' );

	for( i=0 ; i<=nQuestoes ; ++i ) {
		changeImage( i, true );
	}
	
	for( i=0 ; i<=nQuestoes ; ++i ) {
		switch( getHidden('questaotipo' + i, 'value') * 1 ) {
			// simples multipla
			case 1:
				if ( getHidden('q' + i, '') != null ) {
					any=false;
					changeImage( i, true );
					for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
						if ( getHidden("q" + i, '')[j].checked == true ) any=true;
					}
					if ( any == false ) {
						changeImage( i, false );
						alert("Tem de seleccionar uma opção da questão " + (i+1) + ".");
						return 0;
					}
				}
				break;

			//multipla checkbox
			case 2:
				fixedResp = getHidden('fixedResp' + i, 'value');
				maxResp = getHidden('maxResp' + i, 'value');
				any=0;
				somaControlo=0;
				changeImage( i, true );
				if ( fixedResp > 0 ) {
					for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
						if ( getHidden("r" + i + j, '').checked == true ) {
							any+=1;
							somaControlo+=(getHidden('nrControlo' + i + j, 'value')*1);
						}
					}
					if ( any != fixedResp || any==0 ) {
						changeImage( i, false );
						alert("Tem de seleccionar obrigatóriamente " + (fixedResp) + " opções.");
						document.frmInquerito.bEnviar.disabled=true;
						return 0;
					}
				}
				else {
					if ( maxResp > 0 ){
						any=0;
						somaControlo=0;
						for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
							if ( getHidden("r" + i + j, '').checked == true ) {
								any+=1;
								somaControlo+=(getHidden('nrControlo' + i + j, 'value')*1);
							}
						}
						if ( any > maxResp || any==0 ) {
							changeImage( i, false );
							alert("Tem de seleccionar no máximo " + (maxResp) + " opções e no mínimo 1.");
							document.frmInquerito.bEnviar.disabled=true;
							return 0;
						}
					}
					else {
						somaControlo=0;
						any=0;
						for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
							if ( getHidden("r" + i + j, '').checked == true ) {
								any+=1;
								somaControlo+=(getHidden('nrControlo' + i + j, 'value')*1);
							}
						}
						if ( any==0 ) {
							changeImage( i, false );
							alert("Tem de seleccionar no máximo " + (maxResp) + " opções e no mínimo 1.");
							document.frmInquerito.bEnviar.disabled=true;
							return 0;
						}
					}
				}

				if ( checkSomaControlo(i, somaControlo) == 0 ) {
					changeImage( i, false );
					alert("A soma de controlo na questão " + (i+1) + " não está correcta.");
					document.frmInquerito.bEnviar.disabled=true;
					return 0;
				}
				break;

			//multipla listbox
			case 3:
				fixedResp = getHidden('fixedResp' + i, 'value');
				maxResp = getHidden('maxResp' + i, 'value');
				any=0;
				somaControlo=0;
				changeImage( i, true );
				if ( fixedResp > 0 ) {
					for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
						if ( getHidden("q" + i, '').options[j].selected == true ) {
							any+=1;
							somaControlo+=(getHidden('nrControlo' + i + j, 'value')*1);
						}
					}
					if ( any != fixedResp || any==0 ) {
						changeImage( i, false );
						alert("Tem de seleccionar obrigatóriamente " + (fixedResp) + " opções.");
						document.frmInquerito.bEnviar.disabled=true;
						return 0;
					}
				}
				else {
					if ( maxResp > 0 ){
						any=0;
						somaControlo=0;
						for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
							if ( getHidden("q" + i, '').options[j].selected == true ) {
								any+=1;
								somaControlo+=(getHidden('nrControlo' + i + j, 'value')*1);
							}
						}
						if ( any > maxResp || any==0) {
							changeImage( i, false );
							alert("Tem de seleccionar no máximo " + (maxResp) + " opções e no mínimo 11.");
							document.frmInquerito.bEnviar.disabled=true;
							return 0;
						}
					}
					else {
						somaControlo=0;
						any=0;
						for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
							if ( getHidden("q" + i, '').options[j].selected == true ) {
								any+=1;
								somaControlo+=(getHidden('nrControlo' + i + j, 'value')*1);
							}
						}
						if ( any==0 ) {
							changeImage( i, false );
							alert("Tem de seleccionar no máximo " + (maxResp) + " opções e no mínimo 1.");
							document.frmInquerito.bEnviar.disabled=true;
							return 0;
						}
					}
				}

				if ( checkSomaControlo(i, somaControlo) == 0 ) {
					changeImage( i, false );
					alert("A soma de controlo na questão " + (i+1) + " não está correcta.");
					document.frmInquerito.bEnviar.disabled=true;
					return 0;
				}
				break;

			//ordenacao
			case 4:
				maxOrder = getHidden('maxOrder' + i, 'value');
				fixedResp = getHidden('fixedResp' + i, 'value');
				any=0;
				changeImage( i, true );
				for ( j=0 ; j<=getHidden("nRespostas" + i, 'value') ; ++j ) {
					if ( eval("document.frmInquerito.r" + i + j + ".selectedIndex > 0") ) {
						any+=1;
					}
				}
				if ( maxOrder > 0 ) {
					if ( any > maxOrder || any==0 ) {
						changeImage( i, false );
						alert("Tem de seleccionar no máximo " + (maxOrder) + " opções e no mínimo 1.");
						document.frmInquerito.bEnviar.disabled=true;
						return 0;
					}
				}
				else {
					if ( any==0 && fixedResp == 0) {
						changeImage( i, false );
						alert("Tem de seleccionar no mínimo 1 opção.");
						document.frmInquerito.bEnviar.disabled=true;
						return 0;
					}
				}				
				if (fixedResp > 0)
				{
					if ( any != fixedResp )
					{
						changeImage( i, false );
						alert("Tem de seleccionar " + fixedResp + " opções.");
						document.frmInquerito.bEnviar.disabled=true;
						return 0;
					}
				}
				break;

			//numerica
			case 5:
				changeImage( i, true );
				if ( isNaN(Number(parseFloat(getHidden('r' + i, 'value')))) || Number(parseFloat(getHidden('r' + i, 'value')))==0) {
					changeImage( i, false );
					alert("O valor introduzido na questão " + (i+1) + " não é numérico.");
					document.frmInquerito.bEnviar.disabled=true;
					return 0;
				}
				break;
		}
	}
	if (iTest==1)
		alert("As suas respostas foram validadas e o inquérito pode ser enviado.");
	document.frmInquerito.bEnviar.disabled=false;
	return 1;
}


function getHidden( field, attribute ) {
	if ( attribute == '' ) {
		return eval("document.frmInquerito." + field);
	}
	else {
		return eval("document.frmInquerito." + field + "." + attribute);
	}
}

function changeImage( field, bImage ) {
	if ( bImage == false ) {
		eval("document.frmInquerito.imgQuestao" + field + ".src='" + document.frmInquerito.imagesurl.value + "erro.gif'");
	}
	else {
		eval("document.frmInquerito.imgQuestao" + field + ".src='" + document.frmInquerito.imagesurl.value + "ok.gif'");
	}
}

function checkSomaControlo(i, somaControlo) {
	switch( getHidden('tipoSoma' + i, 'value') * 1 ) {
		case -1:
			if ( somaControlo < (getHidden('somaControlo' + i, 'value')*1) ) {
				return 1;
			}
			else {
				return 0;
			}
			break;
		case 0:
			if ( somaControlo == (getHidden('somaControlo' + i, 'value')*1) ) {
				return 1;
			}
			else {
				return 0;
			}
			break;
		case 1:
			if ( somaControlo > (getHidden('somaControlo' + i, 'value')*1) ) {
				return 1;
			}
			else {
				return 0;
			}
			break;
	}
}

//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------



//----------------------------------------------------------------------------------
//	Função que faz o refresh dos membros na homepage
//
//	27Ago2002 - v1.00 - Nuno Simões - Contraste, Innovagency
//----------------------------------------------------------------------------------


function goToMembro( obj ) {
	location.href="membro00.asp?membroid=" + obj.options[obj.options.selectedIndex].value;
}


function ComboNumericCheck(iQuestao, iResposta){
	var i;

	for (i=0;(i<=getHidden("nRespostas" + iQuestao, 'value'));i++){
		if (i != iResposta){
			if (eval("document.frmInquerito.r" + iQuestao + i+ ".options[document.frmInquerito.r" + iQuestao + i + ".selectedIndex].value == document.frmInquerito.r" + iQuestao + iResposta + ".options[document.frmInquerito.r" + iQuestao + iResposta + ".selectedIndex].value"))
				eval("document.frmInquerito.r" + iQuestao + i + ".selectedIndex = 0");
		}
	}
}


//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
