/**
 * @author Leonir - Ahã... Programando...
 */
//gerenciamento de fila de requisições ajax, para evitar armadilhas da quarta dimensão
extraiScript=function(texto){
/* Com os devidos direitos:
   Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
   http://forum.imasters.com.br/index.php?showtopic=165277
*/
    // inicializa o inicio ><
	if(typeof texto == "string" || texto instanceof String){
		var ini = 0;
		// loop enquanto achar um script
		while (ini!=-1){
			// procura uma tag de script
			ini = texto.indexOf('<script', ini);

			if(ini==-1)
					ini = texto.indexOf("&lt;script");

			ini_script = ini;
			// se encontrar
			if (ini >=0){
				// define o inicio para depois do fechamento dessa tag, ignorando seus atributos
				ini = texto.indexOf('>', ini) + 1;
			
				// procura o final do script
				var fim = texto.indexOf("<"+"/script>", ini);//< separado para não parecer um fecha tag

				if(fim==-1)
					fim = texto.indexOf("&lt;/script&gt;");
					
				// extrai apenas o script
				codigo = texto.substring(ini,fim);
				novo = document.createElement("script");
				// executa o script          
				novo.text = codigo;
				document.body.appendChild(novo);
				
				//ATACHA SCRIPTS EXTERNOS!!! - Leonir Zimmermann - Ahã... Programando...
				//encontra o inicio de um source para carregar o script vindo de outro arquivo
				ini_src = texto.indexOf('src="', ini_script) + 5;
				fim_src = texto.indexOf('.js', (ini_src+1)) + 3;
				
				if(ini_src<fim_src){
				   path_source = texto.substring(ini_src,fim_src);
				   script_externo = document.createElement("script");
				   script_externo.language="javascript";
				   script_externo.src = path_source;
				   document.body.appendChild(script_externo);
				}//if
				//										
			}//if
			
		}//while
	}//if texto isString
	
	//dá pra melhorar isso, devolvendo o texto sem os scripts
}

//Fila ajax serve para organizar os carregamentos ajax com fila, pois o objeto HttpRequest
//do browser, apesar de ser um THREAD separada das demais funções javascript, só executa uma
//requisição de cada vez.
function  fila_ajax(){

this.FILA=new Array();
this.id=0;
this.idRodado=0;
this.tarefa=new Array();
this.str_resposta="";


this.reseta=function(){
	this.FILA=new Array();
	this.id=0;
	this.idRodado=0;
	this.tarefa=new Array();
	this.str_resposta="";
}

this.addRequest=function(_tipo, _id, _url){
	this.FILA[this.id]=new Array();
	this.FILA[this.id]['t']=_tipo;//tipo de conteúdo carregado - xml/html
	this.FILA[this.id]['i']=_id;
	this.FILA[this.id]['u']=_url;	
	this.id++;
}

this.bla=function(){ alert("bla dentro") }

this.run=function(){
	this.loadByAjax(this.FILA[this.idRodado]['t'], this.FILA[this.idRodado]['i'], this.FILA[this.idRodado]['u']);		
}


this.setaFuncaoPosCarregamento=function(_tarefa){
	this.tarefa[(this.id-1)]=_tarefa;
}

this.proximoItem=function(){

	if(this.tarefa[this.idRodado]){
			setTimeout(this.tarefa[this.idRodado], 50);
			this.tarefa[this.idRodado]=false;
	}

	if(this.idRodado < (this.id-1) ){
			this.idRodado++;
			this.run();
	}
}

//-------------------- CALBACK DOJO -----------------------------------

this.loadByAjax=function(_tipo, _id, _url){
	
	dojo.byId(_id).innerHTML="Carregando... <img src='web_system/ajax/roller.gif'>";
	
	//atraves do objeto dojo, usa o método xhrGet
	dojo.xhrGet( {
        // The following URL must match that used to test the server.
        url:_url,
        handleAs: "text",
        timeout: 240000, // Time in milliseconds
        // The LOAD function will be called on a successful response.
        load:function(response, ioArgs) {
		
			if(_id!=""){
				if(_tipo=='xml'){
					dojo.byId(_id).value="-";
					dojo.byId(_id).value=response;//response é o resultado vindo do dojo					
				} else if(_tipo='html') {
					dojo.byId(_id).innerHTML=response;	
					extraiScript(response);// espero que o this não seja interpretado como parte do dojo
				}
			}

			this.str_resposta=response;
			this.proximoItem();	//próximo da fila!

		 //return response;
		 },

        // The ERROR function will be called in an error case.
		  error:function(response, ioArgs) {
          console.error("HTTP status code: ", ioArgs.xhr.status);
          return response;
          }
        });
		
	return 0;
}

//-------------------------------
}//fila ajax