var texto_loading;
var texto_little_loading;
var link_new_window;

function setLoadingLanguage(carregando)
{
	texto_loading = carregando+" <img src=\"imagens/loading.gif\" alt=\""+carregando+"\" />";
	texto_little_loading = "<img src=\"imagens/loading-little.gif\" alt=\""+carregando+"\" />"+carregando;
}

function setExternalLinksLanguage(link_l)
{
	link_new_window = link_l;
}

function ajaxPost(url,form,elemento_retorno,exibe_carregando)
{
	var http_request = false;
	var param = getQuery(form);
	var ajaxP = pegaAjaxPost();

	if(ajaxP)
	{
		ajaxP.onreadystatechange = ajaxOnReady;
		ajaxP.open('POST', url, true);
		ajaxP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajaxP.setRequestHeader("Content-length", param.length);
		ajaxP.setRequestHeader("Connection", "close");
        if(exibe_carregando)
		{
			put("<span class=\"carregando-little\">"+texto_little_loading+"</span>")
		}
		ajaxP.send(param);
	    return true;
    }
	else
	{
        return false;
    }
	
    function ajaxOnReady()
	{
        if (ajaxP.readyState==4)
		{
            if(ajaxP.status == 200)
			{
                var texto=ajaxP.responseText;
                //if(texto.indexOf(" ")<=0) 
				texto=texto.replace(/\+/g," ");
                texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
                put(texto);
            }
			else
			{
                if(exibe_carregando)
				{
					put("<span class=\"carregando-little-error\">Falha no carregamento<hr />" + httpStatus(ajaxP.status) + "</span>");
				}
            }
            ajaxP = null;
        }
		else if(exibe_carregando)
		{//para mudar o status de cada carregando
        	put("<span class=\"carregando-little\">"+texto_little_loading+"</span>")
        }
    };

    function put(valor)
	{ //coloca o valor na variavel/elemento de retorno
		if(elemento_retorno.tagName){
            elemento_retorno.innerHTML = valor;
            //alert(elemento_retorno.innerHTML)
        }    
    };

	function pegaAjaxPost()
	{
		http_request = false;
		if (window.XMLHttpRequest) 
		{ // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType)
			{
			// set type accordingly to anticipated content type
			//http_request.overrideMimeType('text/xml');
				http_request.overrideMimeType('text/html');
		 	}
		}
		else if (window.ActiveXObject)
		{ // IE
			try
			{
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
		 	}
			catch (e)
			{
				try
				{
			   		http_request = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e)
				{}
		 	}
		}
		if (!http_request)
		{
			return false;
		}
		return http_request;
	}
}
//CRIA A MATRIZ DOS CAMPOS
function getQuery(FORM)
{ 
	var query='', n=0; 
	for (var j=0,elm; (elm=FORM.elements[j]); j++)
	{
		var name = elm.getAttribute('name'); 
		if (!name || (name.length == 0)) 
			continue; 
		var s = elm.value.clean(); 
		if (s.length == 0)
			continue; 
		if (elm.type != 'hidden')
			n++;
			
		if ((elm.type == 'radio' || elm.type == 'checkbox') && elm.checked == false)
			continue;
			
		if (query.length > 0)
			query += '&'; 
		query += name + '=' + escape(s); 
	} 

	return (n > 0) ? query : null; 
} 

//REMOVE CAMPOS BRANCOS E REDUNDANTES
String.prototype.clean = function () { 
	var src=this.toString().replace(/^\s+/,"").replace(/\s+$/,""); 
	var re=/(\S+)(\x20{2,})(\S+)/; 
	while(src.match(re))src=src.replace(re,"$1 $3"); 
	re=/(\S+)(\s+)(\r)(\s+)(\S+)/; 
	while(src.match(re))src=src.replace(re,"$1$3$5"); 
	return src; 
}



function ajaxGet(url,elemento_retorno,exibe_carregando,tp_carregando){
/****** 
* ajaxGet - Coloca o retorno de uma url em um elemento qualquer
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.2 - 20/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* url: string; elemento_retorno: object||string; exibe_carregando:boolean
*  - Se elemento_retorno for um elemento html (inclusive inputs e selects),
*    exibe o retorno no innerHTML / value / options do elemento
*  - Se elemento_retorno for o nome de uma variavel
*    (o nome da variável deve ser declarado por string, pois será feito um eval)
*    a função irá atribuir o retorno à variável ao receber a url.
*******/
	var car_class;
	var car_class_error;
	var car_texto;
	
	if(tp_carregando == 'little')
	{
		car_texto = texto_little_loading;
		car_class = "carregando-little";
		car_class_error = "carregando-little-error";
	}
	else
	{
		car_texto = texto_loading;
		car_class = "carregando";
		car_class_error = "carregando-error";
	}

	if(elemento_retorno == "")
	{
		elemento_retorno = "_";
	}
    var ajax1 = pegaAjax();
    if(ajax1)
	{
        url = antiCacheRand(url)
        ajax1.onreadystatechange = ajaxOnReady;
        ajax1.open("GET", url ,true);
        //ajax1.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");//"application/x-www-form-urlencoded");
        ajax1.setRequestHeader("Cache-Control", "no-cache");
        ajax1.setRequestHeader("Pragma", "no-cache");
        if(exibe_carregando)
		{
			put("<span class=\""+car_class+"\">"+car_texto+"</span>")
		}
        ajax1.send(null);
        return true;
    }
	else
	{
        return false;
    }
	
    function ajaxOnReady()
	{
        if (ajax1.readyState==4)
		{
            if(ajax1.status == 200)
			{
                var texto=ajax1.responseText;
                //if(texto.indexOf(" ")<=0) 
				texto=texto.replace(/\+/g," ");
                texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
                put(texto);
				if(elemento_retorno.tagName)
				   	extraiScript(texto);
            }
			else
			{
                if(exibe_carregando)
				{
					put("<span class=\""+car_class_error+"\">Falha no carregamento<hr />" + httpStatus(ajax1.status) + "</span>");
				}
            }
            ajax1 = null;
        }
		else if(exibe_carregando)
		{//para mudar o status de cada carregando
        	put("<span class=\""+car_class+"\">"+car_texto+"</span>")
        }
    };
	
    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;
            //alert(elemento_retorno.innerHTML)
        }    
    };
	
    function pegaAjax(){ //instancia um novo xmlhttprequest
        //baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
        if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
        var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
        for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
        return 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 httpStatus(stat){ //retorna o texto do erro http
	switch(stat){
		case 0: return "Erro desconhecido de javascript";
		case 400: return "400: Solicita&ccedil;&atilde;o incompreensível"; break;
		case 403: case 404: return "404: N&atilde;o foi encontrada a URL solicitada"; break;
		case 405: return "405: O servidor n&atilde;o suporta o m&eacute;todo solicitado"; break;
		case 500: return "500: Erro de natureza desconhecida do servidor"; break;
		case 503: return "503: Capacidade m&aacute;xima do servidor alcançada"; break;
		default: return "Erro " + stat + ". Mais informa&ccedil;&otilde;es em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
	}
};
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: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* 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 extraiScript(texto,elemento_retorno){
//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
    // inicializa o inicio ><
    var ini = 0;
    // loop enquanto achar um script
    while (ini!=-1){
        // procura uma tag de script
        ini = texto.indexOf('<script', ini);
        // se encontrar
        if (ini >=0){
            // define o inicio para depois do fechamento dessa tag
            ini = texto.indexOf('>', ini) + 1;
            // procura o final do script
            var fim = texto.indexOf('</script>', ini);
            // extrai apenas o script
            codigo = texto.substring(ini,fim);
			//texto.replace(codigo,"");
            // executa o script
            //eval(codigo);
            /**********************
            * Alterado por Micox - micoxjcg@yahoo.com.br
            * Alterei pois com o eval não executava funções.
            ***********************/
            /*novo = document.createElement("script");
            novo.text = codigo;

			elemento_retorno.appendChild(novo);
        }
    }
};*/
function extraiScript(texto){
//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
    // inicializa o inicio ><
    var ini = 0;
    // loop enquanto achar um script
    while (ini!=-1){
        // procura uma tag de script
        ini = texto.indexOf('<script', ini);
        // se encontrar
        if (ini >=0){
            // define o inicio para depois do fechamento dessa tag
            ini = texto.indexOf('>', ini) + 1;
            // procura o final do script
            var fim = texto.indexOf('</script>', ini);
            // extrai apenas o script
            codigo = texto.substring(ini,fim);
            // executa o script
            //eval(codigo);
            /**********************
            * Alterado por Micox - micoxjcg@yahoo.com.br
            * Alterei pois com o eval não executava funções.
            ***********************/
            novo = document.createElement("script")
            novo.text = codigo;
            document.body.appendChild(novo);
        }
    }
}

//========================================================
// Event Listener by Scott Andrew - http://scottandrew.com
// edited by Mark Wubben, <useCapture> is now set to false
//http://simon.incutio.com/archive/2004/05/26/addLoadEvent
//========================================================
function addEvent(obj, evType, fn){
    if(obj.addEventListener){
        obj.addEventListener(evType, fn, false);

        return true;

    } else if (obj.attachEvent){
        var r = obj.attachEvent('on'+evType, fn);

        return r;

    } else {
        return false;

    }
}

//addEvent(window, "load", init);

// FORÇA LINKS A ABRIREM EM UMA NOVA JANELA
//******************************************************************************
// A W3C não aceita mais o atributo "target" em links (tag <a>) em doctypes XHTML 1.0 Strict
// EXEMPLO:
//******************************************************************************
//<a href="index.php" title="Link de Exemplo" rel="externo">
function createExternalLinks() {
    if(document.getElementsByTagName) {
        var anchors = document.getElementsByTagName('a');
        for(var i=0; i<anchors.length; i++) {
            var anchor = anchors[i];
            if(anchor.getAttribute("href") && anchor.getAttribute('rel')=='externo') { // <-- É necessário inserir rel="externo" no link
                anchor.target = '_blank';
				if(anchor.title == "")
				{
					var title = anchor.title + ' '+link_new_window; // <-- Insere este texto no final do Title do link
					anchor.title = title;
				}
            }
        }
    }
}

// CONTROLE DA SESSAO //
function initSession() {
	//createExternalLinks();
	setInterval("ajaxGet('php/init_session.php','',false,'');",300000);
}

function openPageIn(mostraCarregando,div,url)
{
	ajaxGet(url,div,mostraCarregando,"little");
}

function openPage(mLink,showLoad)
{
	var targetDiv = document.getElementById('conteudo');
	ajaxGet(mLink,targetDiv,showLoad,"");
	//var prefixTitle = document.title.replace(/ -.*/, "")+" - ";
	//document.title=prefixTitle;
}

function sendForm(target,mLink,form,showLoad)
{
	var targetDiv = document.getElementById(target);
	ajaxPost(mLink,form,targetDiv,showLoad);
}

function addSwf (URL, WIDTH, HEIGHT, TRANSPARENT)
{
	document.write (' <object classid="clsid:27CDB6E-AE6D-11cf-96B8-444553540000" ');
	document.write (' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" ');
	document.write (' width="'+ WIDTH +'" height="'+ HEIGHT +'">');
	document.write (' <param name="movie" value="'+ URL +'" />');
	document.write (' <param name="quality" value="best" />');

	if ( TRANSPARENT ) {
	  document.write (' <param name="Wmode" value="Transparent" />');
	}

	document.write (' <embed src="'+ URL +'" quality="best" ');

	if ( TRANSPARENT ) {
	document.write (' Wmode = "transparent" ');
	}

	document.write (' pluginspage="http://www.macromedia.com/go/getflashplayer" ');
	document.write (' type="application/x-shockwave-flash" width="'+ WIDTH +'" height="'+ HEIGHT +'"></embed> ');
	document.write (' </object>');

}

/**************************************
* Jonas Raoni Soares Silva
* http://www.joninhas.ath.cx
**************************************/

//========================================================
// REQUIRES http://www.jsfromhell.com/geral/event-listener
//========================================================

MaskInput = function(f, m){ //v1.0
	function mask(e){
		var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
			rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
		function accept(c, rule){
			for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
				if(r & i && patterns[i].test(c))
					break;
				return i <= r || c == rule;
		}
		var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
		(!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
			r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
			: (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
			r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
	}
	for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
		addEvent2(f, i, mask);
};

/*
**************************************
* Event Listener Function v1.4       *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
addEvent2 = function(o, e, f, s){
	var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
	r[r.length] = [f, s || o], o[e] = function(e){
		try{
			(e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
			e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
			e.target || (e.target = e.srcElement || null);
			e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
		}catch(f){}
		for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
		return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
	for(var i = (e = o["_on" + e] || []).length; i;)
		if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
			return delete e[i];
	return false;
};


