﻿/*-------------------------------GLOBAL VARIABLES------------------------------------*/  

var isBusy    = false;
var actual    = "id=0";
var lang      = "PT";
var intervalo = -1;

/*-----------------------------------------------------------------------------------------------*/  

try{
    var xmlhttp = new XMLHttpRequest();
}catch(ee){
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(E){
            xmlhttp = false;
        }
    }
}



function put(valor){ //coloca o valor na variavel/elemento de retorno
	if((typeof(elemento_retorno)).toLowerCase()=="string"){ //se for o nome da string
		if(valor!="Falha no carregamento"){
			eval(elemento_retorno + '= unescape("' + escape(valor) + '")')
		}
	}else if(elemento_retorno.tagName.toLowerCase()=="input"){
		valor = escape(valor).replace(/\%0D\%0A/g,"")
		elemento_retorno.value = unescape(valor);
	}else if(elemento_retorno.tagName.toLowerCase()=="select"){       
		select_innerHTML(elemento_retorno,valor)
	}else if(elemento_retorno.tagName){
		elemento_retorno.innerHTML = valor;
	}    
}


// Apaga todo o conteudo de um elemento, por causa do IE6, que teima em
// nao aceitar o innerHTML com div com conteudo
function DeleteChildren(node){
	if(node){
		for(var x = node.childNodes.length - 1; x >= 0; x--){
			var childNode = node.childNodes[x];
			
			if(childNode.hasChildNodes()){
				DeleteChildren(childNode);
			}
			
			node.removeChild(childNode);

			if(childNode.outerHTML){
				childNode.outerHTML = '';
			}
			childNode=null;   
		}
		node=null;
	}
}

 
function extraiScript(texto) {
	var ini, pos_src, fim, codigo;
	var objScript = null;
	ini = texto.indexOf('<script', 0)
	while (ini != -1) {
        var objScript = document.createElement("script");
        //Busca se tem algum src a partir do inicio do script
        pos_src = texto.indexOf(' src', ini)
        ini = texto.indexOf('>', ini) + 1;

        //Verifica se este e um bloco de script ou include para um arquivo de scripts
        if (pos_src < ini && pos_src >=0) {//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
            //Marca como sendo o inicio do nome do arquivo para depois do src
            ini = pos_src + 4;
            //Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
            fim = texto.indexOf('.', ini)+4;
            //Pega o nome do arquivo
            codigo = texto.substring(ini,fim);
            //Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
            codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
            // Adiciona o arquivo de script ao objeto que sera adicionado ao documento
            objScript.src = codigo;
        } else {//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
            // Procura o final do script
            fim = texto.indexOf('</script>', ini);
            // Extrai apenas o script
            codigo = texto.substring(ini,fim);
            // Adiciona o bloco de script ao objeto que sera adicionado ao documento
           objScript.text = codigo;
			
        }

        //Adiciona o script ao documento
        document.body.appendChild(objScript);
        // Procura a proxima tag de <script
        ini = texto.indexOf('<script', fim);

        //Limpa o objeto de script
        objScript = null;
    }
}

function antiCacheRand(aurl){
	var dt = new Date();
	if(aurl.indexOf("?")>=0){ // já tem parametros
		return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
	} else { 
		return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());
	}
}

function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - altera o innerHTML de um select independente se é FF ou IE
* Corrige o problema de não ser possível usar o innerHTML no IE corretamente
* Veja o problema em: [url="http://support.microsoft.com/default.aspx?...kb;en-us;276228"]http://support.microsoft.com/default.aspx?...kb;en-us;276228[/url]
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.0 - 06/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* objeto(tipo object): o select a ser alterado
* innerHTML(tipo string): o novo valor do innerHTML
*******/
	objeto.innerHTML = ""
	var selTemp = document.createElement("micoxselect")
	var opt;
	selTemp.id="micoxselect1"
	document.body.appendChild(selTemp)
	selTemp = document.getElementById("micoxselect1")
	selTemp.style.display="none"
	if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
		innerHTML = "<option>" + innerHTML + "</option>"
	}
	innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
	selTemp.innerHTML = innerHTML
	for(var i=0;i<selTemp.childNodes.length;i++){
		if(selTemp.childNodes[i].tagName){
			opt = document.createElement("OPTION")
			for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
				opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
			}
			opt.value = selTemp.childNodes[i].getAttribute("value")
			opt.text = selTemp.childNodes[i].innerHTML
			if(document.all){ //IEca
			objeto.add(opt)
			}else{
			objeto.appendChild(opt)
			}                    
		}   
	}
	document.body.removeChild(selTemp)
	selTemp = null
}

	
/*-----------------------------------------------------------------------------------------------*/  

function changeLang(lingua) {
	if (lingua != lang){
		switch(lingua) {
			case "EN":
				document.getElementById("lgPT").className = "";
				document.getElementById("lgEN").className = "desactivado";
				
			    //Obtém os links do menu mainMenu
			    var menu  = document.getElementById("mainMenu");
				if (menu != null) {
					var links = menu.getElementsByTagName("a");

					//Atribui o evento
					for(var i=0; i<links.length; i++) {
						links[i].innerHTML = links[i].getAttribute('titleEN');
					}
				}
				lang = "EN";
				break;
			case "PT":
				document.getElementById("lgPT").className = "desactivado";
				document.getElementById("lgEN").className = "";
				
			    //Obtém os links do menu mainMenu
			    var menu  = document.getElementById("mainMenu");
			    var links = menu.getElementsByTagName("a");

			    //Atribui o evento
			    for(var i=0; i<links.length; i++) {
			        links[i].innerHTML = links[i].getAttribute('titlePT');
				}
				lang = "PT";
				break;
		}
		carrega(actual);
		
		// Chama o tracker do Google Analytics
		// pageTracker._trackPageview("Lingua: " + lang);
	}
}


function menuclick(e){
    //Correção para eventos quebrados da Microsoft
    if (typeof(e) == 'undefined') 
		var e = window.event;
	
    source = e.target ? e.target : e.srcElement;
	
    //Correção para o bug do Konqueror/Safari
    if(source.nodeType == 3 || source.nodeName != "A") 
		source = source.parentNode;
	
	var urlHalves = String(source.getAttribute("href")).split('?');
	if(urlHalves[1]){
		// Chama o tracker do Google Analytics
		if ( source.getAttribute("titlePT") != null ) {
			desc = source.getAttribute("titlePT") + " (" + urlHalves[1] + ")";
			pageTracker._trackPageview(desc);
		}
		
		//Chama o carrega
		carrega( urlHalves[1] );

		//Cancela o click (evita a navegação)
		return false;
	}
}


function initSearch() {
	obj = document.getElementById('multiSearchFormID');
	sID = get("id", "url?"+actual);
	obj.value = sID;
	
	searchFocus(false);
}

function initAjaxLinks(elemento) {
	//Obtém os links da página lida
	var linksMO = getElementsByRel("ajaxLink", "a", elemento);
	//Atribui o evento
	for(var i=0; i<linksMO.length; i++)
		linksMO[i].onclick = menuclick;
}


function searchMulti() {
	obj = document.getElementById('multiSearchForm');
	
	var getstr = "";
	for (i=0; i<obj.childNodes.length; i++) {
		if (obj.childNodes[i].tagName == "INPUT") {
			if (obj.childNodes[i].type == "text"  || obj.childNodes[i].type == "hidden") {
				getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
			}
			if (obj.childNodes[i].type == "checkbox") {
				if (obj.childNodes[i].checked) {
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				} else {
					getstr += obj.childNodes[i].name + "=&";
				}
			}
			if (obj.childNodes[i].type == "radio") {
				if (obj.childNodes[i].checked) {
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				}
			}
		}
		if (obj.childNodes[i].tagName == "SELECT") {
			var sel = obj.childNodes[i];
			getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
		}
	}
	getstr = getstr.substring(0, getstr.length-1); 

	obj = document.getElementById('searchq');

	// Chama o tracker do Google Analytics
	desc = "Procura (" + obj.value + ")";
	pageTracker._trackPageview(desc);
	
	obj.value = "";

	carrega( getstr );
	return false;
}


function novoRecado() {
	name     = document.getElementById('name').value;
	email1   = document.getElementById('email').value;
	homepage = document.getElementById('homepage').value;
	country  = document.getElementById('country').value;
	comment  = document.getElementById('comment').value;
	op = "guardaNovoRecado";

	var campos = new Array();
	
	if ( isEmpty(name)    ) campos[campos.length] = "Nome";
	if ( isEmpty(email1)  ) campos[campos.length] = "E-mail";
	if ( isEmpty(comment) ) campos[campos.length] = "Recado";
	
	camposTxt = "";
	n = 0; 
	for (i in campos) { 
		camposTxt += campos[i]; 

		if ( n == campos.length - 1 )
			camposTxt += ".";
		else
		if ( n == campos.length - 2 )
			camposTxt += " e ";
		else
			camposTxt += ", ";
			
		n++;
	};

	if ( !isEmpty(camposTxt) ) {
		novoRecadoReturn("Tem de preencher correctamente todos os campos obrigatórios.<br />Campos em falta: " + camposTxt, false);
		return false;
	}

	var getstr = "name=" + name + "&"
	           + "email=" + email1 + "&"
	           + "homepage=" + homepage + "&"
	           + "country=" + country + "&"
	           + "comment=" + comment + "&"
	           + "op=guardaNovoRecado";

	obj = document.getElementById('recadoForm');
	obj.reset();

	makePOSTRequest('/admin/functions/ajaxSave.php', getstr, novoRecadoReturn);

	return false;
}

function novoRecadoReturn(retorno, refresh) {
	document.getElementById("recadoNovoRespostaTXT").innerHTML = "<p align='center'><b>" + retorno + "</b></p>";
	toggleOn("recadoNovoResposta");
	
	setTimeout("toggleOff('recadoNovoResposta')", 2000); 
	if (refresh != false) {
		setTimeout("toggleOff('recadoNovo')", 2500); 
		setTimeout("top.window.location.reload()", 3000); 
	}
}



/*-----------------------------------------------------------------------------------------------*/

function initAjax() {
	carrega = onnavigate("c", function(n) {
		if (isBusy) {
			return;
			//xmlhttp.onreadystatechange = function () {}
			//xmlhttp.abort();
		}
		
		//Exibe o Loading...
		loadingON();
		
		//Guarda a página escolhida na variável actual
		actual = n;
		
		if (document.getElementById("layerConteudo") != null) {
			tamanho = getElementSize("layerConteudo");
			tam = "&cw=" + tamanho[0] + "&ch=" + tamanho[1];
		} else tam = "";
		
		/*  Envio por POST *
		params = n + "&lang=" + lang;
		url = antiCacheRand("/main.php");
		xmlhttp.open("POST", url, true);
		
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
		xmlhttp.setRequestHeader("Pragma", "no-cache");
		xmlhttp.setRequestHeader("Content-length", params.length);
		xmlhttp.setRequestHeader("Connection", "close");
		*/
		
		/* Envio por GET */
		url = antiCacheRand("/main.php?" + n + "&lang=" + lang + tam);
		xmlhttp.open("GET", url, true);
		
		isBusy = true;
		
		//Executada quando o navegador obtiver o código
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4  && xmlhttp.status == 200) {
				//Lê o texto
				var texto = xmlhttp.responseText;

				texto = htmlspecialchars_decode(texto, "ENT_QUOTES");
				
				elemento_retorno = document.getElementById("layerConteudo");
			
				//Exibe o texto no div conteúdo
				DeleteChildren( elemento_retorno.firstChild );
				
				put(texto);

				//Executa javascript que estejam na pagina lida
				extraiScript(texto);
				
				initSearch();
				initAjaxLinks(elemento_retorno);

				selectMenu(get("id", "url?"+actual));
				jQuery("#scrollBox").jScrollPane();
				
				// desliga o loading
				loadingOFF();
				
				// reconfigura o floatBox
				fb.tagAnchors(document.getElementById('layerConteudo'));
				
				isBusy = false;
			}
		}
		//xmlhttp.send(params);  /*  Envio por POST  */
		xmlhttp.send(null);      /*  Envio por GET   */
	});
	
    //Obtém os links do menu
    var menu  = document.getElementById("mainMenu");
    var links = menu.getElementsByTagName("a");

    //Atribui o evento
    for(var i=0; i<links.length; i++)
        links[i].onclick = menuclick;
	
	initSearch();

	initAjaxLinks(document.getElementById('layerConteudo'));
}


function initOld() {
}

if(xmlhttp)
	window.onload = initAjax;
else
	window.onload = initOld;
