function pdRegionData(initCallback)
{
  // initialize the member variables for this instance
	this.name = "NAME NAME";
	this.data = null;		// holds data pulled in from JSON file
	this.REGION_DATA_URL = "/js/incentives_region_definitions.js"; 		// const
	this.callback = initCallback;	// we call this function after we load data

	this.regionLookupHashtable = new Array();	// map region descriptors to Region objects (hard-coded)
	this.regionLookupHashtable["ne"] = new pdRegion("North East", "ne");
	this.regionLookupHashtable["se"] = new pdRegion("South East", "se");
	/*this.regionLookupHashtable["nc"] = new pdRegion("North Central", "nc");*/
	this.regionLookupHashtable["sc"] =  new pdRegion("South Central", "sc");
	this.regionLookupHashtable["w"] = new pdRegion("Western", "we");
	this.regionLookupHashtable["nceol"] = new pdRegion("North Central - East", "nceol");
	this.regionLookupHashtable["ncwol"] = new pdRegion("North Central - West", "ncwol");

	
	this.init = function() {
		var _this = this;	// to help with scoping on ajax call
		new Ajax.Request(_this.REGION_DATA_URL, {
			method: 'get',
			onSuccess: function(transport) { _this.processAjaxResponse(transport); },			
			onFailure: function(transport) {
				//alert("wonk");		
			}
			}
			);
	
	}
	
	this.processAjaxResponse = function(transport) {
		this.data = eval('(' + transport.responseText + ')');
		this.callback(this);
	}

	
	
	this.init();

}


// returns a State object
pdRegionData.prototype.getState = function(stateAbbreviation) {

	for (var i = 0; i < this.data["states"].length; i++) {
		if (this.data["states"][i]["abbreviation"] == stateAbbreviation) {
			return new pdState(this.data["states"][i]["name"], this.data["states"][i]["abbreviation"], this.data["states"][i]["defaultRegion"]);
		}
	}

}


// returns an array of all State objects
pdRegionData.prototype.getStates = function() {
	var result = new Array();
	for (var i = 0; i < this.data["states"].length; i++) {
		result[result.length] = new pdState(this.data["states"][i]["name"], this.data["states"][i]["abbreviation"], this.data["states"][i]["defaultRegion"]);
	}
	return result;
}


// returns an array of County objects
pdRegionData.prototype.getCounties = function(stateAbbreviation) {
	var result = new Array();

	for (var i = 0; i < this.data["states"].length; i++) {
		if (this.data["states"][i]["abbreviation"] == stateAbbreviation) {

			for (var j = 0; j < this.data["states"][i]["counties"].length; j++) {
				//debug(regionData["states"][i]["counties"][j]["name"]);
				result[result.length] = new pdCounty(this.data["states"][i]["counties"][j]["name"]);
			}
		}
	}

	return result;
}


/*
	returns an array of Region objects. 
*/
pdRegionData.prototype.getRegions = function(stateAbbreviation, countyName) {
	var result = new Array();

	for (var i = 0; i < this.data["states"].length; i++) {
		if (this.data["states"][i]["abbreviation"] == stateAbbreviation) {

			for (var j = 0; j < this.data["states"][i]["counties"].length; j++) {
				if (this.data["states"][i]["counties"][j]["name"] == countyName) {

					for (var k = 0; k < this.data["states"][i]["counties"][j]["regions"].length; k++) {
						//debug(regionData["states"][i]["counties"][j]["regions"][k]);
						var regionId = String(this.data["states"][i]["counties"][j]["regions"][k]);
						var regionObj = this.regionLookupHashtable[regionId];

						result[result.length] = new pdRegion(regionObj.getName(), regionObj.getDescriptor());
					}
				}
			}
		}
	}

	return result;
}


pdRegionData.prototype.getRegion = function(regionDescriptor) {
	return this.regionLookupHashtable[regionDescriptor];
}


pdRegionData.prototype.getAllRegions = function() {
	return this.regionLookupHashtable;
}