// ajaxCode.js
// declare a global  XMLHTTP Request object
var XmlHttpObj;
var currentAjax = 0;

// Provide the XMLHttpRequest class for IE 5.x-6.x:
// see: http://en.wikipedia.org/wiki/XMLHttpRequest for additional info
//if( typeof XMLHttpRequest == "undefined" ) XMLHttpRequest = function() {
//  try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {}
//  try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {}
//  try { return new ActiveXObject("Msxml2.XMLHTTP") } catch(e) {}
//  try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
//  throw new Error( "This browser does not support XMLHttpRequest." )
//};

function CreateXmlHttpObj() { // create an instance of XMLHTTPRequest Object, varies with browser type, try for IE first then Mozilla
	// try creating for IE (note: we don't know the user's browser type here, just attempting IE first.)
	try { XmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP"); }

	catch(e) {
		try { XmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP"); } 
		catch(oc) { XmlHttpObj = null; }
	} // catch(e)

	// if unable to create using IE specific code then try creating for Mozilla (FireFox) 
	if(!XmlHttpObj && typeof XMLHttpRequest != "undefined") {
		XmlHttpObj = new XMLHttpRequest();
	}
} // function CreateXmlHttpObj()

// called when state of XmlHttpObj changes we're interested in the state that indicates data has been received from the server
function StateChangeHandler() {

	ajaxTypeID = currentAjax + '_ajaxType';

	// state ==4 indicates receiving response data from server is completed
	if(XmlHttpObj.readyState == 4) 	{
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpObj.status == 200) { 
			var ajaxAction = document.getElementById(ajaxTypeID);
			switch (ajaxAction.value) {
				case "menu2" : PopulateMenuTwo(XmlHttpObj.responseXML.documentElement, currentAjax); break;  // SrcNewAjax
				default : alert ( 'StateChangeHandler Action for [' + ajaxAction + '] is not defined');
			} // switch (ajaxAction)
		} // if(XmlHttpObj.status == 200)
		else { alert("problem retrieving data from the server, status code: "  + XmlHttpObj.status); }
	} // if(XmlHttpObj.readyState == 4)
} // function StateChangeHandler()


// called from onChange or onClick event of the menuOne dropdown list
function menuOneChange(id, site) {
	currentAjax = id; // this resets current ajax for this session
	var menuOneID = id + '_menuOneList';
    var menuOneList = document.getElementById(menuOneID);
    // get selected menuOne from dropdown list
    var selectedMenuOne = menuOneList.options[menuOneList.selectedIndex].value;
    // url of page that will send xml data back to client browser
    var requestUrl;
	//var sendURL = '1' + selectedMenuOne + 'AZ104';
    requestUrl = "common/xml_data_provider.php" + "?filter=" + 'menu2^^' + id + '^^' 
					+ site + '^^' + encodeURIComponent(selectedMenuOne); // SrcNewAjax

	CreateXmlHttpObj();

	// verify XmlHttpObj variable was successfully initialized
	if(XmlHttpObj) {
        // assign the StateChangeHandler function ( defined below in this file)
        // to be called when the state of the XmlHttpObj changes
        // receiving data back from the server is one such change
		XmlHttpObj.onreadystatechange = StateChangeHandler;
		
		// define the iteraction with the server -- true for as asynchronous.
		XmlHttpObj.open("GET", requestUrl,  true);
		
		// send request to server, null arg  when using "GET"
		XmlHttpObj.send(null);		
	} // if(XmlHttpObj)
} // function menuOneChange()

// populate the contents of the menuTwo dropdown list
function PopulateMenuTwo(menuTwoNode, currAjax) {
	var menuTwoID = currAjax + '_menuTwoList';
    var menuTwoList = document.getElementById(menuTwoID);
	// clear the menuTwo list 
	for (var count = menuTwoList.options.length-1; count >-1; count--) {
		menuTwoList.options[count] = null;
	} // for (var count = menuTwoList...


	var menuTwoNodes = menuTwoNode.getElementsByTagName('menuTwo');
	var idValue;
	var textValue; 
	var optionItem;
	
	// populate the dropdown list with data from the xml doc
	for (var count = 0; count < menuTwoNodes.length; count++) {
   		textValue = GetInnerText(menuTwoNodes[count]);
		idValue = menuTwoNodes[count].getAttribute("id");
		optionItem = new Option( textValue, idValue,  false, false);
		menuTwoList.options[menuTwoList.length] = optionItem;
	} // for (var count = 0; count < menuTwoNodes
} // function PopulateMenuTwo(menuTwoNode)

// returns the node text value 
function GetInnerText (node) {
	 return (node.textContent || node.innerText || node.text) ;
} // function GetInnerText (node)
