function initialize() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(38.6, -98), 4);
        var customUI = map.getDefaultUI();
        customUI.controls.maptypecontrol = false;
        map.setUI(customUI);
        geocoder = new GClientGeocoder();
    }
}

function addEventsOverlay() {
    GDownloadUrl('/json/events.html', function(data, responseCode) {
        parseJson(data);
    });
}

function addDealersOverlay(address) {
    GDownloadUrl('/json/dealers.html?address='+address, function(data, responseCod) {
        parseDealerJson(data);
    });
}

function formatWindow(input) {
    var html = "<div class=\"bubble\">";
    if(input.customerName.trim().length>0)
    	html += "<h1>" + input.customerName + "</h1>";
    if(input.tradeShowName.trim().length>0)
    	html += "<b>"+input.tradeShowName + "</b><br/>";
    if(input.tradeShowLink.trim().length>0)
    	html += "<a href=\""+input.tradeShowLink+"\" target=\"_blank\">" + input.tradeShowLink + "</a><br/>";
    html += "<br/>";
    if(input.eventType.trim().length>0)
    	html += "Event Type: "+input.eventType + "<br/>";
    html += "Date: " + input.beginDate + "<br/>";
    html += "Start Time: " + input.beginTime + "<br/>";
    html += "End Time: " + input.endTime + "<br/>";
    html += "</div>";
    return html;
}

function formatWindow2(input) {
    var html = "<div class=\"bubble\">";
    if(input.customerName.trim().length>0)
    	html += "<h1>" + input.customerName + "</h1>";
    if(input.tradeShowName.trim().length>0)
    	html += "<b>"+input.tradeShowName + "</b><br/>";
    html += "<br/>";
    html += "Location: " + input.location + "<br/>";
    html += "City: " + input.city + "<br/>";
    html += "State: " + input.state + "<br/>";
    html += "Zip: " + input.zip + "<br/>";
    html += "</div>";
    return html;
}

function formatDealerWindow(input) {
    var html = "<div class=\"bubble\">";
    html += "<h1>" + input.name + "</h1>";
    html += input.street1 + "<br/>";
    html += input.street2 + "<br/>";
    html += input.city + "<br/>";
    html += input.state + "<br/>";
    html += input.postal + "<br/>";
    html += input.phone + "<br/>";
    if(input.website != "#"){
        html += "<a href=\"http://" + input.website + "\">" + input.name + "</a><br/>";
    }
    html += "</div>";
    return html;
}

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 createMarker(input) {
    var point = new GLatLng(input.latitude, input.longitude);
    var marker = new GMarker(point, makeIcon(input.markerImage));
    var tabs_array = [ new GInfoWindowTab("Date/Time", formatWindow(input)),
        new GInfoWindowTab("Location", formatWindow2(input)) ];
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowTabsHtml(tabs_array);
    });
    return marker;
}

function createDealerMarker(input) {
    var point = new GLatLng(input.latitude, input.longitude);
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(formatDealerWindow(input));
    });
    return marker;
}

function parseJson(doc) {
    var jsonData = eval("(" + doc + ")");
    for (var i = 0; i < jsonData.markers.length; i++) {
        var marker = createMarker(jsonData.markers[i]);
        map.addOverlay(marker);
    }
}

function parseDealerJson(doc) {
    var jsonData = eval("(" + doc + ")");
    for (var i = 0; i < jsonData.markers.length; i++) {
        var marker = createDealerMarker(jsonData.markers[i]);
        map.addOverlay(marker);
    }
}

function clearMap() {
    map.clearOverlays();
    polyPoints = [];
}

function showAddress(address) {

    if (geocoder) {
        geocoder.getLatLng(address,
                function(point) {

                    if (!point) {
                        alert(address + " not found");
                    } else {
                        //clearMap();
                        map.setCenter(point, 8);
                    }
                }
                );
    }
}

function showDealerAddress(address) {

    if (geocoder) {
        geocoder.getLatLng(address,
                function(point) {

                    if (!point) {
                        alert(address + " not found");
                    } else {
                        clearMap();
                        map.setCenter(point, 5);
                        addDealersOverlay(address);
                    }
                }
                );
    }
}


