google.load("earth", "1");

var ge = null;
var fileRivers = null;
var fileCamps = null;
var filePoints = null;
var selectedRiver = null;
var kmzPath = 'http://www.raftingthewest.com/_geKmz/';
var displayName = null;

// add files here and to the rivers list on the php file and make sure they are in the rives.kmz

function init() {
  google.earth.createInstance("map3d", initCallback, failureCallback);
}

function initCallback(object) {
  extractRiverParam();
 
  ge = object;
  ge.getWindow().setVisibility(true);
  ge.getOptions().setFlyToSpeed(.25); 

  var navControl = ge.getNavigationControl();
  navControl.setVisibility(ge.VISIBILITY_SHOW);
  ge.getOptions().setStatusBarVisibility(true);

  fileRivers = getNL(kmzPath + 'rivers.kmz');

  loadKmlFiles();
  
  jumpToRiver();
 
  var n = document.getElementById('SelectedRiverName');
  n.innerHTML += displayName;
 
}

function failureCallback(object) {
    // TODO: handle failure to load GE   Hmmm...
}

function getNL(kmlURL) {
    var nl = ge.createNetworkLink("");
    var link = ge.createLink("");
    link.setHref(kmlURL);
    nl.setLink(link);
    ge.getGlobe().getFeatures().appendChild(nl);
    return nl;
}

function loadKmlFiles() {
  
    if (selectedRiver != 'undefined') {       
        var temp = kmzPath + 'campsXXX.kmz';
        var campsUrl = encodeURI(temp.replace(/XXX/, selectedRiver));
        fileCamps = getNL(campsUrl);
       // fileCamps = getNL('http://www.whitewatercampsites.com/_kml/campsLSR.kmz');

        temp = kmzPath + 'pointsXXX.kmz';
        var pointsUrl = encodeURI(temp.replace(/XXX/, selectedRiver));
        filePoints = getNL(pointsUrl);
       // filePoints = getNL('http://www.whitewatercampsites.com/_kml/pointsLSR.kmz');

        updateCampOptions();       
        document.options.chkCamps.disabled = false;
	    updatePointOptions();
	    document.options.chkPoints.disabled = false;
	}
}

function updatePageTitle(riverName) {
// todo figure out why this next line blows GE out of the water!!
    var n = document.getElementById('SelectedRiverName');
    n.innerHTML = riverName;
}

function updateCampOptions() {
    if (fileCamps != null) {
        fileCamps.setVisibility(document.options.chkCamps.checked);
    }
}

function updatePointOptions() {
    if (filePoints != null) {
        filePoints.setVisibility(document.options.chkPoints.checked);
    }
}

function extractRiverParam() {
    var parameters = location.search.substring(1).split("&");
    var temp = parameters[0].split("=");
    selectedRiver = unescape(temp[1]); // failure of this line sets selectedRiver to 'undefined', which later logic keys off of
}

function jumpToRiver() {
    var la = ge.createLookAt('');

    switch (selectedRiver) {
        // river name sent into here (aka selectedRiver) must be the river name portion of the kmz file names, and river put-in must be in the rivers.kmz

        case 'undefined':
            la.set(42.33, -115.64, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 5000000); //   compass north = 0, angle looking down,  altitude of camera
            displayName = 'Rafting Trip Rivers';
            break;
            
        case 'LSR':
            la.set(45.766, -116.325, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 1000); //   compass north = 0, angle looking down,  altitude of camera
            displayName = 'Lower Salmon River';
            break;

        case 'Rogue':
            la.set(42.6503, -123.5860, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -70, 70, 1000); //   compass north = 0, angle looking down,  altitude of camera
            displayName = 'Wild and Scenic Rogue River';
            break;

        case 'MainSalmon':
            la.set(45.369983, -114.68788, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -40, 60, 1000);
            displayName = 'Main Stem of the Salmon River';
            break;

        case 'MFS':
            la.set(44.531, -115.295, 10, ge.ALTITUDE_RELATIVE_TO_GROUND, -5, 60, 2000);
            displayName = 'Middle Fork of the Salmon River';
            break;

        case 'Yampa':
            la.set(40.446, -108.512, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -50, 70, 1000);
            displayName = 'Lower Yampa River';
            break;

        case 'SanJuan':
            la.set(37.2613424342, -109.6118129231, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -140, 70, 500);
            displayName = 'Lower San Juan River';
            break;

        case 'GC':
            la.set(36.863065, -111.591081, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -120, 70, 2000);
            displayName = 'Grand Canyon of the Colorado';
            break;

        case 'Bruneau':
            la.set(42.33829659116428, -115.646862978119, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 15, 70, 1000);
            displayName = 'Bruneau River';
            break;

        case 'Jarbidge':
            la.set(42.049988, -115.390747, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -15, 60, 2000);
            displayName = 'Jarbidge River';
            break;

        case 'Selway':
            la.set(parseFloat(45.8617859347655), parseFloat(-114.7465940317252), parseFloat(0), ge.ALTITUDE_RELATIVE_TO_GROUND, parseFloat(-35), parseFloat(50), parseFloat(2000));
            // useful GE syntax:
            //la.setLatitude (parseFloat(45.8617859347655)) ;
            //la.setLongitude (parseFloat(-114.7465940317252)); 
            //la.setAltitude (parseFloat(0));
            //la.setAltitudeMode (ge.ALTITUDE_RELATIVE_TO_GROUND);  <<<  error was that they changed the enum from ALTITUDE_MODE_RELATIVE_TO_GROUND to be ALTITUDE_RELATIVE_TO_GROUND  !!!
            //la.setHeading (parseFloat(-35)); 
            //la.setTilt (parseFloat(50)); 
            //la.setRange (parseFloat(2000));
            displayName = 'Selway River';
            break;

        case 'Deso':
            la.set(39.838654, -109.910542, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 140, 70, 1000);
            displayName = 'Green River - Desolation and Gray Canyons';
            break;

        case 'TatAlsek':
            la.set(60.119722, -137.045794, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -90, 60, 1000);
            displayName = 'Alsek-Tatshenshini Rivers';
            break;

        case 'Salt':
            la.set(33.798304, -110.501517, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -90, 60, 1000);
            displayName = 'The Salt River';
            break;

        case 'Dolores':
            la.set(37.6563184988, -108.7359041255, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 1000);
            displayName = 'The Dolores River';
            break;

        case 'WestW':
            la.set(39.086365, -109.101184, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 180, 70, 1000);
            displayName = 'Colorado River - Westwater Canyon';
            break;

        case 'Lodore':
            la.set(40.72647050911279, -108.8888327608427, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 180, 60, 1000);
            displayName = 'Green River - Lodore Canyon';
            break;

        case 'RG':
            la.set(29.4524127524, -102.8219862934, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'Lower Rio Grand River';
            break;

        case 'Deschutes':
            la.set(44.758511, -121.227713, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'The Deschutes River';
            break;

        case 'Cataract':
            la.set(38.4767326, -109.65572, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 180, 70, 1000);
            displayName = 'Colorado River - Cataract Canyon';
            break;

        case 'GrandeRonde':
            la.set(45.621757, -117.72150, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 1000);
            displayName = 'Grande Ronde River';
            break;

        case 'LabyStill':
            la.set(38.988584, -110.149871, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -180, 70, 1000);
            displayName = 'Green River - Labyrinth and Stillwater Canyons';
            break;

        case 'Illinois':
            la.set(42.3031539, -123.76713, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -45, 60, 1000);
            displayName = 'Illinois River';
            break;

        case 'NFJD':
            la.set(45.01080696906129, -119.010915764397, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -90, 70, 1000);
            displayName = 'North Fork of the John Day River';
            break;

        case 'SmithMT':
            la.set(46.8037, -111.1826, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, -30, 70, 1000);
            displayName = 'Smith River (Montana)';
            break;

        case 'Hells':
            la.set(45.2539976, -116.69603, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 20, 70, 1000);
            displayName = 'Snake River - Hells Canyon';
            break;

        case 'Blackfoot':
            la.set(46.984, -113.129, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'Blackfoot River';
            break;

        case 'LowerOwyhee':
            la.set(42.842, -117.622, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'Lower Owyhee River';
            break;

        case 'MiddleOwyhee':
            la.set(42.545, -117.167, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'Middle Owyhee River';
            break;


        case 'NFFlathead':
            la.set(49.000, -114.475, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'North Fork Flathead River';
            break;

        case 'DDevil':
            la.set(38.4039172, -110.69129, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 70, 1000);
            displayName = 'Dirty Devil River River';
            break;      

        default:
            break;
    }

    ge.getView().setAbstractView(la);

}


