var map = null;
    var geocoder = null;
// Map controls
var gSmallZoomControl;
var markers     = new Array();
var copyrightTimer = null;
var makerTimer = null;
var bounds = null;
var bizLinks = new Array();
var tooltip = null;
//Add marker to google map
function addMarker(latitude, longitude, bizName, streetAddr, otherAddrInfo, suburbAddr, stateAddr, postalCode, iconNumber) {
	var point = new GLatLng(latitude, longitude);
	var icon = getMarkerIcon(iconNumber, true);
	function getZIndex(marker, b) {	
		return GOverlay.getZIndex(marker.getPoint().lat());
	}
	var marker = new GMarker(point, {icon: icon, zIndexProcess:getZIndex});
	markers[iconNumber] = marker;
	marker.tooltip = getTooltip(bizName, streetAddr, otherAddrInfo, suburbAddr, stateAddr, postalCode, iconNumber);
	//marker "click" event listener
	GEvent.addListener(marker, "click", function() {        
	if(	bizLinks[iconNumber] !=null && bizLinks[iconNumber].length>0) {
		location.href = bizLinks[iconNumber];
	}
});
//marker "mouseover" and "mouseout" listeners  ======
	GEvent.addListener(marker,"mouseover", function() {
	changeIcon(marker, iconNumber, true);
	showTooltip(marker);
	redrawMarker(marker, GOverlay.getZIndex(marker.getPoint().lat()) + 50000);
});        
	GEvent.addListener(marker,"mouseout", function() {
	changeIcon(marker, iconNumber, false);
	tooltip.style.visibility="hidden"	
	redrawMarker(marker, GOverlay.getZIndex(marker.getPoint().lat()));	
});
	map.addOverlay(marker);
	bounds.extend(point);
//map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
    }
    
    //Redraws a marker with changed zIndex.
    function redrawMarker(marker, zIndex) {
var imagesArray = findImagesArray(marker);
marker[imagesArray][0].style.zIndex = zIndex;
marker.redraw(true);
    }
    function findImagesArray(marker) {
for (var i in marker)
{
if (eval("typeof marker." + i) == "object")
{
try {
if (eval("typeof marker." + i + "[0].src") != "undefined")
{
return i;
}
}
catch (e) {}
}
}
return '';
}
// Gets a marker loading on demand
function getMarkerIcon(iconNumber, blackIcons) {
var iconFilePrefix;
var mapPinDir = webRoot+'/images';//"http://glocity.net/rayv/images"
if(blackIcons) {
iconFilePrefix = mapPinDir + "/bubble/bubble";
}else {
iconFilePrefix = mapPinDir + "/bubble_orange/bubble_orange_";
}
// if no iconNumber we want star icon
var newIcon = new GIcon();
newIcon.image = iconFilePrefix + iconNumber + ".png";
newIcon.iconSize = new GSize(26, 35);
newIcon.shadow = mapPinDir + "/Bubble-Shadow.png";
newIcon.shadowSize = new GSize(46, 35);
newIcon.iconAnchor = new GPoint(13, 32);
newIcon.infoWindowAnchor = new GPoint(12, 4);
newIcon.printImage = iconFilePrefix + iconNumber + ".gif";
newIcon.mozPrintImage = iconFilePrefix + iconNumber + ".gif";
return newIcon;
}
function setBoundsCenter(markersListSize) {
//alert(markers.length);
if(markers.length >= markersListSize) {
window.clearInterval(makerTimer);
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
for(var i=1; i<markers.length; i++) {
if(markers[i]!=null) {
map.addOverlay(markers[i]);
}
}
}
}
function setMarkerCenter(marker) {
map.setCenter(marker.getPoint(), map.getZoom());
    }
// ====== This function displays the tooltip ======
// it can be called from an icon mousover or a side_bar mouseover
function showTooltip(marker) {
tooltip.innerHTML = marker.tooltip;
var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(), map.getZoom());
var point2 = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getNorthEast(), map.getZoom());
var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
var anchor=marker.getIcon().iconAnchor;
var width=marker.getIcon().iconSize.width;
var pos = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize( point2.x - offset.x , - offset.y + point.y +anchor.y)); 
pos.apply(tooltip);
tooltip.style.visibility="visible";
}
//Changes marker icon.
function changeIcon(marker, iconNumber, highlight) {
var iconFilePrefix;
var mapPinDir = webRoot+"/images";//"http://glocity.net/rayv/images";
if(highlight) {
iconFilePrefix = mapPinDir + "/bubble_orange/bubble_orange_";
iconFilePrefix = iconFilePrefix + iconNumber + ".png";
} else {
iconFilePrefix = mapPinDir + "/bubble/bubble";
iconFilePrefix = iconFilePrefix + iconNumber + ".png";
}
marker.setImage(iconFilePrefix);
}
//changes marker icon for DOM event.
function changeIconForDOMEvent(iconNumber, highlight) {
if(markers[iconNumber]!=null && iconNumber!='0') {
changeIcon(markers[iconNumber], iconNumber, highlight);
}
}
function raiseMouseOverGEvent(iconNumber) {
if(markers[iconNumber]!=null) {
                        setMarkerCenter(markers[iconNumber]);
GEvent.trigger(markers[iconNumber],  "mouseover");
}
}
function raiseMouseOutGEvent(iconNumber) {
if(markers[iconNumber]!=null) {
GEvent.trigger(markers[iconNumber], "mouseout");
}
}
function getEmptyIfNull(element) {
if(element==null || element=='null' || element=='undefined') {
return '';
}else {
return element;
}
}
//Gets Tooltip.
function getTooltip(bizName, streetAddr, otherAddrInfo, suburbAddr, stateAddr, postalCode, iconNumber) {
	bizName = getEmptyIfNull(bizName);
	streetAddr = getEmptyIfNull(streetAddr);
	suburbAddr = getEmptyIfNull(suburbAddr);
	stateAddr  = getEmptyIfNull(stateAddr);
	postalCode = getEmptyIfNull(postalCode);
	var html = "<div class=\"markerRolloverStyle\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"mainBodyCopy2Bold\">" + bizName + "</td></tr><tr><td height=\"7\"></td></tr>";
	if(streetAddr!=null && streetAddr.length >0) {					
		html = html + "<tr><td class=\"specificBodyCopy1Normal\">" + streetAddr + "</td></tr>";
	}
	if(otherAddrInfo!=null && otherAddrInfo.length>0) {
		html = html + "<tr><td class=\"specificBodyCopy1Normal\">" + otherAddrInfo + "</td></tr>";
	}
	if(suburbAddr!=null || stateAddr!=null || postalCode!=null) {
		html = html + "<tr><td class=\"specificBodyCopy1Normal\">" + suburbAddr + "&nbsp;&nbsp;" + stateAddr + "&nbsp;&nbsp;" + postalCode +  "</td></tr>"; 
	}
	html = html + "</table></div>";
	return html;
}
//Shows marker triggered.
function showMarker(bubbleId) {
if(markers[bubbleId]!=null) {
GEvent.trigger(markers[bubbleId],  "click"); 
}
}
//Makes copyright font smaller
function makeCopyrightSmaller() {
if (map.isLoaded()) 
{
for(var i = 0; i < map.getContainer().childNodes.length; ++i) {
if(map.getContainer().childNodes[i].innerHTML.indexOf(String.fromCharCode(169)) !== -1){
map.getContainer().childNodes[i].style.fontSize = '9px';
window.clearInterval(copyrightTimer);
break;
}
}
}
}
