// Javascript by Mark McClure's GPXToGoogleMap
// http://facstaff.unca.edu/mcmcclur/GoogleMaps/GPXToGoogleMap/

function load() {
  if (GBrowserIsCompatible()) {
    // Initialize
    var map = new GMap2(document.getElementById("map"));


    // Set up the custom map types
    // Technique is mostly described on mapki.com
    // getTileUrl method adapted from GPSVisualizer output

    // The USGS topo maps via terraservice.com
    var topoCopyright = new GCopyright(1,
      new GLatLngBounds(new GLatLng(18,-169),new GLatLng(72,-66) ),
        5, "by USGS");
    var topoCopyrightCollection = new GCopyrightCollection('Topo maps');
    topoCopyrightCollection.addCopyright(topoCopyright);
    
    var topoTileSize = 256;
    var topoURL = 'http://terraservice.net/ogcmap6.ashx?version=1.1.1&request=GetMap&styles=&srs=EPSG:4326&format=image/jpeg&bgcolor=0xCCCCCC&exceptions=INIMAGE&layers=DRG';
    topoGetTileURL=function(tile, zoom){
      var southWestPixel = new GPoint(tile.x*topoTileSize,(tile.y+1)*topoTileSize);
      var northEastPixel = new GPoint((tile.x+1)*topoTileSize,tile.y*topoTileSize);
      var southWestCoords = G_SATELLITE_MAP.getProjection().fromPixelToLatLng(southWestPixel,zoom);
      var northEastCoords = G_SATELLITE_MAP.getProjection().fromPixelToLatLng(northEastPixel,zoom);
      var bbox = southWestCoords.lng()+','+southWestCoords.lat()+','+northEastCoords.lng()+','+northEastCoords.lat();
      return topoURL+'&bbox='+bbox+'&width='+topoTileSize+'&height='+topoTileSize;
    }
    var topoTileLayers = [new GTileLayer(topoCopyrightCollection,5,17)];
    topoTileLayers[0].getTileUrl = topoGetTileURL;
    var topoMap = new GMapType(topoTileLayers, G_SATELLITE_MAP.getProjection(), "Topo",
      {errorMessage:"Data Not Found", tileSize:topoTileSize});
    map.addMapType(topoMap);
    
    // Now the USGS aerial maps via terraservice.com
    var aerialCopyright = new GCopyright(1,
      new GLatLngBounds(new GLatLng(18,-169),new GLatLng(72,-66) ),
        5, "by USGS");
    var aerialCopyrightCollection = new GCopyrightCollection('Aerial photography');
    aerialCopyrightCollection.addCopyright(aerialCopyright);
    
    var aerialTileSize = 256;
    var aerialURL = 'http://terraservice.net/ogcmap6.ashx?version=1.1.1&request=GetMap&styles=&srs=EPSG:4326&format=image/jpeg&bgcolor=0xCCCCCC&exceptions=INIMAGE&layers=DOQ';
    aerialGetTileURL=function(tile, zoom){
      var southWestPixel = new GPoint(tile.x*aerialTileSize,(tile.y+1)*aerialTileSize);
      var northEastPixel = new GPoint((tile.x+1)*aerialTileSize,tile.y*aerialTileSize);
      var southWestCoords = G_SATELLITE_MAP.getProjection().fromPixelToLatLng(southWestPixel,zoom);
      var northEastCoords = G_SATELLITE_MAP.getProjection().fromPixelToLatLng(northEastPixel,zoom);
      var bbox = southWestCoords.lng()+','+southWestCoords.lat()+','+northEastCoords.lng()+','+northEastCoords.lat();
      return aerialURL+'&bbox='+bbox+'&width='+aerialTileSize+'&height='+aerialTileSize;
    }
    var aerialTileLayers = [new GTileLayer(aerialCopyrightCollection,5,17)];
    aerialTileLayers[0].getTileUrl = aerialGetTileURL;
    var aerialMap = new GMapType(aerialTileLayers, G_SATELLITE_MAP.getProjection(), "Aerial",
      {errorMessage:"Data Not Found", tileSize:aerialTileSize});
    map.addMapType(aerialMap);
    // End custom map types
    
    
    // Add the controls and set up the map
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    var omc = new GOverviewMapControl();
    map.addControl(omc);
    omc.hide();
    
    map.setCenter(new GLatLng(35.6058, -82.5197), 12, G_NORMAL_MAP);

    // Place the waypoints
    var waypointMarker1 = new GMarker(
      new GLatLng(35.59631238472236, -82.48712182044983), {title:"Short trail"});
    GEvent.addListener(waypointMarker1, "click", function() {
      waypointMarker1.openInfoWindowHtml("Short trail <br />Picked up the trail here.")});
    map.addOverlay(waypointMarker1);

    // Place the start and stop markers
    // Info for the icons
    var baseIcon = new GIcon();
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);
    var startIcon = new GIcon(baseIcon);
    startIcon.image = "http://www.google.com/mapfiles/dd-start.png";
    var pauseIcon = new GIcon(baseIcon);
    pauseIcon.image = "http://www.google.com/mapfiles/icon-dd-pause-trans.png";
    var stopIcon = new GIcon(baseIcon);
    stopIcon.image = "http://www.google.com/mapfiles/dd-end.png";


    var startStopMarker1 = new GMarker(new GLatLng(35.5785, -82.5881), {icon:startIcon, title:"Beginning and ending of track 1"});
    var startStopHTML1 = "Track 1 begins and ends here.";
    GEvent.addListener(startStopMarker1,"click",function() {
      startStopMarker1.openInfoWindowHtml(startStopHTML1);
    });
    map.addOverlay(startStopMarker1);


    // Place the tracks
    var ePolyline_1 = new GPolyline.fromEncoded({
      color: "#0000ff",
      weight: 4,
      opacity: 0.8,
      points: "m|cxEtnawNa@CBKBcAToBLsBUcHPwBb@wCjAaDVwB?{@ImBMgB?oBDeCFuGPeJBsCPmDX}CjAwJXeCP{BJq@TWxAKzDc@|AZ`F~@fGdA|AWbBaAvBmBh@gBKyAw@y@RaEG_CKyAFY\\i@pAs@T?`Bm@xBwC|AkBVYFWOiADgFl@YhDNxEH|B`@`EnANHpA?v@]l@q@\\}A^oDF_Dg@qLKaDG]s@gBi@m@iF{BcA{ASiAg@eEeBaIcBcK_AwBaBgCyAiCs@sB_AoDu@oB{CyEQeACm@r@aCd@UPS`@Mz@a@h@KL?\\KNo@m@iEeAuE[mCYyCg@iC[qBu@mBoCaIo@yCcAqCw@yAe@oCCc@PkID{HWqCu@kByAcDeB{D}AaDk@}@O_@?IUDa@h@IBKCw@q@}AaA}Ai@kDuA]Q{@yAMkBHi@\\mEIqCa@iE_@kBk@mAoDyEaBmBg@mBu@iFWw@Yq@g@s@gBkBGkB@Sz@oDhA_BhCyAdBqAd@i@Pe@PQd@s@|AgCfFaIv@mCzBmLpAuE`AwD^iCF{@UuCi@aBeAuC_EyJaByD}AyAaDsB_F{BiCaDwBsByCkCcDkCWYg@Si@m@c@kCi@wHX{@f@sBJoAVwA`BYb@CvI`@~@?l@f@D`@HdBH\\TP~@JTO~C_Ah@]`FeFbBsBXW~@VlCvAp@]Pg@\\cE?QUcAyAaCoAkCQc@MqB?yDUqDcAuGkAuGa@iDs@mE{@sGe@cH]qCg@cByCgC{@]w@Te@Zw@FkDqBqA_AaB}BmAgA{@k@cCq@eCa@_E\\cBU_ASSKUUI?]t@CTyAd@yAfBgAd@g@Ga@a@i@QgBBcCl@cDzAYVoBnCiBdD_Az@c@?g@G}BFiAP[JkADy@s@s@_@e@i@y@YeBCsBa@gCYmCa@sBFgCKoBUsCSoC?YFyAr@eBp@{Ar@}APcP{C}B?cAG}D{Ds@mAaAaDiAmBgBsA_@w@EqCl@uJCaBm@{Dg@qCq@kFKaC@e@ToBBe@EyC[yDw@oE?qFYiE_AaFs@mCq@gD{@wB}@aBq@}BiAkCsB{CmAcAkAa@sBFkAUMGuAmAs@{Bm@j@oBzBgAfAmE|DsAfAyAv@}Ct@uA~@eBvAqCxCyE|DaCfBoBfAcBpAmBhBcBrB_C`EgApCqAjBaJlK{A`Bw@v@sFnGi@t@o@fBiAbCgAxAiApAuG~I}CfBaBz@g@rAFrAl@x@PPlCfBxAx@|Af@fDd@dCD`BQfAoA|ByB`DeCbDeDrA]rEl@hBz@nDlCzAv@l@NF?j@Wr@UdACbBXf@rA\\bDXvB|C|FJJtAr@vBl@xB`AdDvB|Al@vC`AxEdB~B`Bf@ZhBl@fHpBpCn@n@XTv@c@zG[lKFpCLb@~E|A|@d@nFvDr@j@r@r@p@bAb@f@p@Z`@Bn@G~@e@Za@t@i@z@c@J]TyC\\]LEbCa@hCKj@h@h@v@r@f@xCz@vA^fA@bE`@bAd@nBjBdCfDdDl@|Gv@bBqAv@a@GGQFG`@Xn@z@\\nB?MJIVm@l@]l@gClCcBhAkC|AcANaABcAGkHmBuAMsADyEvAcALuAC}GoAcDOi@n@uBvF]jDq@rDg@vB}@hAkAl@gCz@wBb@yAMeBm@{EeDwBoAk@QaBQ}CMqFeBeB_@{DUkDc@eBQkBHaAXmEdCwB~@_Cn@aAx@{A`AmA`@kACaAi@kAaB_AaAkAq@oBk@kBQaB?yBLkBTuAX}E`BmAh@mAz@gAlAcAdCmAfC_AlAqAv@aGxA}ClAiCl@yAIgAk@o@}@_AkB{@oCe@sB}B{K{@kBqCgDmBiAgBu@aD{@mH{AgA|PiCrJ_N}DcFgAgAe@cBsB_EaDgDyAgCk@_@?y@Mc@TCX?pAFF?TC??FTNd@ChAWbAQn@?jAd@tAn@tAx@pAnAjAx@f@dA~@lCfAj@bAHrA?lBb@hBd@|Ah@nAj@bAJ`EoDbDeDP[x@cCrBsDl@?vClAnCnBLd@Bh@IlC[fDBpCd@vBhAvBh@jBb@dBbA|AhBjBnBpA|A\\|DJv@hArAlGh@rBrAv@RFdABh@HdA~FjAnBf@xAjAjHHhEPh@dAPv@]|@YvAr@Zh@`CpHH~A{@fCY`B?X~@jAlCJpE@zEl@~@PzASZU\\\\TbA`@tFTrBmAnAaD|AqAzBg@xAcAbCw@jCw@|AIbC@b@KpCB~@bBvQvAzGh@nBDjAmApAaDfAo@r@YhB`@dCjBtCrJpLvClEf@XhEj@nHt@xC?hIYxEXnIdLlBbCv@lAxAbArC`@xGhDzBVxBe@vANpAvAPtBJr@tA|AxAr@yAX`DQx@a@x@]z@XfDdEdCbGz@j@R`B|Dn@Th@jArBdAcANDn@QvDyBvDoAn@YfAJP~@MjGkA|CTlCp@rA~AzAhBl@jB?TAt@Qf@B?^JH?SC??HK?JTFj@ZlAP`@^b@BRPr@TrAx@xDDr@Xd@|AxDrCzHDXX~BN^vLjGeDGq@r@UJBBcC}AT?IG?\\CBFl@fBxLYJa@?o@PeBz@{EvCGFCLAZC~AH|BL|@hAnDf@vBGn@KDmA`AqFdFkCtBa@~@BdEGhBk@|CCn@?xANdA|AjErAnEjA`DHh@?b@Jt@`@b@dAzBnBf@x@c@hAiBh@I?f@KNyArAc@p@g@dBIzC^pG@Bj@FvBm@zDo@vBO`CI|CB|ADpCmA|DoBvBw@\\TbBhIp@`Dp@t@XPrA^x@ObBoAjAkAr@a@`@J|AnArBpA|Ax@jDdBhATxAlAjAn@bB`@tB?~D`@|AxALPVtC`@tArCbEt@v@tAn@z@d@Jr@AnBPfAj@bALFBrATjC?nBDBETc@vBo@|Bc@`B_@jDD~BNzDCpAB`AGjAMbAG~@B?",
      levels: "PC?@?BD@BAD?@@B???D@A@??HB@D?@DBGBEBCB?AEBAAC@?EAAGB?CA@BFADAAI?@EACCE?AAEA?C@@BF@CD@@?A?@BFAA@A?D?AB@BE@@BG?@?@@?EAA?D@B@?CFB?CAAEB@D@@DA?HB?DBA@D@?@?EAA?B@GAC??EABCAB??AAEAH?A@F@B@EB?@CAF@@C?@EADAH?DAA?DAAC@A?@B@JCDC@AD@BB?E@CC?B?GA@BBBDAABDAE@AAG?@B?AD@@ADA@?BAB?D@C?@BEC@ICAACAFAAD?@CB??BCABAD@@F@A@BEACB?DBL??A?CABD@AB@@AFBAAC@??CA@C?@D?DBJ@B?CAFADA@ABFCAAAD??CAGB?C?F@ABB??B?C@?@FBAB@F@C?B@@GB@DA@@D@BD?AF?AD?B@BDAE@D@AEABDBE?@@JACBF@BADBADAAGACA?EACAGACA@D@BACA?FACBAB?AFCAACAEAB@G@B@EB?CAEAAHBC@EA?BEBC@GFCGAADACE@@EB?@@??KAB?AE?@B@D@EB@AB@?AG@C?AFBBH@B@ADAB?FABDAEB?E?B?FBACBAEB?CE@EBA@GD@B?CABHA?EBDA?@AF?@@DC?AEBCBGCAAHB?DABG?@BEBDBBEC?CBDEB?CECBBDD?GB@BC?CIBCCFACDA?AEABB?@A@@B@A??@@C?AB?@EHC@@DFBA?@BF@@ABA?E?ACA?BF@@@BG@BB?EA?@B?@FACEBBFB?@BDAH?BAACA?D?@GB?C@FBD@@EAA?BAB@DBAH?CACDA?DAAC@F@@?C?A?BD?@?B???P",
      zoomFactor: 2,
      numLevels: 18
    });
    map.addOverlay(ePolyline_1);

  }
}
