/**************************************  G E N É R I C A S    *********************************** */

function clearInput(tBox) {
	tBox.value= ""
}


/** @brief: Testa se a string so contem valores numericos 
  * @return: 1 se forem so numeros; 0 otherwise; 
 **/
function isDigit (InString)  {
    if(InString.length==0) return (false);
    var RefString="1234567890";
    for (Count=0; Count < InString.length; Count++)  {
        TempChar= InString.substring (Count, Count+1);
        if (RefString.indexOf (TempChar, 0)==-1)  
            return (false);
    }
    return (true);
}

/* Testa se a string so contem valores de um preco (numericos + . ) 
     @return: 1 se forem so numeros; 0 otherwise; 
*/
function isPrice (InString)  {
    if(InString.length==0) return (false);
    var RefString="1234567890.";
    for (Count=0; Count < InString.length; Count++)  {
        TempChar= InString.substring (Count, Count+1);
        if (RefString.indexOf (TempChar, 0)==-1)  
            return (false);
    }
    return (true);
}

/** @brief: Função que valida o formato de um email (aaa@bbb.xx) 
  * @return: true, se for valido, false otherwise
 **/
function isEmail(email, required) {
    if (required==undefined) {   // if not specified, assume it's required
        required=true;
    }
    if (email==null) {
        if (required) {
            return false;
        }
        return true;
    }
    if (email.length==0) {  
        if (required) {
            return false;
        }
        return true;
    }
    if (!allValidChars(email)) {  // check to make sure all characters are valid
        return false;
    }
    if (email.indexOf("@") < 1) { //  must contain @, and it must not be the first character
        return false;
    } else if (email.lastIndexOf(".") <= email.indexOf("@")) {  // last dot must be after the @
        return false;
    } else if (email.indexOf("@") == email.length) {  // @ must not be the last character
        return false;
    } else if (email.indexOf("..") >=0) { // two periods in a row is not valid
		return false;
    } else if (email.indexOf(".") == email.length) {  // . must not be the last character
		return false;
    }
	return true;
}

function allValidChars(email) {
	var parsed = true;
	var validchars = "abcdefghijklmnopqrstuvwxyz0123456789@.-";
	for (var i=0; i < email.length; i++) {
		var letter = email.charAt(i).toLowerCase();
		if (validchars.indexOf(letter) != -1)
			continue;
		parsed = false;
		break;
	}
	return parsed;
}

/* *************************************         jQuery  ************************************/
$(function() {
   $("#div1").click(function(){
		if ($("#divMostraEsconde_div1img").attr("src") == "img/t_formacao_arrow_down.png") {
			$("#divMostraEsconde_div1img").attr("src","img/t_formacao_arrow_up.png");
		} else {
			$("#divMostraEsconde_div1img").attr("src","img/t_formacao_arrow_down.png");
		}
		$("#div01").slideToggle("slow");
	});
	
	$("#div2").click(function(){
		if ($("#divMostraEsconde_div2img").attr("src") == "img/t_formacao_arrow_down.png") {
			$("#divMostraEsconde_div2img").attr("src","img/t_formacao_arrow_up.png");
		} else {
			$("#divMostraEsconde_div2img").attr("src","img/t_formacao_arrow_down.png");
		}
		$("#div02").slideToggle("slow");
	});
	
	$("#div1coach").click(function(){
		if ($("#div1coach_img").attr("src") == "img/t_formacao_arrow_down.png") {
			$("#div1coach_img").attr("src","img/t_formacao_arrow_up.png");
		} else {
			$("#div1coach_img").attr("src","img/t_formacao_arrow_down.png");
		}
		$("#div01").slideToggle("slow");
	});
	
	$('#insc_newsletter').click(function() {
		var email= $('#name_email_insc').val();
		
		//alert(email);
		
		$.post("insc_newsletter.php", { Email_insc: email },
			function(data){
				var savebox = new Boxy('<div align="center">O seu email foi adicionado à nossa lista de emails com sucesso.<br /> No futuro poderá sempre remover-se da lista<br />Obrigado.</div>', {title: 'Email Adicionado', closeable: false, modal: true, show: false, unloadOnHide: true});
				 savebox.show();
				 savebox.resize(400, 50);
				 setTimeout(function(){ savebox.hide();},2500);
			} 
		);
	});
	
	$('#remover_email').click(function() {
		var email= $('#email_remover').val();
		
		//alert(email);
		
		$.post("unsubscribe_email.php", { Email_un: email },
			function(data){
				var savebox = new Boxy('<div align="center">O seu email foi removido da nossa lista de emails com sucesso.</div>', {title: 'Email Removido', closeable: false, modal: true, show: false, unloadOnHide: true});
				 savebox.show();
				 savebox.resize(400, 50);
				 setTimeout(function(){ savebox.hide();},2500);
			} 
		);
	});
});

/**************************************         A D M I N S  *********************************** */
function validateAddAdmin(form){
	var error=0;

	if (form.username.value.length === 0){
		alert("É necessário o preenchimento do nome de utilizador.");
		form.username.focus();
		error=1;
	}else if (form.password.value.length === 0){
		alert("É necessário o preenchimento da password.");
		form.password.focus();
		error=1;
	} else if (form.passwordCnf.value.length === 0){
		alert("É necessário confirmar a password escolhida.");
		form.passwordCnf.focus();
		error=1;
	} else if (form.password.value != form.passwordCnf.value){
		form.password.value="";
		form.passwordCnf.value="";
		alert("As passwords têm de ser iguais. Por favor, introduza novamente as passwords.");
		form.password.focus();
		error=1;
	}
	
	if (error== 1) {
		return false;	
	}
}

function validateRemAdmin(form){
	var error=0;

	if (form.username.options.value == -1){
		alert("É necessário seleccionar o administrador a remover.");
		form.username.focus();
		return false;
	}
	
	if (confirm("Tem a certeza que quer remover o administrador?")) {
	    return true;
	} else {
		return false;
	}
}

function validateAlterPassword(form){
	var error=0; 
	
	if (form.pwdAct.value.length==0){
		alert("Password actual inválida.");
		form.pwdAct.focus();
		error=1;
	}else if (form.newPwd.value.length == 0){
		alert("É necessário o preenchimento da nova password.");
		form.newPwd.focus();
		error=1;
	} else if (form.newPwdCnf.value.length == 0){
		alert("É necessário confirmar a nova password escolhida.");
		form.newPwdCnf.focus();
		error=1;
	} else if (form.newPwd.value != form.newPwdCnf.value){
		form.newPwd.value="";
		form.newPwdCnf.value="";
		alert("As passwords têm de ser iguais. Por favor, introduza novamente as passwords.");
		form.newPwd.focus();
		error=1;
	}
	
	if (error==1)
		return false;
}


/**************************************   D E S T A Q U E S   *********************************** */

function validateAddDestaque(form){	
	error=0; 
	if (form.titulo.value.length == 0){
		alert("É obrigatório preencher o titulo do destaque.");
		form.titulo.focus();
		error=1;
	}
	
	if (form.corpo.value.length == 0){
		alert("É obrigatório preencher o corpo do destaque.");
		form.corpo.focus();
		error=1;
	}
	
	if (error==1)
		return false;
}

function validateRemDestaque(form){
	if (form.idDestaque.options.value == -1){
		alert("É necessário seleccionar um destaque para remover.");
		form.idDestaque.focus();
		return false;
	}
	
	if (confirm("Tem a certeza que quer remover o destaque?")) {
	    return true;
	} else {
		return false;
	}
}

function validateAlterDestaqueChoose(form){
	if (form.idDestaque.options.value == -1){
		alert("É necessário seleccionar um destaque para alterar.");
		form.idDestaque.focus();
		return false;
	}
}


/****************************** FUNÇÕES PARA ALTERAR O CONTEUDO DOS DESTAQUES AUTOMATICAMENTE  **************************************/
	var tickspeed=25000; //ticker speed in miliseconds (2000=2 seconds)
	var selectedDiv=-1; /* variavel que controla o *id* da div que está a apresentar*/
	/* coloquei o selectedDiv a -1 para os controlos anterior e seguinte funcionarem da mesma forma */
	var totalDivs= 0; /* variavel que contem o numero total de divs (numero real => 1 destaque equiv totalDivs=1*/
	var globalIdTimeout; /* guarda o id do setTimeout para poder cancelar a função */
	/*var isLoadPage; /* função que verifica se está a apresentar a página (se o startscroller é chamado ou não) */

	/* funcao que conta o numero de divs existentes e começa a fazer apresentar */
	function startscroller(){
		/* conta total de divs a apresentar*/
		while (document.getElementById("dropmsg"+totalDivs)!=null)
			totalDivs++;
		/* ALTERACAO */
		/* para que o destaque que está a ser apresentado não seja alterado com a mudança de página, é criado um cookie. 
			Caso o cookie não exista, é criado e armazenado o valor da variável da selectedDiv.
			Caso o cookie já esteja criado, é lido e mantem-se o destaque actual. */
		
		/* verifica se existe cookie. Se existir le o valor para a variavel. Nunca grava nada porque os cookies são gravados nas funções */
		var selectedDivDestaques= getCookie('selectedDiv');
		if (selectedDivDestaques!="" && selectedDivDestaques!= null && parseInt(selectedDivDestaques)<totalDivs){
			selectedDiv = selectedDivDestaques-1;
		} else {
			selectedDiv= -1;
		}
		/*isLoadPage= true;*/
		
		/* inicia a mostragem */
		destaqueSeguinte();
	}

	/* começa por chamar a funcao startscroller */
	if (window.addEventListener)
		window.addEventListener("load", startscroller, false);
	else if (window.attachEvent)
		window.attachEvent("onload", startscroller);

	function changePresented(){
		/* selecciona o elemento a apresentar (div) */
		var selectedDivObj=document.getElementById("dropmsg"+selectedDiv);
		var selectedDivObj2=document.getElementById("dropSubject"+selectedDiv);
		/* altera os estilos de todos os elementos (coloca tudo a none) */
		contractall();
		/* como block */
		selectedDivObj.style.display="block";
		selectedDivObj2.style.display="block";
		/* volta a chamar esta mesma funcao apos o tempo especificado para alterar o conteudo */
		globalIdTimeout= setTimeout("destaqueSeguinte()",tickspeed);
	}
	
	function destaqueAnterior(){
		/* selecciona a div que se pretende */
		selectedDiv=(selectedDiv-1== -1)? totalDivs-1 : selectedDiv-1
		setCookie("selectedDiv", selectedDiv, 1);
		
		clearTimeout(globalIdTimeout);
		changePresented();
	}
	
	function destaqueSeguinte(){
		/* selecciona a div que se pretende */
		selectedDiv=(selectedDiv<totalDivs-1)? selectedDiv+1 : 0
		setCookie("selectedDiv", selectedDiv, 1);
		
		/* caso seja loadPage não cancela */
		/*if (isLoadPage===false && globalIdTimeout!=null) {*/
		clearTimeout(globalIdTimeout);
		changePresented();
		/*}
		isLoadPage= false;*/
	}

	/* funcao que serve para colocar os estilos de todas as divs a none */
	function contractall(){
		var inc= 0;
		while (document.getElementById("dropmsg"+inc)){
			document.getElementById("dropSubject"+inc).style.display="none";
			document.getElementById("dropmsg"+inc).style.display="none";
			inc++;
		}
	}
	
	
	/*função para criar um cookie */
	function setCookie(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else 
			var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}
	
	/* funcao para buscar o valor de um cookie */
	function getCookie( check_name ) {
		// first we'll split this cookie up into name/value pairs
		// note: document.cookie only returns name=value, not the other components
		var a_all_cookies = document.cookie.split( ';' );
		var a_temp_cookie = '';
		var cookie_name = '';
		var cookie_value = '';
		var b_cookie_found = false; // set boolean t/f default f

		for ( i = 0; i < a_all_cookies.length; i++ ){
			// now we'll split apart each name=value pair
			a_temp_cookie = a_all_cookies[i].split( '=' );
			// and trim left/right whitespace while we're at it
			cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
			// if the extracted name matches passed check_name
			if ( cookie_name == check_name ) {
				b_cookie_found = true;
				// we need to handle case where cookie has no value but exists (no = sign, that is):
				if ( a_temp_cookie.length > 1 ) {
					cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
				}
				// note that in cases where cookie is initialized but no value, null is returned
				return cookie_value;
				break;
			}
			a_temp_cookie = null;
			cookie_name = '';
		}
		if ( !b_cookie_found ) {
			return null;
		}
	}
/****************** EOF  ***********************/


/**************************************   W O R K S H O P S   *********************************** */

function validateAddWorkshop(form){	
	error=0; 
	if (form.titulo.value.length == 0){
		alert("É obrigatório preencher o titulo do workshop.");
		form.titulo.focus();
		error=1;
	}
	
	if (form.descricao.value.length == 0){
		alert("É obrigatório preencher o corpo do workshop.");
		form.descricao.focus();
		error=1;
	}
	
	if (form.preco.value.length!=0 && !isPrice(form.preco.value)){
		alert("O campo preço está mal preenchido.");
		form.preco.focus();
		return false;
	}
	
	if (error==1)
		return false;
}

function validateRemWorkshop(form){
	if (form.idWorkshop.options.value == -1){
		alert("É necessário seleccionar um workshop para remover.");
		form.idWorkshop.focus();
		return false;
	}
	
	if (confirm("Tem a certeza que quer remover o workshop?")) {
	    return true;
	} else {
		return false;
	}
}


function validateAlterWorkshopChoose(form){
	if (form.idWorkshop.options.value == -1){
		alert("É necessário seleccionar um workshop para alterar.");
		form.idWorkshop.focus();
		return false;
	}
}


/***************************************  P R O D U T O S    *********************************** */

function validateAddProduto(form){
	if (form.nome.value.length == 0){
		alert("É obrigatório atribuir um nome ao produto.");
		form.nome.focus();
		return false;
	}
	
	if (form.descricao.value.length==0){
		alert("É obrigatório atribuir uma descrição ao produto.");
		form.descricao.focus();
		return false;
	}
	
	if (form.preco.value.length!=0 && !isPrice(form.preco.value)){
		alert("O campo preço está mal preenchido.");
		form.preco.focus();
		return false;
	}
	
	if (form.preco.value.length==0){
		alert("Não atribuiu nenhum preço ao produto.");
	}
	
	if (form.imagem.value.length==0){
		alert("Não associou nenhuma imagem ao produto.");
	}
}


function validateRemProduto(form){
	if (form.idProduto.options.value == -1){
		alert("É necessário escolher o produto a remover.");
		form.idProduto.focus();
		return false;
	}
			
	if (confirm("Tem a certeza que quer remover o produto?")) {
	    return true;
	} else {
		return false;
	}
}

/* funcao usada do lado do php para confirmar a adicao de um produto com o mesmo nome*/
function confirmAddModelo(nome) {
	var answer = confirm("Já existe um produto com esse nome na base de dados.\r\nTem a certeza que quer adicionar outro produto com o mesmo nome ("+nome+")?")
	/* se a resposta nao for positiva reenvia o cliente para a mesma pagina*/
	if (!answer){
		window.location = "produtosAddRem.php";
	}
}

function validateAlterProdutoChoose(form){
	if (form.idProduto.options.value == -1){
		alert("É necessário escolher o produto a alterar.");
		form.idProduto.focus();
		return false;
	}
}

function validateAlterProduto(form){
	if (form.nome.value.length == 0){
		alert("É necessário atribuir um nome ao produto.");
		form.nome.focus();
		return false;
	}
}


function validateImagemProdutoChoose(form){
	if (form.idProduto.options.value == -1){
		alert("É necessário escolher o produto para gerir as imagens.");
		form.idProduto.focus();
		return false;
	}
}


/**************************** C O N T A C T O S *******************************************/

function validateSendMail(form){
	if (form.nome.value.length==0){
		alert("É obrigatório o preenchimento do nome.");
		form.nome.focus();
		return false;
	}
		
	if ((form.email.value.length == 0) || (isEmail(form.email.value)==false)){
		alert("É obrigatório o preenchimento correcto do email.");
		form.email.focus();	
		return false;
	}
	
	if (form.mensagem.value.length == 0){
		alert("É necessário colocar uma mensagem.");
		form.mensagem.focus();
		return false;
	}
}


/**************************************** M A R K E T I N G ************************************************************/
function validateEncomendarProd(form){
	if (form.nome.value.length==0){
		alert("É obrigatório o preenchimento do nome.");
		form.nome.focus();
		return false;
	}
	
	if (form.morada.value.length==0){
		alert("É obrigatório o preenchimento da morada.");
		form.morada.focus();
		return false;
	}
		
	if ((form.email.value.length == 0) || (isEmail(form.email.value)==false)){
		alert("É obrigatório o preenchimento correcto do email.");
		form.email.focus();	
		return false;
	}
	
	if (form.telefone.value.length != 9 || !isDigit(form.telefone.value)){
		alert("É obrigatório o preenchimento do contacto telefónico");
		form.telefone.focus();
		return false;
	}
	
	if (form.quantidade.value.length == 0  || !isDigit(form.quantidade.value)){
		alert("É obrigatório o preenchimento da quantidade de produto a encomendar");
		form.quantidade.focus();
		return false;
	}
}


/* Formação */
function validateInscricao(form){
	if (form.nome.value.length==0){
		alert("É obrigatório o preenchimento do nome.");
		form.nome.focus();
		return false;
	}
			
	if ((form.email.value.length == 0) || (isEmail(form.email.value)==false)){
		alert("É obrigatório o preenchimento correcto do email.");
		form.email.focus();	
		return false;
	}
	
	if (form.telefone.value.length != 9 || !isDigit(form.telefone.value)){
		alert("É obrigatório o preenchimento do contacto telefónico");
		form.telefone.focus();
		return false;
	}
	
	if (form.nPessoas.value.length == 0  || !isDigit(form.nPessoas.value)){
		alert("É obrigatório indicar o número de pessoas a inscrever");
		form.quantidade.focus();
		return false;
	}
}

