﻿
//document.write('<script src="Utils.js" type="text/javascript"> </script>');

var ge = null;
var tour = null;
var tourFileName = null;
var tourXmlFile = null;
var tourIntervalID = null;
var flashBalloonOpen;

var geOpts;
var nl_PropertySearchResult;
var nl_ProjectSearchResult;
var nl_Realtor;
var nl_PropertyEarthAd;
var nl_ProjectEarthAd;
var nl_PlaceSearchResult;
var nl_PlaceEarthAd;

loadSucces = true;

try {
    google.load("earth", 1);
}
catch (E) {
    alert("3D Earth Yüklenemedi! Lütfen Ağ Bağlantınızı Kontrol Edin!");
    loadSucces = false;
}

try {
    google.load("maps", "2.xx");
}
catch (E) {
}


function InitGE() {
    if (!loadSucces) return;
    google.earth.createInstance("earth_instance", InitSuccess, InitFail);
}

function InitSuccess(object) {
    ge = object;
    ge.getWindow().setVisibility(true);

    document.getElementById('installed-plugin-version').innerHTML = ge.getPluginVersion().toString();

    SetGEOptions();
    SetGELayers();
        
    LoadRealtorKml();
    LoadPropertyEarthAdKml();
    LoadProjectEarthAdKml();
    LoadPlaceEarthAdKml();
    LoadToursKml();    

    ge.getOptions().setFlyToSpeed(0.3);
    var lookat = ge.createLookAt('');
    lookat.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);
    lookat.setLatitude(39.26704406738281);
    lookat.setLongitude(34.333251953125);
    lookat.setAltitude(0);
    lookat.setRange(2000000); //distance from coordinates in meters;
    ge.getView().setAbstractView(lookat);

}

function InitFail(object) {
    alert("3D Earth Başlatılamadı!");
    loadSucces = false;
}

function PrepareTour() {

    // create the tour by fetching it out of a KML file
    var href = window.location.href.substring(0, window.location.href.lastIndexOf('/'));
    href += tourFileName;

    google.earth.fetchKml(ge, href, function(kmlObject) {
        if (!kmlObject) {
            // wrap alerts in API callbacks and event handlers
            // in a setTimeout to prevent deadlock in some browsers
            setTimeout(function() {
                alert('Tur Mevcut Değil!');
            }, 0);
            return;
        }

        // Show the entire KML file in the plugin.
        ge.getFeatures().appendChild(kmlObject);


        // Walk the DOM looking for a KmlTour
        walkKmlDom(kmlObject, function() {
            if (this.getType() == 'KmlTour') {
                tour = this;                
                ge.getTourPlayer().setTour(tour);
                playTour();
                return false; // stop the DOM walk here.
            }
        });
    });

}

function SetTourXmlFile() {
    var dataFileName = tourFileName.substring(0, tourFileName.lastIndexOf('/')) + '/data.xml';
    var href = window.location.href.substring(0, window.location.href.lastIndexOf('/'));
    href += dataFileName;
    
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest()
    }
    else {
        xhttp = new ActiveXObject("Microsoft.XMLHTTP")
    }
    xhttp.open("GET", href, false);
    xhttp.send("");
    tourXmlFile = xhttp.responseXML;

    var flashFiles = tourXmlFile.getElementsByTagName("FlashFile");
    flashBalloonOpen = new Array(flashFiles.length);
    for (var i = 0; i < flashFiles.length; i++) {
        flashBalloonOpen[i] = false;
    }    
}

function openTourFlashBalloon(flashFileName, index) {
    flashBalloonOpen[index] = true;
    var balloon = ge.createHtmlStringBalloon('');
    //balloon.setFeature(placemark); // optional
    balloon.setContentString('<iframe width="800px" height="600px" scrolling="no" src = ' + flashFileName + '></iframe>');
    ge.setBalloon(balloon);
}

function closeTourFlashBalloon(index) {
    flashBalloonOpen[index] = false;
    ge.setBalloon(null);
}

function checkTourStatus() {
    
    if (!loadSucces || ge == null || !tour || tourXmlFile == null) return;

    try {
        var duration = ge.getTourPlayer().getDuration();
        if (duration == 0) return;
        var currTime = ge.getTourPlayer().getCurrentTime();

        var flashFileName;
        var balloonStartTime;
        var balloonEndTime;
        var flashFiles = tourXmlFile.getElementsByTagName("FlashFile");
        
        for (var i = 0; i < flashFiles.length; i++) {

            flashFileName = flashFiles[i].getElementsByTagName("FileName")[0].childNodes[0].nodeValue;
            balloonStartTime = flashFiles[i].getElementsByTagName("StartTime")[0].childNodes[0].nodeValue;
            balloonEndTime = flashFiles[i].getElementsByTagName("EndTime")[0].childNodes[0].nodeValue;

            if (currTime >= balloonStartTime && currTime <= balloonEndTime) {
                if (!flashBalloonOpen[i]) {
                    openTourFlashBalloon(flashFileName, i);
                }
            }
            else {
                if (flashBalloonOpen[i]) {
                    closeTourFlashBalloon(i);
                }            
            }                       
        }

        if (currTime >= duration) {
            exitTour();
        }
    }
    catch (err) {
        return;
    }

}

function enterTour(tourFName) {

    if (!loadSucces || ge == null) return;
    tourFileName = tourFName;
    PrepareTour();
    SetTourXmlFile();
}

function playTour() {
    if (!loadSucces || ge == null || !tour) return;

    ge.getTourPlayer().play();
    tourIntervalID = setInterval(checkTourStatus , 1000);    
}

function pauseTour() {
    if (!loadSucces || ge == null || !tour) return;
    ge.getTourPlayer().pause();
}

function resetTour() {
    if (!loadSucces || ge == null || !tour) return;
    ge.getTourPlayer().reset();
}

function exitTour() {
    if (!loadSucces || ge == null || !tour) return;
    clearInterval(tourIntervalID);
    ge.getTourPlayer().setTour(null); 
}

function SetGEOptions() {

    if (!loadSucces || ge == null) return;

    //opsiyonları göster gizle
    var options = ge.getOptions();

    options.setStatusBarVisibility(true);
    ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
    options.setMouseNavigationEnabled(true);
    options.setOverviewMapVisibility(false);
    options.setScaleLegendVisibility(true);
    options.setGridVisibility(false);
    options.setAtmosphereVisibility(true);
}

function SetGELayers() {
    
    if (!loadSucces || ge == null) return;
    var layers = ge.getLayerRoot();
    layers.enableLayerById(ge.LAYER_TERRAIN, true);
    layers.enableLayerById(ge.LAYER_ROADS, true);
    layers.enableLayerById(ge.LAYER_BUILDINGS, true);
    layers.enableLayerById(ge.LAYER_BORDERS, true);
    
}

function LoadPropertySearchResultKml(where) {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);    
    
    nl_PropertySearchResult = ge.createNetworkLink("");
    nl_PropertySearchResult.setDescription("Fetch Content");
    nl_PropertySearchResult.setName("Open NetworkLink");
    nl_PropertySearchResult.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "PropertySearchResultKML.axd" + "?where=" + where);

    // attach the Link to the NetworkLink
    nl_PropertySearchResult.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_PropertySearchResult);
}

function RemovePropertySearchResultKml() {

    if (!loadSucces || ge == null) return;

    if (nl_PropertySearchResult != null) {
        //nl_PropertySearchResults.setVisibility(false);
        ge.getFeatures().removeChild(nl_PropertySearchResult);
    }
}

function LoadProjectSearchResultKml(where) {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);

    nl_ProjectSearchResult = ge.createNetworkLink("");
    nl_ProjectSearchResult.setDescription("Fetch Content");
    nl_ProjectSearchResult.setName("Open NetworkLink");
    nl_ProjectSearchResult.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "ProjectSearchResultKML.axd" + "?where=" + where);

    // attach the Link to the NetworkLink
    nl_ProjectSearchResult.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_ProjectSearchResult);
}

function RemoveProjectSearchResultKml() {

    if (!loadSucces || ge == null) return;

    if (nl_ProjectSearchResult != null) {
        //nl_PropertySearchResults.setVisibility(false);
        ge.getFeatures().removeChild(nl_ProjectSearchResult);
    }
}

function LoadRealtorKml() {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);    
    
    nl_Realtor = ge.createNetworkLink("");
    nl_Realtor.setDescription("Fetch Content");
    nl_Realtor.setName("Open NetworkLink");
    //nl_Realtor.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "RealtorKML.axd");

    // attach the Link to the NetworkLink
    nl_Realtor.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_Realtor);
}

function LoadPlaceSearchResultKml(where) {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);

    nl_PlaceSearchResult = ge.createNetworkLink("");
    nl_PlaceSearchResult.setDescription("Fetch Content");
    nl_PlaceSearchResult.setName("Open NetworkLink");
    nl_PlaceSearchResult.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "PlaceSearchResultKML.axd" + "?where=" + where);

    // attach the Link to the NetworkLink
    nl_PlaceSearchResult.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_PlaceSearchResult);
}

function RemovePlaceSearchResultKml() {

    if (!loadSucces || ge == null) return;

    if (nl_PlaceSearchResult != null) {
        ge.getFeatures().removeChild(nl_PlaceSearchResult);
    }
}

function LoadPropertyEarthAdKml() {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);

    nl_PropertyEarthAd = ge.createNetworkLink("");
    nl_PropertyEarthAd.setDescription("Fetch Content");
    nl_PropertyEarthAd.setName("Open NetworkLink");
    //nl_PropertyEarthAd.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "PropertyEarthAdKML.axd");

    // attach the Link to the NetworkLink
    nl_PropertyEarthAd.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_PropertyEarthAd);
}

function LoadProjectEarthAdKml() {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);

    nl_ProjectEarthAd = ge.createNetworkLink("");
    nl_ProjectEarthAd.setDescription("Fetch Content");
    nl_ProjectEarthAd.setName("Open NetworkLink");
    //nl_ProjectEarthAd.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "ProjectEarthAdKML.axd");

    // attach the Link to the NetworkLink
    nl_ProjectEarthAd.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_ProjectEarthAd);
}

function LoadPlaceEarthAdKml() {

    if (!loadSucces || ge == null) return;

    var httpHeader = "http://";
    var urlWithoutHttp = location.href.substring(httpHeader.length, location.href.length);
    var locSlash = urlWithoutHttp.indexOf('/');
    var rootUrl = httpHeader + urlWithoutHttp.substring(0, locSlash + 1);

    nl_PlaceEarthAd = ge.createNetworkLink("");
    nl_PlaceEarthAd.setDescription("Fetch Content");
    nl_PlaceEarthAd.setName("Open NetworkLink");
    //nl_PlaceEarthAd.setFlyToView(true);

    // create a Link object
    var link = ge.createLink("");

    link.setHref(rootUrl + "PlaceEarthAdKML.axd");

    // attach the Link to the NetworkLink
    nl_PlaceEarthAd.setLink(link);
    // add the NetworkLink feature to Earth
    ge.getFeatures().appendChild(nl_PlaceEarthAd);
}


function Geocode(geocodeLocation) {
    if (!loadSucces || ge == null) return;
    var geocoder = new google.maps.ClientGeocoder();
    geocoder.getLatLng(geocodeLocation, function(point) {
        if (point) {
            var lookAt = ge.createLookAt('');
            lookAt.set(point.y, point.x, 10, ge.ALTITUDE_RELATIVE_TO_GROUND,
               0, 60, 10000);
            ge.getView().setAbstractView(lookAt);
        }

    });
}

function flyTo(latitude, longitude) {

    if (!loadSucces || ge == null) return;

    if ((latitude == null || longitude == null) || (latitude == "" || longitude == "")) return;
    
    ge.getOptions().setFlyToSpeed(0.3);
    var lookat = ge.createLookAt('');
    lookat.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);
    lookat.setLatitude(latitude);
    lookat.setLongitude(longitude);
    lookat.setAltitude(0);
    lookat.setRange(500); //distance from coordinates in meters;
    ge.getView().setAbstractView(lookat);
}

