// 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.3949, -82.7067), 14, topoMap);

    // Place the waypoints
    var waypointMarker1 = new GMarker(
      new GLatLng(35.405946550706034, -82.73662090301514), {title:"Pilot Rock"});
    GEvent.addListener(waypointMarker1, "click", function() {
      waypointMarker1.openInfoWindowHtml("Pilot Rock <br />Turn Left onto Pilot Rock.")});
    map.addOverlay(waypointMarker1);

    var waypointMarker2 = new GMarker(
      new GLatLng(35.3875455445434, -82.72808074951172), {title:"Pilot Cove"});
    GEvent.addListener(waypointMarker2, "click", function() {
      waypointMarker2.openInfoWindowHtml("Pilot Cove <br />Turn left up towards Pilot Cove.")});
    map.addOverlay(waypointMarker2);

    // 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.3946, -82.6768), {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: "k_`wEzxrwNCEEn@D`@^?|@v@H\\Qn@c@hETd@xAd@j@d@pBbDtAtAj@P`Bc@hA?p@GPQ^WHEr@VjDvCdCtAjAdAyCfH]hBMHg@|APBc@`@B?c@XeIuCQYy@]q@{@aAs@oDKiC?_AXgHtGpAv@h@j@hB`BjBhCr@bDLzAMj@OAkDwAoDQI\\u@YaAw@_AgAc@Yq@GGB?t@GZs@fCqCfB_@vL_KmDMe@GFOMo@OeETOpBBzAs@`Bi@~Au@jAuBzBmCfAGz@`@nArBrBh@x@PtACn@Md@Kr@?|ANh@n@`@JLTJ`@GBBv@Pf@ZfAL`BMr@El@LBV[CUJaAr@u@Vw@b@gA?}At@_BbEmBrC}CsA}@`@m@d@k@|@i@lBiAfDO|@h@LPC\\PJ`@S|Ag@pAkAnFaAzBUpAEzB_@fDU|ADh@?r@IXBHLBf@Ff@Xj@h@z@Lj@?tAJ\\Hd@?Tj@M^i@BBB?j@YzBUn@uAnC{@jAyAfCaBhDQn@Ef@TbAHB[|@LZHJTb@Nh@bApA^Rf@Jf@E\\FVh@El@a@`B_@vCElAJBv@zEfAd@t@h@h@j@Jh@KrBcKxFi@bA}Az@Mz@?b@TnAPj@Bb@P^PFdAr@b@`@~@t@f@f@l@TtAfAJn@UhAm@z@aBfByBzCkApAQ`@KD?RBHQ^H^Br@Jd@Gz@?\\CJXz@LPDXB\\Tl@C\\B^L\\I\\?RQ~@GFCGSLBBCP?XBRHP?l@Bb@P^P|@n@jA\\bAXfBPfBNpCTTCfAX\\\\h@t@nAj@fA?p@Cf@Ml@{@n@a@f@Yb@AXMTLDVoA[nAB@ZAXX\\p@`@NF??Gr@FZGh@?dAL^IT?fAOf@Mt@Gn@Fp@K?A^i@\\i@fAw@rXiQzCjAjBFp@Qv@AC?Cx@Jr@JiAKa@lCeId@i@dDuCfAk@E`@CGBPGNBHHQ?YEKFB?CO[?Gd@q@XUX]JPDNFF?a@LGHTFQHGJXH[IsAPJKXXTJ\\HFVSd@w@b@}BzFX`@Se@BtAsB]e@o@bAHBd@z@z@lA`@fB]xA]M[UIPa@p@oBhCBFFG^?^K?BGI?H]j@e@|@YlAFTB\\G`BJv@\\zAPb@r@C`@YLLEBHBLPB~@L\\Gr@r@s@pAcAFU?U\\{@r@e@r@SfAZz@IX?j@Q`@W~AmBjAc@z@QQ`ANGKo@Oc@?c@J{C|A}A\\QbEa@m@{@_AYyJj@xABCK\\mA?Ub@aC`@{Di@\\}@i@Bo@Le@{@qA?GHCg@MCGMGKSi@q@_@g@Uu@u@_Aw@U{@aAs@oAo@{@oDoA_CaAk@Ku@Ek@?m@OsBT?PY`@Ud@YTi@NkA?QBYG[BOBOXGKh@cD`@yAfAmBhCyB}@LrAqAh@BBw@`@_AzA{@hBd@F?h@e@LU?Lr@qAZPl@CNQPYt@iDD?XP\\WfBsHBc@PQMKNMtCoAhAUFKPGNFP`@RxAj@Hn@Uh@B`B`@XeBFqAb@kA^?HIxA?z@GdGmH\\b@TD^?VEvAsBx@k@Cg@Yc@cAs@s@cHW_CVyFESQm@i@YKm@Fa@`@kA?q@Km@mAkCOo@w@]U?UYPkAB}@i@oEMk@_A{@B]PUF{@Gs@UeB]{@\\_DSuBRwCn@yEXq@rDEhEoOd@k@CSUo@?w@rC]q@cAb@Xs@{@UwAgAsDoB_CmL}PxANtCw@nDiIf@iEnFj@eCiEaB_AyA_D{@QQk@N[VC\\gAJoBU{@Gs@JgAZsAd@wA~@sDCu@c@gAi@a@gAuB}@u@gAW{BwB{@s@sBuA{@Ga@IMm@CiAQm@u@c@}CKk@Q_AKs@YyC{@qEoBiEuBsAEm@\\w@fB[V[Ge@i@e@]o@CKQSo@Ua@_@Oa@Bs@bAYj@OTQECCEB",
      levels: "P@@CBAD@EBABAFBB@C??EAAAFBA@BH@@DCA@@D@GBFA?BDBAG?CBDA@BAF@@ADDGBDA@BHAC?D@CCGBADB@?BAF??BB?@CB?BBGA?@@BBDBED@EB@@H@@BDA@AACA?A?AF?@A@C@@?@CFBC?AAC@@AD?BABF??@AC@A@BE@@AEAC@BAFDDBC@F?@@D?A?@AABFB@@@B@A?AF@?B??B?@?@A?AD??B@@C??@?@?E@@@C?ABBD?@?E?@C@B@@DADC?B@AK@@@@AB??@A@AE??ABFCA@D?AFACAEADA@@@D@?@@A?BD?C?@CACB@BCADAA@CADAEBDCCGD@?BEC@D?@DA@@D?A@?AE?AB?DCAAD@@AAAG?B@@BDBB?D@BB?CBH@B?E@CFBDFD@@@@FCD@CA@C@?B??A@GB@?D@@F?@BDA?@DA?@@B@AH@CBDCBCAEC?C?AACBAEAC?BC@AAAFA@@E@ADAABF@AE@@@DDB@?DAIABC?DC?BAC@AD@@C@AD@BCAD@@C?ACBG@ADEBC?ADGCABADAFBECEGBBBBFABCA@BC@@BHAADAB?AC?D@@CFA@C?B@EBCADA@BC??AEB??B?@P",
      zoomFactor: 2,
      numLevels: 18
    });
    map.addOverlay(ePolyline_1);

  }
}
