//Create functions to call these functions and set things up rather than calling them directly
var req;
var browser;
var elemid;
var selectedidx;
var xmlRoot; //ALWAYS remember to set this or it won't work
var fvalue = 0;
var flabel = " ";

function loadData(url) {
	if(window.XMLHttpRequest) { // Safari, Mozilla and Firefox
		browser = 'good';
		req = new XMLHttpRequest();
		req.onreadystatechange = processReqChange;
	} else if(window.ActiveXObject) {
		browser = 'bad';
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if(req) {
			req.onreadystatechange = processReqChange;
		}
	}

	req.open("GET", url, true);
	if(browser == 'good') {
		req.send(null);
	} else {
		req.send();
	}
}

function processReqChange() {
	if(req.readyState == 4) {
		if(req.status == 200) {
			parseXml(req.responseXML);
		} else {
			alert("Error! " + req.statusText);
		}
	}
}

function parseXml(xmlDoc) {
	if(xmlRoot == ""){
		alert("Set xmlRoot");
		return;
	}
	if(!xmlDoc){
		return;
	}
	var xml = xmlDoc.getElementsByTagName(xmlRoot)[0];
	var select = document.getElementById(elemid);
	var key;
	var val;
	var num = 1;
	var selected = 0;
	select.options[0] = new Option(flabel, fvalue);
	for(i = 0; i < xml.childNodes.length; i++) {
		
		if(xml.childNodes[i].nodeType == 1) {
			record = xml.childNodes[i];
			key = record.getElementsByTagName('id')[0].firstChild.nodeValue;
			val = record.getElementsByTagName('name')[0].firstChild.nodeValue;
			if(key == selectedidx){
				selected = num;
			}
			select.options[num ++] = new Option(val, key);
		}
	}
	select.selectedIndex = selected;
}

function fillSelect(id, url){
	clearSelect(id);
	elemid = id;
	loadData(url);
}

function clearSelect(id){
	var select = document.getElementById(id);
	for(var i = select.options.length - 1; i >= 0;  i--){
		select.options[i] = null;
	}
}

