var markerAmount = 100; // amount of markers to show on the map at once.
var point;
var defaultAddress = "kansas city mo 64114";
var map = null;
var markerManager = null;
var geocoder = null;
var view = null;

function clearMap() {
    markerManager.clearMarkers();
    map.clearOverlays();
}

function getLatLong(){
	var address = document.getElementById("address");
	var lat = document.getElementById("lat");
	var lng = document.getElementById("lng");
	var form = document.getElementById("solution-provider-form");
	geocoder = new GClientGeocoder();
    geocoder.getLatLng(
        address.value,
        function(gLatLang){
            if (!gLatLang){
                writeAddressError(address.value + " not found");
            }
            else {
            	point = gLatLang;
            	lat.value = gLatLang.lat();
            	lng.value = gLatLang.lng();
            	form.submit();
            }
        }
    );
}

function addStarsOverlay() {
    parseJson(starsData);
}

function addAerialOverlay() {
    parseJson(aerialData);
}

function addConsultantOverlay() {
    parseJson(consultantData);
}

function parseJson(closestMarkers) {
    var markers = [];
    var marker;
    for (var i = 0; i < closestMarkers.length; i++) 
    {
    	marker = createMarker(closestMarkers[i]);
    	if(marker != null){
    		markers.push(marker);
    	}
    }
    markerManager.addMarkers(markers,0); // more efficient than calling addMarker() multiple times.
    markerManager.refresh();
}

function createMarker(input) {
	var marker = null;
	if(input.latitude && input.longitude){
	    var p = new GLatLng(input.latitude, input.longitude);
	    marker = new GMarker(p);
	    GEvent.addListener(marker, "click", function() 
	    {
	        marker.openInfoWindowHtml(formatWindow(input));
	    });
	}
    return marker;
}

function makeIcon(image) {
    var icon = new GIcon();
    icon.image = image;
    icon.shadow = "/images/shadow.png";
    icon.iconSize = new GSize(16, 16);
    icon.shadowSize = new GSize(24, 16);
    icon.iconAnchor = new GPoint(8, 16);
    icon.infoShadowAnchor = new GPoint(0, 0);
    icon.infoWindowAnchor = new GPoint(8, 1);
    return icon;
}

function formatWindow(input) {
    var html = "<div class=\"bubble\">";
    html += "<h1>" + input.accountName + "</h1>";
    html += input.address1 + "<br/>";
    if (input.address2 != "") {
        html += input.address2 + "<br/>";
    }
    html += input.city + ",<br/>";
    html += input.state.abbr + "<br/>";
    html += input.postalCode + "<br/>";
    html += "Phone: " + input.phone + "<br/>";
    html += "</div>";
    return html;
}

/**    Initialize the Google Map.
 Call this method from the Body's ONLOAD event handler.
 */
function init()
{
    var address = document.getElementById('solution-provider-form').address.value;
    showAddress(address);
}

function createMap() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        var customUI = map.getDefaultUI();
        customUI.controls.maptypecontrol = false;
        map.setUI(customUI);
        geocoder = new GClientGeocoder();        
    }
}

function addOverlay(p) 
{
	this.point = p;
    if (view == 'aerial') {
        aerial();
    }
    else if (view == 'consultant') {
        consultant();
    }
    else {
        star();
    }
}

function star() {
    try {
        if (GBrowserIsCompatible()) {
            clearMap();
            showLoading();
            addStarsOverlay();
            tabs('1', '1');
            // add star logo
            var logo = new GScreenOverlay("/images/star-logo.gif",
                    new GScreenPoint(820, 370),
                    new GScreenPoint(0, 0),
                    new GScreenSize(0, 0));
            map.addOverlay(logo);
            map.setZoom(8);
        }
    } catch(err) {
        alert("star:" + err);
    }
    hideLoading();
}

function aerial() {
    try {
        if (GBrowserIsCompatible()) {
            clearMap();
            showLoading();
            addAerialOverlay();
            tabs('1', '2');
            map.setZoom(7);
        }
    } catch(err) {
        alert("aerial: " + err);
    }
    hideLoading();
}

function consultant() {
    try {
        if (GBrowserIsCompatible()) {
            clearMap();
            addConsultantOverlay();
            tabs('1', '3');
            map.setZoom(7);
        }
    } catch(err) {
        alert("consultant: " + err);
    }
    hideLoading();
}

function showAddress(address) {
    if (GBrowserIsCompatible()) {
    	if(geocoder == null){
    		geocoder = new GClientGeocoder();
    	}
        geocoder.getLatLng(
            address,
            function(geoLatLang){
                if (!geoLatLang){
                    alert(address + " not found");
                }
                else{
                    if (!map){
                        createMap();
                    }
                    map.setCenter(geoLatLang, 8);
                    markerManager = new MarkerManager(map);
                    addOverlay(geoLatLang);
                }
            }
        );
    }
}

function writeAddressError(error)
{
	var addressError = document.getElementById("solutionProviderAddressError");
	addressError.innerHTML = error;
}

function showLoading()
{
    var loading = document.getElementById("loading");
    var loadingImage = document.getElementById("loadingImage");
    loading.style.display = "block";
    loadingImage.style.display = "block";
    loadingImage.innerHTML = "<img src='/images/loading.gif' style='padding-top:150px;'/>";
}

function hideLoading()
{
    var loading = document.getElementById("loading");
    var loadingImage = document.getElementById("loadingImage");
    loading.style.display = "none";
    loadingImage.style.display = "none";
}
