var reqStates;
var xmlStates;
var reqStatesTarget;
var reqCities;
var reqCitiesTarget;
var reqZip;
var xmlCities;
var xmlZip;
var reqGyms;
var xmlGyms;
var reqGymsTarget;
var reqZipTarget;
var gymsNullOption = false;

function getXmlDocObject(xml_str)
{
	var xmlDoc;

	xmlDoc = false;

	if (document.implementation && document.implementation.createDocument)
	{
		// branch for w3c complain implementations
		var parser = new DOMParser();
		xmlDoc = parser.parseFromString(xml_str, "text/xml");
	}
	else if (window.ActiveXObject)
	{
		// branch for Microsoft implementation
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

		xmlDoc.loadXML(xml_str);
 	}

 	return xmlDoc;
}

function getXmlHttpRequestObject()
{
	var req;

	req = false;

	if(window.XMLHttpRequest) {
    	// branch for W3C XMLHttpRequest object
    	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;
        	}
		}
    }
    
    return req;
}

function getStatesByCountry(country, target) {
    reqStates = getXmlHttpRequestObject();
    reqStatesTarget = target;

	if(reqStates) {
		reqStates.onreadystatechange = processReqStatesChange;
		reqStates.open("GET", '/inc/ajax/server.php?action=gym_states_by_country&country='+country, true);
		reqStates.send("");
	}
}


function getCitiesByState(state, target) {
	
    reqCities = getXmlHttpRequestObject();
    reqCitiesTarget = target;

	if(reqCities) {
		reqCities.onreadystatechange = processReqCitiesChange;
		reqCities.open("GET", '/inc/ajax/server.php?action=gym_cities_by_state&state='+state, true);
		reqCities.send("");
	}
}

function getGymsByZip(zip, target) {
	
    reqZip = getXmlHttpRequestObject();
    reqZipTarget = target;

	if(reqZip) {
		reqZip.onreadystatechange = processReqZipChange;
		reqZip.open("GET", '/inc/ajax/server.php?action=gym_gyms_by_zip&zip='+zip, true);
		reqZip.send("");
	}
}




function fillCitiesCombo(xmlDoc)
{
	var root = xmlDoc.getElementsByTagName('response')[0];

	var newOpt = new Option('Select City...', '');

	document.getElementById(reqCitiesTarget).options.length = 0;
	document.getElementById(reqCitiesTarget).options[0] = newOpt;

	for (j=0;j<root.childNodes.length;j++)
	{
		var newOpt = new Option(root.childNodes[j].attributes.getNamedItem('name').value,
								root.childNodes[j].attributes.getNamedItem('id').value);

		document.getElementById(reqCitiesTarget).options[j+1] = newOpt;
	}
}

function fillGymList(xmlDoc){

	var root = xmlDoc.getElementsByTagName('response')[0];
	
	var list='';
	if(root.childNodes.length>0)
	{
		for (j=0;j<(root.childNodes.length);j++)
		{
			list = list +  "<input type=radio value='"+ root.childNodes[j].attributes.getNamedItem('id').value+ "' name='gym'";
			if(j==0)
				list += "checked >";
	
			list +="<b>"+root.childNodes[j].attributes.getNamedItem('name').value +"</b><br>";
			
		}
	}
	else
	{
		list +="<font color=#FF0000>No participating gym found in zip code area.</font>";
	}
	document.getElementById(reqZipTarget).innerHTML = list;
}

function processReqCitiesChange() {
	
	// only if reqStates shows "loaded"
    if (reqCities.readyState == 4) {
    	
    	// only if "OK"
        if (reqCities.status == 200) {
        	
			xmlCities = getXmlDocObject(reqCities.responseText);
			fillCitiesCombo(xmlCities);
        } else {
        	reqCitiesTarget = '';

        	alert("There was a problem retrieving the data:\n" +
                reqCities.statusText);
        }
    }
}

function processReqZipChange(){
	
	// only if  shows "loaded"
    if (reqZip.readyState == 4) {
    	
    	// only if "OK"
        if (reqZip.status == 200) {
        	xmlZip = getXmlDocObject(reqZip.responseText);
        	
			fillGymList(xmlZip);
        } else {
        	reqZipTarget = '';

        	alert("There was a problem retrieving the data:\n" +
                reqZip.statusText);
        }
    }
}

function fillStateCombo(xmlDoc)
{
	var root = xmlDoc.getElementsByTagName('response')[0];

	var newOpt = new Option('Select state...', '');

	document.getElementById(reqStatesTarget).options.length = 0;
	document.getElementById(reqStatesTarget).options[0] = newOpt;

	for (j=0;j<root.childNodes.length;j++)
	{
		var newOpt = new Option(root.childNodes[j].attributes.getNamedItem('name').value,
								root.childNodes[j].attributes.getNamedItem('id').value);

		document.getElementById(reqStatesTarget).options[j+1] = newOpt;
	}
}

function processReqStatesChange() {
	// only if reqStates shows "loaded"
    if (reqStates.readyState == 4) {
    	// only if "OK"
        if (reqStates.status == 200) {
			xmlStates = getXmlDocObject(reqStates.responseText);
			fillStateCombo(xmlStates);
        } else {
        	reqStatesTarget = '';

        	alert("There was a problem retrieving the data:\n" +
                reqStates.statusText);
        }
    }
}

function getGymsByState(country, state, target, nullOption) {
    reqGyms = getXmlHttpRequestObject();
    reqGymsTarget = target;
    gymsNullOption = nullOption;

	if(reqGyms) {
		reqGyms.onreadystatechange = processReqGymsChange;
		reqGyms.open("GET", '/inc/ajax/server.php?action=gym_gyms_by_state&country='+country+'&state='+state, true);
		reqGyms.send("");
	}
}

function getGymsByCity(state, city, target, nullOption) {
	
    reqGyms = getXmlHttpRequestObject();
    reqGymsTarget = target;
    gymsNullOption = nullOption;

	if(reqGyms) {
		reqGyms.onreadystatechange = processReqGymsChange;
		var d=new Date();
		reqGyms.open("GET", '/inc/ajax/server.php?action=gym_gyms_by_city&city='+city+'&state='+state+'&date='+d, true);
		reqGyms.send("");
	}
}

function fillGymsCombo(xmlDoc, nullOption)
{
	var root = xmlDoc.getElementsByTagName('response')[0];
	var base = 0;

	document.getElementById(reqGymsTarget).options.length = 0;

	if (nullOption) {
		var newOpt = new Option('Select gym...', '');

		document.getElementById(reqGymsTarget).options[0] = newOpt;

		base = 1;
	}

	for (j=0;j<root.childNodes.length;j++)
	{
		var newOpt = new Option(root.childNodes[j].attributes.getNamedItem('name').value,
								root.childNodes[j].attributes.getNamedItem('id').value);

		document.getElementById(reqGymsTarget).options[j+base] = newOpt;
	}
}

function processReqGymsChange() {
    // only if reqStates shows "loaded"
    if (reqGyms.readyState == 4) {
        // only if "OK"
        if (reqGyms.status == 200) {
			xmlGyms = getXmlDocObject(reqGyms.responseText);
			fillGymsCombo(xmlGyms, gymsNullOption);
        } else {
        	reqGymsTarget = '';

        	alert("There was a problem retrieving the data:\n" +
                reqGyms.statusText);
        }
    }
}

function getGymsByFranchise(franchise, target, nullOption) {
    reqGyms = getXmlHttpRequestObject();
    reqGymsTarget = target;
    gymsNullOption = nullOption;

	if(reqGyms) {
		reqGyms.onreadystatechange = processReqGymsChange;
		reqGyms.open("GET", '/inc/ajax/server.php?action=gym_gyms_by_franchise&franchise_id='+franchise, true);
		reqGyms.send("");
	}
}

