var req;
var callback;
var element;

/** Requests the given URL via an XMLHttpRequest and passes the response XML to the return method **/
function loadXMLDoc(url, returnMethod) 
{
	callback = returnMethod;
	req = false;
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest && !(window.ActiveXObject)) 
	{
		try 
		{
			req = new XMLHttpRequest();
        } 
        catch(e) 
        {
			req = false;
        }    
    }     
    else if(window.ActiveXObject) // branch for IE/Windows ActiveX version
    {
       	try 
       	{
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} 
      	catch(e) 
      	{
        	try 
        	{
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} 
        	catch(e) 
        	{
          		req = false;
        	}
		}
    }
    
	if(req) 
	{
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send("");
	}
}

function processReqChange() 
{
    // only if req shows "loaded"
    if (req.readyState == 4) 
    {
        // only if "OK"
    	if (req.status == 200) 
    	{
            response = req.responseXML.documentElement;
            callback(response);
        } 
        else 
        {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
        }
    }
}

function clearSelect(e)
{
	e.value = null;
	for (var i = e.options.length - 1; i >= 0 ; i--)
	{
		e.remove(i);	
	}	
}

function loadSelect(e, response)
{
	clearSelect(e);
	
	var optionList = response.getElementsByTagName("option");
		
	for (var i = 0; i < optionList.length; i++)
	{
		var nameList = optionList[i].getElementsByTagName("name");
		var valueList = optionList[i].getElementsByTagName("value");
		if (nameList.length == 0 || valueList.length == 0)
		{
			e.options[e.options.length] = new Option(optionList[i].firstChild.data, optionList[i].firstChild.data);
		}
		else
		{
			e.options[e.options.length] = new Option(nameList[0].firstChild.data, valueList[0].firstChild.data);
		}
	}		
}

function loadSelectAJAX(e, url)
{
	element = e;
	loadXMLDoc(url, loadSelectResponse);		
}

function loadSelectResponse(response)
{
	loadSelect(element, response);
}