var TRACK_NAME_REGEXP="['\"%&\\\\/]";var TOGGLE_PANEL_LEFT_COORDS=350;var TOGGLE_PANEL_WIDTH=8;var SLIDE_SPEED=75;var TABS_COUNT=3;var POPUP_MENU_WIDTH=120;var COLOR_SUBMENU_WIDTH=100;var POPUP_MENU_ITEM_HEIGHT=16;var COLOR_SUBMENU_ID_PREFIX="colorSubMenu";var COLOR_CHOOSER_CELL_ID_PREFIX="colorChooserCell";var TRACK_COLORS_LIST=["#0000ff","#ff0000","#00ff00","#ffff00","#8a2be2","#bb642d","#00ffff","#006400","#ff00ff","#ffa500","#aef558","#9999ff"];var NEAREST_TRACK_COLORS_LIST=["#0000ff","#ff0000","#000000","#8a2be2","#006400"];var ACTIONS_SUBMENU_WIDTH=105;var EXPORT_SUBMENU_WIDTH=65;var EXPORT_FORMATS=["GPSed","GPX","KML"];var DEFAULT_ZOOM_LEVEL=2;var TRACKLIST_ACTIONS_MENU_ITEM_ID_SHOW="trackListActionsMenuItemShow";var TRACKLIST_ACTIONS_MENU_ITEM_ID_HIDE="trackListActionsMenuItemHide";var TRACKLIST_ACTIONS_MENU_ITEM_ID_CLOSETRACK="trackListActionsMenuItemCloseTrack";var TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPUBLIC="trackListActionsMenuItemMakePublic";var TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPRIVATE="trackListActionsMenuItemMakePrivate";var TRACKLIST_ACTIONS_MENU_ITEM_ID_RENAME="trackListActionsMenuItemRename";var TRACKLIST_ACTIONS_MENU_ITEM_ID_DELETE="trackListActionsMenuItemDelete";var TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPSED="trackListActionsMenuItemExportGPSed";var TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPX="trackListActionsMenuItemExportGPX";var TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_KML="trackListActionsMenuItemExportKML";var TRACKLIST_ACTIONS_MENU_ITEM_ID_ATTACH_PHOTOS="trackListActionsMenuItemAttachPhotos";var OPENED_TRACKS_TAB=0;var SEARCH_TAB=1;var POPULAR_TRACKS_TAB=2;var MINIMUM_ZOOM_FOR_LIVE_TRACK=14;var MAXIMUM_ZOOM_LEVEL_FOR_GENERALIZATION=19;var NORMAL_TRACK_WEIGHT=5;var NEAREST_TRACK_WEIGHT=4;var NEAREST_TRACK_OVER_WEIGHT=7;var DEFAULT_TRACK_OPACITY=1;var DEFAULT_NEAREST_TRACK_OPACITY=0.50;var MIN_REFRESH_TIMEOUT=3000;var MAX_REFRESH_TIMEOUT=300000;var colorChooserHiderTaskId=null;var resizeTaskID=null;var refreshTrackListTaskId=null;var refreshInterval=0;var sliderIntervalId=0;var sliderLeft=0;var sliding=false;var lastOpenedTabIndex=0;var tabContentHTML=[];var map=null;var mainTabs;var tabSelectorHeight=0;var arrowIcon;var startTrackIcon;var finishTrackIcon;var waypointMarkerIcon;var photoMarkerIcon;var trackMarkerIcon;var lastMapClickPoint;var lastClickedTrackID;var currentSelectedTrack;var currentContentPanelHeight=0;var currentNearestTracksBounds;var isNearestTracksLoading=false;var repeatedNearestTracksRequests=0;var overviewMap;var scaleControl;var prevMapType;var clearErrorTaskID=null;var panoramioOverlay=null;var wikipediaOverlay=null;var trackMarkersGroup=new Object();var countryFlagsGroup=new Object();var countryFlagsLayerLoaded=false;var need2restoreCountryFlags=false;var globalTracksData=new Object();var recentTracksData=new Object();var nearestTracksData=new Object();var globalTracksDataOrder=[];var recentTracksDataOrder=[];var nearestTracksDataOrder=[];var currentNearestTracksZoom;function initGMap(params){if(GBrowserIsCompatible()){map=new GMap2(document.getElementById("map"));map.setCenter(new GLatLng(46.4605627835119,30.69137154075234),DEFAULT_ZOOM_LEVEL,(defaultMapType)?defaultMapType:G_PHYSICAL_MAP);prevMapType=(defaultMapType)?defaultMapType:G_PHYSICAL_MAP;if(params.smallMapControl){map.addControl(new GSmallMapControl());}else{map.addControl(new GLargeMapControl());}
map.addMapType(G_PHYSICAL_MAP);if(isGECompatible){map.addMapType(G_SATELLITE_3D_MAP);}
if(!params.disableScaleControl){scaleControl=new GScaleControl();map.addControl(scaleControl,new GControlPosition(G_ANCHOR_BOTTOM_LEFT,new GSize(100,5)));}
if(!params.disableOverviewControl){overviewMap=new GOverviewMapControl();map.addControl(overviewMap);}
if(panoramioLayerEnabled){enablePanoramioLayer();}
if(wikipediaLayerEnabled){enableWikipediaLayer();}
if(countryFlagsLayerEnabled&&prevMapType!=G_SATELLITE_3D_MAP){toogleCountryFlagsLayer(true);}
addAppropriateToolbarControl(map);var otherOpts={buttonStartingStyle:{background:'#FFF',padding:'0',margin:'0',border:'none'},buttonHTML:'<img title="Drag Zoom In" src="http://static.gpsed.com/drag_zoom_start.png">',buttonStyle:{width:'26px',height:'26px'},buttonZoomingHTML:'Drag a region on the map (click here to reset)',buttonZoomingStyle:{background:"yellow",width:"75px",height:"100%"},backButtonHTML:'<img title="Zoom Back Out" src="http://static.gpsed.com/drag_zoom_back.png">',backButtonStyle:{display:'none',marginTop:'5px',width:'26px',height:'26px'},backButtonEnabled:true,overlayRemoveTime:1500}
map.addControl(new DragZoomControl({opacity:0.6},otherOpts,{}),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(48,47)));if(!params.disableWheel){map.enableScrollWheelZoom();}
map.enableDoubleClickZoom();if(params.adsEnabled){var ads_opts={mode:"experimental",maxAdsOnMap:10,minZoomLevel:5};var adsManager=new GAdsManager(map,"ca-pub-7182060764901967",ads_opts);adsManager.enable();}
if(params.trackMarkers){arrowIcon=new GIcon();arrowIcon.iconSize=new GSize(24,24);arrowIcon.shadowSize=new GSize(0,0);arrowIcon.iconAnchor=new GPoint(12,12);arrowIcon.infoWindowAnchor=new GPoint(0,0);startTrackIcon=new GIcon();startTrackIcon.iconSize=new GSize(31,25);startTrackIcon.shadowSize=new GSize(0,0);startTrackIcon.iconAnchor=new GPoint(15,25);startTrackIcon.infoWindowAnchor=new GPoint(15,25);startTrackIcon.image="http://static.gpsed.com/track_markers/track_start.gif";finishTrackIcon=new GIcon();finishTrackIcon.iconSize=new GSize(31,25);finishTrackIcon.shadowSize=new GSize(0,0);finishTrackIcon.iconAnchor=new GPoint(15,25);finishTrackIcon.infoWindowAnchor=new GPoint(15,25);finishTrackIcon.image="http://static.gpsed.com/track_markers/track_finish.gif";startNearestTrackIcon=new GIcon();startNearestTrackIcon.iconSize=new GSize(18,15);startNearestTrackIcon.shadowSize=new GSize(0,0);startNearestTrackIcon.iconAnchor=new GPoint(9,15);startNearestTrackIcon.infoWindowAnchor=new GPoint(9,15);startNearestTrackIcon.image="http://static.gpsed.com/track_markers/nearest_track_start.png";finishNearestTrackIcon=new GIcon();finishNearestTrackIcon.iconSize=new GSize(18,15);finishNearestTrackIcon.shadowSize=new GSize(0,0);finishNearestTrackIcon.iconAnchor=new GPoint(9,15);finishNearestTrackIcon.infoWindowAnchor=new GPoint(9,15);finishNearestTrackIcon.image="http://static.gpsed.com/track_markers/nearest_track_finish.png";waypointMarkerIcon=new GIcon();waypointMarkerIcon.iconSize=new GSize(29,33);waypointMarkerIcon.shadowSize=new GSize(0,0);waypointMarkerIcon.iconAnchor=new GPoint(16,33);waypointMarkerIcon.infoWindowAnchor=new GPoint(16,33);waypointMarkerIcon.image="http://static.gpsed.com/track_markers/track_waypoint.png";photoMarkerIcon=new GIcon();photoMarkerIcon.iconSize=new GSize(29,33);photoMarkerIcon.shadowSize=new GSize(1,1);photoMarkerIcon.iconAnchor=new GPoint(16,33);photoMarkerIcon.infoWindowAnchor=new GPoint(16,33);photoMarkerIcon.image="http://static.gpsed.com/track_markers/track_photo.gif";trackMarkerIcon=new GIcon(G_DEFAULT_ICON);trackMarkerIcon.iconSize=new GSize(20,34);trackMarkerIcon.iconAnchor=new GPoint(10,34);trackMarkerIcon.infoWindowAnchor=new GPoint(10,34);}
if(params.popupMenu){MenuControl.initPopupMenus();}
if(params.mapEvents){currentNearestTracksZoom=map.getZoom();currentNearestTracksBounds=map.getBounds();GEvent.addListener(map,"click",function(marker,point){if(point){lastMapClickPoint=point;}
if(!marker){closePopupMenu();}});GEvent.addListener(map,"moveend",function(){closePopupMenu();checkZoomAndBoundsForNearestTracks();});GEvent.addListener(map,"zoomend",function(){recalculateTracksOnMap();checkZoomAndBoundsForNearestTracks();});if(isGECompatible){GEvent.addListener(map,"maptypechanged",function(){var currMapType=map.getCurrentMapType();if(currMapType==G_SATELLITE_3D_MAP){map.removeControl(overviewMap);addRemoveCountryFlags(false);if(currentToolbarControl!=usualMapTypeControl){currentToolbarControl=usualMapTypeControl;map.removeControl(gpsedToolbarControl);map.addControl(usualMapTypeControl);}
prevMapType=currMapType;return;}else if(prevMapType==G_SATELLITE_3D_MAP){map.addControl(overviewMap);if(countryFlagsLayerEnabled){toogleCountryFlagsLayer(true);}
if(currentToolbarControl!=gpsedToolbarControl){currentToolbarControl=gpsedToolbarControl;map.removeControl(usualMapTypeControl);addGPSedToolbarToMap();}}
gpsedToolbarControl.mapTypeChangedEventHandler_();prevMapType=currMapType;});}}
if(params.showCurrentMapCoords){GEvent.addListener(map,"mousemove",function(point){if(point&&e("currentMapCoords")){e("currentMapCoords").innerHTML="Latitude: "+convertDegrees2DMSStr(point.lat(),false)+"&nbsp;&nbsp;&nbsp;&nbsp; Longitude: "+convertDegrees2DMSStr(point.lng(),true);}});GEvent.addListener(map,"mouseout",function(point){if(point&&e("currentMapCoords")){e("currentMapCoords").innerHTML="";}});}
var mapOffset=jQuery("#map").offset();var errPanel=jQuery("#errorMessageContainer");if(errPanel&&mapOffset){errPanel.css("top",(mapOffset.top+20)+"px");errPanel.css("left",(mapOffset.left+80)+"px");}
jQuery("#map_magnifyingglass").css("display","none");}else{alert('Your browser is not compatible with the Google Maps API!');}}
function recalculateTracksOnMap(){if(globalTracksData.tracksCount==0){return;}
map.closeInfoWindow();var currZoom=map.getZoom();var mapCenterXY=map.fromLatLngToDivPixel(map.getCenter());var lngOffset=parseFloat(map.getCenter().lng()-
map.fromDivPixelToLatLng(new GPoint(mapCenterXY.x-10,mapCenterXY.y)).lng());var latOffset=parseFloat(map.getCenter().lat()-
map.fromDivPixelToLatLng(new GPoint(mapCenterXY.x,mapCenterXY.y+25)).lat());var separateBounds=new Array();for(var props in globalTracksData){if(globalTracksData[props]!=null&&globalTracksData[props].trackID!=null){var track=globalTracksData[props];if(!track.isAvailable||track.points[0]==null){continue;}
if(currZoom<=parseInt(track.markerZoomLevel)){var point=track.points[0];var wasMerged=false;var sw=new GLatLng(point.lat(),parseFloat(point.lng()-lngOffset));var ne=new GLatLng(parseFloat(point.lat()+latOffset),parseFloat(point.lng()+lngOffset));var currentBounds=new GLatLngBounds(sw,ne);for(var i=0;i<separateBounds.length;i++){if(currentBounds.intersects(separateBounds[i])){wasMerged=true;var markersIDList=globalTracksData[separateBounds[i].trackID].trackMarker.idsList;markersIDList.push(track.trackID);var num="";if(markersIDList.length<=25){num=markersIDList.length;}
globalTracksData[separateBounds[i].trackID].trackMarker.setImage("http://static.gpsed.com/track_markers/iconr"+num+".png");removeTrackMarker(track.trackID);break;}}
if(!wasMerged){if(track.trackMarker==null){if(track.isLive==true){trackMarkerIcon.image="http://static.gpsed.com/track_markers/track_live.png";}else{trackMarkerIcon.image="http://static.gpsed.com/track_markers/iconr1.png";}
var marker=new GMarker(point,{icon:trackMarkerIcon,title:"Track '"+track.trackName+"'"});GEvent.addListener(marker,"click",function(){if(this.idsList.length==1){lastMapClickPoint=this.getPoint();processTrackClick(this.idsList[0]);return;}
var listStr="";for(var i=0;i<this.idsList.length;i++){listStr+="<a title='Click here to view the whole track' href='javascript:void(0)' class='simpleActionLinks' onclick='centerAndZoomMapForTrack(\""+
this.idsList[i]+"\");map.closeInfoWindow();'>"+
globalTracksData[this.idsList[i]].trackName+"</a> (author: "+capitalize(globalTracksData[this.idsList[i]].accountName)+")<br>";}
this.openInfoWindowHtml("<b>Available tracks:</b><div class='trackMarkersDiv'>"+
listStr+"</div>");});marker.hide();map.addOverlay(marker);track.trackMarker=marker;}
if(track.isLive==true){track.trackMarker.setImage("http://static.gpsed.com/track_markers/track_live.png");}else{track.trackMarker.setImage("http://static.gpsed.com/track_markers/iconr1.png");}
track.trackMarker.idsList=new Array();track.trackMarker.idsList.push(track.trackID);currentBounds.trackID=track.trackID;separateBounds.push(currentBounds);}
if(isTrackShownOnMap(track.trackID)){removeTrackFromMap(track.trackID,globalTracksData);if(track.trackMarker!=null){track.trackMarker.show();}}}else{if(!isTrackShownOnMap(track.trackID)){removeTrackMarker(track.trackID);}
var currThinZoom=track.currentThinZoom;if(currZoom-1<=currThinZoom&&currThinZoom<=currZoom+1&&isTrackShownOnMap(track.trackID)){continue;}
if(track.thinedPolylines[currZoom]==null){if(currZoom>MAXIMUM_ZOOM_LEVEL_FOR_GENERALIZATION){if(track.thinedPolylines[MAXIMUM_ZOOM_LEVEL_FOR_GENERALIZATION]==null){track.thinedPolylines[MAXIMUM_ZOOM_LEVEL_FOR_GENERALIZATION]=createNewPolyline(thinOutTrack(MAXIMUM_ZOOM_LEVEL_FOR_GENERALIZATION,track.points),track);}
track.thinedPolylines[currZoom]=track.thinedPolylines[MAXIMUM_ZOOM_LEVEL_FOR_GENERALIZATION];}else{var thinedTrackPoints=thinOutTrack(currZoom,track.points);track.thinedPolylines[currZoom]=createNewPolyline(thinedTrackPoints,track);}}
track.currentThinZoom=currZoom;addTrackToMap(track.trackID);}}}}
function isTrackShownOnMap(trackID){return globalTracksData[trackID].mapOverlay!=null;}
function addTrackToMap(trackID,trackColor){if(!trackColor){trackColor=globalTracksData[trackID].color;}
if(isTrackShownOnMap(trackID)){removeTrackFromMap(trackID,globalTracksData);}
var currentZoom=map.getZoom();var poly=globalTracksData[trackID].thinedPolylines[currentZoom];if(trackColor!=poly.color){poly.setStrokeStyle({color:trackColor});}
GEvent.addListener(poly,"mouseover",function(){});GEvent.addListener(poly,"mouseout",function(){});if(!previewPhotosMapPage){GEvent.addListener(poly,"click",function(point){lastMapClickPoint=point;processTrackClick(this.trackID);});}else{GEvent.addListener(poly,"click",function(point){lastMapClickPoint=point;changePhotoPosition(point);});}
globalTracksData[trackID].mapOverlay=poly;map.addOverlay(poly);addStartFlagMarker(trackID);if(globalTracksData[trackID].isLive){addDirectionMarker(trackID);}else{addFinishFlagMarker(trackID);}
addWaypointsMarkers(trackID);addPhotoMarkers(trackID);}
function removeTrackFromMap(trackID,tracksData){var poly=tracksData[trackID].mapOverlay;if(poly!=null){GEvent.clearInstanceListeners(poly);map.removeOverlay(poly);var directionMarker=tracksData[trackID].directionMarker;if(directionMarker!=null){map.removeOverlay(directionMarker);if(trackMarkersGroup[directionMarker.markerID]){trackMarkersGroup[directionMarker.markerID]=null;}
GEvent.clearInstanceListeners(directionMarker);tracksData[trackID].directionMarker=null;}
var startMarker=tracksData[trackID].startMarker;if(startMarker!=null){map.removeOverlay(startMarker);if(trackMarkersGroup[startMarker.markerID]){trackMarkersGroup[startMarker.markerID]=null;}
GEvent.clearInstanceListeners(startMarker);tracksData[trackID].startMarker=null;}
var finishMarker=tracksData[trackID].finishMarker;if(finishMarker!=null){map.removeOverlay(finishMarker);if(trackMarkersGroup[finishMarker.markerID]){trackMarkersGroup[finishMarker.markerID]=null;}
GEvent.clearInstanceListeners(finishMarker);tracksData[trackID].finishMarker=null;}
removeWaypointMarkers(trackID,tracksData);removePhotoMarkers(trackID,tracksData);tracksData[trackID].mapOverlay=null;}}
function removeWaypointMarkers(trackID,tracksData){if(tracksData[trackID].waypointMarkers!=null){for(var i=0;i<tracksData[trackID].waypointMarkers.length;i++){var waypointMarker=tracksData[trackID].waypointMarkers[i];map.removeOverlay(waypointMarker);if(trackMarkersGroup[waypointMarker.markerID]){trackMarkersGroup[waypointMarker.markerID]=null;}
GEvent.clearInstanceListeners(waypointMarker);tracksData[trackID].waypointMarkers[i]=null;};}}
function removePhotoMarkers(trackID,tracksData){if(tracksData[trackID].photoMarkers!=null){for(var i=0;i<tracksData[trackID].photoMarkers.length;i++){var photoMarker=tracksData[trackID].photoMarkers[i];map.removeOverlay(photoMarker);if(trackMarkersGroup[photoMarker.markerID]){trackMarkersGroup[photoMarker.markerID]=null;}
GEvent.clearInstanceListeners(photoMarker);tracksData[trackID].photoMarkers[i]=null;};}}
function removeTrackMarker(trackID){if(globalTracksData[trackID].trackMarker!=null){map.removeOverlay(globalTracksData[trackID].trackMarker);globalTracksData[trackID].trackMarker=null;}}
function processTrackClick(trackID){closePopupMenu(false);lastClickedTrackID=trackID;var swMapPoint=map.getBounds().getSouthWest();var neMapPoint=map.getBounds().getNorthEast();var x=map.fromLatLngToDivPixel(lastMapClickPoint).x-
map.fromLatLngToDivPixel(new GLatLng(neMapPoint.lat(),swMapPoint.lng())).x;var y=map.fromLatLngToDivPixel(lastMapClickPoint).y-
map.fromLatLngToDivPixel(new GLatLng(neMapPoint.lat(),swMapPoint.lng())).y;repositionPopupMenu(++x,++y);}
function findPolylineById(domID){for(var props in globalTracksData){if(globalTracksData[props].mapOverlay!=null&&globalTracksData[props].mapOverlay.domid==domID){return globalTracksData[props].mapOverlay;}}
return null;}
function repositionPopupMenu(x,y){var newX=Math.min(x,e("map").clientWidth-POPUP_MENU_WIDTH-3);var newY=Math.min(y,e("map").clientHeight-(e("trackPopupMenu").childNodes.length*POPUP_MENU_ITEM_HEIGHT));map.removeControl(popupMenuControl);map.addControl(popupMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(newX,newY)));var xcolor=newX+POPUP_MENU_WIDTH+1;var maxXValue=e("map").clientWidth-COLOR_SUBMENU_WIDTH-3;if(xcolor>=maxXValue){xcolor-=POPUP_MENU_WIDTH+COLOR_SUBMENU_WIDTH+1;}
var ycolor=newY-15;ycolor=Math.min(ycolor,e("map").clientHeight-((POPUP_MENU_ITEM_HEIGHT+2)*TRACK_COLORS_LIST.length));map.removeControl(colorSubMenuControl);map.addControl(colorSubMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(xcolor,ycolor)));var xactions=newX+POPUP_MENU_WIDTH+1;maxXValue=e("map").clientWidth-ACTIONS_SUBMENU_WIDTH-3;if(xactions>=maxXValue){xactions-=POPUP_MENU_WIDTH+ACTIONS_SUBMENU_WIDTH+1;}
var yactions=newY+POPUP_MENU_ITEM_HEIGHT*2;yactions=Math.min(yactions,e("map").clientHeight-((POPUP_MENU_ITEM_HEIGHT+2)*4));map.removeControl(actionsSubMenuControl);map.addControl(actionsSubMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(xactions,yactions)));var xexport=newX+POPUP_MENU_WIDTH+1;maxXValue=e("map").clientWidth-EXPORT_SUBMENU_WIDTH-3;if(xexport>=maxXValue){xexport-=POPUP_MENU_WIDTH+EXPORT_SUBMENU_WIDTH+1;}
var yexport=newY+POPUP_MENU_ITEM_HEIGHT*2;yexport=Math.min(yexport,e("map").clientHeight-((POPUP_MENU_ITEM_HEIGHT+2)*EXPORT_FORMATS.length));map.removeControl(exportSubMenuControl);map.addControl(exportSubMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(xexport,yexport)));MenuControl.recombineMenuItems({mapPage:mainMapPage,isTrackOwner:globalTracksData[lastClickedTrackID].isMy,isPublic:globalTracksData[lastClickedTrackID].isPublic});var trackInfoMenuItem=e('trackInfoMenuItem');if(trackInfoMenuItem){GEvent.clearInstanceListeners(trackInfoMenuItem);GEvent.addDomListener(trackInfoMenuItem,'click',function(){closePopupMenu();InfoPanel.openForTrackAndCenter(map,globalTracksData[lastClickedTrackID]);});}
var trackDetailsMenuItem=e('trackDetailsMenuItem');if(trackDetailsMenuItem){GEvent.clearInstanceListeners(trackDetailsMenuItem);GEvent.addDomListener(trackDetailsMenuItem,'click',function(){closePopupMenu();window.open("/track/"+lastClickedTrackID);});}
for(var i=0;i<TRACK_COLORS_LIST.length;i++){var elem=e(TRACK_COLORS_LIST[i]);GEvent.clearInstanceListeners(elem);GEvent.addDomListener(elem,'click',function(){processTrackColorSubMenuClick(lastClickedTrackID,this.id);closePopupMenu();});}
var makePublicSubMenuItem=e('makePublicSubMenuItem');if(makePublicSubMenuItem){GEvent.clearInstanceListeners(makePublicSubMenuItem);GEvent.addDomListener(makePublicSubMenuItem,'click',function(){closePopupMenu();var ids=[lastClickedTrackID];processMakePublicTracks(ids,true);});}
var makePrivateSubMenuItem=e('makePrivateSubMenuItem');if(makePrivateSubMenuItem){GEvent.clearInstanceListeners(makePrivateSubMenuItem);GEvent.addDomListener(makePrivateSubMenuItem,'click',function(){closePopupMenu();var ids=[lastClickedTrackID];processMakePrivateTracks(ids,true);});}
var renameSubMenuItem=e('renameSubMenuItem');if(renameSubMenuItem){GEvent.clearInstanceListeners(renameSubMenuItem);GEvent.addDomListener(renameSubMenuItem,'click',function(){closePopupMenu();processRenameTrack(lastClickedTrackID,true);});}
var deleteSubMenuItem=e('deleteSubMenuItem');if(deleteSubMenuItem){GEvent.clearInstanceListeners(deleteSubMenuItem);GEvent.addDomListener(deleteSubMenuItem,'click',function(){closePopupMenu();var ids=[lastClickedTrackID];processDeleteTracks(ids);});}
for(var i=0;i<EXPORT_FORMATS.length;i++){var elem=e('export'+EXPORT_FORMATS[i]);elem.format=EXPORT_FORMATS[i];GEvent.clearInstanceListeners(elem);GEvent.addDomListener(elem,'click',function(){closePopupMenu();exportTrack(lastClickedTrackID,this.format);});}
var link2TrackMenuItem=e('link2TrackMenuItem');if(link2TrackMenuItem){GEvent.clearInstanceListeners(link2TrackMenuItem);GEvent.addDomListener(link2TrackMenuItem,'click',function(){closePopupMenu();TrackLinkPanel.openForTrack(map,globalTracksData[lastClickedTrackID]);});}
var zoomTrackMenuItem=e('zoomTrackMenuItem');GEvent.clearInstanceListeners(zoomTrackMenuItem);GEvent.addDomListener(zoomTrackMenuItem,'click',function(){centerAndZoomMapForTrack(lastClickedTrackID);closePopupMenu();});var closeMenuItem=e('closeTrackMenuItem');if(closeMenuItem){GEvent.clearInstanceListeners(closeMenuItem);GEvent.addDomListener(closeMenuItem,'click',function(){closeTrack(lastClickedTrackID);closePopupMenu();});}
GEvent.clearInstanceListeners(e('zoomInMapMenuItem'));GEvent.addDomListener(e('zoomInMapMenuItem'),'click',function(){if(lastMapClickPoint){map.setCenter(lastMapClickPoint);map.zoomIn();closePopupMenu();}else{alert("Strange case - click on popup menu item while menu is not opened!");}});GEvent.clearInstanceListeners(e('zoomOutMapMenuItem'));GEvent.addDomListener(e('zoomOutMapMenuItem'),'click',function(){if(lastMapClickPoint){map.setCenter(lastMapClickPoint);map.zoomOut();closePopupMenu();}else{alert("Strange case - click on popup menu item while menu is not opened!");}});GEvent.clearInstanceListeners(e('centerMapMenuItem'));GEvent.addDomListener(e('centerMapMenuItem'),'click',function(){if(lastMapClickPoint){map.setCenter(lastMapClickPoint);closePopupMenu();}else{alert("Strange case - click on popup menu item while menu is not opened!");}});popupMenuControl.setVisible(true);}
function checkZoomAndBoundsForNearestTracks(force){if(!nearestTracksEnabled){return;}
var currentZoom=map.getZoom();if(currentZoom<=3){currentNearestTracksBounds=null;removeOldNearestTracksFromMap();return;}
if(currentZoom<currentNearestTracksZoom-1||currentZoom>currentNearestTracksZoom+1||force){sendNearestTracksCommandRequest();return;}
var currCenter=map.getCenter();if(currentNearestTracksBounds==null||!currentNearestTracksBounds.containsLatLng(currCenter)){sendNearestTracksCommandRequest();return;}}
function enableNearestTracksLayer(){nearestTracksEnabled=true;checkZoomAndBoundsForNearestTracks(true);}
function disableNearestTracksLayer(){nearestTracksEnabled=false;removeOldNearestTracksFromMap();}
function enablePanoramioLayer(){panoramioLayerEnabled=true;if(panoramioOverlay==null){panoramioOverlay=new GLayer("com.panoramio.all");}
map.addOverlay(panoramioOverlay);}
function disablePanoramioLayer(){panoramioLayerEnabled=false;if(panoramioOverlay){map.removeOverlay(panoramioOverlay);}}
function enableWikipediaLayer(){wikipediaLayerEnabled=true;if(wikipediaOverlay==null){wikipediaOverlay=new GLayer("org.wikipedia.en");}
map.addOverlay(wikipediaOverlay);}
function disableWikipediaLayer(){wikipediaLayerEnabled=false;if(wikipediaOverlay){map.removeOverlay(wikipediaOverlay);}}
function toogleTrackMarkersLayer(enabled){trackMarkersLayerEnabled=enabled;for(var prop in trackMarkersGroup){var marker=trackMarkersGroup[prop];if(marker&&marker.markerID){if(enabled){marker.show();}else{marker.hide();}}}}
function toogleCountryFlagsLayer(enabled){countryFlagsLayerEnabled=enabled;if(enabled&&map.getZoom()>5){map.setZoom(5);}
if(countryFlagsLayerLoaded==false&&enabled){loadCountryFlagsLayer();}else if(need2restoreCountryFlags){addRemoveCountryFlags(true);}else{for(var prop in countryFlagsGroup){var marker=countryFlagsGroup[prop];if(marker&&marker.markerID){if(enabled){marker.show();}else{marker.hide();}}}}}
function addRemoveCountryFlags(add){if(!countryFlagsLayerLoaded){return;}
for(var prop in countryFlagsGroup){var marker=countryFlagsGroup[prop];if(marker&&marker.markerID){if(add){map.addOverlay(marker);}else{map.removeOverlay(marker);}}}
need2restoreCountryFlags=!add;}
function loadCountryFlagsLayer(){jQuery.getJSON("/patterns/countryInfo.json",function(data){jQuery.each(data,function(i,item){var countryBounds=new GLatLngBounds(new GLatLng(parseFloat(item.south),parseFloat(item.west)),new GLatLng(parseFloat(item.north),parseFloat(item.east)));var flagPoint=countryBounds.getCenter();var flagIcon=new GIcon(G_DEFAULT_ICON);flagIcon.iconSize=new GSize(16,11);flagIcon.shadowSize=new GSize(0,0);flagIcon.iconAnchor=new GPoint(8,5);flagIcon.infoWindowAnchor=new GPoint(8,5);flagIcon.image="http://static.gpsed.com/flags/"+item.countryCode.toLowerCase()+".gif";var flagMarker=createGoogleMarker(flagPoint,{icon:flagIcon,title:"header=["+item.countryName+"] body=["+item.description+"]"},countryFlagsGroup,true);flagMarker.countryCode=item.countryCode.toLowerCase();flagMarker.countryDesc=item.description;flagMarker.countryBounds=countryBounds;GEvent.addDomListener(flagMarker,'click',function(){centerAndZoomMapForBounds(this.countryBounds,true);});countryFlagsGroup[flagMarker.markerID]=flagMarker;map.addOverlay(flagMarker);});countryFlagsLayerLoaded=true;need2restoreCountryFlags=false;});}
function closePopupMenu(deselectTrack){hidePopupMenu();}
function isTabPanelOpened(){return e("slidingPanel").offsetLeft>=0;}
function currentTabIndex(){return lastOpenedTabIndex;}
function openTab(tabIndex,notLoad){var oldOpenedTabIndex=lastOpenedTabIndex;lastOpenedTabIndex=tabIndex;if(isTabPanelOpened()){mainTabs.tabs('select',tabIndex);if(notLoad){selectTab(lastOpenedTabIndex);}else{selectAndLoadTab(lastOpenedTabIndex);}}else{slide();}}
function changeSearchSubAccountsCondition(){var subAccountsList=ee("searchSubAccount");var state=e("searchAllAccounts").checked;for(var i=0;i<subAccountsList.length;i++){subAccountsList[i].disabled=state;}}
function changeSearchOtherAccountsFieldState(){var textField=e("otherAccountsName");textField.disabled=!e("searchOtherAccounts").checked;if(textField.disabled==false){textField.focus();textField.select();}}
function showSlidingPanel(panel){panel.className="visibleSlidingPanelContent";panel.style.height=currentContentPanelHeight+"px";}
function hideSlidingPanel(panel){panel.className="hiddenSlidingPanelContent";panel.style.height=0;}
function slide(){if(sliding){return;}
sliding=true;if(sliderLeft==0){rePositionMapForClosedSlidingPanel();sliderIntervalId=setInterval(slideLeftRun,50);}
else{sliderIntervalId=setInterval(slideRightRun,50);}}
function slideLeftRun(){var tabPanel=e('slidingPanel');var tooglePanel=e('panelHider');var minLeftValue=-TOGGLE_PANEL_LEFT_COORDS+TOGGLE_PANEL_WIDTH;if(sliderLeft<=minLeftValue){sliding=false;sliderLeft=minLeftValue;tabPanel.style.left=minLeftValue+'px';tooglePanel.style.left="0px";e('panelshowarrow').style.visibility="visible";clearInterval(sliderIntervalId);}else{sliderLeft-=SLIDE_SPEED;if(sliderLeft<minLeftValue){sliderLeft=minLeftValue;}
tabPanel.style.left=sliderLeft+'px';tooglePanel.style.left=(sliderLeft+TOGGLE_PANEL_LEFT_COORDS)+"px";}}
function slideRightRun(){var slider=e('slidingPanel');var tooglePanel=e('panelHider');if(sliderLeft>=0){sliding=false;sliderLeft=0;slider.style.left='0px';tooglePanel.style.left=TOGGLE_PANEL_LEFT_COORDS+"px";e('panelshowarrow').style.visibility="hidden";rePositionMapForOpenedSlidingPanel();clearInterval(sliderIntervalId);}else{sliderLeft+=SLIDE_SPEED;if(sliderLeft>0){sliderLeft=0;}
slider.style.left=sliderLeft+'px';tooglePanel.style.left=(sliderLeft+TOGGLE_PANEL_LEFT_COORDS)+"px";}}
function openColorChooser(colorIndicator){cancelHideColorChooserTask();e("trackListColorChooser").style.left=calculateLeftOffset(colorIndicator.id)+"px";e("trackListColorChooser").style.top=(calculateTopOffset(colorIndicator.id)+colorIndicator.clientHeight)+"px";e("trackListColorChooser").style.visibility="visible";e("trackListColorChooser").callerID=colorIndicator.id;}
function scheduleHideColorChooser(){cancelHideColorChooserTask();if(isColorChooserOpened()){colorChooserHiderTaskId=setTimeout(doHideColorChooser,600);}}
function doHideColorChooser(){if(e("trackListColorChooser")){e("trackListColorChooser").style.visibility="hidden";}
colorChooserHiderTaskId=null;}
function cancelHideColorChooserTask(){if(colorChooserHiderTaskId!=null){clearTimeout(colorChooserHiderTaskId);colorChooserHiderTaskId=null;}}
function isColorChooserOpened(){return e("trackListColorChooser").style.visibility=="visible";}
function getTrackIDFromColorIndicator(colorIndicatorCellID){var i=colorIndicatorCellID.indexOf("ColorIndicator");if(i<0){alert("Strange case: ID of colorIndicator DIV doesn't contain needed substring");}
return colorIndicatorCellID.substring(0,i);}
function getTrackIDFromSelectionCheckbox(checkbox){return checkbox.id.substring(0,checkbox.id.indexOf("-selector"));}
function processColorChooserClick(clickedColorDiv){var trackID=getTrackIDFromColorIndicator(e(e("trackListColorChooser").callerID).id);changeTrackColor(trackID,clickedColorDiv.trackColor,e(e("trackListColorChooser").callerID));doHideColorChooser();}
function processTrackColorSubMenuClick(trackID,trackColor){var allColorCells=ee("colorChooserCellDiv");if(allColorCells==null||allColorCells.length==0){changeTrackColor(trackID,trackColor);return;}
for(var i=0;i<allColorCells.length;i++){var foundTrackID=allColorCells[i].parentNode.id;if(getTrackIDFromColorIndicator(foundTrackID)==trackID){changeTrackColor(trackID,trackColor,e(foundTrackID));return;}}}
function changeTrackColor(trackID,trackColor,trackColorChooserCell){globalTracksData[trackID].color=trackColor;if(trackColorChooserCell){trackColorChooserCell.style.backgroundColor=trackColor;}
if(globalTracksData[trackID]&&globalTracksData[trackID].mapOverlay){setTimeout(function(){globalTracksData[trackID].mapOverlay.setStrokeStyle({color:globalTracksData[trackID].color});globalTracksData[trackID].mapOverlay.redraw(true);},10);}}
function onchangeTrackSelection(checkbox){var trackId=getTrackIDFromSelectionCheckbox(checkbox);var trackRow=e("trackListRow"+trackId);if(checkbox.checked){trackRow.style.backgroundColor="#fff5de";}else{trackRow.style.backgroundColor="white";}}
function createTrackListActionsMenu(){var container=e("actionsMenuContainer");if(container==null){return;}
var menu=document.createElement("select");menu.id="trackListActionsMenu";menu.disabled=true;menu.onchange=function(){var clickedItem=this.options[this.selectedIndex];if(clickedItem.disabled){return;}
var itemID=clickedItem.id;if(TRACKLIST_ACTIONS_MENU_ITEM_ID_CLOSETRACK==itemID){closeSelectedTracks();}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPUBLIC==itemID){makePublicSelectedTracks();}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPRIVATE==itemID){makePrivateSelectedTracks();}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_RENAME==itemID){renameSelectedTrack();}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_DELETE==itemID){deleteSelectedTracks();}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPSED==itemID){exportSelectedTrack(EXPORT_FORMATS[0]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPX==itemID){exportSelectedTrack(EXPORT_FORMATS[1]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_KML==itemID){exportSelectedTrack(EXPORT_FORMATS[2]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_ATTACH_PHOTOS==itemID){attachPhotosToSelectedTrack();}
this.selectedIndex=0;actualizeTrackListActionsMenu();};var dummyItem=document.createElement("option");dummyItem.innerHTML="More Actions...";dummyItem.text=dummyItem.innerHTML;dummyItem.className="disabledActionsMenuItem";menu.appendChild(dummyItem);createNewActionsMenuItem(menu,"Close Tracks",TRACKLIST_ACTIONS_MENU_ITEM_ID_CLOSETRACK);createNewActionsMenuItem(menu,"Make Public",TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPUBLIC);createNewActionsMenuItem(menu,"Make Private",TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPRIVATE);createNewActionsMenuItem(menu,"Rename",TRACKLIST_ACTIONS_MENU_ITEM_ID_RENAME);createNewActionsMenuItem(menu,"Delete",TRACKLIST_ACTIONS_MENU_ITEM_ID_DELETE);createNewActionsMenuItem(menu,"Export to GPSed",TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPSED);createNewActionsMenuItem(menu,"Export to GPX",TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPX);createNewActionsMenuItem(menu,"Export to KML",TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_KML);createNewActionsMenuItem(menu,"Attach Photos",TRACKLIST_ACTIONS_MENU_ITEM_ID_ATTACH_PHOTOS);container.appendChild(menu);}
function closeSelectedTracks(){var results=ee("tracksFromTrackList");var idList=new Array();for(var i=0;i<results.length;i++){if(results[i].checked){var trackID=getTrackIDFromSelectionCheckbox(results[i]);idList.push(trackID);}}
closeTracks(idList);}
function makePublicSelectedTracks(){var results=ee("tracksFromTrackList");var idList=new Array();for(var i=0;i<results.length;i++){if(results[i].checked){var trackID=getTrackIDFromSelectionCheckbox(results[i]);idList.push(trackID);}}
processMakePublicTracks(idList);}
function processMakePublicTracks(idList,single){var msg="The following tracks will be made Public:\n";var hasForeignTracks=false;for(var i=0;i<idList.length;i++){var trackID=idList[i];msg+=globalTracksData[trackID].trackName+"\n";if(!globalTracksData[trackID].isMy){hasForeignTracks=true;}}
if(hasForeignTracks){alert("You can't make Public tracks of other users");return false;}
msg+="\nProceed?";if(confirm(msg)){makePublic(idList,single);return true;}
return false;}
function makePrivateSelectedTracks(){var results=ee("tracksFromTrackList");var idList=new Array();for(var i=0;i<results.length;i++){if(results[i].checked){var trackID=getTrackIDFromSelectionCheckbox(results[i]);idList.push(trackID);}}
processMakePrivateTracks(idList);}
function processMakePrivateTracks(idList,single){var msg="The following tracks will be made Private:\n";var hasForeignTracks=false;for(var i=0;i<idList.length;i++){var trackID=idList[i];msg+=globalTracksData[trackID].trackName+"\n";if(!globalTracksData[trackID].isMy){hasForeignTracks=true;}}
if(hasForeignTracks){alert("You can't make Private tracks of other users");return false;}
msg+="\nProceed?";if(confirm(msg)){makePrivate(idList,single);return true;}
return false;}
function deleteSelectedTracks(){var results=ee("tracksFromTrackList");var idList=new Array();for(var i=0;i<results.length;i++){if(results[i].checked){var trackID=getTrackIDFromSelectionCheckbox(results[i]);idList.push(trackID);}}
processDeleteTracks(idList);}
function processDeleteTracks(idList){var msg="Following tracks will be deleted:\n";var hasLiveTracks=false;var hasForeignTracks=false;for(var i=0;i<idList.length;i++){var trackID=idList[i];msg+=globalTracksData[trackID].trackName+"\n";if(globalTracksData[trackID].isLive){hasLiveTracks=true;}
if(!globalTracksData[trackID].isMy){hasForeignTracks=true;}}
if(hasLiveTracks){alert("You can't delete LIVE tracks");return false;}
if(hasForeignTracks){alert("You can't delete tracks of other users");return false;}
msg+="\nWARNING: You will not be able to restore deleted tracks!\n\nProceed?";if(confirm(msg)){deleteTracks(idList);return true;}
return false;}
function renameSelectedTrack(){var results=ee("tracksFromTrackList");var idList=new Array();for(var i=0;i<results.length;i++){if(results[i].checked){processRenameTrack(getTrackIDFromSelectionCheckbox(results[i]));break;}}}
function exportSelectedTrack(format){var results=ee("tracksFromTrackList");for(var i=0;i<results.length;i++){if(results[i].checked){exportTrack(getTrackIDFromSelectionCheckbox(results[i]),format)
return;}}}
function attachPhotosToSelectedTrack(){var results=ee("tracksFromTrackList");for(var i=0;i<results.length;i++){if(results[i].checked){var trackID=getTrackIDFromSelectionCheckbox(results[i]);var url='/photoattach-selectPhotoService?trackId='+trackID+'&trackName='+
encodeURIComponent(Base64.encode(globalTracksData[trackID].trackNameOriginal));window.location=url;return;}}}
function createNewActionsMenuItem(menu,itemName,itemId){var item=document.createElement("option");item.innerHTML=itemName;item.text=itemName;item.id=itemId;item.disabled=false;item.className="";menu.appendChild(item);}
function actualizeTrackListActionsMenu(){var actionsMenu=e("trackListActionsMenu");if(actionsMenu==null){return;}
var hasPublicTracks=false;var hasPrivateTracks=false;var selectedTracksCnt=0;for(var prop in globalTracksData){if(globalTracksData[prop].trackID!=null&&e(globalTracksData[prop].trackID+"-selector").checked){selectedTracksCnt++;if(globalTracksData[prop].isPublic){hasPublicTracks=true;}else{hasPrivateTracks=true;}}}
if(selectedTracksCnt>0){actionsMenu.disabled=false;var actionsMenuItems=actionsMenu.options;for(var i=0;i<actionsMenuItems.length;i++){var item=actionsMenuItems[i].id;if(TRACKLIST_ACTIONS_MENU_ITEM_ID_CLOSETRACK==item){actualizeTrackListActionsMenuItem(selectedTracksCnt>0,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPUBLIC==item){actualizeTrackListActionsMenuItem(hasPrivateTracks,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_MAKEPRIVATE==item){actualizeTrackListActionsMenuItem(hasPublicTracks,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_RENAME==item){actualizeTrackListActionsMenuItem(selectedTracksCnt==1,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_DELETE==item){actualizeTrackListActionsMenuItem(selectedTracksCnt>0,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPSED==item){actualizeTrackListActionsMenuItem(selectedTracksCnt==1,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_GPX==item){actualizeTrackListActionsMenuItem(selectedTracksCnt==1,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_EXPORT_KML==item){actualizeTrackListActionsMenuItem(selectedTracksCnt==1,actionsMenuItems[i]);}else if(TRACKLIST_ACTIONS_MENU_ITEM_ID_ATTACH_PHOTOS==item){actualizeTrackListActionsMenuItem(selectedTracksCnt==1,actionsMenuItems[i]);}}}else{actionsMenu.disabled=true;}}
function actualizeTrackListActionsMenuItem(flag,item){if(flag){item.className="";item.disabled=false;}else{item.className="disabledActionsMenuItem";item.disabled=true;}}
function completeLeadingZeros(num){var monthStr=num.toString();if(monthStr.length<2){monthStr='0'+monthStr;}
return monthStr;}
function getShortDate(fullDate){if(fullDate==null){return"Empty Date";}
return fullDate.getUTCDate()+'.'+completeLeadingZeros(fullDate.getUTCMonth()+1)+'.'+fullDate.getUTCFullYear();}
function getShortDateFormatted(fullDateString){return fullDateString.substring(0,10);}
function getShortDateTime(fullDate){if(fullDate==null){return"Empty Date";}
return fullDate.getUTCDate()+'.'+completeLeadingZeros(fullDate.getUTCMonth()+1)+'.'+fullDate.getUTCFullYear()+' / '+fullDate.getUTCHours()+':'+completeLeadingZeros(fullDate.getUTCMinutes())+':'+completeLeadingZeros(fullDate.getUTCSeconds())+" GMT";}
function getShortTime(fullDate){if(fullDate==null){return"Empty Date";}
return fullDate.getUTCHours()+':'+completeLeadingZeros(fullDate.getUTCMinutes())+':'+completeLeadingZeros(fullDate.getUTCSeconds());}
function getFormattedDateDiff(startDate,finishDate){if(!startDate||!finishDate){return"n/a";}
var timeDiff=finishDate.getTime()-startDate.getTime();if(timeDiff<=0){return'n/a';}else if(timeDiff<60000){return Math.floor(timeDiff/1000)+" sec.";}else if(timeDiff<3600000){return Math.floor(timeDiff/60000)+" min.";}else{var value=Math.floor(timeDiff/3600000);if(value==1){return"1 hour";}else{return value+" hours";}}}
function getFullFormattedDateDiff(startDate,finishDate){if(!startDate||!finishDate){return"n/a";}
var timeDiff=finishDate.getTime()-startDate.getTime();if(timeDiff==0){return'n/a';}
var hours=Math.floor(timeDiff/3600000);var minutes=Math.floor((timeDiff-hours*3600000)/60000);var seconds=Math.floor((timeDiff-hours*3600000-minutes*60000)/1000);var answer="";if(hours>0){answer+=hours+"hr";}
if(minutes>0){if(answer.length>0){answer+=' ';}
answer+=minutes+"min";}
if(seconds>0&&answer.length<8){if(answer.length>0){answer+=' ';}
answer+=seconds+"s";}
return answer;}
function dateToStringLeadingZeros(dateTime){return((dateTime.getDate()<10?'0':'')+dateTime.getDate()+"."
+(dateTime.getMonth()<9?'0':'')+(dateTime.getMonth()+1)+"."
+dateTime.getFullYear());}
function showLoadingIndicator(){var indicator=e("loadingIndicator");if(indicator){e("loadingIndicator").style.visibility="visible";clearErrorMessage();}}
function hideLoadingIndicator(){var indicator=e("loadingIndicator");if(indicator){indicator.style.visibility="hidden";}}
function capitalize(str){if(str==null||str.length==0){return str;}
var firstLetter=str.charAt(0).toUpperCase();if(str.length>1){return firstLetter+str.substring(1,str.length);}
return firstLetter;}
function centerAndZoomMapForAllTracks(){var maxEastLng=-190;var minWestLng=190;var maxNorthLat=-90;var minSouthLat=90;for(var props in globalTracksData){if(globalTracksData[props]!=null&&globalTracksData[props].trackID!=null){var track=globalTracksData[props];if(track.isAvailable){maxEastLng=Math.max(track.eastLng,maxEastLng);minWestLng=Math.min(track.westLng,minWestLng);maxNorthLat=Math.max(track.northLat,maxNorthLat);minSouthLat=Math.min(track.southLat,minSouthLat);}}}
var bounds=new GLatLngBounds(new GLatLng(minSouthLat,minWestLng),new GLatLng(maxNorthLat,maxEastLng));centerAndZoomMapForBounds(bounds,globalTracksData.tracksCount==1);}
function centerAndZoomMapForTrack(trackID,openTrackInfo){var oldCenter=map.getCenter();var oldZoom=map.getZoom();var track=globalTracksData[trackID];var bounds=new GLatLngBounds(new GLatLng(track.southLat,track.westLng),new GLatLng(track.northLat,track.eastLng));centerAndZoomMapForBounds(bounds,true);var newCenter=map.getCenter();var newZoom=map.getZoom();if(newZoom==oldZoom&&newCenter.equals(oldCenter)&&openTrackInfo){InfoPanel.openForTrackAndCenter(map,globalTracksData[trackID]);}}
function centerAndZoomMapForBounds(bounds,oneTrack){var oldZoom=map.getZoom();var optimalZoom=map.getBoundsZoomLevel(bounds);if(!oneTrack){optimalZoom--;}
var zoom=Math.max(optimalZoom,DEFAULT_ZOOM_LEVEL);var center=bounds.getCenter();if(oldZoom!=zoom){map.setCenter(center,zoom);}else{map.panTo(center);}}
function selectOptimalMapType(){if(defaultMapType){map.setMapType(defaultMapType);}else{var curZoom=map.getZoom();if(curZoom>10){map.setMapType(G_SATELLITE_MAP);}else{map.setMapType(G_PHYSICAL_MAP);}}
centerAndZoomMapForAllTracks();}
function selectAllTracks(){var results=ee("tracksFromTrackList");for(var i=0;i<results.length;i++){results[i].checked=true;onchangeTrackSelection(results[i]);}
actualizeTrackListActionsMenu();}
function deselectAllTracks(){var results=ee("tracksFromTrackList");for(var i=0;i<results.length;i++){results[i].checked=false;onchangeTrackSelection(results[i]);}
actualizeTrackListActionsMenu();}
function completelyClearObject(obj){for(var prop in obj){delete obj[prop];}
delete obj;}
function getCourse(from,to){var degreesPerRadian=180.0/Math.PI;var lat1=from.latRadians();var lon1=from.lngRadians();var lat2=to.latRadians();var lon2=to.lngRadians();var angle=-Math.atan2(Math.sin(lon1-lon2)*Math.cos(lat2),Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(lon1-lon2));if(angle<0.0){angle+=Math.PI*2.0;}
angle=angle*degreesPerRadian;angle=angle.toFixed(1);return angle;}
function createGoogleMarker(point,opts,markersGroup,markerEnabled){var newMarker=new GMarker(point,opts);newMarker.markerID=Math.floor(Math.random()*1000000)+"-"+Math.floor(Math.random()*1000000);if(markersGroup){markersGroup[newMarker.markerID]=newMarker;}
return newMarker;}
function addDirectionMarker(trackID){if(globalTracksData[trackID]==null){return;}
if(globalTracksData[trackID].directionMarker!=null){map.removeOverlay(globalTracksData[trackID].directionMarker);}
var points=globalTracksData[trackID].points;var directionMarker=createDirectionMarker(points);directionMarker.calledTrackID=trackID;GEvent.clearInstanceListeners(directionMarker);GEvent.addDomListener(directionMarker,'click',function(){InfoPanel.openForTrackAndCenter(map,globalTracksData[this.calledTrackID]);});globalTracksData[trackID].directionMarker=directionMarker;map.addOverlay(directionMarker);if(trackMarkersLayerEnabled==false){directionMarker.hide();}}
function createDirectionMarker(trackPoints){var p1=trackPoints[trackPoints.length-1];var p2=trackPoints[trackPoints.length-2];var dir=getCourse(p2,p1);dir=Math.round(dir/3)*3;while(dir>=120){dir-=120;}
arrowIcon.image="http://www.google.com/intl/en_ALL/mapfiles/dir_"+dir+".png";return createGoogleMarker(p1,{icon:arrowIcon},trackMarkersGroup,trackMarkersLayerEnabled);}
function addStartFlagMarker(trackID){var firstTrackPoint=globalTracksData[trackID].points[0];var startMarker=createGoogleMarker(firstTrackPoint,{icon:startTrackIcon,title:"First point of track '"+globalTracksData[trackID].trackName+"'"},trackMarkersGroup,trackMarkersLayerEnabled);startMarker.calledTrackID=trackID;GEvent.addDomListener(startMarker,'click',function(){InfoPanel.openForTrackAndCenter(map,globalTracksData[this.calledTrackID]);});globalTracksData[trackID].startMarker=startMarker;map.addOverlay(startMarker);if(trackMarkersLayerEnabled==false){startMarker.hide();}}
function addFinishFlagMarker(trackID){var lastTrackPoint=globalTracksData[trackID].points[globalTracksData[trackID].points.length-1];var finishMarker=createGoogleMarker(lastTrackPoint,{icon:finishTrackIcon,title:"Last point of track '"+globalTracksData[trackID].trackName+"'"},trackMarkersGroup,trackMarkersLayerEnabled);finishMarker.calledTrackID=trackID;GEvent.addDomListener(finishMarker,'click',function(){InfoPanel.openForTrackAndCenter(map,globalTracksData[this.calledTrackID]);});globalTracksData[trackID].finishMarker=finishMarker;map.addOverlay(finishMarker);if(trackMarkersLayerEnabled==false){finishMarker.hide();}}
function addWaypointsMarkers(trackID){globalTracksData[trackID].waypointMarkers=new Array();var waypoints=globalTracksData[trackID].waypoints;for(var i=0;i<waypoints.length;i++){var waypointMarker=createGoogleMarker(waypoints[i].point,{icon:waypointMarkerIcon,title:"Waypoint of track '"+globalTracksData[trackID].trackName+"'"},trackMarkersGroup,trackMarkersLayerEnabled);waypointMarker.calledTrackID=trackID;waypointMarker.calledWaypoint=waypoints[i];GEvent.addDomListener(waypointMarker,'click',function(){var htmlStr="<table><tr align=\"left\"><td><b>Latitude:</b></td><td>"+convertDegrees2DMSStr(this.calledWaypoint.point.lat(),false)+"</td></tr>";htmlStr+="<tr align=\"left\"><td><b>Longitude:</b></td><td>"+convertDegrees2DMSStr(this.calledWaypoint.point.lng(),true)+"</td></tr>";htmlStr+="<tr align=\"left\"><td><b>Timestamp:</b></td><td>"+getShortDateTime(new Date(parseInt(this.calledWaypoint.timestamp)))+"</td></tr></table>";htmlStr+="<hr style='width:300px;'/>";htmlStr+="<div class='waypointBlowup'>"+this.calledWaypoint.desc+'</div>';this.openInfoWindowHtml(htmlStr);});globalTracksData[trackID].waypointMarkers.push(waypointMarker);map.addOverlay(waypointMarker);if(trackMarkersLayerEnabled==false){waypointMarker.hide();}}}
function addPhotoMarkers(trackID){globalTracksData[trackID].photoMarkers=new Array();var photos=globalTracksData[trackID].photos;for(var i=0;i<photos.length;i++){if(photos[i].point==null){continue;}
var photoMarker=createGoogleMarker(photos[i].point,{icon:photoMarkerIcon,title:"Photo of track '"+globalTracksData[trackID].trackName+"'"},trackMarkersGroup,trackMarkersLayerEnabled);photoMarker.calledTrackID=trackID;photoMarker.calledPhoto=photos[i];GEvent.addDomListener(photoMarker,'click',function(){var htmlStr='<div class="baloonPhotoHolder"><img src="'+this.calledPhoto.thumb2+'" alt="" class="noBorder"/>';htmlStr+="<div class='baloonPhotoDescription'>"+this.calledPhoto.desc+'</div>';if(this.calledPhoto.point){htmlStr+="<hr/><div class='baloonPhotoCoords'><b>Latitude:&nbsp;</b>"+convertDegrees2DMSStr(this.calledPhoto.point.lat(),false)+"&nbsp;&nbsp;&nbsp;<b>Longitude:&nbsp;</b>"+convertDegrees2DMSStr(this.calledPhoto.point.lng(),true)+'</div>';}
var photosCount=globalTracksData[trackID].photoMarkers.length;if(photosCount>1){var nextIndex=this.markerIndex+1;if(nextIndex>=photosCount){nextIndex=0;}
var prevIndex=this.markerIndex-1;if(prevIndex<0){prevIndex=photosCount-1;}
htmlStr+='<div class="fullWidth" style="padding-top:5px;"><a href="javascript:void(0)" onclick="GEvent.trigger(globalTracksData[\''+this.calledTrackID+'\'].photoMarkers['+
prevIndex+'], \'click\');" class="inpageLinks" style="float:left">Prev. Photo</a> <a href="javascript:void(0)" class="inpageLinks" style="float:right;" onclick="GEvent.trigger(globalTracksData[\''+this.calledTrackID+'\'].photoMarkers['+
nextIndex+'], \'click\');">Next Photo</a></div>';}
htmlStr+='</div>';this.openInfoWindowHtml(htmlStr);});photoMarker.markerIndex=globalTracksData[trackID].photoMarkers.length;globalTracksData[trackID].photoMarkers.push(photoMarker);map.addOverlay(photoMarker);if(trackMarkersLayerEnabled==false){photoMarker.hide();}}}
function findWaypointMarker(trackID,wpID){var markers=globalTracksData[trackID].waypointMarkers;for(var i=0;i<markers.length;i++){if(markers[i].calledWaypoint.id==wpID){return markers[i];}}}
function findPhotoMarker(trackID,id){var markers=globalTracksData[trackID].photoMarkers;for(var i=0;i<markers.length;i++){if(markers[i].calledPhoto.id==id){return markers[i];}}}
function centerWaypoint(waypointMarker){if(waypointMarker==null){return;}
map.setCenter(waypointMarker.calledWaypoint.point);GEvent.trigger(waypointMarker,'click');}
function centerPhoto(photoMarker){if(photoMarker==null){return;}
map.setCenter(photoMarker.calledPhoto.point);GEvent.trigger(photoMarker,'click');}
function popupSubMenuItemMouseOver(obj){obj.className='htmlMenuItem htmlMenuItemHovered';}
function popupMenuItemMouseOver(obj,func){obj.className='htmlMenuItem htmlMenuItemHovered';if(func){hideCurrentSubMenu();func.call();}else{hideCurrentSubMenu();}}
function popupMenuItemMouseOut(obj){obj.className='htmlMenuItem';}
function showResponseError(responseCode){var msg;if(responseCode==0){return;}
if(responseCode==-1||responseCode==503){msg="Sorry, GPSed web-service is temporarily unavailable. Please try again later.";}else{msg="There was some errors on server (code: "+responseCode+"). Please contact <a href='mailto:support@gpsed.com'>support team</a>";}
showErrorMessage(msg);}
function showErrorMessage(errorMsg){var errPnl=e("errorMessagePanel");if(!errPnl){return;}
errPnl.innerHTML=errorMsg;var errContainer=e("errorMessageContainer");if(errContainer){errContainer.style.display="block";}
if(clearErrorTaskID){clearTimeout(clearErrorTaskID);clearErrorTaskID=null;}
clearErrorTaskID=setTimeout(function(){clearErrorMessage();},5000);}
function clearErrorMessage(){var errPnl=e("errorMessagePanel");if(errPnl){errPnl.innerHTML="";}
var errContainer=e("errorMessageContainer");if(errContainer){errContainer.style.display="none";}
if(clearErrorTaskID){clearTimeout(clearErrorTaskID);clearErrorTaskID=null;}}
function findFreeTrackColor(globalTracksData,tmpTracksData){for(var i=0;i<TRACK_COLORS_LIST.length;i++){var currColorUser=false;for(var props in globalTracksData){if(globalTracksData[props]!=null&&globalTracksData[props].trackID!=null){var track=globalTracksData[props];if(!track.isAvailable){continue;}
if(track.color==TRACK_COLORS_LIST[i]){currColorUser=true;break;}}}
for(var props in tmpTracksData){if(tmpTracksData[props]!=null&&tmpTracksData[props].trackID!=null){var track=tmpTracksData[props];if(!track.isAvailable){continue;}
if(track.color==TRACK_COLORS_LIST[i]){currColorUser=true;break;}}}
if(currColorUser==false){return TRACK_COLORS_LIST[i];}}
return TRACK_COLORS_LIST[0];}
function removeIncorrectFilenameSymbols(filename){return filename.replace(/[\:\\\/"'#]/g,"");}
function exportTrack(trackID,format){var url='/export/'+encodeURIComponent(removeIncorrectFilenameSymbols(globalTracksData[trackID].accountName))+'-'+
encodeURIComponent(removeIncorrectFilenameSymbols(globalTracksData[trackID].trackNameOriginal))+'.'+format+'?id='+trackID+'&format='+format;window.location=url.toLowerCase();}
function abbreviate(str,maxLen){if(!str){return str;}
if(str.length>maxLen){return str.substring(0,maxLen-3)+"...";}else{return str;}}
function replaceBR2LineBreaks(str){return str.replace(/<br>/g,"\n");}
function replaceLineBreaks2BR(str){return str.replace(/\n/g,"<br>");}
function getStartCountryFlagHTML(track){var str='<img src="http://static.gpsed.com/flags/'+track.startCountryCode+'.gif" title="header=[Track starts in:] body=['+adaptTitile(track.startCountryName);if(track.startAdminName!=null){str+=', '+adaptTitile(track.startAdminName);}
if(track.startAsciiName!=null){str+=', '+adaptTitile(track.startAsciiName);}
str+=']" class="countryFlag" alt=""/>';return str;}
function adaptTitile(title){if(!title){return title;}
return title.replace("\\[","(").replace("\\]",")");}
function createNewPolyline(polyPoints,track){var polyline=new GPolyline(polyPoints,track.color,NORMAL_TRACK_WEIGHT,DEFAULT_TRACK_OPACITY);polyline.trackID=track.trackID;polyline.color=track.color;return polyline;}
function resizeApp(){if(resizeTaskID!=null){clearTimeout(resizeTaskID);}
resizeTaskID=setTimeout(doResize,150);}
function doResize(){tabSelectorHeight=jQuery("#mainTabsSelector").height();var topMapOffset=jQuery("#map").offset().top;var newHeight=getWindowHeight()-topMapOffset-2;if(newHeight>=0){e("page").style.height=newHeight+"px";e("map").style.height=newHeight+"px";if(e("rightPanel")){e("rightPanel").style.height=e("map").style.height;}
if(e("slidingPanel")){e("slidingPanel").style.height=newHeight+"px";currentContentPanelHeight=newHeight-jQuery("#copyrighter").height()-1;for(var i=0;i<TABS_COUNT;i++){fixTabHeight(i);}
e("copyrighter").style.top=currentContentPanelHeight+"px";var arrowHeight=e("panelhidearrow").clientHeight;e("panelHider").style.top=topMapOffset+"px";e("panelHider").style.paddingTop=(newHeight/2)+"px";e("panelHider").style.paddingBottom=(newHeight/2-arrowHeight-8)+"px";}}
if(map){map.checkResize();}}
function fixTabHeight(tabIndex){var obj=jQuery("#slidingPanelContent"+tabIndex+" > :first");obj.height(currentContentPanelHeight-tabSelectorHeight);if(jQuery.browser.msie){obj.css("padding-right","15px");}}
function e(id){return document.getElementById(id);}
function ee(id){return document.getElementsByName(id);}
function getWindowWidth(){if(window.self&&self.innerWidth){return self.innerWidth;}
if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}
return 0;}
function getWindowHeight(){if(window.self&&self.innerHeight){return self.innerHeight;}
if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}
return 0;}
function calculateTopOffset(id){var totalOffset=0;for(var elem=e(id);elem;elem=elem.offsetParent){totalOffset+=elem.offsetTop;}
return totalOffset;}
function calculateLeftOffset(id){var totalOffset=0;for(var elem=e(id);elem;elem=elem.offsetParent){totalOffset+=elem.offsetLeft;}
return totalOffset;}
function correctCoords(){e("slidingPanel").style.top=jQuery("#map").offset().top+"px";e("panelHider").style.left=(e("slidingPanel").offsetWidth)+"px";}
function createColorChooserPanel(){var htmlText="<table cellspacing='0' cellpadding='0' style='border: solid 1px black'>";for(var i=0;i<TRACK_COLORS_LIST.length;i++){if((i%4)==0){htmlText+="<tr>";}
htmlText+="<td><div class='colorChooserCell' style='background-color: "+TRACK_COLORS_LIST[i]+";' onclick='processColorChooserClick(this)' id='"+COLOR_CHOOSER_CELL_ID_PREFIX+TRACK_COLORS_LIST[i]+"'></div></td>";if((i%4)==(4-1)){htmlText+="</tr>";}}
htmlText+="</table>";e("trackListColorChooser").innerHTML=htmlText;for(var i=0;i<TRACK_COLORS_LIST.length;i++){e(COLOR_CHOOSER_CELL_ID_PREFIX+TRACK_COLORS_LIST[i]).trackColor=TRACK_COLORS_LIST[i];}}
function rePositionMapForOpenedSlidingPanel(){e("map").style.left=(TOGGLE_PANEL_LEFT_COORDS+TOGGLE_PANEL_WIDTH)+"px";e("map").style.marginRight=(TOGGLE_PANEL_LEFT_COORDS+TOGGLE_PANEL_WIDTH)+"px";if(map){map.checkResize();}}
function rePositionMapForClosedSlidingPanel(){e("map").style.left=TOGGLE_PANEL_WIDTH+"px";e("map").style.marginRight=(TOGGLE_PANEL_WIDTH)+"px";map.checkResize();}
var popupMenuControl;var colorSubMenuControl;var actionsSubMenuControl;var exportSubMenuControl;var currentSubMenu=null;function MenuControl(htmlText,parameters){this._html=htmlText;this.isVisible=true;this._isPrintable=false;this._isSelectable=false;if(parameters){this.isVisible=parameters.visible;this._isPrintable=parameters.printable;this._isSelectable=parameters.selectable;}
this.setVisible=function(vis){this._div.style.visibility=(vis)?"visible":"hidden";this._div.style.overflow=(vis)?"visible":"hidden";this._div.style.display=(vis)?"block":"none";this.isVisible=vis;};}
MenuControl.prototype=new GControl();MenuControl.prototype.initialize=function(parent){this.selectable=function(){return this._isSelectable;};this.printable=function(){return this._isPrintable;};this._div=document.createElement("div");this._div.innerHTML=this._html;this._div.style.position="absolute";this._div.style.zIndex="100";this.setVisible(this.isVisible);parent.getContainer().appendChild(this._div);return this._div;};MenuControl.recombineMenuItems=function(params){popupMenuControl._div.innerHTML=MenuControl.composeMenuHTML(params);actionsSubMenuControl._div.innerHTML=MenuControl.composeActionsMenuHTML();}
MenuControl.composeMenuHTML=function(params){var str='class="htmlMenuItem" style="height: '+POPUP_MENU_ITEM_HEIGHT+'px;"';var popupMenuHtml='<div id="trackPopupMenu" style="width:'+POPUP_MENU_WIDTH+'px">';if(params&&params.mapPage){popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="trackDetailsMenuItem">Track Details</div>';}else{popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="trackInfoMenuItem">Track Info</div>';}
popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this, showColorSubMenu);" onmouseout="popupMenuItemMouseOut(this);" id="changeColorMenuItem">Track Color -&gt;</div>';if(params&&params.isTrackOwner){popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this, showActionsSubMenu);" onmouseout="popupMenuItemMouseOut(this);" id="actionsMenuItem">Actions  -&gt;</div>';}
popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this, showExportSubMenu);" onmouseout="popupMenuItemMouseOut(this);" id="exportMenuItem">Export Track  -&gt;</div>'+'<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="zoomTrackMenuItem">Zoom Track</div>';if(params&&params.isPublic){popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="link2TrackMenuItem">Link to Track</div>';}
if(params&&params.mapPage){popupMenuHtml+='<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="closeTrackMenuItem">Close Track</div>';}
popupMenuHtml+='<div class="menuDelimiter"'+((isIE6)?"/>":"></div>")+'<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="zoomInMapMenuItem">Zoom In</div>'+'<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="zoomOutMapMenuItem">Zoom Out</div>'+'<div '+str+' onmouseover="popupMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="centerMapMenuItem">Center Map here</div>'+'</div>';return popupMenuHtml;}
MenuControl.composeActionsMenuHTML=function(){var str='class="htmlMenuItem" style="height: '+POPUP_MENU_ITEM_HEIGHT+'px;"';var popupSubMenuHtml='<div id="trackActionSubMenu" class="popupMenu" style="width:'+ACTIONS_SUBMENU_WIDTH+'px">';if(globalTracksData[lastClickedTrackID]&&globalTracksData[lastClickedTrackID].isPublic){popupSubMenuHtml+='<div '+str+' onmouseover="popupSubMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="makePrivateSubMenuItem">Make Private</div>';}else{popupSubMenuHtml+='<div '+str+' onmouseover="popupSubMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="makePublicSubMenuItem">Make Public</div>';}
popupSubMenuHtml+='<div '+str+' onmouseover="popupSubMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="renameSubMenuItem">Rename Track</div>'+'<div '+str+' onmouseover="popupSubMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" id="deleteSubMenuItem">Delete Track</div>'+'</div>';return popupSubMenuHtml;}
MenuControl.initPopupMenus=function(){createTrackPopupMenu();createColorSubMenu();createActionsSubMenu();createExportSubMenu();map.addControl(popupMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)));map.addControl(colorSubMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)));map.addControl(actionsSubMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)));map.addControl(exportSubMenuControl,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)));}
function createTrackPopupMenu(){popupMenuControl=new MenuControl(MenuControl.composeMenuHTML(),{visible:false,selectable:false});}
function createColorSubMenu(){var colorSubMenuHtml='<div class="popupMenu" style="height:'+((POPUP_MENU_ITEM_HEIGHT+2)*TRACK_COLORS_LIST.length)+'px; width: '+COLOR_SUBMENU_WIDTH+'px;">';for(var i=0;i<TRACK_COLORS_LIST.length;i++){colorSubMenuHtml+='<div class="htmlMenuItem" onmouseover="popupSubMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" style="height: '+POPUP_MENU_ITEM_HEIGHT+'px" id="'+TRACK_COLORS_LIST[i]+'"><div class="colorSubMenuItem" style="background-color:'+TRACK_COLORS_LIST[i]+';"></div></div>';}
colorSubMenuHtml+='</div>';colorSubMenuControl=new MenuControl(colorSubMenuHtml,{visible:false,selectable:false});}
function createActionsSubMenu(){actionsSubMenuControl=new MenuControl(MenuControl.composeActionsMenuHTML(),{visible:false,selectable:false});}
function createExportSubMenu(){var exportSubMenuHtml='<div id="trackExportSubMenu" class="popupMenu" style="height:'+((POPUP_MENU_ITEM_HEIGHT+2)*EXPORT_FORMATS.length)+'px; width: '+EXPORT_SUBMENU_WIDTH+'px;">';for(var i=0;i<EXPORT_FORMATS.length;i++){var title="";if("KML"==EXPORT_FORMATS[i]){title="To view 3D in Google Earth";}
exportSubMenuHtml+='<div class="htmlMenuItem" onmouseover="popupSubMenuItemMouseOver(this);" onmouseout="popupMenuItemMouseOut(this);" style="height: '+POPUP_MENU_ITEM_HEIGHT+'px" id="export'+EXPORT_FORMATS[i]+'" title="'+title+'">'+EXPORT_FORMATS[i]+'</div>';}
exportSubMenuHtml+='</div>';exportSubMenuControl=new MenuControl(exportSubMenuHtml,{visible:false,selectable:false});}
function hidePopupMenu(){hideCurrentSubMenu();if(popupMenuControl&&popupMenuControl.isVisible){popupMenuControl.setVisible(false);}}
function showColorSubMenu(){if(colorSubMenuControl&&!colorSubMenuControl.isVisible){colorSubMenuControl.setVisible(true);}
currentSubMenu=colorSubMenuControl;}
function showActionsSubMenu(){if(!actionsSubMenuControl.isVisible){actionsSubMenuControl.setVisible(true);}
currentSubMenu=actionsSubMenuControl;}
function showExportSubMenu(){if(!exportSubMenuControl.isVisible){exportSubMenuControl.setVisible(true);}
currentSubMenu=exportSubMenuControl;}
function hideCurrentSubMenu(){if(currentSubMenu){currentSubMenu.setVisible(false);currentSubMenu=null;}}
function InfoPanel(trackInfoObj){this.trackInfo=trackInfoObj;this.isVisible=false;this.selectable=function(){return true;};this.printable=function(){return true;};this.setVisible=function(vis){this._div.style.visibility=(vis)?"visible":"hidden";this._div.style.overflow=(vis)?"visible":"hidden";this.isVisible=vis;};}
InfoPanel.prototype=new GControl();InfoPanel.prototype.initialize=function(map){this.parentMap=map;this._div=document.createElement("div");this._div.innerHTML=this.composeHTMLContent();this._div.style.position="absolute";this._div.style.zIndex="200";this.setVisible(this.isVisible);map.getContainer().appendChild(this._div);return this._div;};InfoPanel.prototype.setTrackInfoObject=function(obj){this.trackInfo=obj;};InfoPanel.prototype.closePanel=function(){if(lastTrackInfoPanel.isVisible){lastTrackInfoPanel.setVisible(false);this.parentMap.removeControl(lastTrackInfoPanel);}};InfoPanel.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(15,15));};InfoPanel.prototype.composeHTMLContent=function(){var track=this.trackInfo;var trackInfoHeaderClass="trackInfoHeaderFinished";var trackInfoPanelClass="trackInfoPanelFinished";var trackInfoPanelMainDivClass="trackInfoPanelMainDivFinished";var trackInfoPanelOddRowClass="trackInfoPanelOddRowFinished";if(track.isLive){trackInfoHeaderClass="trackInfoHeaderOnline";trackInfoPanelClass="trackInfoPanelOnline";trackInfoPanelMainDivClass="trackInfoPanelMainDivOnline";trackInfoPanelOddRowClass="trackInfoPanelOddRowOnline";}
var moreDetails=window.location.toString().indexOf('/track/')==-1?'<td class="tabDelimiter">&nbsp;</td><td>&nbsp;<a href="/track/'+track.trackID+'" class="simpleActionLinks" target="_black" style="margin-left="15px;"">More details</a></td>':'';var html='<div class="trackInfoPanel '+trackInfoPanelClass+'"><div class="'+trackInfoHeaderClass+'">'+'<table><tr><td align="left" class="trackInfoPanelTrackName nobr">'+track.trackName+'</td><td align="center" class="fullWidth"></td><td align="right" valign="top"><img src="http://static.gpsed.com/close.gif" class="trackInfoPanelCloseBtn" alt="Close" onclick="lastTrackInfoPanel.closePanel();"/></td>'+'</tr></table></div><div class="trackInfoTabs"><table cellspacing="0" cellpadding="0"><tr><td class="selectedTab" valign="middle" align="center""><a class="selectedTabLink" href="javascript:void(0)">General Info</a></td>'+moreDetails+'</tr></table>'+'</div><div class="trackInfoPanelMainDiv '+trackInfoPanelMainDivClass+'"><table class="fullWidth"><tr class="'+trackInfoPanelOddRowClass+'">'+'<td class="trackInfoPanelPropertyName" align="left">Author:</td><td align="left">'+capitalize(track.accountName)+'</td></tr><tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Start Date/Time:</td><td align="left">'+track.startDateFormatted+'</td></tr>';if(track.isLive){html+='<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Next Response:</td><td align="left">'+getShortDateTime(track.nextResponse);}else{html+='<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Finish Date/Time:</td><td align="left">'+track.finishDateFormatted;}
html+='</td></tr><tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Duration:</td><td align="left">'+getFullFormattedDateDiff(track.startDate,track.finishDate)+'</td></tr><tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Distance:</td><td align="left">'+track.distance+'<span style="margin-left:5px;font-style:italic;font-size:10px">('+track.points.length+' points)</span>'+'</td></tr><tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Status:</td><td align="left">'+track.access+'</td></tr>'+'<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Country:</td><td align="left">'+getCountryGeoHtmlString(track.trackID)+'</td></tr>'+'<tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">City:</td><td align="left">'+getCityGeoHtmlString(track.trackID)+'</td></tr>'+'<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">GPS Device:</td><td align="left">'+track.device+'</td></tr>'+'<tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Views:</td><td align="left">'+track.viewCount+'</td></tr>'+'<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Photos:</td><td align="left">'+track.photos.length+'</td></tr>'+'<tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Waypoints:</td><td align="left">'+track.waypoints.length+'</td></tr>'+'<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Altitude (average):</td><td align="left">'+track.averageAltitude+'</td></tr>'+'<tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Altitude (max):</td><td align="left">'+track.maxAltitude+'</td></tr>'+'<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Speed (average):</td><td align="left">'+track.averageSpeed+'</td></tr>'+'<tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Speed (max):</td><td align="left">'+track.maxSpeed+'</td></tr>'+'<tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Easternmost Point:</td><td align="left">'+track.eastLngDMS+'</td></tr><tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Northernmost Point:</td><td align="left">'+track.northLatDMS+'</td></tr><tr class="'+trackInfoPanelOddRowClass+'"><td class="trackInfoPanelPropertyName" align="left">Westernmost Point:</td><td align="left">'+track.westLngDMS+'</td></tr><tr class="trackInfoPanelEvenRow"><td class="trackInfoPanelPropertyName" align="left">Southernmost Point:</td><td align="left">'+track.southLatDMS+'</td></tr>';html+='</table></div></div>';return html;};InfoPanel.openForTrackAndCenter=function(map,trackInfoIbj){closePopupMenu();if(lastTrackLinkPanel){lastTrackLinkPanel.closePanel();}
lastTrackInfoPanel.setTrackInfoObject(trackInfoIbj);if(!lastTrackInfoPanel.isVisible){map.addControl(lastTrackInfoPanel,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)));}
var visibleMapWidth=map.getSize().width;var visibleMapHeight=map.getSize().height;var x=(visibleMapWidth/2)-(lastTrackInfoPanel._div.clientWidth/2);var y=(visibleMapHeight/2)-(lastTrackInfoPanel._div.clientHeight/2);map.removeControl(lastTrackInfoPanel);map.addControl(lastTrackInfoPanel,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(x,y)));lastTrackInfoPanel.setVisible(true);};var lastTrackInfoPanel=new InfoPanel(new Object());function TrackLinkPanel(track){this.track=track;this.isVisible=false;this.selectable=function(){return true;};this.printable=function(){return true;};this.setVisible=function(vis){this._div.style.visibility=(vis)?"visible":"hidden";this._div.style.overflow=(vis)?"visible":"hidden";this.isVisible=vis;};}
TrackLinkPanel.prototype=new GControl();TrackLinkPanel.prototype.initialize=function(map){this.parentMap=map;this._div=document.createElement("div");this._div.innerHTML=this.composeHTMLContent();this._div.style.position="absolute";this._div.style.zIndex="201";this.setVisible(this.isVisible);map.getContainer().appendChild(this._div);return this._div;};TrackLinkPanel.prototype.setTrack=function(obj){this.track=obj;};TrackLinkPanel.prototype.closePanel=function(){if(lastTrackLinkPanel.isVisible){lastTrackLinkPanel.setVisible(false);this.parentMap.removeControl(lastTrackLinkPanel);}};TrackLinkPanel.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(50,50));};TrackLinkPanel.prototype.composeHTMLContent=function(){var track=this.track;var trackLink;var otherStatus;var methodName;if(track.isPublic){trackLink="http://"+location.host+'/track/'+track.trackID;otherStatus="Private";methodName="processMakePrivateTracks";}else{trackLink="http://"+location.host+'/track/'+track.secretCode;otherStatus="Public";methodName="processMakePublicTracks";}
var trackLinkHeaderClass="trackInfoHeaderFinished";var trackLinkPanelClass="trackInfoPanelFinished";var trackLinkPanelMainDivClass="trackInfoPanelMainDivFinished";if(track.isLive){trackLinkHeaderClass="trackInfoHeaderOnline";trackLinkPanelClass="trackInfoPanelOnline";trackLinkPanelMainDivClass="trackInfoPanelMainDivOnline";}
var html='<div class="trackLinkPanel '+trackLinkPanelClass+'"><div class="'+trackLinkHeaderClass+'">'+'<table><tr><td align="left" class="trackInfoPanelTrackName nobr">Link to Track "'+track.trackName+'"'+'</td><td align="center" class="fullWidth"></td><td align="right" valign="top"><img src="http://static.gpsed.com/close.gif" class="trackInfoPanelCloseBtn" alt="Close" onclick="lastTrackLinkPanel.closePanel();"/></td>'+'</tr></table></div><div class="trackInfoPanelMainDiv '+trackLinkPanelMainDivClass+'" style="border:none; padding:5px 15px;">'+'<span>Status: <b>'+track.access+'</b>';if(track.isMy){html+='&nbsp;&nbsp;&nbsp;( <a class="simpleActionLinks" href="javascript:void(0)" onclick="var ids=[\''+track.trackID+'\']; '+methodName+'(ids, false);">Make '+otherStatus+'</a> )';}
html+='</span><br><br><span class="simpleText">Direct link to the track for sharing:</span><table class="fullWidth"><tr><td align="left">'+'<input value="'+trackLink+'" id="trackLinkInput" size="48" onfocus="this.select();" readonly="true"></td><td align="left"><a target="_blank" href="'+trackLink+'" onclick="lastTrackLinkPanel.closePanel(); return super();"><img src="http://static.gpsed.com/linkopen.gif" class="noBorder"/></a></td></tr></table>';if(track.isPrivate){html+='<span class="trackLinkNote inpageSmallText">You can use unique URL above for sharing your private track with friends via IM, E-mail or Social Networks. If you want to make previously generated URL inaccessible just generate a new one by pressing <i>Generate new URL</i> button below.</span>'+'<div align="center" style="padding-top:5px;"><img src="http://static.gpsed.com/generate_url.gif" class="pointerCursor" onclick="lastTrackLinkPanel.closePanel(); doGenerateURL(\''+track.trackID+'\');"/></div>';}
if(track.isMy){html+='<br /><div style="text-align: justify">If you are affiliated with any photo or GPS-related web community you may reflect your GPS tracks in it. If your community is not listed please ';html+='<a class="simpleActionLinks" href="mailto:communities@gpsed.com">provide some information</a>';html+=' about it (name, URL, your GPSed Username) and we will add it to the list.</div><br />';html+='<div style="padding-top: 3px; float: left;">Link this track to the community: <select name="communitySelect" id="communitySelect" style="margin-left:10px; width:175px" onchange="changeCommunity(\''+track.trackID+'\')">';html+='<option value="-1">None</option>';for(var i=0;i<communities.length;i++){var community=communities[i];html+='<option value="'+community.id+'"';if(community.id==track.communityId){html+=' selected';}
html+='>'+community.name+'</option>';}
html+='</select></div>';html+='<div id="communitySaveStatus"></div><br clear="all">';}
html+='</div></div>';return html;};TrackLinkPanel.openForTrack=function(map,track){if(lastTrackInfoPanel){lastTrackInfoPanel.closePanel();}
lastTrackLinkPanel.setTrack(track);if(!lastTrackLinkPanel.isVisible){map.addControl(lastTrackLinkPanel,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)));}
var visibleMapWidth=map.getSize().width;var visibleMapHeight=map.getSize().height;var x=(visibleMapWidth/2)-(lastTrackLinkPanel._div.clientWidth/2);var y=180;map.removeControl(lastTrackLinkPanel);map.addControl(lastTrackLinkPanel,new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(x,y)));lastTrackLinkPanel.setVisible(true);var linkF=e("trackLinkInput");if(linkF){linkF.focus();linkF.select();}};var lastTrackLinkPanel=new TrackLinkPanel(new Object());var DEFAULT_TOOLBAR_SEARCH_TEXT="Search over the Earth";var gpsedToolbarControl;var usualMapTypeControl;var globalMapTypeDivs;var globalToolbarLayerButtons=new Array();var currentToolbarControl;var toolbarButtonTitles=[];var toolbarPrefsUpdateTask;function GPSedToolbarControl(opt_opts){this.options=opt_opts||{};toolbarButtonTitles["nearestTracksToolbarBtn"]="<b>Popular Tracks</b>: Show/Hide popular GPSed tracks";toolbarButtonTitles["panoramioToolbarBtn"]="<b>Panaramio</b>: Show/Hide Panaramio photos";toolbarButtonTitles["wikipediaToolbarBtn"]="<b>Wikipedia</b>: Show/Hide Wikipedia articles";toolbarButtonTitles["markersToolbarBtn"]="<b>Markers</b>: Show/Hide track markers";toolbarButtonTitles["countryFlagsToolbarBtn"]="<b>Flags</b>: Show/Hide national flags with useful information";toolbarButtonTitles["MapToolbarBtn"]="<b>Map</b>: Switch to Map view";toolbarButtonTitles["SatToolbarBtn"]="<b>Satellite</b>: Switch to Satellite view";toolbarButtonTitles["HybToolbarBtn"]="<b>Hybrid</b>: Switch to Hybrid view";toolbarButtonTitles["TerToolbarBtn"]="<b>Terrain</b>: Switch to Terrain view";toolbarButtonTitles["EarthToolbarBtn"]="<b>Earth</b>: Switch to Google Earth view";};GPSedToolbarControl.prototype=new GControl();GPSedToolbarControl.prototype.initialize=function(map){var container=document.createElement("div");container.setAttribute("id","GPSedToolbarMainDiv");var me=this;var toolbarLayersBtnDivs=me.addLayerButtons_();var toolbarMapTypesBtnDivs=me.addMapTypeButtons_(map);globalMapTypeDivs=toolbarMapTypesBtnDivs;var layerButtonsContainer=document.createElement("div");layerButtonsContainer.className="toolbarBtnGroupDiv";for(var i=0;i<toolbarLayersBtnDivs.length;i++){layerButtonsContainer.appendChild(toolbarLayersBtnDivs[i]);}
layerButtonsContainer.style.cssFloat="left";layerButtonsContainer.style.styleFloat="left";container.appendChild(layerButtonsContainer);var mapTypeButtonsContainer=document.createElement("div");mapTypeButtonsContainer.className="toolbarBtnGroupDiv";for(i=0;i<toolbarMapTypesBtnDivs.length;i++){mapTypeButtonsContainer.appendChild(toolbarMapTypesBtnDivs[i]);}
mapTypeButtonsContainer.style.marginLeft="5px";mapTypeButtonsContainer.style.cssFloat="left";mapTypeButtonsContainer.style.styleFloat="left";container.appendChild(mapTypeButtonsContainer);var mapSearchDiv=document.createElement("div");var mapSearchInut=document.createElement("input");mapSearchInut.id="GPSedToolbarInput";mapSearchInut.type="text";if(jQuery.browser.msie){mapSearchInut.className="GPSedToolbarInputIE";}
if(jQuery.browser.opera){mapSearchInut.style.marginTop="2px";}
if(!isGECompatible){mapSearchInut.style.width="131px !important";}
mapSearchInut.onblur=function(){if(this.value==""){this.value=DEFAULT_TOOLBAR_SEARCH_TEXT;this.style.color="#AAAAAA";}};mapSearchInut.onfocus=function(){if(this.value==DEFAULT_TOOLBAR_SEARCH_TEXT){this.value="";this.style.color="#000000";}};mapSearchInut.onkeypress=function(param){var keyCode=0;if(window.event){keyCode=window.event.keyCode;}else if(param){keyCode=param.keyCode;}
if(keyCode==13&&this.value!=DEFAULT_TOOLBAR_SEARCH_TEXT&&this.value!=""){submitGeoSearch(this.value);return false;}
return true;};mapSearchInut.ondblclick=function(){this.value="";if(searchResultMarker){map.removeOverlay(searchResultMarker);searchResultMarker=null;}};mapSearchInut.value=DEFAULT_TOOLBAR_SEARCH_TEXT;mapSearchInut.title="header=[GeoSearch] delay=[1000] body=[Search countries, cities, addresses and places of interest, for example:<ul><li>Saint Lucia</li><li>White House</li><li>Odessa, Ukraine</li><li>Madison Ave, New York, USA</li></ul><i>double click to clear search query</i>]";mapSearchDiv.style.clear="both";mapSearchDiv.appendChild(mapSearchInut);var mapSubmitBtn=document.createElement("input");mapSubmitBtn.id="GPSedToolbarSubmitBtn";mapSubmitBtn.type="image";mapSubmitBtn.width=78;mapSubmitBtn.height=19;mapSubmitBtn.alt="Find on map";mapSubmitBtn.src="http://static.gpsed.com/toolbar_submit.png";if(jQuery.browser.msie){mapSubmitBtn.className="GPSedToolbarSubmitBtnIE";}
mapSubmitBtn.onclick=function(){var text=jQuery("#GPSedToolbarInput").val();if(text!=DEFAULT_TOOLBAR_SEARCH_TEXT&&text!=""){submitGeoSearch(text);}};mapSearchDiv.appendChild(mapSubmitBtn);container.appendChild(mapSearchDiv);map.getContainer().appendChild(container);return container;};GPSedToolbarControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_RIGHT,new GSize(50,10));};GPSedToolbarControl.prototype.addLayerButtons_=function(){var me=this;var btnDiv;var toolbarLayersBtnDivs=new Array();btnDiv=me.createButton_("nearestTracksToolbarBtn");globalToolbarLayerButtons["nearestTracksToolbarBtn"]=btnDiv;GEvent.addDomListener(btnDiv,"click",function(){if(nearestTracksEnabled){disableNearestTracksLayer();me.setButtonState_(this,false);}else{enableNearestTracksLayer();me.setButtonState_(this,true);}
me.saveToolbarButtonState_("nearestTracks",nearestTracksEnabled);});toolbarLayersBtnDivs.push(btnDiv);btnDiv=me.createButton_("panoramioToolbarBtn");globalToolbarLayerButtons["panoramioToolbarBtn"]=btnDiv;GEvent.addDomListener(btnDiv,"click",function(){if(panoramioLayerEnabled){disablePanoramioLayer();me.setButtonState_(this,false);}else{enablePanoramioLayer();me.setButtonState_(this,true);}
me.saveToolbarButtonState_("panoramioLayer",panoramioLayerEnabled);});toolbarLayersBtnDivs.push(btnDiv);btnDiv=me.createButton_("wikipediaToolbarBtn");globalToolbarLayerButtons["wikipediaToolbarBtn"]=btnDiv;GEvent.addDomListener(btnDiv,"click",function(){if(wikipediaLayerEnabled){disableWikipediaLayer();me.setButtonState_(this,false);}else{enableWikipediaLayer();me.setButtonState_(this,true);}
me.saveToolbarButtonState_("wikipediaLayer",wikipediaLayerEnabled);});toolbarLayersBtnDivs.push(btnDiv);btnDiv=me.createButton_("markersToolbarBtn");globalToolbarLayerButtons["markersToolbarBtn"]=btnDiv;GEvent.addDomListener(btnDiv,"click",function(){if(trackMarkersLayerEnabled){toogleTrackMarkersLayer(false);me.setButtonState_(this,false);}else{toogleTrackMarkersLayer(true);me.setButtonState_(this,true);}
me.saveToolbarButtonState_("trackMarkers",trackMarkersLayerEnabled);});toolbarLayersBtnDivs.push(btnDiv);btnDiv=me.createButton_("countryFlagsToolbarBtn");globalToolbarLayerButtons["countryFlagsToolbarBtn"]=btnDiv;GEvent.addDomListener(btnDiv,"click",function(){if(countryFlagsLayerEnabled){toogleCountryFlagsLayer(false);me.setButtonState_(this,false);}else{toogleCountryFlagsLayer(true);me.setButtonState_(this,true);}
me.saveToolbarButtonState_("countryFlags",countryFlagsLayerEnabled);});toolbarLayersBtnDivs.push(btnDiv);return toolbarLayersBtnDivs;};GPSedToolbarControl.prototype.addMapTypeButtons_=function(map){var me=this;var mapTypes=map.getMapTypes();var toolbarMapTypesBtnDivs=new Array();for(var i=0;i<mapTypes.length;i++){var newBtnDiv=me.createButton_(mapTypes[i].getName(true)+"ToolbarBtn");toolbarMapTypesBtnDivs.push(newBtnDiv);}
me.resetMapTypeButtonEvents_(map,toolbarMapTypesBtnDivs);return toolbarMapTypesBtnDivs;};GPSedToolbarControl.prototype.resetMapTypeButtonEvents_=function(map,mapTypeDivs){var me=this;var mapTypes=map.getMapTypes();for(var i=0;i<mapTypeDivs.length;i++){me.assignMapTypeButtonEvent_(mapTypeDivs[i],map,mapTypes[i]);}};GPSedToolbarControl.prototype.mapTypeChangedEventHandler_=function(mapTypeDivs){if(!mapTypeDivs){mapTypeDivs=globalMapTypeDivs;}
var divIndex=0;var mapType=map.getCurrentMapType();if(mapType==G_SATELLITE_3D_MAP){return;}
currentToolbarControl=gpsedToolbarControl;gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["nearestTracksToolbarBtn"],nearestTracksEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["panoramioToolbarBtn"],panoramioLayerEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["wikipediaToolbarBtn"],wikipediaLayerEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["markersToolbarBtn"],trackMarkersLayerEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["countryFlagsToolbarBtn"],countryFlagsLayerEnabled);var mapTypes=map.getMapTypes();for(var i=0;i<mapTypes.length;i++){if(mapTypes[i]==mapType){divIndex=i;break;}}
GEvent.trigger(mapTypeDivs[divIndex],"click");}
GPSedToolbarControl.prototype.assignMapTypeButtonEvent_=function(div,map,mapType){var me=this;div.ownMapType=mapType;GEvent.addDomListener(div,"click",function(){var btn=this;var mapTypes=map.getMapTypes();var ownMapType=btn.ownMapType;for(var j=0;j<mapTypes.length;j++){if(ownMapType==mapTypes[j]){me.setButtonState_(btn,true);}else{me.setButtonState_(globalMapTypeDivs[j],false);}}
map.setMapType(ownMapType);me.saveToolbarButtonState_("mapType",ownMapType.getName(true));});};GPSedToolbarControl.prototype.createButton_=function(id){var buttonDiv=document.createElement("div");buttonDiv.id=id;buttonDiv.className="GPSedToolbarBtn "+id+"Off";buttonDiv.style.cssFloat="left";buttonDiv.style.styleFloat="left";var title=toolbarButtonTitles[id];buttonDiv.setAttribute("title","header=[Info] body=["+title+"] delay=[400]");return buttonDiv;};GPSedToolbarControl.prototype.setButtonState_=function(div,newState){var id=div.id;var newCSSClass=id+(newState?"On":"Off");var alterCSSClass=id+(newState?"Off":"On");jQuery("#"+id).removeClass(alterCSSClass).addClass(newCSSClass);};GPSedToolbarControl.prototype.selectCurrentMapType_=function(){var currMapType=map.getCurrentMapType();var mapTypes=map.getMapTypes();for(var j=0;j<mapTypes.length;j++){if(currMapType==mapTypes[j]){gpsedToolbarControl.setButtonState_(globalMapTypeDivs[j],true);break;}}}
GPSedToolbarControl.prototype.saveToolbarButtonState_=function(key,value){if(!isAuthSession){return;}
if(toolbarPrefsUpdateTask!=null){clearTimeout(toolbarPrefsUpdateTask);toolbarPrefsUpdateTask=null;}
toolbarPrefsUpdateTask=setTimeout(function(){toolbarPrefsUpdateTask=null;jQuery.ajax({url:"/commands.do?cmd=updatePrefs&field="+key+"&value="+value});},100);}
function UsualMapTypeControl(opt_opts){this.options=opt_opts||{};};UsualMapTypeControl.prototype=new GHierarchicalMapTypeControl();UsualMapTypeControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_RIGHT,new GSize(25,10));};UsualMapTypeControl.prototype.initialize=function(map){return GHierarchicalMapTypeControl.prototype.initialize.call(this,map);}
function addAppropriateToolbarControl(map){gpsedToolbarControl=new GPSedToolbarControl();usualMapTypeControl=new UsualMapTypeControl();var mapType=map.getCurrentMapType();if(mapType==G_SATELLITE_3D_MAP){currentToolbarControl=usualMapTypeControl;map.addControl(usualMapTypeControl);}else{currentToolbarControl=gpsedToolbarControl;addGPSedToolbarToMap();}}
function addGPSedToolbarToMap(){currentToolbarControl=gpsedToolbarControl;map.addControl(gpsedToolbarControl);gpsedToolbarControl.selectCurrentMapType_();gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["nearestTracksToolbarBtn"],nearestTracksEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["panoramioToolbarBtn"],panoramioLayerEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["wikipediaToolbarBtn"],wikipediaLayerEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["markersToolbarBtn"],trackMarkersLayerEnabled);gpsedToolbarControl.setButtonState_(globalToolbarLayerButtons["countryFlagsToolbarBtn"],countryFlagsLayerEnabled);gpsedToolbarControl.saveToolbarButtonState_("mapType",map.getCurrentMapType().getName(true));}
var reasons=[];reasons[G_GEO_SUCCESS]="Success";reasons[G_GEO_MISSING_ADDRESS]="Missing Address: The address was either missing or had no value.";reasons[G_GEO_UNKNOWN_ADDRESS]="Unknown Address:  No corresponding geographic location could be found for the specified address.";reasons[G_GEO_UNAVAILABLE_ADDRESS]="Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";reasons[G_GEO_BAD_KEY]="Bad Key: The API key is either invalid or does not match the domain for which it was given";reasons[G_GEO_TOO_MANY_QUERIES]="Too Many Queries: The daily geocoding quota for this site has been exceeded.";reasons[G_GEO_SERVER_ERROR]="Server error: The geocoding request could not be successfully processed.";var geocoder=new GClientGeocoder();var searchResultMarker=null;function submitGeoSearch(text){hideBox();geocoder.getLocations(text,function(result){if(result.Status.code==G_GEO_SUCCESS){var firstAddr=result.Placemark[0];var point=new GLatLng(firstAddr.Point.coordinates[1],firstAddr.Point.coordinates[0]);if(searchResultMarker){map.removeOverlay(searchResultMarker);searchResultMarker=null;}
searchResultMarker=new GMarker(point);map.addOverlay(searchResultMarker);var countryCode="";var newZoom=map.getZoom();var accuracy=firstAddr.AddressDetails.Accuracy;if(accuracy==0){newZoom=map.getZoom();}else if(accuracy<=1){newZoom=4;}else if(accuracy<=3){newZoom=6;}else if(accuracy<=5){newZoom=9;}else if(accuracy<=7){newZoom=14;}else{newZoom=18;}
var maxZoom4MapType=map.getCurrentMapType().getMaximumResolution();if(newZoom>maxZoom4MapType){newZoom=maxZoom4MapType;}
map.setCenter(point,newZoom);if(firstAddr.AddressDetails.Country){countryCode=""+firstAddr.AddressDetails.Country.CountryNameCode;countryCode=countryCode.toLowerCase();}
var htmlText="<div style='padding:6px'>";if(countryCode.length==2){htmlText+="<img src='http://static.gpsed.com/f/"+countryCode+"' width='16' height='11' style='margin-bottom:-1px'>&nbsp;";}
htmlText+=firstAddr.address+"<br><br>Latitude: "+convertDegrees2DMSStr(point.lat(),false)+"<br>Longitude: "+convertDegrees2DMSStr(point.lng(),true)+"</div>";searchResultMarker.openInfoWindowHtml(htmlText);searchResultMarker.searchResultText=htmlText;GEvent.addDomListener(searchResultMarker,"click",function(){this.openInfoWindowHtml(this.searchResultText);});}else{var reason="Code "+result.Status.code;if(reasons[result.Status.code]){reason=reasons[result.Status.code]}
alert('Could not find "'+text+'". '+reason);}});}