// get all building overlays on the current map and show them
function showBuildings(){

	//hideBuildings();
	var bounds = map.getBounds();
	building_overlays = getBuildingOverlays(bounds);
}

// get all building overlays on the current map and show them
function showBuildingCount(cnt){
	if(typeof(cnt) == null || cnt == null){
		hideMessage();
	}
	else{
		//funky concat because my editor syntax highlighting can't deal otherwise
		msg = "There are <strong>"+ cnt + " buildings<"+"/strong> in the current view.";
		if(cnt > 0)
			msg += " Please zoom in to see more specific details."
		showMessage(msg);
	}
}

// remove all building overlays on the current map
function hideBuildings(){

	if(building_overlays.length){
		var i;
		for(i=0; i< building_overlays.length; i++){
			map.removeOverlay(building_overlays[i]);
		}
	}
	building_overlays.length=0;
	hideMessage();
}

// remove all user generate overlays on the current map
function clearCircuits(){

	if(user_overlays.length){
		var i;
		for(i=0; i< user_overlays.length; i++){
			map.removeOverlay(user_overlays[i]);
		}
	}
	user_overlays.length=0;
}

// user message
function showMessage(msg){
	document.getElementById("message_div").className = 'visible_div';
	document.getElementById("message_div_text").innerHTML = msg;
}

function hideMessage(){
	document.getElementById("message_div").className = 'hidden_div';
	document.getElementById("message_div_text").innerHTML = '';
}

function showLoading(){
	showMessage('Loading...');
}

function hideLoading(){
	hideMessage();
}

function ShowHideSiteInfo(site_id){
	var link_div = document.getElementById('sitelink'+site_id);
	var showing = ShowHide('siteinfo'+site_id);
	if(showing){
		link_div.style.backgroundImage = "url('images/icons/toggle_opened.png')";
	}
	else{
		link_div.style.backgroundImage = "url('images/icons/toggle_closed.png')";
	}
}

function hideControls(){

	//get current map center
	var pt = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getCenter(),map.getZoom());

	//hide left arrows
	var left_arrows = document.getElementById('left_arrows');
	left_arrows.style.display = 'none';

	//show right arrows
	var right_arrows = document.getElementById('right_arrows');
	right_arrows.style.display = 'block';
	
	//shrink left bar
	var sizing_bar_left = document.getElementById('sizing_bar_left');
	sizing_bar_left.style.width = '30px';
	
	//expand map container and map
	var map_div_outer = document.getElementById('map_div_outer');
	map_div_outer.style.left = '0px';
	map_div_outer.style.width = '1000px';

	var map_div = document.getElementById('map_div');
	map_div.style.width = '1000px';

	//move message box
	var message_div = document.getElementById('message_div');
	message_div.style.left = '350px';
	
	//re-map to prevent map shift
	var newpt = new GPoint(pt.x - Math.floor(175),pt.y);
	var newCenter = map.getCurrentMapType().getProjection().fromPixelToLatLng(newpt,map.getZoom());
	map.checkResize();
	map.setCenter(newCenter);

	//hide controls
	var info_div = document.getElementById('info_div_outer');
	info_div.className = 'hidden_div';

}

function showControls(){

	//get current map center
	var pt = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getCenter(),map.getZoom());

	//show left arrows
	var left_arrows = document.getElementById('left_arrows');
	left_arrows.style.display = 'block';

	//hide right arrows
	var right_arrows = document.getElementById('right_arrows');
	right_arrows.style.display = 'none';
	
	//expand left bar
	var sizing_bar_left = document.getElementById('sizing_bar_left');
	sizing_bar_left.style.width = '380px';

	//shrink map container and map
	var map_div_outer = document.getElementById('map_div_outer');
	map_div_outer.style.left = '350px';
	map_div_outer.style.width = '650px';

	var map_div = document.getElementById('map_div');
	map_div.style.width = '650px';

	//move message box
	var message_div = document.getElementById('message_div');
	message_div.style.left = '525px';
	
	//re-map to prevent map shift
	var newpt = new GPoint(pt.x + Math.floor(175),pt.y);
	var newCenter = map.getCurrentMapType().getProjection().fromPixelToLatLng(newpt,map.getZoom());
	map.checkResize();
	map.setCenter(newCenter);

	//show controls
	var info_div = document.getElementById('info_div_outer');
	info_div.className = 'visible_div';

}

function clearAddress(field) {

	if (field == 'loc_a_address') {
		var street = document.getElementById('loc_a_street_search').value = '';
		var city = document.getElementById('loc_a_city_search').value = '';
		var state = document.getElementById('loc_a_state_search').value = '';
		var select_div = document.getElementById('loc_a_select_div');
	} else if (field == 'loc_z_address') {
		var street = document.getElementById('loc_z_street_search').value = '';
		var city = document.getElementById('loc_z_city_search').value = '';
		var state = document.getElementById('loc_z_state_search').value = '';
		var select_div = document.getElementById('loc_z_select_div');
	} else {
		alert('FIX THIS');
	}

	//clear previous select if any
	select_div.className = 'hidden_div';

}

function addUserOverlay(overlay){
	map.addOverlay(overlay);
	user_overlays[user_overlays.length] = overlay;
}

function addBuildingOverlay(overlay){
	map.addOverlay(overlay);
	building_overlays[building_overlays.length] = overlay;
}

function mapCircuit(){
	
	var loc_a_street = document.getElementById('loc_a_street_search').value;
	var loc_a_city = document.getElementById('loc_a_city_search').value;
	var loc_a_state = document.getElementById('loc_a_state_search').value;
	
	var loc_z_street = document.getElementById('loc_z_street_search').value;
	var loc_z_city = document.getElementById('loc_z_city_search').value;
	var loc_z_state = document.getElementById('loc_z_state_search').value;
	
	if (loc_a_street.length == 0 || loc_a_city.length == 0 || loc_a_state.length == 0) {
		alert('Location A address needed in order to map circuit');
	} else if (loc_z_street.length == 0 || loc_z_city.length == 0 || loc_z_state.length == 0) {
		alert('Location Z address needed in order to map circuit');
	} else {
		
		document.getElementById("num_geocoded").value = 0;		
		labelEndpoint(loc_a_street, loc_a_city, loc_a_state, 0, false);
		labelEndpoint(loc_z_street, loc_z_city, loc_z_state, 1, false);
	}
	
}

function labelEndpoint(street, city, state, index, maponly) {
	//var address = street+' '+city+', '+state;
	var address = createAddress(street, city, state);
	var geocoder = new GClientGeocoder;
	var building_id;
	geocoder.getLatLng(address, function(point) {
		if (point) {
			if (index == 0) {
				building_id = document.getElementById('loc_a_building_id').value;
				if (building_id > 0) {
					var marker = new GMarker(point,{icon:loc_a_red_icon});
				} else {
					var marker = new GMarker(point,{icon:loc_a_icon});
				}
			} else {
				building_id = document.getElementById('loc_z_building_id').value;
				if (building_id > 0) {
					var marker = new GMarker(point,{icon:loc_z_red_icon});
				} else {
					var marker = new GMarker(point,{icon:loc_z_icon});
				}
			}			
			addUserOverlay(marker);
			GEvent.addListener(marker,'click',function(para)
				{makeBuildingInfo(para, building_id, address)});
		}
		
		if (! maponly) {
			endpoints[index] = point;
			document.getElementById("num_geocoded").value++;
			drawCircuit();
		} else {
			var centerPoint = new Array(point);
			centerMap(centerPoint);
		}
	});
}

function makeBuildingInfo(para, building_id, address) {

	var html_str;
	var details_link;
	if (building_id != null && building_id != 0) {
		$req_str = "xml/getBuildingsXML.php?a=site_data&b_id="+building_id;
		var sellers = new Array();
		var request = GXmlHttp.create();
		request.open("GET", $req_str, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML.documentElement;
				var sites = xmlDoc.getElementsByTagName("site");
				var num_sellers;
				var this_seller;
				for (var i = 0; i < sites.length; i++) {
					num_sellers = sellers.length;
					this_seller = sites[i].getAttribute("seller_name");
					var found = false;
					var j = 0;
					while (!found && j <= num_sellers) {
						if (sellers[j] == this_seller) found = true;
						j++;
					}
					if (!found) {
						sellers[num_sellers] = this_seller;
					}
				}
				sellers.sort();
				num_sellers = sellers.length;
				var info_width;
				var tiny;
				if (premium && num_sellers > 20) {
					html_str = '<span class="tiny_info_text">On-net building at '+address;
					info_width = 250;
					tiny = true;
				} else {
					html_str = '<span class="info_text">On-net building at '+address;
					info_width = 200;
					tiny = false;
				}
				if (num_sellers == 1) {
					html_str += " with " + "1 competitive telecom supplier";
				} else {
					html_str += " with " + num_sellers + " competitive telecom suppliers";
				}
				if (premium) {
					html_str += ' (</span>';
					if (branded) {
						details_link = see_details_link+'</span>';
						//details_link = see_details_link+'?address='+escape(address)+'</span>';
					} else {
						details_link = '<a href="../checkcredits.php?building_id=' + building_id + '" title="See Details" target="_blank">see details</a></span>';
					}
				
					if (tiny) {
						html_str += '<span class="tiny_info_text_light">';
						html_str += details_link;
						html_str += '<span class="tiny_info_text">)';
					} else {
						html_str += '<span class="info_text_light">';
						html_str += details_link;
						html_str += '<span class="info_text">)';
					}
				}
				html_str += '</span>';
				map.openInfoWindowHtml(para, html_str, {maxWidth:info_width});
			}
		}
		request.send(null);
	} else {
		html_str = '<span class="info_text">Off-net building at<br/>'+address+'</span>';
		map.openInfoWindowHtml(para, html_str);
	}
	
}

function drawCircuit() {
	var num_geocoded = document.getElementById("num_geocoded").value;
	var color;
	var loc_a_text;
	var loc_z_text;
	if (num_geocoded == 2) {
		if (endpoints[0] && endpoints[1]) {
			var mileage = endpoints[0].distanceFrom(endpoints[1]) * miles_per_meter;
			var loc_a_building_id = document.getElementById('loc_a_building_id').value;
			var loc_z_building_id = document.getElementById('loc_z_building_id').value;
			if (loc_a_building_id == 0) {
				loc_a_text = 'off-net';
				if (loc_z_building_id == 0)	{
					loc_z_text = 'off-net';
					color = "#00ff00";	//off net is green
				} else {
					loc_z_text = 'on-net';
					//color = "#ffa500";	//partly on net is orange
					color = "#ff7700";	//partly on net is orange
				}
			} else {
				loc_a_text = 'on-net';
				if (loc_z_building_id == 0)	{
					loc_z_text = 'off-net';
					//color = "#ffa500";	//partly on net is orange
					color = "#ff7700";	//partly on net is orange
				} else {
					loc_z_text = 'on-net';
					color = "#ff0000";	//on net is red
				}
			}
			var poly = new GPolyline(endpoints, color, 4, 1);
			addUserOverlay(poly);
			var html_text = '<span class="info_text">'+loc_a_text+' to '+loc_z_text;
			html_text += ' circuit is '+Math.round(mileage)+' miles</span>';
			GEvent.addListener(poly,'click',function(para)
				{map.openInfoWindowHtml(para,html_text)});
			centerMap(endpoints);
		}
	}
}

function mapAddress(field) {

	if (field == 'loc_a_address') {
		var street = document.getElementById('loc_a_street_search').value;
		var city = document.getElementById('loc_a_city_search').value;
		var state = document.getElementById('loc_a_state_search').value;
		labelEndpoint(street, city, state, 0, true);
	} else {
		var street = document.getElementById('loc_z_street_search').value;
		var city = document.getElementById('loc_z_city_search').value;
		var state = document.getElementById('loc_z_state_search').value;
		labelEndpoint(street, city, state, 1, true);
	}
	
}

function searchDB(field) {
	
	//get trimmed fields
	if (field == 'loc_a_address') {
		var street = document.getElementById('loc_a_street_search').value.replace(/^\s+|\s+$/g,"");
		var city = document.getElementById('loc_a_city_search').value.replace(/^\s+|\s+$/g,"");
		var state = document.getElementById('loc_a_state_search').value;
		var select_div = document.getElementById('loc_a_select_div');
	} else if (field == 'loc_z_address') {
		var street = document.getElementById('loc_z_street_search').value.replace(/^\s+|\s+$/g,"");
		var city = document.getElementById('loc_z_city_search').value.replace(/^\s+|\s+$/g,"");
		var state = document.getElementById('loc_z_state_search').value;
		var select_div = document.getElementById('loc_z_select_div');
	} else {
		alert('FIX THIS');
	}

	//clear previous select if any
	select_div.className = 'hidden_div';
	
	//check for blank address
	if (street.length == 0 && city.length == 0 && state.length == 0) {
		alert('Enter partial address information and click on Search Database button');
	} else {
	
		//send server request to get matching buildings
		$req_str = "xml/getBuildingsXML.php?a=bldg_search&street="+street+"&city="+city+"&state="+state;
		var request = GXmlHttp.create();
		request.open("GET", $req_str, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				updateBuildingSelectHTML(xmlDoc.documentElement, field);
			}
		}
		request.send(null);
	}
}

//check to see if address is a lit building
function checkAddress(address) {

	//determine if location A or location Z has changed
	if (address == 'loc_a_address') {
		var street = document.getElementById('loc_a_street_search').value;
		var city = document.getElementById('loc_a_city_search').value;
		var state = document.getElementById('loc_a_state_search').value;
		var lit_field = 'loc_a_building_id';
	} else if (address == 'loc_z_address') {
		var street = document.getElementById('loc_z_street_search').value;
		var city = document.getElementById('loc_z_city_search').value;
		var state = document.getElementById('loc_z_state_search').value;
		var lit_field = 'loc_z_building_id';
	} else {
		alert("Unexpected field "+address+" detected... please contact system administrator");		
	}

	//send server request to get matching buildings
	$req_str = "xml/getBuildingsXML.php?a=bldg_search_exact&street="+street+"&city="+city+"&state="+state;
	var request = GXmlHttp.create();
	request.open("GET", $req_str, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {			
			var xmlDoc = request.responseXML;
			var doc = xmlDoc.documentElement;
			var buildings = doc.getElementsByTagName("BuildingKnown");
			if (buildings.length > 0) {
				var building_id = buildings[0].getAttribute("building_id");
				document.getElementById(lit_field).value = building_id;
				//findSuppliers(lit_field);
			} else {
				document.getElementById(lit_field).value = 0;
			}
		}
	}
	request.send(null);

}

function getBuildingOverlays(bounds){

	var overlays = new Array();
	showLoading();
	var sw = bounds.getSouthWest();
	var ne = bounds.getNorthEast();
	req_str = "xml/getBuildingsXML.php?minlat="+sw.lat()+"&maxlat="+ne.lat()+"&minlon="+sw.lng()+"&maxlon="+ne.lng();
	if (premium) req_str += "&premium=1";	//get buildings from all three tables (buildings_known, lso_buildings, user_buildings)
	var request = GXmlHttp.create();
	request.open("GET", req_str, true);
	showDebug(req_str);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var markers = xmlDoc.documentElement.getElementsByTagName("building");
			var lats = "";
			for (var i = 0; i < markers.length; i++) {
				var point = new GPoint(parseFloat(markers[i].getAttribute("longitude")),
									 parseFloat(markers[i].getAttribute("latitude")));
				lats = lats + " " + markers[i].getAttribute("longitude");
				var marker = createMarker(point,markers[i]);
				overlays[overlays.length] = marker;
				addBuildingOverlay(marker);
				if (premium) {
				
					//add user symbol if this is a user defined building
					if (markers[i].getAttribute("user_present") != null) {
						var dollar = createDollar(point,markers[i]);
						overlays[overlays.length] = dollar;
						addBuildingOverlay(dollar);
					}
					
					//add lso symbol if this is an lso building
					if (markers[i].getAttribute("lso_present") != null) {
						var bell = createBell(point,markers[i]);
						overlays[overlays.length] = bell;
						addBuildingOverlay(bell);
					}
					
					//add lit building symbol if this is a lit building
					if (markers[i].getAttribute("bldg_present") != null) {
						var cable = createCable(point,markers[i]);
						overlays[overlays.length] = cable;
						addBuildingOverlay(cable);
					}
				}
			}
			//marketing message
			msg = "Click on a building icon to see the number of competitive carriers in that building";
			showMessage(msg);
		}
	}
	request.send(null);

	return overlays;
}

// Count how many building would appear in the current view
// Under certain conditions (see below), display the buildings
function countBuildings(){

	var bounds = map.getBounds();
	var sw = bounds.getSouthWest();
	var ne = bounds.getNorthEast();
	req_str = "xml/getBuildingsXML.php?a=bldg_count&minlat="+sw.lat()+"&maxlat="+ne.lat()+"&minlon="+sw.lng()+"&maxlon="+ne.lng();
	if (premium) req_str += "&premium=1";	//get count from all three tables (buildings_known, lso_buildings, user_buildings)
	var request = GXmlHttp.create();
	showDebug(req_str);
	request.open("GET", req_str, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var cnt = 0;
			cnt = parseInt(xmlDoc.documentElement.getAttribute("count"));
			hideBuildings();
			// if we are at zoom level 17 or there are less than the allowed limit, show the buildings
			if((map.getZoom() == 17) || (cnt > 0 && cnt <= building_overlays_limit)){
				showBuildings();
			}
			else{
				showBuildingCount(cnt);
			}
		}
	}
	request.send(null);
}

function createMarker(point, markerXML) {

	var icon = CreateBuildingIcon(false);
	var sigmarker = new SigMarker(point,icon,markerXML);
	var gmarker = sigmarker.marker;
	
	// Show this marker's index in the info window when it is clicked
	var x = point.x;
	var y = point.y;
	var building_id = markerXML.getAttribute("building_id");
	var street = markerXML.getAttribute("street_addr");
	var city = markerXML.getAttribute("city");
	var state = markerXML.getAttribute("state");
	//var address = street+' '+city+', '+state;
	var address = createAddress(street, city, state);

	//set up listener to for user click
	GEvent.addListener(gmarker, "click", function(para) {
		HighlighMarker(x,y);
		makeBuildingInfo(para, building_id, address)
	});

	return gmarker;
}

function createAddress(street, city, state) {

	return  street.replace(/^(.)|\s(.)/g, function($1) { return $1.toUpperCase(); })+' '+
			city.replace(/^(.)|\s(.)/g, function($1) { return $1.toUpperCase(); })+', '+
			state;
}

function createDollar(point, markerXML) {

	var icon = CreateDollarIcon();
	var sigmarker = new SigMarker(point,icon,markerXML);
	var gmarker = sigmarker.marker;
	
	return gmarker;
}

function createBell(point, markerXML) {

	var icon = CreateBellIcon();
	var sigmarker = new SigMarker(point,icon,markerXML);
	var gmarker = sigmarker.marker;
	
	return gmarker;
}

function createCable(point, markerXML) {

	var icon = CreateCableIcon();
	var sigmarker = new SigMarker(point,icon,markerXML);
	var gmarker = sigmarker.marker;
	
	return gmarker;
}

//takes a DOM building element and updates building select DOM and displays
function updateBuildingSelectHTML(xmldom, field_id) {

	var buildings = xmldom.getElementsByTagName("building");
	var html = '';
	var select_field;
	var building_id;
	var street_addr;
	var city;
	var state;
	var zip;
	var select_text;
	
	//determine field
	if (field_id == 'loc_a_address') {
		div_field_id = 'loc_a_select_div';
		select_field_id = 'loc_a_select';
	} else if (field_id == 'loc_z_address') {
		div_field_id = 'loc_z_select_div';
		select_field_id = 'loc_z_select';
	} else {
		alert("Unexpected field "+field_id+" detected... please contact system administrator");
	}
	
	//did we get any addresses?
	if (buildings.length > 0) {
	
		//populate select list
		var select_field = document.getElementById(select_field_id);
		select_field.length = 0;
		select_field.options[0] = new Option('Select lit building to populate location', -1);
		select_field.options[0].selected = 'selected';
		for (var i = 0; i < buildings.length; i++) {
			building_id = buildings[i].getAttribute("building_id");
			street_addr = buildings[i].getAttribute("street_addr");
			city = buildings[i].getAttribute("city");
			state = buildings[i].getAttribute("state");
			select_text = street_addr+' '+city+' '+state;
			select_text = select_text.substring(0,35);	//truncate to fit in space
			select_field.options[select_field.length] = new Option(select_text, building_id);
		}
		
		//add warning message
		if (buildings.length > 100) {
			select_text = '>100 buildings found... please refine your search';
			select_field.options[select_field.length] = new Option(select_text, -1);
		}
		
		//display select
		var div_field = document.getElementById(div_field_id);
		div_field.className = 'visible_div';

	} else {
		alert('No lit buildings found... please try again');
	}
}

//populate location components in A or Z address fields
function populateLocation(field) {

	var select_field;
	var div_field_id;
	var street_field;
	var city_field;
	var state_field;
	var lit_field;
	
	//determine whether location A or Z
	if (field == 'loc_a_address') {
		select_field = 'loc_a_select';
		div_field_id = 'loc_a_select_div';
		street_field = 'loc_a_street_search';
		city_field = 'loc_a_city_search';
		state_field = 'loc_a_state_search';
		lit_field = 'loc_a_building_id';
	} else if (field == 'loc_z_address') {
		select_field = 'loc_z_select';
		div_field_id = 'loc_z_select_div';
		street_field = 'loc_z_street_search';
		city_field = 'loc_z_city_search';
		state_field = 'loc_z_state_search';
		lit_field = 'loc_z_building_id';
	} else {
		alert("Unexpected field "+field_id+" detected... please contact system administrator");
	}

	//determine if building is selected
	var building_id = document.getElementById(select_field).value;
	if (building_id >= 0) {

		//send server request to get matching buildings
		$req_str = "xml/getBuildingsXML.php?a=bldg_id&building_id="+building_id;
		var request = GXmlHttp.create();
		request.open("GET", $req_str, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				var doc = xmlDoc.documentElement;
				var buildings = doc.getElementsByTagName("BuildingKnown");
				var street_addr = buildings[0].getAttribute("street_addr");
				document.getElementById(street_field).value = street_addr;
				var city = buildings[0].getAttribute("city");
				document.getElementById(city_field).value = city;
				var state = buildings[0].getAttribute("state");
				document.getElementById(state_field).value = state;
				document.getElementById(lit_field).value = building_id;
				//findSuppliers(lit_field);
			}
		}
		request.send(null);
		
		//hide select
		var div_field = document.getElementById(div_field_id);
		div_field.className = 'hidden_div';
	}
	
}
	
function CreateBuildingIcon(highlight){

	var icon = new GIcon();
	if (highlight) {
		icon = hl_building_icon;
	} else {
		icon = building_icon;
	}
	return icon;
}
 
function CreateDollarIcon(){

	var icon = new GIcon();
	icon = dollar_icon;
	return icon;
}
 
function CreateBellIcon(){

	var icon = new GIcon();
	icon = bell_icon;
	return icon;
}
 
function CreateCableIcon(){

	var icon = new GIcon();
	icon = cable_icon;
	return icon;
}

//recenters map around array of points
function centerMap(points){

	if (points.length > 1) {
		var latlngbounds = new GLatLngBounds();
		for (var i=0; i<points.length; i++) {
			latlngbounds.extend(points[i]);
		}
		map.setCenter(latlngbounds.getCenter(),map.getBoundsZoomLevel(latlngbounds));
	} else if (points.length == 1) {
		map.setCenter(points[0], 16);
	}
}
  
// puts a highlighted version of a marker on the map
// removes the previously highlighted one
function HighlighMarker(x,y) {

	//create a new marker
	var icon = CreateBuildingIcon(true);
	var point = new GPoint(x,y);
	var newmarker = new GMarker(point,icon);

	// add new marker to map
	addBuildingOverlay(newmarker);

	// remove the previous highlighted marker
	// and set the new one to be the current
	if(cur_building_highlight)
		map.removeOverlay(cur_building_highlight);
	cur_building_highlight = newmarker;
}

 
function SigMarker(point,icon){

	this.marker = new GMarker(point,icon);
	this.point = point;
	this.icon = icon;


	function ReplaceIcon(icon) {
	
		old = this.marker;
		this.marker = new GMarker(this.point,icon);
		addBuildingOverlay(this.marker);
		map.removeOverlay(old);
	}
}


function ShowXML(xmlStr){

	document.getElementById("debug_div").innerHTML = xmlStr;
}

function showDebug(msg){
	if(DEBUG && typeof(console) != 'undefined') console.debug(msg);
}
