/*--------------------------------------------------------------
/Função: recuperaConteudoCombo(url, selec)
/Objetivo: Retornar dados para uma combo realizando consulta no 
/			  banco de dados utilizando XML.
/Parâmetro: url --> Endereço da página a ser executada
/Parâmetro: select --> Objeto a ser preenchido
/Parâmetro: async --> Mode de processamento
/Data Criação: 13/05/2005
/Autores: Manoel Veríssimo do Santos Neto
---------------------------------------------------------------*/
// para criar Escolha uma Opção no combo: Variavel varCriaEscolhaumaOpcaoCombo = true 
// deve ser declarada antes de chamar a recuperaConteudoCombo(url, objSelect, async) 
// em javascript (basc)
varCriaEscolhaumaOpcaoCombo = false
var valueAssync = '';

// global flag
var isIE = (document.all?1:0);


// global request and XML document objects
var req;

// objeto global que receberá uma instância da combo a ser preenchida
var objSelectXML;

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function recuperaConteudoCombo(url, objSelect, async) {
isIE = (document.all?1:0);
	objSelectXML = objSelect;
	
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if (async) {
			req.onreadystatechange = processReqChange;
		}
		
		req.open("GET", url, async);
		req.send(null);
		
		/*
			Para browser que não seja IE e o processamento seja assincrono então o evento onreadystatechange
			não é chamado por isso chamamos a função depois do open.
		*/
		if (!async) {
			processReqChange();
		}
	// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
	   isIE = true;
	   req = new ActiveXObject("Microsoft.XMLHTTP");
	   if (req) {
			req.onreadystatechange = processReqChange;
	      req.open("GET", url, async);
	      req.send();
	   }
	}
}

function recuperaConteudoComboValueDefault(url, objSelect, async, value) {
	valueAssync = value;
	recuperaConteudoCombo(url, objSelect, async);
}

// handle onreadystatechange event of req object
function processReqChange() {
	clearList();
	// only if req shows "loaded"
	
	if (req.readyState == 4) {
	   // only if "OK"
		if (req.status == 200) {
		    buildList();
		 } else {
		    alert("There was a problem retrieving the XML data:\n" + req.statusText);
		 }
	}
}

// empty Topics select list content
function clearList() {
   while (objSelectXML.length > 0) {
		objSelectXML.remove(0);
   }
}

// add item to select element the less
// elegant, but compatible way.
function appendToSelect(select, value, text) {
   var oOption = new Option(text, value, false, false);
   select.options[select.length] = oOption;
}

 // fill Topics select list with items from
// the current XML document
function buildList() {
	var value, text;
	
   if (isIE) {
		var items = req.responseXML.getElementsByTagName("rs:data");
	} else {
		var items = req.responseXML.getElementsByTagName("data");
	}

	// para criar Escolha uma Opção no combo: Variavel deve ser declarada antes de chamar
	// a recuperaConteudoCombo(url, objSelect, async) em javascript
	if(varCriaEscolhaumaOpcaoCombo){
		appendToSelect(objSelectXML, '', '- Escolha uma Opção -');
	}
	
   for (var a = 0; a < items.length; a++) {
		var rows = items[a].childNodes;
		for (var b = 0; b < rows.length; b++) {
			if (rows[b].nodeType == 1) {
				var atributos = rows[b].attributes;
				if (atributos.item(1) != null) {
					appendToSelect(objSelectXML, atributos.item(0).value, atributos.item(1).value);
				} else {
					appendToSelect(objSelectXML, atributos.item(0).value, '');
				}
			}
		}
	}

	if (valueAssync != '') {
		objSelectXML.value = valueAssync;
	}
}
