if (undefined == window.redfin)
{
	window.redfin = {};
}
if (undefined == window.redfin.regionWidget) {
	redfin.regionWidget = {};

	redfin.regionWidget.CHART_URL = '/stingray/do/region-chart-small-ex';
	redfin.regionWidget.REGION_QUERY_URL = '/stingray/do/query-regionid-widget';
	
	redfin.regionWidget.callback = function(instanceId, res) {
		//MES- Store the region info in the right place
		var correctRegion = null;
		for (var i = 0; i < redfin.regionWidget.regions.length; ++i) {
			var region = redfin.regionWidget.regions[i];
			if (instanceId == region.instanceId) {
				region.data = res.data;
				redfin.regionWidget.displayRegionData(region);
			}
		}
	}
	
	redfin.regionWidget.displayRegionData = function(region) {
		if (undefined != region.contentDiv && 0 < region.data.length) {
			var tbl = document.createElement('table');
			tbl.style.fontSize = '12px';
			tbl.style.color = '#000000';
			tbl.style.margin = '5px auto';
			var tbody = document.createElement('tbody');
			tbl.appendChild(tbody);
			for (var i = 0; i < region.data.length; ++i) {
				var dataRow = region.data[i];
				var tr = document.createElement('tr');
				tr.style.lineHeight = '100%';
				tbody.appendChild(tr);
				
				var td = document.createElement('td');
				td.style.color = '#000000';
				td.style.textAlign = 'right';
				td.style.fontSize = '10.5px';
				tr.appendChild(td);
				var labelHTML;
				if (2 == region.widgetType) {
					//MES- 2 == "inventory"
					labelHTML = dataRow.value + ' ' + dataRow.label;
					if (undefined != dataRow.change || undefined != dataRow.timeperiod) {
						labelHTML += ':';
					}
				}
				else {
					labelHTML = dataRow.label + ': ' + dataRow.value;
				}
				td.innerHTML = labelHTML;
				
				
				td = document.createElement('td');
				td.style.color = '#000000';
				td.style.textAlign = 'right';
				td.style.fontSize = '10.5px';
				tr.appendChild(td);
				
				if (undefined != dataRow.icon) {
					var img = document.createElement('img');
					td.appendChild(img);
					if ('up' == dataRow.icon) {
						img.src = region.apiServer + '/widget/images/up_sm.gif';
					}
					else {
						img.src = region.apiServer + '/widget/images/down_sm.gif';						
					}
				}
				
				if (undefined != dataRow.change || undefined != dataRow.timeperiod) {
					var changeText =' ';
					if (undefined != dataRow.change) {
						changeText += dataRow.change + ' ';
					}
					if (undefined != dataRow.timeperiod) {
						changeText += dataRow.timeperiod;
					}
					var tn = document.createTextNode(changeText);
					td.appendChild(tn);
				}
			}
			region.containerDiv.insertBefore(tbl, region.contentDiv);
		}
	}
	
	redfin.regionWidget.writeContent = function(div) {
		if (undefined == redfin.regionWidget.counter) {
			redfin.regionWidget.counter = 1;
		}
		else {
			++redfin.regionWidget.counter;
		}

		
		var regionInfo = {};
		regionInfo.containerDiv = div;
		regionInfo.instanceId = redfin.regionWidget.counter;
		regionInfo.server = div.getAttribute('server');
		regionInfo.apiServer = div.getAttribute('api_server');
		regionInfo.regionUrl = div.getAttribute('region_url');
		regionInfo.regionListingsUrl = div.getAttribute('region_listings_url');
		regionInfo.regionName = div.getAttribute('region_name');
		regionInfo.regionId = +div.getAttribute('region_id');
		regionInfo.regionType = +div.getAttribute('region_type');
		regionInfo.widgetType = +div.getAttribute('widget_type');
		
		var children = regionInfo.containerDiv.childNodes;
		for (var i = 0; i < children.length; ++i) {
			var child = children[i];
			if ('redfin_widget_content' == child.className) {
				regionInfo.contentDiv = child;
				break;
			}
		}
	
		//MES- Record the info to a global
		if (undefined == redfin.regionWidget.regions) {
			redfin.regionWidget.regions = [];
		}
		redfin.regionWidget.regions.push(regionInfo);
		
		var chartFileName = redfin.regionWidget.getChartFileName(regionInfo.widgetType);
				
		if (undefined != regionInfo.contentDiv) {
			var out = '<a href="' + regionInfo.server + regionInfo.regionUrl + '" target="_blank"><img src="' + regionInfo.apiServer + redfin.regionWidget.CHART_URL + '/' + regionInfo.regionType + '/' + regionInfo.regionId + '/' + chartFileName + '" style="border: 0px none;"></img></a>';
			out += '<div style="margin: 10px 0 3px 0; color: #000000;"><a href="' + regionInfo.server + regionInfo.regionListingsUrl + '" target="_blank" style="font-size: 10px; color: #000000;">Find listings in ' + regionInfo.regionName + '</a></div>';
			regionInfo.contentDiv.innerHTML = out;
		}
		
		//MES- Load stats for the region- we're working around the same origin policy
		var scriptElement = document.createElement('script');
		scriptElement.src = regionInfo.apiServer + redfin.regionWidget.REGION_QUERY_URL + '?region_type=' + regionInfo.regionType + '&region_id=' + regionInfo.regionId + '&widget_type=' + regionInfo.widgetType + '&func_name=redfin.regionWidget.callback' + '&instance_id=' + regionInfo.instanceId;
		document.body.appendChild(scriptElement);
	}
	
	redfin.regionWidget.getChartFileName = function(regionType) {
		//MES- Note: these constants match the ChartTypeEnum values
		switch (regionType) {
			case 2:
				return 'INVENTORY.png';
			case 3:
				return 'MEDIAN_HOUSE_SQ_FT_BY_TIME.png';
			case 4:
				return 'MEDIAN_CONDO_SQ_FT_BY_TIME.png';
			default:
				return 'INVENTORY.png';
		}
	}
	
	redfin.regionWidget.onload = function() {
		//MES- Find the div objects that have the desired class
		var divs = [];
		if (undefined != document.querySelectorAll) {
//MES- TODO: Test this!
			divs = document.querySelectorAll('div.redfin_widget');
		}
		else {
			var possibleDivs = document.getElementsByTagName('div');
			for (var i = 0; i < possibleDivs.length; ++i) {
				var possibleDiv = possibleDivs[i];
				if ('redfin_widget' == possibleDiv.className) {
					divs.push(possibleDiv);
				}
			}
			
		}
		
		for (var i = 0; i < divs.length; ++i) {
			redfin.regionWidget.writeContent(divs[i]);
		}
	}
	
	if (undefined == redfin.skipWidgetOnload) { 
		var prevOnload = window.onload;
		window.onload = function () {
			if (undefined != prevOnload) {
				prevOnload();
			}
			redfin.regionWidget.onload();
		}
	}
}