
var map,mapcenter,mapradius;

function createCrimeMarker(point,html, icon) {
    var marker = new GMarker(point, icon);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function createCityMarker(point,icon,city,longitude,latitude) {
    var marker = new GMarker(point, icon);
    GEvent.addDomListener(marker, "mouseover", function() {
        marker.openInfoWindowHtml('<span style="font-weight: bold; font-size: 14px;">'+city+'</span>');
    });
    GEvent.addDomListener(marker, "mouseout", function() {
        marker.closeInfoWindow();
    });
    GEvent.addListener(marker, "click", function() {
        map.setCenter(new GLatLng(longitude, latitude));
        map.setZoom(12)
    });
    return marker;
}

function load(_longitude, _latitude, _scale, crime_id) {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());

        mapcenter = new GLatLng(_longitude, _latitude);
        map.setCenter(mapcenter, _scale);

        GEvent.addListener(map, "zoomend", function(oldLevel,  newLevel) {
            var bounds;
            var coord = map.getCenter()

            if (newLevel > 7 || crime_id > 0) {
                if (oldLevel <= 7 || newLevel < oldLevel) {
                    map.clearOverlays()
        	        bounds = map.getBounds();
    	            mapradius = bounds.getSouthWest().distanceFrom(bounds.getNorthEast())
	                downloadCrimes(newLevel, coord.lat(), coord.lng(), mapradius/1609.3, crime_id)
                }
             } else if (oldLevel > 7) {
                 map.clearOverlays()
                 downloadCity(newLevel, coord.lat(), coord.lng())
             }
        });

        GEvent.addListener(map, "moveend", function() {
            var bounds;
            var coord = map.getCenter()
            var zoom = map.getZoom()
            if (zoom > 7 && (mapcenter.distanceFrom(coord) > mapradius/2)) {
                bounds = map.getBounds();
                mapradius = bounds.getSouthWest().distanceFrom(bounds.getNorthEast())
                mapcenter = coord;
                downloadCrimes(zoom, coord.lat(), coord.lng(), mapradius/1609.3, crime_id)
            }
        });

        var zoom = map.getZoom()

        if (zoom > 7) {
            var bounds = map.getBounds();
            mapradius = bounds.getSouthWest().distanceFrom(bounds.getNorthEast()) //    mile = this / 1609.3
            downloadCrimes(zoom, _longitude, _latitude, mapradius/1609.3, crime_id)
        } else {
            downloadCity(zoom, _longitude, _latitude)
        }
    }
}

function downloadCity(_zoom, _longitude, _latitude) {
    GDownloadUrl('_getmapxml.php?zoom='+_zoom+'&longitude='+_longitude+'&latitude='+_latitude, function(data, responseCode) {
        xml = GXml.parse(data);

        var items = xml.documentElement.getElementsByTagName("Marker");
        if (items.length==0) {
			overlay_hide()
			return;
		}
        for (var i = 0; i < items.length; i++) {
            var longitude = items[i].getElementsByTagName("Longitude");
            var latitude = items[i].getElementsByTagName("Latitude");
            var city = items[i].getElementsByTagName("City");

            if (GXml.value(latitude[0]) == "" || GXml.value(longitude[0])=="") {
                point = null;
            } else {
                point = new GLatLng(parseFloat(GXml.value(longitude[0])), parseFloat(GXml.value(latitude[0])));
            }

            try {
                var marker;
                if (point != null) {
                    var icon = new GIcon();
                    icon.image = "images/markers/city.png";
                    icon.shadow = "images/markers/shadow.png";
                    icon.iconSize = new GSize(20, 34);
                    icon.shadowSize = new GSize(37, 34);
                    icon.iconAnchor = new GPoint(10, 10);
                    icon.infoWindowAnchor = new GPoint(10, 0);

                    marker = createCityMarker(point, icon, GXml.value(city[0]), GXml.value(longitude[0]), GXml.value(latitude[0]));
                    map.addOverlay(marker);
                }
            } catch (e) {
    			;
            }
        }

		overlay_hide();
    });

}

function downloadCrimes(_zoom, _longitude, _latitude, radius, crime_id) {
//alert('!=zoom='+_zoom+', coord='+_latitude+','+_longitude+','+radius+','+crime_id)

    GDownloadUrl('_getmapxml.php?zoom='+_zoom+'&longitude='+_longitude+'&latitude='+_latitude+'&radius='+radius+'&crime_id='+crime_id, function(data, responseCode) {
        xml = GXml.parse(data);
        var items = xml.documentElement.getElementsByTagName("Marker");

		map.clearOverlays()

        if (items.length==0) {
			overlay_hide()
			return;
		}
        for (var i = 0; i < items.length; i++) {
        	downloadCrime(items[i]);
        }
		overlay_hide()
    });
}

function downloadCrime(item) {
    var longitude = item.getElementsByTagName("Longitude");
    var latitude = item.getElementsByTagName("Latitude");

    var id = item.getElementsByTagName("Id");
    var businessname = item.getElementsByTagName("BusinessName");
    var date = item.getElementsByTagName("Date");
    var address = item.getElementsByTagName("Address");
    var original_type = item.getElementsByTagName("OriginalType");
    var crimecategory = item.getElementsByTagName("CrimeCategory");
    var crimeimage = item.getElementsByTagName("CrimeImage");
    var distance = item.getElementsByTagName("Distance");
    var city = item.getElementsByTagName("City");
    var state = item.getElementsByTagName("State");
    var zip = item.getElementsByTagName("Zip");
    var coincidence = item.getElementsByTagName("Coincidence");
    var reward = item.getElementsByTagName("Reward");
    var isparsed = item.getElementsByTagName("IsParsed");

    if (GXml.value(reward[0]) == '1') reward_str = '<img border=0 alt="" align="middle" src="images/moneybag_dollar.gif" />&nbsp;'; else reward_str = '';
    var html = "";

    if (GXml.value(coincidence[0]) > 1) {
        html += '<table cellspacing=3 celpadding=2 border=0 bgcolor="white">';
        html += '<tr><td colspan=4><a href="crimeGroup?id,' + GXml.value(id[0]) + '"><b>Click Here for Details</b></a></td></tr>';
        html += '<tr><td colspan=4 align=center>' + GXml.value(address[0]) + '</td></tr>';
        html += '<tr><td colspan=4 align=center>' + GXml.value(coincidence[0]) + ' Crimes</td></tr>';
        html += '</table>';
    } else {
        if(GXml.value(isparsed[0]) == '1') {
            html += '<table cellspacing=3 celpadding=2>';
            html += '<tr><td colspan=4><b>' + GXml.value(original_type[0]) + '</b></td></tr>';
            html += '<tr valign=top><td colspan=4 align=center>' + GXml.value(date[0]) + '</td></tr>';
            html += '<tr valign=top><td colspan=4 align=center>' + GXml.value(address[0]) + '</td></tr>';
            html += '<tr valign=top><td colspan=4 align=center>Distance: ' + Math.round(GXml.value(distance[0])*1000)/1000 + ' miles</td></tr>';
            html += '<tr><td colspan=4 align=center><b>Crime Type: ' + GXml.value(crimecategory[0]) + '</b></td></tr>';
            html += '<tr><td style="text-align:right;width:200px;" colspan=4><a align=right href="publicCrimeInfo?id,' + GXml.value(id[0]) + '">Click Here for Details</a></td></tr>';
            html += '</table>';
        } else {
          	var image;
		    var count_image=0;
		    var count_view_image=0;

            html += '<table cellspacing=3 celpadding=2 border=0>';
            html += '<tr valign=top><td colspan=4 height=5%>' + reward_str +'<a href="crimeInfo?id,' + GXml.value(id[0]) + '"><b>' + GXml.value(businessname[0]) + '</b></a></td></tr>';
            html += '<tr valign=top><td colspan=4 align=center>' + GXml.value(address[0]) + '</td></tr>';
            html +='<tr valign=top>';
            for(var i=1; i<5; i++) {
            	image = item.getElementsByTagName('Image'+i);
	            html +='<td align=center>';
	            if (GXml.value(image[0])) {
				    if (count_view_image) {
					    count_image++;
				    } else {
		                html += '<div class="image_crime"><a href="crimeInfo?id,' + GXml.value(id[0]) + '"><img src="' + GXml.value(image[0]) + '" border=0 alt="" /></a></div>';
		                count_view_image++;
		            }
	            }
	            html +='</td>';
            }
            html += '</tr>';

            if (count_image) {
                html+='<tr valign=top><td align=center colspan=4>';
                html+='('+count_image.toString()+' additional photos)';
                html+='</td></tr>';
            }
            html += '</table>';
        }
    }

    if (GXml.value(latitude[0]) == "" || GXml.value(longitude[0])=="") {
        point = null;
    } else {
        point = new GLatLng(parseFloat(GXml.value(longitude[0])), parseFloat(GXml.value(latitude[0])));
    }

    try {
        if (point != null) {
			var icon = createCrimeIcon(GXml.value(isparsed[0]),
			                           GXml.value(coincidence[0]),
			                           GXml.value(crimeimage[0]));
            var marker = createCrimeMarker(point, html, icon);
            map.addOverlay(marker);
        }
    } catch (e) {
		;
    }
}

function createCrimeIcon(isparsed, coincidence, crimeimage) {
    var iconUrl;
    var icon = new GIcon();

    if (isparsed == 1) {
        icon.shadow = 'images/markers/publicShadow.png';
        icon.iconSize = new GSize(16, 27);
        icon.shadowSize = new GSize(8, 6);
        icon.iconAnchor = new GPoint(8, 27);
        icon.infoWindowAnchor = new GPoint(8, 27);

        if (coincidence > 1) {
            iconUrl = 'images/markers/group.png';
        } else {
            iconUrl = 'images/markers/' + crimeimage;
        }
        icon.image = iconUrl;
    } else {
        icon.image = 'images/markers/red.png';
        icon.shadow = 'images/markers/redShadow.png';
        icon.iconSize = new GSize(20, 34);
        icon.shadowSize = new GSize(37, 34);
        icon.iconAnchor = new GPoint(9, 33);
        icon.infoWindowAnchor = new GPoint(9, 10);
    }
    return icon;
}

function overlay_hide() {
	if ($('overlay') != null) {
		$('overlay').setStyle({display: 'none'});
		$('waitmsg').setStyle({display: 'none'});
	}	
}