/**
 * Retorna o browser actual
 *
 * @name sistema_browser
 * @author Marco Pereira
 * @version 1.0 2010/09/02
 *
 * @return String (ff, ie7+, ie, op, sf, ns)
 */
function sistema_browser(){
	if(navigator.userAgent.match(/Firefox/i)){
		return("ff");
	} else if(navigator.userAgent.match(/MSIE/i)){
		if(navigator.userAgent.match(/MSIE 7/i)){
			return("ie7+");
		} else {
			return("ie");
		}
	} else if(navigator.userAgent.match(/Opera/i)){
		return("op");
	} else if(navigator.userAgent.match(/Safari/i)){
		return("sf");
	} else if(navigator.userAgent.match(/Netscape/i)){
		return("ns");
	} else if(navigator.userAgent.match(/Gecko/i)){
		//Caso nao saiba qual o browser entao pelo menos verifica se usa a estrutura Gecko
		return("ff");
	} else {
		//Se nao usar, entao vai mostrar o site como se fosse para o Internet Explorer visto que é o mais comum
		return("ie");
	}
}

/**
 * Adiciona um evento a um determinado elemento
 *
 * @name sistema_adicionarEvento
 * @author Marco Pereira
 * @version 1.0 2010/09/02
 *
 * @param objecto (String) ID do elemento que vai levar um evento
 * @param tipoEvento (String) Tipo do evento para o elemento. Ex: 'click' ou 'mouseover'...
 * @param funcao (Função) Nome da função efectuada quando o tipo de evento é activado. Também pode ser uma função anónima
 * @param usarCapture (Bool) Utilizar o Event Capture ou Event Bubbling. Se for true entao usa o Capture
 *
 * @return NULL
 */
function sistema_adicionarEvento(objecto, tipoEvento, funcao, usarCapture){
	//verificar se o valor do objecto é string ou objecto
	//alert(typeof(objecto));
	if(typeof(objecto)=="String" || typeof(objecto)=="string"){
		var objtemp=document.getElementById(objecto);
		objecto=objtemp;
	}

	if (objecto.addEventListener){
		objecto.addEventListener(tipoEvento, funcao, usarCapture);
		return true;
	} else if (objecto.attachEvent){
		var r = objecto.attachEvent("on"+tipoEvento, funcao);
		return r;
	} else {
		alert("Não foi possível adicionar o Evento");
		return false;
	}
}

/**
 * Remove um evento a um determinado elemento
 *
 * @name sistema_removerEvento
 * @author Marco Pereira
 * @version 1.0 2010/09/02
 *
 * @param objecto (String) ID do elemento que vai remover um evento
 * @param tipoEvento (String) Tipo do evento para o elemento. Ex: 'click' ou 'mouseover'...
 * @param funcao (Função) Nome da função efectuada quando o tipo de evento é activado.
 * @param usarCapture (Bool) Utilizar o Event Capture ou Event Bubbling. Se for true entao usa o Capture
 *
 * @return NULL
 */
function sistema_removerEvento(objecto, tipoEvento, funcao, usarCapture){
  if (objecto.removeEventListener){
    objecto.removeEventListener(tipoEvento, funcao, usarCapture);
    return true;
  } else if (objecto.detachEvent){
    var r = objecto.detachEvent("on"+tipoEvento, funcao);
    return r;
  } else {
    alert("Não foi possível remover o Evento");
	return false;
  }
}

/**
 * Escolhe um dos tabs disponíveis e oculta os restantes
 *
 * @name sistema_escolherTab
 * @author Marco Pereira
 * @version 1.0 2010/09/03
 *
 * @param id (String) ID do objecto de tab
 * @param numero (Int) Posição do tab
 *
 * @return NULL
 */
function sistema_escolherTab(id,numero){
	if(numero==undefined){
		numero="";
	}
	// Opções menu
	var opcoes=document.getElementById(id).getElementsByTagName("div");

	for(var i=0;i<opcoes.length;i++){
		if(opcoes[i].id=="tab_botao_" + id + "_" + numero){
			document.getElementById(opcoes[i].id).className='tab_menu_elemento_escolhido';
		} else if(opcoes[i].id.search(/tab_botao_/)!=-1){
			document.getElementById(opcoes[i].id).className='tab_menu_elemento';
		}

		if(opcoes[i].id=="tab_conteudo_" + id + "_" + numero){
			document.getElementById(opcoes[i].id).className='tab_elemento_escolhido';
		} else if(opcoes[i].id.search(/tab_conteudo_/)!=-1){
			document.getElementById(opcoes[i].id).className='tab_elemento';
		}
	}
}

/**
 * Define no objecto window os parametros posX, posY, posAbsX, posAbsY para
 * poderem ser utilizados facilmente sem recurso a eventos extra
 *
 * @name sistema_posicaoRato
 * @author Marco Pereira
 * @version 1.0 2010/09/04
 *
 * @param e (Evento) Este parametro não deve ser definido pois é utilizado pelo proprio evento
 *
 * @return NULL
 */
function sistema_posicaoRato(e){
	//TODO: Optar por uma forma melhor de detectar o browser
	if (sistema_browser()=="ie" || sistema_browser()=="ie7+") {
		window.posX=event.clientX;
		window.posY=event.clientY;
		window.posAbsX = event.clientX + document.body.scrollLeft
		window.posAbsY = event.clientY + document.body.scrollTop
	} else {
		window.posX=e.pageX-window.pageXOffset;
		window.posY=e.pageY-window.pageYOffset;
		window.posAbsX=e.pageX;
		window.posAbsY=e.pageY;
	}
}

/**
 * Muda o estado de um botão. Esta função serve para mudar a imagem quando o cursor passa por cima do botao
 * ou quando se clica e até mesmo desactiva
 *
 * @name sistema_mudarEstadoBotao
 * @author Marco Pereira
 * @version 0.9 2010/09/12
 *
 * @param id (String) ID do botão
 * @param estado (Enum) Estado do botão. Opções disponíveis: normal, activado, marcado, desmarcado, clique, desactivado, reactivado
 *
 * @return NULL
 *
 * @todo Confirmar se as condições estão correctas e testar diversas combinações de imagens de estado
 */
function sistema_mudarEstadoBotao(id,estado){
	var botao=document.getElementById(id);

	if(estado=="normal" && botao.estadoActivado==true){
		if(botao.estadoBotao=="normal" || !botao.estado_es){
			botao.src=botao.estado_normal.src;
		} else if(botao.estadoBotao=="marcado"){
			if(botao.estado_es && botao.estado_es_ac){
				botao.src=botao.estado_es.src;
			}
		}
	} else if(estado=="activado" && botao.estadoActivado==true){
		if(botao.estadoBotao=="normal" || !botao.estado_es){
			if(botao.estado_ac){
				botao.src=botao.estado_ac.src;
			}
		} else if(botao.estadoBotao=="marcado"){
			if(botao.estado_es_ac && botao.estado_es){
				botao.src=botao.estado_es_ac.src;
			}
		}
	} else if(estado=="marcado" && botao.estadoActivado==true){
		botao.estadoBotao="marcado";
		if(botao.estado_es){
			botao.src=botao.estado_es.src;
		}
	} else if(estado=="desmarcado" && botao.estadoActivado==true){
		botao.estadoBotao="normal";
		botao.src=botao.estado_normal.src;
	} else if(estado=="desactivado"){
		if(botao.estado_in){
			botao.src=botao.estado_in.src;
		}
		botao.estadoActivado=false;
		
		if(botao.tagName=="INPUT"){
			botao.disabled=true;
		} else {
			botao.link=botao.parentNode.href;
			botao.parentNode.removeAttribute("href");
		}
	} else if(estado=="reactivado"){
		if(botao.estadoBotao=="normal"){
			botao.src=botao.estado_normal.src;
		} else if(botao.estadoBotao=="marcado"){
			if(botao.estado_es){
				botao.src=botao.estado_es.src;
			} else {
				botao.src=botao.estado_normal.src;
			}
		}
		botao.estadoActivado=true;
		if(botao.tagName=="INPUT"){
			botao.disabled=false;
			botao.estadoActivado=true;
		} else {
			if(botao.link){
				botao.parentNode.href=botao.link;
			}
		}
	} else if(estado=="clique" && botao.estadoActivado==true){
		if(botao.estado_cl){
			botao.src=botao.estado_cl.src;
		}
	}
}

function definir_cookie(nome_cookie,valor,dias_expirar){
	var data_expirar=new Date();
	data_expirar.setDate(data_expirar.getDate() + dias_expirar);
	var valor_cookie=escape(valor) + ((dias_expirar==null) ? "" : "; expires="+data_expirar.toUTCString());
	document.cookie=nome_cookie + "=" + valor_cookie;
}
