﻿
var MapOrderList=new Hash();function MapOrder()
{var UpdatePanel=null;var OrderMapDiv=null;var OrderMap=null;var MarkerManager=null;var MarkerCount=1;var MarkerList=null;var HistoricalMarkerList=null;var ContextMenu=null;var LastClickPoint=null;var LastStreetClicked=null;var LastSelectedStreet1=null;var LastSelectedStreet2=null;var Direction=null;var TubeDirection=null;var BlockID=0;var InitializeContextMenu=function()
{ContextMenu=document.createElement("div");ContextMenu.style.borderCollapse="collapse";var LeftDiv=document.createElement("div");LeftDiv.style.position="relative";LeftDiv.style.zIndex=1000;var LeftImg=document.createElement("img");LeftImg.border=0;LeftImg.src="../Images/Maps/Tri2.gif";LeftImg.width="16";LeftImg.height="16";LeftDiv.appendChild(LeftImg);var RightDiv=document.createElement("div");RightDiv.className="DivJSSubMenu ContextMenu";RightDiv.style.top="-15px";RightDiv.innerHTML='<a href="javascript:void(0)">Select this intersection</a>';ContextMenu.style.display="none";ContextMenu.appendChild(LeftDiv);ContextMenu.appendChild(RightDiv);OrderMapDiv.appendChild(ContextMenu);}
var InitializeMap=function(readOnly)
{if(GBrowserIsCompatible())
{if(OrderMapDiv!=null)
{if(!readOnly)
{OrderMap=new GMap2(OrderMapDiv,{draggableCursor:"crosshair"});OrderMap.setCenter(new GLatLng(37.0625,-95.677068),3);OrderMap.addControl(new GLargeMapControl());OrderMap.addControl(new GMapTypeControl());OrderMap.enableDoubleClickZoom();OrderMap.enableContinuousZoom();}
else
{OrderMap=new GMap2(OrderMapDiv);OrderMap.setCenter(new GLatLng(37.0625,-95.677068),3);OrderMap.disableDragging();OrderMap.disableInfoWindow();OrderMap.disableDoubleClickZoom();}
OrderMap.checkResize();MarkerManager=new GMarkerManager(OrderMap,{borderPadding:10});MarkerList=[];HistoricalMarkerList=[];GetLatLongs(readOnly);}}}
var HookEvents=function()
{InitializeContextMenu();GEvent.bind(OrderMap,"click",this,OrderMapClicked);GEvent.bind(OrderMap,"singlerightclick",this,OrderMapRightClicked);GEvent.bindDom($(ContextMenu).down("a"),"click",this,SelectIntersection);}
this.UnhookEvents=function()
{for(var i=0;i<MarkerList.length;i++)
{if(MarkerList[i])
{GEvent.clearInstanceListeners(MarkerList[i]);}}
OrderMap.clearOverlays();GEvent.clearInstanceListeners(OrderMap);}
this.ToggleHistoricalCountMarkers=function(markers)
{var bounds=new GLatLngBounds();for(var i=0;i<markers.length;i++)
{if(markers[i]!=null)
{bounds.extend(markers[i].getPoint());OrderMap.addOverlay(markers[i]);}}
OrderMap.setCenter(bounds.getCenter(),OrderMap.getBoundsZoomLevel(bounds)-1);}
this.ToggleMarkers=function(show)
{for(var i=0;i<MarkerList.length;i++)
{if(MarkerList[i])
{if(show)
MarkerList[i].show();else
MarkerList[i].hide();}}}
this.init=function(orderMapDiv,updatePanel)
{UpdatePanel=updatePanel;OrderMapDiv=orderMapDiv;InitializeMap(false);HookEvents();BlockID=$(orderMapDiv).up("td").previous("td").innerHTML.stripTags().strip()-1;}
this.initReadOnly=function(orderMapDiv)
{OrderMapDiv=orderMapDiv;InitializeMap(true);}
this.SetMapCenter=function(latlong)
{var latlongObj=latlong.split(",");OrderMap.setZoom(13);OrderMap.panTo(new GLatLng(latlongObj[0],latlongObj[1]));}
this.SetMapZoom=function(zoom)
{OrderMap.setZoom(zoom);}
var HideContextMenu=function()
{ContextMenu.style.display="none";}
var SaveMiscOptions=function(markerIndex)
{if(OrderMap.getInfoWindow().getContentContainers().length>0)
{var txtComments=$(OrderMap.getInfoWindow().getContentContainers()[0]).select("textarea[id=txtComments]")[0];var chkDVD=$(OrderMap.getInfoWindow().getContentContainers()[0]).select("input[id=chkDVD]")[0];var chkPhoto=$(OrderMap.getInfoWindow().getContentContainers()[0]).select("input[id=chkPhoto]")[0];__doPostBack(UpdatePanel,"UpdateTurnLocation,"+BlockID+","+markerIndex+",|"+txtComments.value+"|"+chkDVD.checked+"|"+chkPhoto.checked);}
OrderMap.closeInfoWindow();}
var DeleteLocation=function(markerIndex)
{for(var i=0;i<MarkerList.length;i++)
{if(MarkerList[i])
{MarkerList[i].setImage("../Images/Maps/Markers/marker"+(i+1)+".png");}}
MarkerCount=MarkerList.length+1;__doPostBack(UpdatePanel,"DeleteLocation,"+BlockID+","+markerIndex);}
var SelectIntersection=function()
{HideContextMenu();Direction=new GDirections();GEvent.addListener(Direction,"load",onGDirectionsLoad);GEvent.addListener(Direction,"error",handleErrors);Direction.load("from: "+LastClickPoint.y+", "+LastClickPoint.x+" to: "+LastClickPoint.y+", "+LastClickPoint.x,{getSteps:true,preserveViewport:true});}
var handleErrors=function()
{if(Direction.getStatus().code==G_GEO_UNKNOWN_ADDRESS)
alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: "+Direction.getStatus().code);else if(Direction.getStatus().code==G_GEO_SERVER_ERROR)
alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: "+Direction.getStatus().code);else if(Direction.getStatus().code==G_GEO_MISSING_QUERY)
alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: "+Direction.getStatus().code);else if(Direction.getStatus().code==G_GEO_BAD_KEY)
alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: "+Direction.getStatus().code);else if(Direction.getStatus().code==G_GEO_BAD_REQUEST)
alert("A directions request could not be successfully parsed.\n Error code: "+Direction.getStatus().code);else alert("An unknown error occurred.");}
var onGDirectionsLoad2=function()
{if(Direction.getNumRoutes()>0)
{var route=Direction.getRoute(0);if(route.getNumSteps()>0)
{var step=route.getStep(0);var desc=step.getDescriptionHtml();desc=desc.stripTags();desc=desc.gsub("Head "," ");desc=desc.gsub(" on "," ");desc=desc.gsub("east|west|north|south|southeast|southwest|northeast|northwest"," ");if(desc.indexOf("toward")>0)
{singleStreet=false;}
desc=desc.gsub(" toward "," & ");desc=desc.strip();var geocoder=new GClientGeocoder();var sw=new GLatLng(LastClickPoint.x-0.01,LastClickPoint.y-0.01);var ne=new GLatLng(LastClickPoint.x+0.01,LastClickPoint.y+0.01);var bounds=new GLatLngBounds(sw,ne);geocoder.setViewport(bounds);if(!singleStreet)
{var streets=desc.split("&");streets[0]=streets[0].strip().split("/")[0];streets[1]=streets[1].strip().split("/")[0];LastStreetClicked=streets[0];geocoder.getLocations(streets[0]+" & "+streets[1],GeocodeSuccessful2);}}}}
function GeocodeSuccessful2(response)
{if(!response||response.Status.code!=200)
{alert("Sorry, could not locate that intersection");}
else
{var adStr="";if(response.Placemark.length>0)
{var minDistance=10000000;var minIndex=-1;for(var i=0;i<response.Placemark.length;i++)
{var place=response.Placemark[i];var point=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);var temp=LastClickPoint.distanceFrom(point);alert(place.address+" -- "+place.AddressDetails.Accuracy+" -- "+temp);if(temp<minDistance)
{minDistance=temp;minIndex=i;adStr+=place.address+" -- "+place.AddressDetails.Accuracy+" -- "+temp+"\n";}}
if(minDistance<1000&&minIndex>=0)
{var place=response.Placemark[minIndex];var point=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);var temp=LastClickPoint.distanceFrom(point);if(temp<10000)
{if(place.AddressDetails.Accuracy==7)
{TubeDirection=new GDirections();GEvent.addListener(TubeDirection,"load",onTubeDirectionsLoad);TubeDirection.load("from: "+LastClickPoint.y+", "+LastClickPoint.x+" to: "+place.Point.coordinates[1]+", "+place.Point.coordinates[0]);}}}}}}
var onTubeDirectionsLoad=function()
{alert(TubeDirection.getDistance().meters*3.2808399);}
var onGDirectionsLoad=function(){if(Direction.getNumRoutes()>0){var route=Direction.getRoute(0);if(route.getNumSteps()>0){var singleStreet=true;var step=route.getStep(0);var desc=step.getDescriptionHtml();desc=desc.stripTags();desc=desc.gsub("Head "," ");desc=desc.gsub(" on "," ");desc=desc.gsub("east|west|north|south|southeast|southwest|northeast|northwest"," ");if(desc.indexOf("toward")>0){singleStreet=false;}
desc=desc.gsub(" toward "," & ");desc=desc.strip();var geocoder=new GClientGeocoder();var sw=new GLatLng(LastClickPoint.x-0.01,LastClickPoint.y-0.01);var ne=new GLatLng(LastClickPoint.x+0.01,LastClickPoint.y+0.01);var bounds=new GLatLngBounds(sw,ne);geocoder.setViewport(bounds);if(!singleStreet){var streets=desc.split("&");streets[0]=streets[0].strip().split("/")[0];streets[1]=streets[1].strip().split("/")[0];LastSelectedStreet1=streets[0].strip();LastSelectedStreet2=streets[1].strip();geocoder.getLocations(streets[0]+" & "+streets[1],GeocodeSuccessful);}}}}
function GeocodeSuccessful(response)
{if(!response||response.Status.code!=200)
{alert("Sorry, could not locate that intersection");}
else
{var adStr="";if(response.Placemark.length>0)
{var minDistance=10000000;var minIndex=-1;for(var i=0;i<response.Placemark.length;i++)
{var place=response.Placemark[i];var point=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);var temp=LastClickPoint.distanceFrom(point);if(temp<minDistance)
{minDistance=temp;minIndex=i;adStr+=place.address+" -- "+place.AddressDetails.Accuracy+" -- "+temp+"\n";}}
if(minDistance<1000&&minIndex>=0)
{var place=response.Placemark[minIndex];var point=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);var temp=LastClickPoint.distanceFrom(point);if(temp<1000)
{if(place.AddressDetails.Accuracy==7)
{var locality;if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea==undefined){locality=place.AddressDetails.Country.AdministrativeArea.Locality;}
else{locality=place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality;}
var street=LastSelectedStreet1+"--"+LastSelectedStreet2;var city=locality.LocalityName;var state=place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;var marker=CreateMarker(new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]),MarkerCount++,street+"\n"+city+", "+state);OrderMap.addOverlay(marker);__doPostBack(UpdatePanel,"InsertDirectLocation,"+BlockID+",|"+
LastSelectedStreet1+"|"+
LastSelectedStreet2+"|"+
city+"|"+
state+"|"+
place.Point.coordinates[1]+"|"+
place.Point.coordinates[0]);}}}}}}
var RevGeoSucceededCallback=function(result,userContext,methodName)
{if(result!=null)
{var cityName=result.City.split(" ").invoke("capitalize").join(" ");var marker=CreateMarker(new GLatLng(userContext.split(",")[0],userContext.split(",")[1]),MarkerCount++,result.StreetName1+" -- "+result.StreetName2+"\n"+cityName+", "+result.State);OrderMap.addOverlay(marker);InsertLocation(result,cityName);}}
var RevGeoFailedCallback=function(error)
{}
var InsertLocation=function(result,cityName)
{__doPostBack(UpdatePanel,"InsertDirectLocation,"+BlockID+",|"+
result.StreetName1+"|"+
result.StreetName2+"|"+
cityName+"|"+
result.State+"|"+
result.Latitude+"|"+
result.Longitude);}
var OrderMapClicked=function(overlay,point)
{HideContextMenu();}
var OrderMapRightClicked=function(point,src,overlay)
{LastClickPoint=OrderMap.fromContainerPixelToLatLng(point);var x=point.x;var y=point.y;var pos=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(x,y));pos.apply(ContextMenu);ContextMenu.style.display="block";}
var CreateMarker=function(point,index,titleStr,readOnly)
{var cusIcon=new GIcon(G_DEFAULT_ICON);cusIcon.image="../Images/Maps/Markers/marker"+index+".png";var marker=new GMarker(point,{icon:cusIcon,title:titleStr});MarkerList.push(marker);if(!readOnly)
{var markerclickListener=GEvent.addListener(marker,"click",function(){var markerIndex=MarkerList.indexOf(marker);var locDiv=$(OrderMapDiv).up().next("div").select("div[id$=UpPnlLocation]")[markerIndex];if(locDiv!=null)
{var DVD=locDiv.down("div",1).select("img[alt='DVD']").length>0;var Photo=locDiv.down("div",1).select("img[alt='Photo']").length>0;var comments=locDiv.down("div",3).down("label").innerHTML;}
var html="<strong>Misc Options</strong><br /><table cellpadding='0' border='0' cellspacing='2'><tr><td style='text-align:right'>Comments:</td><td><textarea id='txtComments' rows='3'>"+comments+"</textarea></td></tr><tr><td style='text-align:right'>Require DVD video:</td><td><input type='checkbox' id='chkDVD' ";if(DVD){html+="checked='checked'";}
html+=" /></td></tr><tr><td style='text-align:right'>Location Photograph:</td><td><input type='checkbox' id='chkPhoto' ";if(Photo){html+="checked='checked'";}
html+=" /></td></tr><tr><td><a href='javascript:void(0)' id='lnkUpdate'>Update</a> <a href='javascript:void(0)' id='lnkCancel'>Cancel</a></td><td style='text-align:right'><a href='javascript:void(0)' id='lnkDelete'>Delete this location</a></td></tr></table>";marker.openInfoWindowHtml(html);});var infowindowopenListener=GEvent.addListener(marker,"infowindowopen",function(){if(OrderMap.getInfoWindow().getContentContainers().length>0)
{var lnkUpdate=$(OrderMap.getInfoWindow().getContentContainers()[0]).select("a[id=lnkUpdate]")[0];var clickListenerUpdate=GEvent.addDomListener(lnkUpdate,"click",function(){var markerIndex=MarkerList.indexOf(marker);SaveMiscOptions(markerIndex);GEvent.removeListener(clickListenerUpdate);});var lnkCancel=$(OrderMap.getInfoWindow().getContentContainers()[0]).select("a[id=lnkCancel]")[0];var clickListenerCancel=GEvent.addDomListener(lnkCancel,"click",function(){marker.closeInfoWindow();GEvent.removeListener(clickListenerCancel);});var lnkDelete=$(OrderMap.getInfoWindow().getContentContainers()[0]).select("a[id=lnkDelete]")[0];var clickListenerDelete=GEvent.addDomListener(lnkDelete,"click",function(){var markerIndex=MarkerList.indexOf(marker);MarkerList=MarkerList.without(marker);GEvent.clearInstanceListeners(marker);OrderMap.closeInfoWindow();OrderMap.removeOverlay(marker);DeleteLocation(markerIndex);GEvent.removeListener(clickListenerDelete);});}});}
return marker;}
var GetLatLongs=function(readOnly)
{var LatLongInputList=null;var StreetNameList=null;var CityStateList=null;if(readOnly)
{LatLongInputList=$(OrderMapDiv).up(2).select("input[id$=LatLong]");StreetNameList=$(OrderMapDiv).up(2).select("div.Location label");CityStateList=$(OrderMapDiv).up(2).select("div.CityState label");if(StreetNameList.length==0&&CityStateList.length==0)
{StreetNameList=$(OrderMapDiv).up(2).select("div.LocationInvoice label[title='Location']");CityStateList=$(OrderMapDiv).up(2).select("div.LocationInvoice label[title='City/State']");}}
else
{LatLongInputList=$(OrderMapDiv).up().next("div").select("input[id$=LatLong]");StreetNameList=$(OrderMapDiv).up().next("div").select("div.Location label");CityStateList=$(OrderMapDiv).up().next("div").select("div.CityState label");}
if(LatLongInputList.length>0)
{MarkerList.clear();MarkerCount=1;var allNull=true;for(var i=0;i<LatLongInputList.length;i++)
{if(LatLongInputList[i].value!="0,0")
{var latlong=LatLongInputList[i].value.split(",");CreateMarker(new GLatLng(latlong[0],latlong[1]),MarkerCount,StreetNameList[i].innerHTML+"\n"+CityStateList[i].innerHTML,readOnly);allNull=false;}
else
{MarkerList.push(null);}
MarkerCount++;}
var bounds=new GLatLngBounds();for(var i=0;i<MarkerList.length;i++)
{if(MarkerList[i]!=null)
{bounds.extend(MarkerList[i].getPoint());OrderMap.addOverlay(MarkerList[i]);}}
if(!allNull)
{OrderMap.setCenter(bounds.getCenter(),OrderMap.getBoundsZoomLevel(bounds)-1);}}}}
