﻿var map;
var trafficInfo = null;

function fMarkers()
{
this.markers = new Array();
this.getLength = function() { return this.markers.length; };
this.pushValue = function(v) { this.markers.push(v); }
this.getValue = function(i) { return this.markers[i]; }
this.getLastValue = function() { return this.markers[this.markers.length-1]; }
this.getValueById = function(ID) {
var i;
for(i=0;i<this.markers.length;i++)
{
if(this.markers[i].value==ID)
{
return this.markers[i];
}
}
return null;
}
this.removeValueById = function(ID) {
var i;
for(i=0;i<this.markers.length;i++)
{
if(this.markers[i].value==ID)
{
this.markers.splice(i,1);

}
}
return null;
}
}

function fPolylines()
{
this.polylines = new Array();
this.polylinesID = new Array();
this.getLength = function() { return this.polylines.length; };
this.pushValue = function(v,ID) { this.polylines.push(v); this.polylinesID.push(ID); }
this.getValue = function(i) { return this.polylines[i]; }
this.getLastValue = function() { return this.polylines[this.polylines.length-1]; }
this.getValueById = function(ID) {
var i;
for(i=0;i<this.polylinesID.length;i++)
{
if(this.polylinesID[i]==ID)
{
return this.polylines[i];
}
}
return null;
}
this.removeValueById = function(ID) {
var i;
for(i=0;i<this.polylinesID.length;i++)
{
if(this.polylinesID[i]==ID)
{
this.polylines.splice(i,1);
this.polylinesID.splice(i,1);
}
}
return null;
}
}

function fPolygons()
{
this.polygons = new Array();
this.polygonsID = new Array();
this.getLength = function() { return this.polygons.length; };
this.pushValue = function(v,ID) { this.polygons.push(v); this.polygonsID.push(ID); }
this.getValue = function(i) { return this.polygons[i]; }
this.getLastValue = function() { return this.polygons[this.polygons.length-1]; }
this.getValueById = function(ID) {
var i;
for(i=0;i<this.polygonsID.length;i++)
{
if(this.polygonsID[i]==ID)
{
return this.polygons[i];
}
}
return null;
}
this.removeValueById = function(ID) {
var i;
for(i=0;i<this.polygonsID.length;i++)
{
if(this.polygonsID[i]==ID)
{
this.polygons.splice(i,1);
this.polygonsID.splice(i,1);
}
}
return null;
}
}

if (GBrowserIsCompatible())
{
map = new GMap2(document.getElementById("GoogleMap_Div"));

var markers = new fMarkers();
var polylines = new fPolylines();
var polygons = new fPolygons();

function CreateMarker(point,icon,InfoHTML)
{
var marker;
if(icon!=null)
{
marker = new GMarker(point,icon);
}
else
{
marker = new GMarker(point);
}
if(InfoHTML!='')
{
GEvent.addListener(marker, "click", function() { map.openInfoWindowHtml(point,InfoHTML); });
}
return marker;
}

function CreatePolyline(points,color,width,isgeodesic)
{
var polyline;
if(!isgeodesic)
{
polyline = new GPolyline(points,color,width);
}
else
{
var polyOptions = {geodesic:true};
polyline = new GPolyline(points,color,width,1,polyOptions);
}
return polyline;
}

function CreatePolygon(points,strokecolor,strokeweight,strokeopacity,fillcolor,fillopacity)
{
var polygon;

var polygon = new GPolygon(points,strokecolor,strokeweight,strokeopacity,fillcolor,fillopacity);
return polygon;
}

function fGetGoogleObject(result, userContext)
{
map.setCenter(new GLatLng(result.CenterPoint.Latitude, result.CenterPoint.Longitude), result.ZoomLevel);

if(result.ShowMapTypesControl)
{
map.addControl(new GMapTypeControl());
}

if(result.ShowZoomControl)
{
map.addControl(new GLargeMapControl());
}



var i;
if(markers!=null)
{
for(i=0;i<markers.getLength();i++)
{
var cmark = markers.getValue(i);
if(cmark !=null)
{
map.removeOverlay(cmark);
}
}
}
markers = new fMarkers();

for(i=0;i<result.Points.length;i++)
{
var myIcon_google;

var myPoint = new GLatLng(result.Points[i].Latitude, result.Points[i].Longitude);

myIcon_google = null;
if(result.Points[i].IconImage!='')
{
myIcon_google = new GIcon(G_DEFAULT_ICON);
markerOptions = { icon:myIcon_google };

myIcon_google.iconSize = new GSize(result.Points[i].IconImageWidth,result.Points[i].IconImageHeight);
myIcon_google.image = result.Points[i].IconImage;
}
var marker = CreateMarker(myPoint,myIcon_google,result.Points[i].InfoHTML);
marker.value = result.Points[i].ID;
markers.pushValue(marker);
map.addOverlay(markers.getLastValue());
}

polylines = new fPolylines();
for(i=0;i<result.Polylines.length;i++)
{
var polypoints = new Array();
var j;
for(j=0;j<result.Polylines[i].Points.length;j++)
{
polypoints.push(new GLatLng(result.Polylines[i].Points[j].Latitude, result.Polylines[i].Points[j].Longitude));
}
var polyline = CreatePolyline(polypoints,result.Polylines[i].ColorCode,result.Polylines[i].Width,result.Polylines[i].Geodesic);
polylines.pushValue(polyline,result.Polylines[i].ID);
map.addOverlay(polylines.getLastValue());
}


polygons = new fPolygons();
for(i=0;i<result.Polygons.length;i++)
{
var polypoints = new Array();
var j;
for(j=0;j<result.Polygons[i].Points.length;j++)
{
polypoints.push(new GLatLng(result.Polygons[i].Points[j].Latitude, result.Polygons[i].Points[j].Longitude));
}
var polygon = CreatePolygon(polypoints,result.Polygons[i].StrokeColor,result.Polygons[i].StrokeWeight,result.Polygons[i].StrokeOpacity,result.Polygons[i].FillColor,result.Polygons[i].FillOpacity);
polygons.pushValue(polygon,result.Polygons[i].ID);
map.addOverlay(polygons.getLastValue());
}


if(result.ShowTraffic)
{
trafficInfo = new GTrafficOverlay();
map.addOverlay(trafficInfo);
}

}
GService.GetGoogleObject(fGetGoogleObject);

function fGetGoogleObjectOptimized(result, userContext)
{

if(result.ShowTraffic)
{
trafficInfo = new GTrafficOverlay();
map.addOverlay(trafficInfo);
}
else
{
if(trafficInfo!=null)
{
map.removeOverlay(trafficInfo);
trafficInfo = null;
}
}

var i;
for(i=0;i<result.Points.length;i++)
{
//Create icon
var myIcon_google;

var myPoint = new GLatLng(result.Points[i].Latitude, result.Points[i].Longitude);

myIcon_google = null;
if(result.Points[i].IconImage!='')
{
myIcon_google = new GIcon(G_DEFAULT_ICON);
markerOptions = { icon:myIcon_google };

myIcon_google.iconSize = new GSize(result.Points[i].IconImageWidth,result.Points[i].IconImageHeight);
myIcon_google.image = result.Points[i].IconImage;
}
if(result.Points[i].PointStatus=='C')
{
var marker = markers.getValueById(result.Points[i].ID);
if(marker!=null)
{
markers.removeValueById(result.Points[i].ID);
map.removeOverlay(marker);
}
marker = CreateMarker(myPoint,myIcon_google,result.Points[i].InfoHTML);
marker.value = result.Points[i].ID;
markers.pushValue(marker);
map.addOverlay(markers.getLastValue());
}
if(result.Points[i].PointStatus=='N')
{
var marker = CreateMarker(myPoint,myIcon_google,result.Points[i].InfoHTML);
marker.value = result.Points[i].ID;
markers.pushValue(marker);
map.addOverlay(markers.getLastValue());
}
if(result.Points[i].PointStatus=='D')
{
var marker = markers.getValueById(result.Points[i].ID);
if(marker!=null)
{
markers.removeValueById(result.Points[i].ID);
map.removeOverlay(marker);
}
}
}

for(i=0;i<result.Polylines.length;i++)
{

if(result.Polylines[i].LineStatus=='C')
{

var polyline = polylines.getValueById(result.Polylines[i].ID);
if(polyline!=null)
{
polylines.removeValueById(result.Polylines[i].ID);
map.removeOverlay(polyline);
}
var polypoints = new Array();
var j;
for(j=0;j<result.Polylines[i].Points.length;j++)
{
polypoints.push(new GLatLng(result.Polylines[i].Points[j].Latitude, result.Polylines[i].Points[j].Longitude));
}
var polyline = CreatePolyline(polypoints,result.Polylines[i].ColorCode,result.Polylines[i].Width,result.Polylines[i].Geodesic);
polylines.pushValue(polyline,result.Polylines[i].ID);
map.addOverlay(polylines.getLastValue());
}

if(result.Polylines[i].LineStatus=='N')
{
var polypoints = new Array();
var j;
for(j=0;j<result.Polylines[i].Points.length;j++)
{
polypoints.push(new GLatLng(result.Polylines[i].Points[j].Latitude, result.Polylines[i].Points[j].Longitude));
}
var polyline = CreatePolyline(polypoints,result.Polylines[i].ColorCode,result.Polylines[i].Width,result.Polylines[i].Geodesic);
polylines.pushValue(polyline,result.Polylines[i].ID);
map.addOverlay(polylines.getLastValue());
}
if(result.Polylines[i].LineStatus=='D')
{
var polyline = polylines.getValueById(result.Polylines[i].ID);
if(polyline!=null)
{
polylines.removeValueById(result.Polylines[i].ID);
map.removeOverlay(polyline);
}
}
}

for(i=0;i<result.Polygons.length;i++)
{

if(result.Polygons[i].Status=='C')
{

var polygon = polygons.getValueById(result.Polygons[i].ID);
if(polygon!=null)
{
polygons.removeValueById(result.Polygons[i].ID);
map.removeOverlay(polygon);
}
var polypoints = new Array();
var j;
for(j=0;j<result.Polygons[i].Points.length;j++)
{
polypoints.push(new GLatLng(result.Polygons[i].Points[j].Latitude, result.Polygons[i].Points[j].Longitude));
}
var polygon = CreatePolygon(polypoints,result.Polygons[i].StrokeColor,result.Polygons[i].StrokeWeight,result.Polygons[i].StrokeOpacity,result.Polygons[i].FillColor,result.Polygons[i].FillOpacity);
polygons.pushValue(polygon,result.Polygons[i].ID);
map.addOverlay(polygons.getLastValue());
}

if(result.Polygons[i].Status=='N')
{
var polypoints = new Array();
var j;
for(j=0;j<result.Polygons[i].Points.length;j++)
{
polypoints.push(new GLatLng(result.Polygons[i].Points[j].Latitude, result.Polygons[i].Points[j].Longitude));
}
var polygon = CreatePolygon(polypoints,result.Polygons[i].StrokeColor,result.Polygons[i].StrokeWeight,result.Polygons[i].StrokeOpacity,result.Polygons[i].FillColor,result.Polygons[i].FillOpacity);
polygons.pushValue(polygon,result.Polygons[i].ID);
map.addOverlay(polygons.getLastValue());
}
if(result.Polygons[i].Status=='D')
{
var polygon = polygons.getValueById(result.Polygons[i].ID);
if(polygon!=null)
{
polygons.removeValueById(result.Polygons[i].ID);
map.removeOverlay(polygon);
}
}
}
}

}
function endRequestHandler(sender, args)
{
GService.GetOptimizedGoogleObject(fGetGoogleObjectOptimized);
}
function pageLoad()
{
if(!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}

