/*
 * Código implementado para utilização de Ajax pela Dyon
 * Fonte inspiradora: http://www.tableless.com.br/artigos/ajaxdemo2
 */

//Fila de conexões
fila=[]
ifila=0

//Tenta criar o objeto xmlHTTP
try{
    xmlhttp = new XMLHttpRequest();
}catch(ee){
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(E){
            xmlhttp = false;
        }
    }
}

//Executa com base em tres comandos
//O primeiro é o id do controlador
//O segundo é a função da url
//O terceiro são os valores concatenados com sinal de .
function exec(id,act,val){
	vals = "";
	exibe('carregando');	
	//alert(val);	

	fields = val.split('.');
	for(x=0;x<fields.length; x++){
			/*TRATAMENTO DE ERRO DE AJAX*/
		/*if (!$(fields[x])){
				preenchediv_erroajax("O CAMPO '"+fields[x]+"' NÃO FOI ENCONTRADO!","EXEC");
		}*/		
		vals = vals.concat($('#'+fields[x]).val());
		if(x<fields.length-1){
			vals = vals.concat('[]');
		}
	}

	//Concatena-se a função com os valores com um sinal de pipe
	//para que na função seja desmenbrado.
	par = act+'{}'+vals;
	//alert(par);
	//alert(id);
	ajax(id,par);
}

//Carrega via XMLHTTP a url recebida e coloca seu valor
//no objeto com o id recebido
function ajax(xcontrolador,xparametros){
	
  //Carregando...
/*	 	var div = document.getElementById('aviso_aguarde');
		div.innerHTML = '<img src="../../img/administrativo/menu/aguarde.gif">';*/

	var xurl = xcontrolador+".php?param="+xparametros;		
	
	//alert(xurl);

	//Adiciona à fila
	fila[fila.length]=['',xurl];
	
	//Se não há conexões pendentes, executa
	if((ifila+1)==fila.length)ajaxRun();
}

//Executa a próxima conexão da fila
function ajaxRun(){
  //Abre a conexão
/*	alert(ifila);*/
  xmlhttp.open("GET",fila[ifila][1],true);
	
  //Função para tratamento do retorno
  xmlhttp.onreadystatechange=function() {

      if (xmlhttp.readyState==4){
		    /*
		    * Pegando o xmlhttp.responseText e transformando a string em um array
		    * que esta concatenado com "|".
		    */
	        //Mostra o HTML recebido
	        //retorno=unescape(xmlhttp.responseText.replace(/\+/g," "))
	        retorno=xmlhttp.responseText;
	        
	        var array_c = retorno.split("{}");
	          
			/*
			* Bloco destinado ao debug do retorno do ajax.
			*/
	        
			//alert(retorno);
			//alert(array_c[0]);	
			
	
		
			/*
			* Ao inves de enviar somente uma linha com comando, sera feito varias linhas
			* e cada linha do array sera um comando diferente, podendo entao, escrever em
			* diversos campos ou executar alerts, e exibicao de div`s.
			* Inicio do laco para execucao do comando de cada linha.
			*/
			for(a=0; a<array_c.length;a++){
				comando = array_c[a].split("[]");				
				/*
				* Bloco de comandos
				* parametros:
				*							1. acao            -> acao a ser executada;
				*							2. div             -> id do objeto;
				*							3. valor           -> valor do objeto;
				*							4. estado          -> estado do objeto;
				*                           5. ncomando        -> novo comando(aconselha-se a ser o ultimo comando.)
				*/
				
				var acao           = comando[0];
				var div            = comando[1];
				var valor          = comando[2];
				var estado         = comando[3];
				var ncomando       = comando[4];

				
				//Alert
				if(acao == 'alerta'){
					alert(valor);
				}
				
				//Gravar em inputs
				if(acao == 'preenche_input'){
					//alert(div+' - '+valor)
					gravaInput(div, valor);
				}	
				
				//Gravar em combobox
				if(acao == 'preenche_sel'){
					selOption(div, valor);
				}			
				
				//Gravar em div
				if(acao == 'preenche_div'){
					preencheHtml(div, valor);
				}
				
				//Exibir div
				if(acao == 'exibir'){
					exibe(div);
				}
				
				//Esconder div
				if(acao == 'esconder'){
					esconde(div);
				}
				
				if(acao == 'scape'){
					location.href=valor;
				}
				
				//limpar div
				if(acao == 'limpar_div'){
					limpaDiv(div);
				}
				
				//limpa um conjunto de inputs
				if(acao == 'limpa_input'){
					limpaInput(valor);
				}
				
				//trazer div para frente
				if(acao == 'evidencia'){
					evidenciaDiv(div);
				}
				
				/********************************************0-ALERT*****************************************/
				if(acao == 'alerta_sonoro_vidro'){
					soundManager.play('smash0');
				}
				/*********************************************FIM*******************************************/	
				/********************************************0-ALERT*****************************************/
				if(acao == 'alerta_sonoro_beep'){
					soundManager.play('beep');
				}
				/*********************************************FIM*******************************************/					
				/********************************************0-ALERT*****************************************/
				if(acao == 'alerta_sonoro_erro'){
					soundManager.play('errou');
				}
				/*********************************************FIM*******************************************/					
								
				/********************************************0-ALERT*****************************************/
				if(acao == 'alerta_sonoro_select'){
					soundManager.play('select');
				}
				/*********************************************FIM*******************************************/					
								
				/********************************************0-ALERT*****************************************/
				if(acao == 'alerta_sonoro_ricochet'){
					soundManager.play('ricochet');
				}
				/*********************************************FIM*******************************************/					
				
				
				
				

				
              /*********************************************FIM*******************************************/
				
				/********************** EXECUTA UMA NOVA FUNÇÃO AJAX *****************************/
				if(acao == 'exec'){
					
					exec(div,valor,estado);
					
				}
				/*********************************************FIM*******************************************/	
				
				/********************** EXECUTA UMA NOVA FUNÇÃO AJAX *****************************/
				if(acao == 'exec2'){
					
					exec2(div,valor,estado);
					
				}
				/*********************************************FIM*******************************************/
				
				/********************** EXIBE A MSG DE INSERIDO COM SUCESSO *****************************/
				if(acao == 'msg_inserido'){
					
					esconde('msg_alterar');
					esconde('msg_excluir');
					exibe('msg_inserir');
					ContEsconde = setTimeout ('esconde(\'msg_inserir\')', 4000);
					
				}
				/*********************************************FIM*******************************************/	

				/********************** EXIBE A MSG DE ALTERADO COM SUCESSO *****************************/
				if(acao == 'msg_alterado'){
					
					esconde('msg_excluir');
					esconde('msg_inserir');
					exibe('msg_alterar');
					ContEsconde = setTimeout ('esconde(\'msg_alterar\')', 4000);
					
				}
				/*********************************************FIM*******************************************/	
				
				/********************** EXIBE A MSG DE EXCLUIDO COM SUCESSO *****************************/
				if(acao == 'msg_excluido'){
					
					esconde('msg_alterar');
					esconde('msg_inserir');
					exibe('msg_excluir');
					ContEsconde = setTimeout ('esconde(\'msg_excluir\')', 4000);
					
				}
				/*********************************************FIM*******************************************/					
					
				/*********************************12-ESCREVER NA DIV ERRO***********************************/
				if(acao == 'alerta_sql'){
					$('alerta_sql').innerHTML = ''+valor+'';
					//se a posicao 3 for igual a 1 exibe, caso contrario nada faca.
					
					exibe('alerta_sql');
				}
				/*********************************************FIM*******************************************/
				
				/********************************************CONFIRMAR*****************************************/
              if(acao == 'confirmar'){
                  if(confirm(div))
                  {
                      valor = valor.split(',');
                      exec(valor[0], valor[1], valor[2]);
                  }
              }
              /*********************************************FIM*******************************************/				

              /********************************************SELECIONAR*****************************************/
              if(acao == 'selecionar'){
                  $(div).select();
              }
              /*********************************************FIM*******************************************/               
              										
              /********************************************CLICAR*****************************************/
              if(acao == 'clicar'){
                  $(div).onclick();
              }
              /*********************************************FIM*******************************************/  
				
              /********************************************CLICAR*****************************************/
              if(acao == 'abrir'){
                  window.open(div);
              }
              /*********************************************FIM*******************************************/				
              
			
			}  
/*			if($('div_aguarde')){
  			$('div_aguarde').style.display = 'none';			
			}*/
			
          //Roda o próximo
          ifila++
          if(ifila<fila.length)setTimeout("ajaxRun()",20)
          
      }
  }
  //Executa
  xmlhttp.send(null);
  esconde('carregando');
 // esconde('div_aguarde');
}