
//-----Define Globals-----
var mapMarkers = new Array();
var nodelete = 0;
var usermove = 1;
var newwindow = '';
var timerId = null;
var gmap;
var transcontrol;
var slider;
//var cityselect = document.getElementById('cityselect');
var lowerRange;
var upperRange;
var currentAreaReport = 'none';
var currentUnitReport = 'none';
var areaReportStatus = 0;
var unitReportStatus = 0;
var currentCity = '';
var currOpacity = '.92';
var lastFilter = '';
var citymarkers = 1;
//var reports;
//var cities;
var layerdiv;
var tooltip;
var baseIcon;
//var gotoCity = window.location.search.substr(1);
var gmapdiv;
//var lastdate = new Date();
//var timetest ='';
var bounds = new GLatLngBounds;
//window.onresize = resize;
function loadMap() {
	//GLog.write('start');
	document.getElementById('progparent').style.display = 'block';
	if (! GBrowserIsCompatible) {
		document.getElementById('progparent').style.height = 'auto';
		document.getElementById('progparent').innerHTML = "<p style='color: red;'>Sorry, your browser is incompatible with Google Maps. Please upgrade your browser and try again</p>";

		return;
	}
	progbar(1);
	document.getElementById('progdetails').innerHTML = 'Parsing Data';
	setTimeout('loadMap1();', 10);
}

function loadMap1() {
	//document.getElementById('splash').style.visibility = 'hidden';
	//var xml = getConfigInfo(0);
	gmapdiv = document.getElementById('gmap');
 	transcontrol = document.getElementById('transcontrol');
	//cities =  parseXml(xml, 'city');
	if (typeof(cities[gotoCity]) != 'undefined') {
		document.getElementById('proglabel').innerHTML = 'Loading '+cities[gotoCity]['nicename']+"...<div id='progdetails'></div> ";
		_mi[_m[getMenuByName('City')][0]][3] = 'cities2';
		document.getElementById('menu'+getMenuByName('Role')).style.top = '0px';
		document.getElementById('roleChooser').style.visibility = 'visible';
	}
	//reports =  parseXml(xml, 'report');
	document.getElementById('progdetails').innerHTML = 'Sizing Window';
	progbar(2);
	setTimeout('loadMap2();', 10);
}

function loadMap2() {
	var divs = new Array();
	for (var x in gmapdiv.childNodes) {
		if(gmapdiv.childNodes[x].nodeName == 'DIV') { divs.push(gmapdiv.childNodes[x]); }
	}

	//Create a new GMap and load it to the html object id="gmap"
	resizeWindow();
	progbar(2);
	document.getElementById('progdetails').innerHTML = 'Initializing Map';
	setTimeout('loadMap3();', 10);
}

function loadMap3() {
	gmap = new GMap2(document.getElementById("gmap"));
	//Add Controls
	gmap.addControl(new GLargeMapControl());
	gmap.addControl(new GOverviewMapControl());
	gmap.enableContinuousZoom();
	gmap.enableDoubleClickZoom();
	var tilelayer = new GTileLayer(new GCopyrightCollection("hi"), 9, 14);
	tilelayer.isPng = function() { return false; };
	//tilelayer.baseUrls = ["get_image.php?"];
	tilelayer.getTileUrl = function(a, b){
		b = 17 - b;
		if((!areaReportStatus) || b < 4 || b > 9) { return 'images/transtile.gif'; }
		return "get_image.php?city="+currentCity+"&report="+currentAreaReport+"&x=" + a.x + "&y=" + a.y + "&zoom=" + b;
	};
	tilelayer.getOpacity = function() { return 1; };

	var normaltype = G_NORMAL_MAP.getTileLayers()[0];
	var sattype = G_SATELLITE_MAP.getTileLayers()[0];
	var hybsattype = G_HYBRID_MAP.getTileLayers()[0];
	var hybtype = G_HYBRID_MAP.getTileLayers()[1];

	G_DEFAULT_MAP_TYPES[0].getTileLayers = function() { return [normaltype, tilelayer]; };
	G_DEFAULT_MAP_TYPES[1].getTileLayers = function() { return [sattype, tilelayer]; };
	G_DEFAULT_MAP_TYPES[2].getTileLayers = function() { return [hybsattype, tilelayer, hybtype]; };

	progbar(2);
	document.getElementById('progdetails').innerHTML = 'Initializing Cities';
	setTimeout('loadMap4();', 10);

}

function loadMap45() {
	setupOverlays(); //Nuke this!!!!

	//cityselect.lastChild.setAttribute("class", cityselect.lastChild.getAttribute('class')+" last");
	//for(var x = 0; x < divs.length;  x++) { gmapdiv.appendChild(divs[x]); }
	//delete divs;
	progbar(2);
	document.getElementById('progdetails').innerHTML = 'Adding Controls';
	setTimeout('loadMap5();', 10);

}

function loadMap4() {

	if (typeof(cities[gotoCity]) !='undefined') {
		//GLog.write('going to '+gotoCity);
		document.title += ' - ' + cities[gotoCity]['nicename'];
		if (gotoReport) { document.title += ' - ' + reports[gotoReport]['nicename']; }
		newCity(gotoCity, 1);
		//gmap.setCenter(new GLatLng(parseFloat(centerlat), parseFloat(centerlong)));
		gmap.setCenter(new GLatLng(centerlat, centerlong), parseFloat(zoom));
		updatelink();
	} else {
		gmap.setCenter(new GLatLng('36.69820011225704', '-96.85918887054443'));
		for (var city in cities) {
			var marker = createCityMarker(city);
			var citymarker = new Array(marker.lng, marker.lat, marker);
			mapMarkers[city] = citymarker;
			bounds.extend(marker.getPoint());
		}
	}
	progbar(3);
	document.getElementById('progdetails').innerHTML = 'Setting up Layers';
	setTimeout('loadMap45();', 10);
}

function loadMap5() {
	if (typeof(cities[gotoCity]) == 'undefined') { gmap.setZoom(gmap.getBoundsZoomLevel(bounds)); }//Zoom the map to the maximal zoom level 
	gmap.addControl(new GMapTypeControl());
	progbar(3);
	document.getElementById('progdetails').innerHTML = 'Creating UI';
	setTimeout('loadMap55();', 10);
}

function loadMap55() {

	var messagediv = document.createElement('div');
	messagediv.setAttribute('id', 'message');
	messagediv.setAttribute('class', 'message');
	messagediv.setAttribute('className', 'message');
	messagediv.innerHTML = "<div id='messagetext' class='messagetext'><img src='images/loading.gif' width=20 height=20 style='vertical-align:middle'><b>Loading...</b></div>";
	messagediv.style.display = 'none';
	tooltip = document.createElement('div');
	tooltip.setAttribute('id', 'tooltip');
	tooltip.setAttribute('class', 'tooltip');
	tooltip.setAttribute('className', 'tooltip');
	gmapdiv.appendChild(messagediv);
	gmapdiv.appendChild(tooltip);

	progbar(3);
	document.getElementById('progdetails').innerHTML = 'Adding Events';
	setTimeout('loadMap6();', 10);
}

function loadMap6() {
	//Event Listeners
	GEvent.addListener(gmap, "zoomend", function() {
		var zoomlevel = 17 - gmap.getZoom();
		if (areaReportStatus) {
			if (zoomlevel < 4 || zoomlevel > 9) {
				document.getElementById('areawarn').style.visibility = "visible";
				document.getElementById('shadeddesc').style.visibility = "hidden";
			} else {
				document.getElementById('shadeddesc').style.visibility = "visible";
				document.getElementById('areawarn').style.visibility = "hidden";
			}
		}
		usermove = 0;
		if(unitReportStatus) { loading(1);}
		nodelete = 1;
		//if (document.all) { if(currentAreaReport != 'none') { changeOpacity(currOpacity);} }
		//if(currentUnitReport != 'none') { updateMarkers(); }
		nodelete = 0;
		updatelink();
		usermove = 1;
	//	loading(0);
	});

	GEvent.addListener(gmap, "maptypechanged", function() {
		usermove = 0;
		nodelete = 1;
		setupOverlays();
		usermove = 1;
		nodelete = 0;
	});

	GEvent.addListener(gmap, "moveend", function() {
		//if(currentUnitReport != 'none') { loading(1);}
		if(unitReportStatus) {
			if (usermove) {
				addMessage("<img src='images/loading.gif' width=20 height=20 style='vertical-align:middle'> <b>Loading...</b>", 'white');
				//addMessage("<b>Loading...</b>", 'white');
				if (timerId) { window.clearTimeout(timerId); }
				timerId = window.setTimeout('updateMarkers()', 50);
			} else { updateMarkers(); }
		}
		updatelink();
		//	loading(0);
	});

	GMap2.prototype.wheelZoom = function(event) { 
		if((event.detail || -event.wheelDelta) < 0) { 
			gmap.zoomIn();
		} else { gmap.zoomOut();}
		return false;
	};
	GEvent.addDomListener(gmapdiv, "DOMMouseScroll", gmap.wheelZoom);
	GEvent.addDomListener(gmapdiv, "mousewheel", gmap.wheelZoom); 

	//GEvent.bindDom(window,"resize",gmap,gmap.onResize);
	if (window.attachEvent) { window.attachEvent("onresize", resize);
	} else { window.addEventListener("resize", resize , false); }

	GEvent.addDomListener(document.getElementById('filterbutton'), 'click', filter);
	GEvent.addDomListener(document.getElementById('filter'), 'keypress', checkkey);
	if (document.all) {
		document.getElementById('transbar').style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/scale.png', sizingMethod='clip')";
		document.getElementById('transbar').innerHTML = "";
		//transcontrol.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/scale.png', sizingMethod='clip')";
		//transcontrol.innerHTML = "";
		document.getElementById('transcontrol').removeChild(document.getElementById('slider'));
		var tscontrol = document.createElement("div");
		document.getElementById('area').appendChild(tscontrol);
		tscontrol.setAttribute("id", "tscontrol");
		tscontrol.style.setAttribute("cssText",  "visibility: hidden; position: absolute; bottom: 2px; left: 16px; width: 240px; height: 31px;", 0);
		tscontrol.innerHTML = '<div id="slider" style="cursor:col-resize;position:absolute;width:11px;height:21px;top:0px;right:164px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'images/slider.png\', sizingMethod=\'clip\');"><img src="images/slider.png" height=21 width=11 style="visibility: hidden;"/></div>';
		document.getElementById('translabel').style.left = '0px';
	}
	
	progbar(3);
	document.getElementById('progdetails').innerHTML = 'Configuring Layers';
	setTimeout('loadMap7();', 10);
}

function loadMap7() {
	setupTransbar();
	slider.onmousedown=mouseDown;
	sizeDescriptions();
	
	//create icons
    baseIcon = new GIcon();
    //baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    //baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    //baseIcon.infoShadowAnchor = new GPoint(18, 25);
    baseIcon.transparent="http://www.google.com/mapfiles/markerTransparent.png";
    baseIcon.imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0];    baseIcon.printImage="http://www.google.com/mapfiles/markerie.gif";
    baseIcon.mozPrintImage="http://www.google.com/mapfiles/markerff.gif";
    //baseIcon.printShadow="http://www.google.com/mapfiles/dithshadow.gif";
	progbar(4);
	//GLog.write(timetest);
	document.getElementById('progdetails').innerHTML = 'Load Complete';
	if (reports[gotoReport]) { 
		if (reports[gotoReport]['shaded']) { changeAreaReport(gotoReport); 
		} else { changeUnitReport(gotoReport); }
	}	
	gotoReport = null;
	gotoCity = null;
	setTimeout("document.getElementById('splash').parentNode.removeChild(document.getElementById('splash'));document.getElementById('container').style.visibility = 'visible';", 300);
}

function forceMarkers() {
	addMessage("<img src='images/loading.gif' width=20 height=20 style='vertical-align:middle'> <b>Loading...</b>", 'white');
	if (timerId) { window.clearTimeout(timerId); }
	timerId = window.setTimeout('updateMarkers(1)', 300);
}

function updateMarkers(force) {
	if (! currentCity) { return; }
	//GLog.write('starting markers');
	if((! nodelete) && mapMarkers.length) {deleteMarkers(); }
	//loading(1);
	var bounds = gmap.getBounds();
	var request = GXmlHttp.create();
	var report = currentCity+'_'+currentUnitReport;
	var max = bounds.getNorthEast();
	var min = bounds.getSouthWest();
	var latoffset = (max.lat() - min.lat())*'.05';
	var lngoffset = (max.lng() - min.lng())*'.05';

	var url = "report_xml.php?maxx="+(max.lng()+lngoffset)+"&minx="+(min.lng()-lngoffset)+"&maxy="+(max.lat()+latoffset)+"&miny="+(min.lat()-latoffset)+"&report="+report+'&section='+currentCity+'_'+reports[currentUnitReport]['section'];
	if (force) { url += "&force="+force; }
	//if (lastFilter) { url += "&filter="+escape(lastFilter)+"&filtertype="+document.getElementById('filtertype').value; }
	if (lastFilter) { url += "&filter="+escape(lastFilter);}
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		var warning=0;
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var total = 0;
			if (xmlDoc && xmlDoc.documentElement) {
				total =  xmlDoc.documentElement.getElementsByTagName("count")[0].getAttribute('count');
				var query = xmlDoc.documentElement.getElementsByTagName('query')[0];
				if (total > 300 && (!force)) {
					addMessage("<b>There are too many listings at this zoom level, please try zooming in.</b><br><a href='javascript: forceMarkers();' style='color: #FF0000;'>Show anyway (will impact performance)</a>");
					warning=1;
				} else {
					messageOff();
					var maxrange = 8;
					var count = 0;
					var rooms = 0;
					var norooms = 1;
					if (!currentUnitReport.match(/\d/g) || currentUnitReport.match(/4/g)) { norooms = 0; }
					var markers = xmlDoc.documentElement.getElementsByTagName("marker");
					for (var i = 0; i < markers.length; i++) {
						if (! mapMarkers[markers[i].getAttribute("id")]) {
							var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("longitude")));
							var icon =  'images/range_'+markers[i].getAttribute("range")+'.png';
							if (! norooms) {
								rooms = markers[i].getAttribute("rooms");
								if (rooms >=9 ) { rooms = 9; }
							}
							var marker = createMarker(latlng, icon, markers[i].getAttribute("id"), markers[i].getAttribute('price'), rooms);
							mapMarkers[markers[i].getAttribute("id")] = new Array(markers[i].getAttribute("longitude"), markers[i].getAttribute("lat"), marker);
							count++;
						}
					}
					timerId = null;
				}
			}
			//loading(0);
			if (usermove && ! warning) {
				messageOff();
			}
			//GLog.write('Markers finished');
		}
	};
	request.send(null);
}

function deleteMarkers(all) {
	if (all) { 
		gmap.closeInfoWindow(); 
		gmap.clearOverlays();
		mapMarkers = new Array();
		return;
	}
	var count = 0;
	var bounds = gmap.getBounds();
	var max = bounds.getNorthEast();
	var min = bounds.getSouthWest();
	var latoffset = (max.lat() - min.lat())*'.05';
	var lngoffset = (max.lng() - min.lng())*'.05';
	for (var id in mapMarkers) {
		if (mapMarkers[id]) {
			var lng = mapMarkers[id][0];
			var lat = mapMarkers[id][1];
			if (lat && lng) {
				if(lat > (max.lat() +latoffset)|| lat < (min.lat()-latoffset) || lng > (max.lng()+lngoffset) || lng < (min.lng()-lngoffset)) {
					//gmap.clearInstanceListeners(mapMarkers[id][2]);
					//for (var event in ('click', 'over', 'out')) {
					//	if (mapMarkers[id][2][event]) {
					//		gmap.removeListener(mapMarkers[id][2][event]);
					//	}
					//}
					gmap.removeOverlay(mapMarkers[id][2]);
					delete mapMarkers[id];
					count++;
				}
			}
		}
	}
}


	function parseXml(xmlDoc, key) {
		var output = new Array();
		var xmlreports = xmlDoc.getElementsByTagName(key);
		for (var i=0; i<xmlreports.length; i++) {
			var name = xmlreports[i].getAttribute('name');
			output[name] = new Array();
			output[name]['num'] = i;
			var properties = xmlreports[i].childNodes;
			for (var x=0; x<properties.length; x++) {
				if (properties[x].tagName) {
					if (properties[x].firstChild) {
						output[name][properties[x].tagName] = properties[x].firstChild.nodeValue;
					} else { output[name][properties[x].tagName] = ""; }
				}
			}
		}
		return output;
	}


	function getConfigInfo(count) {
		//fixme
		var request = GXmlHttp.create();
		request.open("GET", 'config.xml', false);
		//var date = new Date();
		//date.setDate(date.getDate()-1);
		//request.setRequestHeader("If-Modified-Since", date.toUTCString());
		request.send(null);
		if (count > 5) { document.getElementById('proglabel').innerHTML = "<div style='color:red;'>An error has occured. Please reload the page</div>"; return null;}
		var xmlDoc = request.responseXML;
		if (request.status == 200 && xmlDoc.documentElement) {
			if (xmlDoc) { return xmlDoc; }
		} else { return getConfigInfo(count+1); }
	}

	function updateKey(report) {
		if	(! areaReportStatus) {
			document.getElementById('shadedkey').innerHTML = "";
			document.getElementById('shadeddesc').innerHTML = "<div style='font-size: 1.2em;'>Choose an Area Report above. Area reports show the savvy researcher a city's demographics and market statistics on map by zip code. Selecting an area report will display a shaded overlay on the map, with the colors representing the various statistics. The street visibility slider will help alternate between seeing the overlay and navigating the map. </div>";
			//return;
		}
		if (! unitReportStatus) {
			document.getElementById('key').innerHTML = "";
			document.getElementById('desc').innerHTML = "<div style='font-size: 1.2em;'>Choose a Listings report above. Listings reports are updated frequently to display live listings color-coded by price.</div>";
			//return;
		}
		sizeDescriptions();
		if (report == 'none') { return; }
		var shaded = "";
		if (reports[report]['shaded']) { shaded = 'shaded'; }
		//var titlespan = document.getElementById(shaded+'reporttitle');
		//if (titlespan) { header.removeChild(titlespan); }
		var header = document.getElementById(shaded+'report_header');
		//if (document.getElementById(shaded+'amp')) { document.getElementById(shaded+'title').removeChild(document.getElementById(shaded+'amp')); }
		var keydiv = document.getElementById(shaded+"key");

		if (reports[report]) {
			if(! document.getElementById(shaded+'reporttitle')) { 
				document.getElementById(shaded+'title').innerHTML += "<span style='color: #ff9900;' id='"+shaded+"amp'> &gt;</span>"; 
				var title = document.createElement('span');

				title.innerHTML = reports[report]['nicename'];
				title.setAttribute('id', shaded+'reporttitle');
				title.style.color = '#FF9900';
				title.style.fontWeight = 'bold';
				header.appendChild(title);
			}
			var image = 'range';
			var request = GXmlHttp.create();
			request.open("GET", "xml/key_"+currentCity+'_'+report+".xml?r="+Math.random(), true);
			//var date = new Date();
			//date.setTime(date.getTime()-(2*24*60*60);
			//request.setRequestHeader("If-Modified-Since", date.toUTCString());
			request.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
			request.setRequestHeader("Cache-Control", "no-cache");
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					var html = request.responseText;
					if (html && ! html.match("Not Found")) { keydiv.innerHTML = html; }
					else { keydiv.innerHTML = "<div style='padding-top: 10px; color: #5d6067; font-weight: bold;'>Scale not available</div>"; }
					keydiv.style.visibility = 'visible';
					var descdiv = document.getElementById("desc");
					var func = "changeUnitReport";
					var type = 'Listings';
					if (reports[report]['shaded']) {
						descdiv = document.getElementById("shadeddesc");
						func = "changeAreaReport";
						type = 'Report';
					}
					descdiv.innerHTML="<div style='float: right; top: 0px; right: 5px; font-size: .9em;'><a style='color:#5d6067' href=\"javascript:"+func+"('none');\">Close "+type+"</a></div><span>["+reports[report]['nicename']+"]</span>"+reports[report]['description'];
					//descdiv.innerHTML="<i>"+reports[report]['description']+"<\/i>";
				}
			};
			request.send(null);
		}
	}

	function createMarker(latlng, icon, id, price, rooms) {
		var gicon = new GIcon(baseIcon);
		gicon.image = icon;
		if (! rooms) { rooms = 0; }
		gicon.label = {"url":"images/"+rooms+".png", "anchor":new GPoint(6,4), "size":new GSize(8,12)};
		var marker = new GMarker(latlng, {icon:gicon});
		marker.id = id;
		var pre = '$';
		var post = '';
		marker.rooms = rooms;
		if (typeof reports[currentUnitReport]['prelabel'] != 'undefined') { pre = reports[currentUnitReport]['prelabel']; }
		if (typeof reports[currentUnitReport]['postlabel'] != 'undefined') { post = reports[currentUnitReport]['postlabel']; }
		marker.tooltip =  pre+price+post;
		gmap.addOverlay(marker);
		GEvent.addListener(marker, "mouseover", function () { showTooltip(marker); });
		GEvent.addListener(marker, "mouseout", function () { tooltip.style.visibility='hidden'; });
		GEvent.addListener(marker, "click", function() {
			openMarkerWindow(marker);
			if (! marker.visited) {
				var label = document.getElementById('l'+marker.id);
				//label.src = label.src.replace(/images\//, "images/v");
				marker.visited = 1;
			}
			return;
		});
		return marker;
	}

	function createCityMarker(city) {
		var latlng = new GLatLng(parseFloat(cities[city]['centerlat']), parseFloat(cities[city]['centerlong']));
		var marker = new GMarker(latlng);
		gmap.addOverlay(marker);
		marker.tooltip = cities[city]['nicename'];
		GEvent.addListener(marker, "mouseover", function () { showTooltip(marker); });
		GEvent.addListener(marker, "mouseout", function () { tooltip.style.visibility='hidden'; });
		GEvent.addListener(marker, "click", function() { location.href='index.php?city='+city; });
		return marker;
	}

	function openMarkerWindow(marker) {
		marker.openInfoWindowTabsHtml([new GInfoWindowTab('Info', "<div style='margin-top: 20px;' id='infotab'><img src='images/loading.gif' width=20 height=20 style='vertical-align:middle'> <b>Loading...</b>"), new GInfoWindowTab('Map', "<div id='infomaptab'></div>")]);
		var id = marker.id;
		var newrequest = GXmlHttp.create();
		newrequest.open("GET", "report_xml.php?id="+id, true);
		//newrequest.open("GET", "report_xml.php?id="+id+"&report="+currentCity+'_'+currentUnitReport, true);
		newrequest.onreadystatechange = function() {
			if (newrequest.readyState == 4) {
				var xmlDoc = newrequest.responseXML;
				if (xmlDoc && xmlDoc.documentElement) {
					var nodes = xmlDoc.documentElement.childNodes;
					var latlng = marker.getPoint();
					marker.openInfoWindowTabsHtml([new GInfoWindowTab('Info', nodes[0].nodeValue + '<br><b>Get Driving Directions</b><br><br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank"><input size="25" maxlength="40" name="saddr" id="saddr" value="" type="text"><br><input value="Get Directions" type="submit"><input name="daddr" value="'+latlng.lat()+','+latlng.lng()+'" type="hidden"></form></div>'), new GInfoWindowTab('Map', "<div><div id='blowupmap"+id+"' style='width:200px; height:200px; border:1px solid #CCCCCC;'></div></div>")]);
					var blowup = new GMap2(document.getElementById("blowupmap"+id));
					blowup.setCenter(marker.getPoint(), 15, copy_obj(G_NORMAL_MAP));
					blowup.addOverlay(new GMarker(marker.getPoint(), {clickable:0}));
					blowup.addControl(new GSmallZoomControl);
				}
			}
		};
		newrequest.send(null);
	}

	function changeUnitReport(report, force) {
		if (! report) { return; }
		usermove = 0;
		var header = document.getElementById('report_header');
		var titlespan = document.getElementById('reporttitle');
		if (titlespan) { header.removeChild(titlespan); }
		if (document.getElementById('amp')) { document.getElementById('title').removeChild(document.getElementById('amp')); }
		if(report != 'none') {
			document.title += ' - ' + reports[report]['nicename']; 
			closeAllMenus();
			document.getElementById('desc_tip').style.visibility = 'hidden';
			//document.getElementById('reporttext').innerHTML = reports[report]['nicename']
			loading(1);
			document.getElementById('filterdiv').style.visibility = 'visible';
			document.getElementById('report_close').style.visibility = 'visible';
			currentUnitReport = report;
			unitReportStatus = 1;	
			if ((!force) && areaReportStatus) {
				changeAreaReport('none');
				setTimeout("document.getElementById('shadeddesc').innerHTML = \"<div style='font-size: 1.2em; color: red;'>The \\\""+reports[currentAreaReport]['nicename']+"\\\" report has been disabled for conveniance. To turn it back on, <a style='font-size: 1.2em; color: red; font-weight: bold;' href='javascript: forceReport()';>click here</a>.</div>\";", 1);
			}
		} else {
			document.getElementById('filterdiv').style.visibility = 'hidden';
			document.getElementById('report_close').style.visibility = 'hidden';
			messageOff();
			unitReportStatus = 0;
		}
		deleteMarkers(1);
		sizeDescriptions(); //fixme
		updateKey(report);
		if(report != 'none') { updateMarkers(); }
		updatelink();
		usermove = 1;
		//loading(0);
	}

	function changeOpacity(amt) {
		if (!amt) { amt = currOpacity; }
		if (document.all) {
			for(var x=0; x<layerdiv.childNodes.length; x++) {
				layerdiv.childNodes[x].style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity='"+(amt*100)+"')";
			}
		} else { layerdiv.style.opacity=amt; }
		currOpacity = amt;
	}

	function changeMenuTitle(menu, report) {
		var menunum = getMenuByName(menu);
		_mi[_m[menunum][0][0]][1] = cities[report]['nicename'];
		BDMenu(menunum);
	}

	function resetDescription() {
		document.getElementById('desc_tip').style.visibility = 'hidden';
		return;
		var shaded = '';
		if (getParentMenu() != 'unitreports') { shaded = 'shaded'; }
		var descdiv = document.getElementById(shaded+"desc");
		var keydiv = document.getElementById(shaded+"key");
		keydiv.style.visibility = 'visible';
		if( currentUnitReport == 'none') { descdiv.innerHTML=""; }
		else {
			descdiv.innerHTML="<span>["+reports[currentUnitReport]['nicename']+"]</span>"+reports[currentUnitReport]['description'];
		}
	}

	function updateDescription(report) {
		//var shaded = '';
		//if (getParentMenu() != 'unitreports') { shaded = 'shaded'; }
		//var descdiv = document.getElementById(shaded+"desc");
		//var keydiv = document.getElementById(shaded+"key");
		//keydiv.style.visibility = 'hidden';
		var desc = document.getElementById('desc_tip');
		if (! report ) {
			//desc.innerHTML = "";
			//desc.style.visibility = 'hidden';
			desc.style.visibility = 'hidden';
			//hidetip();
		} else if (report == 'none') { desc.innerHTML = "Choose a Report";
		} else {
			desc.innerHTML="<span>["+reports[report]['nicename']+"]</span>"+reports[report]['description'];
			desc.style.visibility = 'visible';
			//showtip(descdiv.innerHTML);
			//tooltip.innerHTML = reports[report]['description'];
			//tooltip.style.left= _X+'px';
			//tooltip.style.top= _Y+'px';
			//tooltip.style.zIndex= 5000;
			//tooltip.style.visibility="visible";
		}
		//tooltip.style.top = (pos.y-(tooltip.clientHeight+34))+'px';
		//tooltip.style.left = (pos.x+10)+'px';

	}

	function getParentMenu() {
		var item;
		var tempitem = _itemRef;
		while (_mi[tempitem]) {
			item = tempitem;
			tempitem = getParentItemByItem(item);
		}
		return _m[_mi[item][0]][1];
	}

	function changeAreaReport(report, force) {
		if (! report) { return; }
		usermove = 0;
		nodelete = 1;
		sizeDescriptions(); //fixme
		var header = document.getElementById('shadedreport_header');
		var titlespan = document.getElementById('shadedreporttitle');
		if (titlespan) { header.removeChild(titlespan); }
		if (document.getElementById('shadedamp')) { document.getElementById('shadedtitle').removeChild(document.getElementById('shadedamp')); }
		if (report != 'none') {
			document.title += ' - ' + reports[report]['nicename']; 
			currentAreaReport = report;
			closeAllMenus();
			document.getElementById('desc_tip').style.visibility = 'hidden';
			var zoomlevel = 17 - gmap.getZoom();
			if (zoomlevel < 4 || zoomlevel > 9) {
				document.getElementById('areawarn').style.visibility = "visible";
				document.getElementById('shadeddesc').style.visibility = "hidden";
			} else {
				document.getElementById('shadedreport_close').style.visibility = 'visible';
				document.getElementById('shadeddesc').style.visibility = "visible";
				document.getElementById('areawarn').style.visibility = "hidden";
				//document.getElementById('shadedtext').innerHTML = reports[report]['nicename']
				transcontrol.style.visibility = "visible";
				if ( document.all) { document.getElementById('tscontrol').style.visibility = "visible";}
			//	G_DEFAULT_MAP_TYPES[0].getTileLayers = function() { return [normaltype, tilelayer]; }
			//	G_DEFAULT_MAP_TYPES[1].getTileLayers = function() { return [sattype, tilelayer]; }
			//	G_DEFAULT_MAP_TYPES[2].getTileLayers = function() { return [hybsattype, tilelayer, hybtype]; }
			}
			if ((!force) && unitReportStatus) {
				changeUnitReport('none');
				setTimeout("document.getElementById('desc').innerHTML = \"<div style='font-size: 1.2em; color: red;'>The \\\""+reports[currentUnitReport]['nicename']+"\\\" report has been disabled for conveniance. To turn it back on, <a style='font-size: 1.2em; color: red; font-weight: bold;' href='javascript: forceReport()';>click here</a>.</div>\";", 1);
			}
			areaReportStatus = 1;	
		} else {
			document.getElementById('shadedreport_close').style.visibility = 'hidden';
			document.getElementById('areawarn').style.visibility = "hidden";
			transcontrol.style.visibility='hidden';
			if ( document.all) { document.getElementById('tscontrol').style.visibility = "hidden";}
			areaReportStatus = 0;	
			//G_DEFAULT_MAP_TYPES[0].getTileLayers = function() { return [normaltype]; }
			//G_DEFAULT_MAP_TYPES[1].getTileLayers = function() { return [sattype]; }
			//G_DEFAULT_MAP_TYPES[2].getTileLayers = function() { return [hybsattype, hybtype]; }
		}
		updateKey(report);
		var center = gmap.getCenter();
		gmap.setCenter(new GLatLng(0,0));
		gmap.setCenter(center);
	//	var types = new Array;
	//	types['Map'] = 0;
	//	types['Satellite'] = 1;
	//	types['Hybrid'] = 2;
	//	var currtype = types[gmap.getCurrentMapType().getName()];
	//	if (currtype < 2) { var nexttype = currtype+1;
	//	} else { nexttype = currtype -1; }
	//	gmap.setMapType(G_DEFAULT_MAP_TYPES[nexttype]);
	//	gmap.setMapType(G_DEFAULT_MAP_TYPES[currtype]);
		updatelink();
		usermove = 1;
		nodelete = 0;
	}

	function findPosX(obj) {
		var curleft = 0;
		if (obj && obj.offsetParent) {
			while (obj.offsetParent) {
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else { if (obj.x) { curleft += obj.x; } }
		return curleft;
	}

	function moveSlider(e){
		var opacity = 0;
		if (!e) { e = window.event; }
		if (e.pageX) { opacity = e.pageX;
		} else if (e.clientX) { opacity = e.clientX + document.body.scrollLeft; }

		if (opacity <= lowerRange) { opacity = lowerRange;
		} else if (opacity >= upperRange) { opacity = upperRange;
		} else { slider.style.left=(opacity-lowerRange)+"px"; }

		opacity = 1-(opacity - lowerRange)/(upperRange - lowerRange);
		changeOpacity(opacity);
		//var val = document.getElementById('value');
	}

	function mouseDown(e){
		document.onmousemove = moveSlider;
		document.onmouseup = mouseUp;
	}

	function mouseUp(){
		document.onmousemove = null;
		document.onmouseup = null;
	}

	function newCity(city, nocenter){
		document.title = 'Kexter - ' + cities[city]['nicename'];
		if (reports[currentAreaReport]) { document.title += ' - ' + reports[currentAreaReport]['nicename']; }
		else if (reports[currentUnitReport]) { document.title += ' - ' + reports[currentUnitReport]['nicename']; }
		if(document.getElementById('message')) { loading(1); }
		closeAllMenus();
		if (document.getElementById('intro')) {
			document.getElementById('intro').parentNode.removeChild(document.getElementById('intro'));
			document.getElementById('unit').style.visibility = 'visible';
			document.getElementById('area').style.visibility = 'visible';
			document.getElementById('menu'+getMenuByName('AreaReports')).style.top = '0px';
			document.getElementById('menu'+getMenuByName('UnitReports')).style.top = '0px';
		}
		changeMenuTitle('City', city);
		if (tooltip) { tooltip.style.visibility = 'hidden'; }
		document.getElementById('pagelink').style.visibility = 'visible';
		updatelink();
		currentCity = city;
		usermove = 0;

		deleteMarkers(1);
		mapMarkers = new Array();
		if (!nocenter) { 
			var latlng = new GLatLng(parseFloat(cities[city]['centerlat']), parseFloat(cities[city]['centerlong']));
			gmap.setCenter(latlng, 12);
		}
		updateKey(currentUnitReport);
		updateKey(currentAreaReport);
		usermove = 1;
		citymarkers = 0;
		if(document.getElementById('message') && ! unitReportStatus) { loading(0); }
	}

	function copy_obj(o) {
		var c = new Object();
		for (var e in o) {
			if (typeof o[e] =='array' && o[e].constructor == Array) { c[e] = c[e].copy();
            } else { c[e] = o[e]; }
        }
        return c;
    }

	function setupOverlays() {
		return 1; //Bad Overlay, Bad, Bad! 
		var amt = currOpacity;
		var mapimgs;
		//layerdiv = document.getElementById('gmap').childNodes[0].childNodes[0].childNodes[1]//;
		layerdiv = document.getElementById('gmap').childNodes[0].childNodes[0].childNodes[1].childNodes[1]//;
		layerdiv.setAttribute('id', 'layerdiv');
		if (document.all) {
			for(var x=0; x<layerdiv.childNodes.length; x++) {
				layerdiv.childNodes[x].style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+(amt*100)+")";
			}
		} else { layerdiv.style.opacity=amt; }
	}

	function setupTransbar() {
		slider = document.getElementById("slider");
		lowerRange =  findPosX(transcontrol) + 7;
		upperRange = lowerRange + (240 - 14);
		slider.style.left = ((upperRange - lowerRange) * (1-currOpacity))+"px";
	}

	function resize() {
		resizeWindow();
		gmap.onResize;
		setupTransbar();
		sizeDescriptions();
		//if(maptypepicker.value != 'none') { if (document.all) { setupOverlays(); } }
		//if (document.all) { if(maptypepicker.value != 'none') { changeOpacity(currOpacity);} }
	}

	function popitup(url) {
		if (!newwindow.closed && newwindow.location) {
			newwindow.location.href = url;
		} else { newwindow=window.open(url,'name', 'resizable=1 width=640, height=480, scrollbars=yes, location=yes'); }
		if (window.focus) {newwindow.focus()}
		//return false;
	}

	function addMessage(html, color) {
		var message = document.getElementById('message');
		var messagetext = document.getElementById('messagetext');
		message.style.display = 'block';
		messagetext.innerHTML = html;
		if (! color) { color = 'white'; }
		messagetext.style.background = color;
		//loading(0);
	}

	function loading(on) {
		if (on) {
			addMessage("<img src='images/loading.gif' width=20 height=20 style='vertical-align:middle'> <b>Loading...</b>", 'white');
		} else {
			messageOff();
		}
	}

	function messageOff() {
		document.getElementById('message').style.display = 'none';
	}

	function showTooltip(marker) {
      	tooltip.innerHTML = marker.tooltip;
		var point=gmap.getCurrentMapType().getProjection().fromLatLngToPixel(gmap.getBounds().getSouthWest(),gmap.getZoom());
		var offset=gmap.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),gmap.getZoom());
		var anchor=marker.getIcon().iconAnchor;
		var width=marker.getIcon().iconSize.width;
		var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width,- offset.y + point.y +anchor.y)); 
		pos.apply(tooltip);
		tooltip.style.visibility="visible";
	}

	function resizeWindow() {
		var winDims = getWindowDims();
		document.getElementById('container').style.width=(winDims[0] -2)+'px';
		document.getElementById('container').style.height=(winDims[1]- 1)+'px';
		document.getElementById('content').style.height = (winDims[1]-document.getElementById('header').clientHeight - 5)+'px';
		document.getElementById('content').style.width = (winDims[0]-280)+'px';
		document.getElementById('info').style.height = (winDims[1]-document.getElementById('header').clientHeight - 3)+'px';
		//document.getElementById('gmap').style.width = (winDims[0]-260)+'px';
	}

	function sizeDescriptions() {
		document.getElementById('areawarn').style.height = (document.getElementById('area').clientHeight - document.getElementById('menu'+getMenuByName('AreaReports')).clientHeight - 35)+'px';
		document.getElementById('desc').style.top = (document.getElementById('unitmenudiv').clientHeight + 25 +7 )+'px';
		if (unitReportStatus) {
			document.getElementById('desc').style.height = (document.getElementById('unit').clientHeight - document.getElementById('menu'+getMenuByName('UnitReports')).clientHeight - document.getElementById('key').clientHeight -48 - document.getElementById('filterdiv').clientHeight)+'px';
		} else {
			document.getElementById('desc').style.height = (document.getElementById('unit').clientHeight - document.getElementById('menu'+getMenuByName('UnitReports')).clientHeight-40 )+'px';
		}
		document.getElementById('shadeddesc').style.top = (document.getElementById('areamenudiv').clientHeight +25 +7)+'px';
		if (areaReportStatus) {
			document.getElementById('shadeddesc').style.height = (document.getElementById('area').clientHeight - document.getElementById('menu'+getMenuByName('AreaReports')).clientHeight - document.getElementById('shadedkey').clientHeight -48)+'px';
		} else {
			document.getElementById('shadeddesc').style.height = (document.getElementById('area').clientHeight - document.getElementById('menu'+getMenuByName('AreaReports')).clientHeight -45)+'px';
		}
	}

	function getWindowDims() {
		var x,y;
		if (self.innerHeight) // all except Explorer
		{
			x = self.innerWidth;
			y = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			x = document.documentElement.clientWidth;
			y = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			x = document.body.clientWidth;
			y = document.body.clientHeight;
		}
		return [x-1, y];
	}

	function filter() {
		if (unitReportStatus) {
			loading(1);
			lastFilter = document.getElementById('filter').value;
			deleteMarkers(1);
			updateMarkers();
		}
	}

	function checkkey(e) {
		var keycode = window.event ? e.keyCode : e.which;
        if (keycode == 13) { filter(); }
	}
	function clearFilter() {
		document.getElementById('filter').value="";
		filter();
	}

	function mm_changeItemProperty(menuName, itemName, codeRef, newValue, updateDisplay) {
		menuName = menuName.toLowerCase();
		for (i=0; i<_mi.length; i++) {
			if (_mi[i]) {
				if (_mi[i][1].replace(/\ \;/ig,' ') == itemName) {
					if(_m[_mi[i][0]][1] == menuName) {break;}
				}
			}
		}
		if (i == _mi.length) { return; }
		_mi[i][codeRef] = newValue;
		if (updateDisplay) { BDMenu(_mi[i][0]); }
	}

	function changeRole(role) {
		var roles = new Array('renter', 'owner', 'landlord', 'investor');
		roles['renter'] = { 'apa':1, 'apa_by_room_all':1, 'apa_by_room_1':1, 'apa_by_room_2':1, 'apa_by_room_3':1,'apa_by_room_4':1, 'apa_by_room_short_all':1, 'apa_by_room_long_all':1, 'best_apa_by_room_all':1, 'apa_by_room_short_1':1, 'apa_by_room_long_1':1, 'best_apa_by_room_1':1, 'apa_by_room_short_2':1, 'apa_by_room_long_2':1, 'best_apa_by_room_2':1, 'apa_by_room_short_3':1, 'apa_by_room_long_3':1, 'best_apa_by_room_3':1, 'apa_by_room_short_4':1, 'apa_by_room_long_4':1, 'best_apa_by_room_4':1, 'roo':1, 'roo_short':1, 'roo_all':1, 'best_roo':1, 'areabasic':1, 'population_by_zip':1, 'crime_by_zip':1, 'income_by_zip':1, 'areapremium':1, 'apa_average_price':1, 'apa_average_price_1':1, 'apa_average_price_2':1, 'apa_average_price_3':1, 'apa_average_price_4':1, 'apa_average_price_all':1, 'apa_units_per_zip':1, 'apa_vs_roo':1, 'apa_growth':1 };
		roles['owner'] = { 'rfs':1, 'rfs_all':1, 'rfs_price_per_foot':1, 'gross_rent_multiplier':1, 'best_rfs':1, 'areabasic':1, 'population_by_zip':1, 'crime_by_zip':1, 'income_by_zip':1, 'areapremium':1, 'rfs_average_price':1, 'apa_vs_rfs':1, 'apa_vs_rfs_by_room_1':1, 'apa_vs_rfs_by_room_2':1, 'apa_vs_rfs_by_room_3':1, 'apa_vs_rfs_by_room_4':1, 'apa_vs_rfs_by_room_all':1, 'appreciation':1, 'rfs_growth':1};
		roles['landlord'] = { 'apa':1, 'apa_by_room_all':1, 'apa_by_room_1':1, 'apa_by_room_2':1, 'apa_by_room_3':1,'apa_by_room_4':1, 'apa_by_room_short_all':1, 'apa_by_room_long_all':1, 'best_apa_by_room_all':1, 'apa_by_room_short_1':1, 'apa_by_room_long_1':1, 'best_apa_by_room_1':1, 'apa_by_room_short_2':1, 'apa_by_room_long_2':1, 'best_apa_by_room_2':1, 'apa_by_room_short_3':1, 'apa_by_room_long_3':1, 'best_apa_by_room_3':1, 'apa_by_room_short_4':1, 'apa_by_room_long_4':1, 'best_apa_by_room_4':1, 'roo':1, 'roo_short':1, 'roo_all':1, 'best_roo':1, 'rfs':1, 'gross_rent_multiplier':1, 'areabasic':1, 'population_by_zip':1, 'crime_by_zip':1, 'income_by_zip':1, 'areapremium':1, 'apa_average_price':1, 'apa_average_price_1':1, 'apa_average_price_2':1, 'apa_average_price_3':1, 'apa_average_price_4':1, 'apa_average_price_all':1, 'apa_units_per_zip':1, 'apa_vs_rfs':1, 'apa_vs_rfs_by_room_1':1, 'apa_vs_rfs_by_room_2':1, 'apa_vs_rfs_by_room_3':1, 'apa_vs_rfs_by_room_4':1, 'apa_vs_rfs_by_room_all':1, 'apa_vs_roo':1, 'apa_growth':1, 'vacancy_by_zip':1, 'vacancy_growth':1 };
		roles['investor'] = { 'rfs':1, 'rfs_all':1, 'rfs_price_per_foot':1, 'gross_rent_multiplier':1, 'best_rfs':1, 'areabasic':1, 'population_by_zip':1, 'crime_by_zip':1, 'income_by_zip':1, 'areapremium':1, 'apa_average_price':1, 'apa_average_price_1':1, 'apa_average_price_2':1, 'apa_average_price_3':1, 'apa_average_price_4':1, 'apa_average_price_all':1, 'rfs_average_price':1, 'apa_units_per_zip':1, 'apa_vs_rfs':1, 'apa_vs_rfs_by_room_1':1, 'apa_vs_rfs_by_room_2':1, 'apa_vs_rfs_by_room_3':1, 'apa_vs_rfs_by_room_4':1, 'apa_vs_rfs_by_room_all':1, 'apa_vs_roo':1, 'appreciation':1, 'rfs_growth':1, 'apa_growth':1, 'vacancy_by_zip':1, 'vacancy_growth':1 };
		//var items = mm_getChildItems('AreaReports').concat(mm_getChildItems('UnitReports'));
		var menus = mm_getChildMenus('AreaReports').concat(mm_getChildMenus('UnitReports'));
		var bg = 'images/area_menu_bg.gif';
		var listings = [mm_getChildItems('AreaReports'),  mm_getChildItems('UnitReports')];
		for (var y in [0,1]) {
			var items = listings[y];
			for (var i in items) {
				var x = items[i];
				if (role != 'none' && (typeof _mi[x][103] == 'undefined' || typeof roles[role][_mi[x][103]] == 'undefined')) { 
					_mi[x][24] = _mi[x][24].replace(/.gif/, '-dull.gif');
					_mi[x][46] = 'images/menu_bg_dull.gif';
					_mi[x][8] = '#cfd2d8';
				} else {
					_mi[x][24] = _mi[x][24].replace(/-dull/,'');
					_mi[x][46] = bg;
					_mi[x][8] = '#525d6c';
				}
			}
			bg = 'images/listings_menu_bg.gif';
		}
		for (var x in menus) { BDMenu(menus[x]); }

		_mi[_m[getMenuByName('Role')][0][0]][1] = _mi[_itemRef][1];
		BDMenu(getMenuByName('Role'));
	}

	function forceReport() {
		if (! areaReportStatus) {
			areaReportStatus = 1;
			changeAreaReport(currentAreaReport, 1);
		}
		if (! unitReportStatus) {
			unitReportStatus = 1;
			changeUnitReport(currentUnitReport, 1);
		}
	}

	function progbar(prog) {
		document.getElementById('progbar').style.width = parseInt(document.getElementById('progbar').style.width) + 30  + 'px';
		//var currDate = new Date();
		//timetest += ' '+prog+':'+(currDate - lastdate);
		//GLog.write(prog + ' ' +parseInt(document.getElementById('progbar').style.width) + ' ' + (currDate - lastdate));
		//lastdate = currDate;
	}

	function updatelink() {
		var report = "";
		if (unitReportStatus) { report = currentUnitReport;} 
		else if (areaReportStatus) { report = currentAreaReport; }
		var center = gmap.getCenter();
		var zoom = gmap.getZoom();
		if (center) {
			var url = "index.php?city="+currentCity+"&report="+report+"&centerlat="+center.lat()+"&centerlong="+center.lng()+"&zoom="+zoom;
			document.getElementById('pagelink').setAttribute('href', url);
		}
	}



