//Objeto ReadyState
var ajaxReadyState = new Object();
ajaxReadyState.uninitialized = 0;
ajaxReadyState.loading = 1;
ajaxReadyState.loaded = 2;
ajaxReadyState.interactive = 3;
ajaxReadyState.complete = 4;

// Objeto de Menssagens
var ajaxReadyStateMsg = new Object();
ajaxReadyStateMsg.uninitialized = 0;
ajaxReadyStateMsg.loading = 1;
ajaxReadyStateMsg.loaded = 2;
ajaxReadyStateMsg.interactive = 3;
ajaxReadyStateMsg.complete = 4;
ajaxReadyStateMsg.clear = 5;

var xmlhttp;
//Cria o Objeto de Conexao HTTP para o Browser
try{
    xmlhttp = new XMLHttpRequest();
}catch(ee){
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(E){
            xmlhttp = false;
        }
    }
}

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

//Pega o Objeto e retorna exceto Radio Button list
function $(id) {
	var o = document.getElementById(id);
	if (o == null) {
		alert('JS-Error: O Elemento ' + id + ' não foi encontrado.');
	}
	return o;
}


//Pega o Objeto checado de um Radio Button list
function r$(idObject, index)
{
	return $(idObject + '_' + index);
}


//Seta o Valor Carregando
function ajaxMessage(id,status) {
	var msg = "<span class='carregando'>";
	switch (status)
	{
		case ajaxReadyStateMsg.uninitialized:
			msg += "Cercare...";
			break;
		case ajaxReadyStateMsg.loading:
			msg += "Caricamento in corso...";
			break;
		case ajaxReadyStateMsg.loaded:
			msg += "Carricato";
			break;
		case ajaxReadyStateMsg.interactive:
			msg += "Cercando...";
			break;
		case ajaxReadyStateMsg.complete:
			msg += "Completo";
			break;
		case ajaxReadyStateMsg.clear:
			msg += "";
			break;
		default:
	}
	msg += "</span>";
	$(id).innerHTML = msg;
}

function state_Change() 
{ 
		//Chama as Menssagens
		var retorno;  
		ajaxMessage(fila[ifila][0],xmlhttp.readyState);

        if (xmlhttp.readyState==ajaxReadyState.complete) {       
			if (xmlhttp.status==200) {
				//Mostra o HTML recebido
				if (fila[ifila][2] == null) {
					retorno=unescape(xmlhttp.responseText.replace(/\+/g," "));
					//alert(retorno);        	
					$(fila[ifila][0]).innerHTML=retorno ;           
				} else {
					//Executa o commando
					retorno=xmlhttp.responseText;
					eval(fila[ifila][2]);
					//Limpa o div Carregando...
					ajaxMessage(fila[ifila][0],ajaxReadyStateMsg.clear);
				}
			} else if (xmlhttp.status==404) {
				//Erro 404
				alert('JS-Error: [Ajax-404] A URL não Existe! {url:'+xmlhttp.url+'}');
			} else {
				//Pagina Mal recebida problema de comunicação com o Servidor
				alert('JS-Error: [Ajax-500] Problema de comunicação com o Servidor \n{' + xmlhttp.status + '}');
			}
        
			//Roda o próximo
			ifila++;
			if(ifila<fila.length)
			{
				setTimeout("ajaxRun(" + async + ")",20);
			}
        }
 }

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

    //Executa
    xmlhttp.send(null);
}

//Carrega via XMLHTTP a url recebida e coloca seu valor
//no objeto com o id recebido
function ajaxHTML(id,url,async){
 

   //Carregando...
    ajaxMessage(id,ajaxReadyStateMsg.uninitialized);
    //Adiciona à fila
    fila[fila.length]=[id,url];
    //Se não há conexões pendentes, executa
    if((ifila+1)==fila.length) {
		ajaxRun(async);	
	}
}

//Carrega via XMLHTTP a url recebida e coloca seu valor
//no objeto com o id recebido
function ajaxCOMMAND(id,url,async,command){
    //Carregando...
    ajaxMessage(id,ajaxReadyStateMsg.uninitialized);
    //Adiciona à fila
    fila[fila.length]=[id,url,command];
    //Se não há conexões pendentes, executa
    if((ifila+1)==fila.length)
	{
		ajaxRun(async);
	}
}

//Jason Javascript Object
function json(string)
{
	var strObject = "var jsonObject = {" + string + "};";
	var jsonObject = eval(strObject);
	try {
		var o = eval(jsonObject);
	} catch (e) {
		alert("JSON error: " + e);
	}
	return o;
}

//Verifica a string de montagem de objeto retorna true se for um objeto valido
function isJson(string)
{
	var oString = new String(string);	
	var iRet = false;
	if (oString.substr(1,5) == "DEBUG") {
		iRet = true;
	}
	return iRet;
}

//Pegar Valores de Radio Button 
function getOptionValue(idObject, nmCount)
{
	var r;
	var o;
	for (var i=0;i<nmCount;i++)	{	
		o = r$(idObject, i);
		o.checked ? r = o.value : "" ;		
	}	
	return r ;
}

//Pegar Valores de Radio Button 
function setDisabledOptionList(idObject, nmCount, blEnable)
{	
	for (var i=0;i<nmCount;i++)	{	
		r$(idObject, i).disabled = blEnable;
		r$(idObject, i).parentNode.disabled = blEnable;
	}
	$(idObject).disabled = blEnable;
}

function bloqueiaTela() {
	$('divBlock').style.display = '';
	window.focus();
}

function liberaTela() {
	$('divBlock').style.display = 'none';
}


