// Version 1.0.0
//
// The contents of this file are subject to the Mozilla Public License
// Version 1.1 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
//
// Alternatively, you may redistribute this library, use and/or modify it under the terms of the
// GNU Lesser General Public License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
// You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/.
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
// specific language governing rights and limitations under the License.
//
// The original code is kml.js, released October 1, 2006.
//
// The initial developer of the original code is Luca Rocchi (Rome, Italy, www.googleearthairlines.com,www.musicdyne.com),
// (luca.rocchi@tin.it, lr1313@gmail.com).
var airplane=null;
var cockpits=new Array('a380x');
var cockpit=false;
var terrain=false;
var borders=false;
var roads=false;
var autopilot=false;
var fullscreen=false;
var traceFlying=true;
var snapIndex=1;
var logwindow=false;
var advertising=false;

var stopped=true;
var interval=0.01;
var sleep=50;
var banners=new Array('banner1.jpg','banner2.jpg');
var index=0;
var index2=0;
var gridkey='^l';
var mailkey='^+e';
function bannersTimer() {
   for (var i=0;i<banners.length;i++){
       var s=extractName(banners[i]);
       plug.setLayer(s,0);
   }
   if (advertising){
       var s=extractName(banners[index]);
       plug.setLayer(s,1);
       //alert(banners[index]);
       index++;
       index%=banners.length;
       setTimeout('bannersTimer()',30000);
    }
}


//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//GEAPluginEvent callback
function doInit(){
   geap.onClock=onClock;
   geap.onClick=onClick;
   geap.terrain(terrain);
   geap.roads(roads);
   geap.borders(borders);
   var doc=new Document('GoogleEarthAirlines');
   var folder=new Folder('Graphics');
   var bannerFolder=new Folder('Banners');
   var cockpitFolder=new Folder('Cockpits');

   folder.add(bannerFolder);
   folder.add(cockpitFolder);
   doc.add(folder);

   so=new ScreenOverlay(cockpits[0]+'.png');
   so.visibility=0;
   so.color='c0ffffff';
   cockpitFolder.add(so);

   for (var i=0;i<banners.length;i++){
       var s=banners[i];
       var so=new ScreenOverlay(s);
       so.screenY=0.9;
       so.visibility=0;
       bannerFolder.add(so);
   }
   //   geap.trace(doc);
   //var placemark=new NetworkLink(serverpath+'gallery/A350_model.kmz');
   var placemark2=new NetworkLink(serverpath+'gallery/ciampino.kml');
   //folder.add(placemark);
   folder.add(placemark2);
   so=new ScreenOverlay('crosshair.png');
   so.visibility=1;
   so.color='ffffffff';
   folder.add(so);
   //folder.add(placemark);
   //folder.open=1;
   //geap.autoPilotSpeed(0.2);

   geap.openKml(doc);
   //.open();
   //placemark.open();
   //geap.camera.rangeControl.targetValue=geap.camera.rangeControl.max;

   setTimeout('bannersTimer()',15000);
    doControlClick();
}
function onClick(){
   if (!geap.stopped){
      //changeFlying();
   }
}

function doControlClick(){
   try{
       controls['rangeOnOff'].set(geap.camera.rangeControl.increment!=0);
       controls['rangeLess'].set(geap.camera.rangeControl.increment<0);
       controls['rangeMore'].set(geap.camera.rangeControl.increment>0);
       controls['tiltOnOff'].set(geap.camera.tiltControl.increment!=0);
       controls['tiltLess'].set(geap.camera.tiltControl.increment<0);
       controls['tiltMore'].set(geap.camera.tiltControl.increment>0);
       controls['azimuthOnOff'].set(geap.camera.azimuthControl.increment!=0);
       controls['azimuthMore'].set(geap.camera.azimuthControl.increment>0);
       controls['azimuthLess'].set(geap.camera.azimuthControl.increment<0);
       controls['teleport'].set(geap.autopilotspeed==5.0);
       controls['autopilot_speed'].set(geap.autopilotspeed*10);
       controls['autopilot'].set(autopilot==true);
       controls['terrain'].set(terrain==true);
       controls['debug'].set(geap.debugMode);
       controls['considerterrain'].set(geap.camera.considerTerrain);
   }catch(e){
      //    alert(e);
   }
}

function onClock(clock){
//return;
   var d=new Date((1000/geap.frames)*geap.clock);
   var dd=pad(d.getHours()-1,2)+':'+pad(d.getMinutes(),2)+':'+pad(d.getSeconds(),2)+'.'+pad(geap.clock%geap.frames,3);
   controls['time'].set(dd);
   //setText('Time',dd);
   try{
       controls['latitude'].set(format2(geap.camera.eye.latitude,7));
       controls['longitude'].set(format2(geap.camera.eye.longitude,7));
       controls['altitude'].set(format2(geap.camera.eye.altitude,1));
       controls['focuslongitude'].set(format2(geap.camera.LookAt.longitude,7));
       controls['focuslatitude'].set(format2(geap.camera.LookAt.latitude,7));
       controls['focusaltitude'].set(format2(geap.camera.LookAt.altitude,1));
       controls['range'].set(format2(geap.camera.LookAt.range,0));
       controls['tilt'].set(format2(geap.camera.LookAt.tilt,1));
       controls['speed'].set(format2(geap.autopilotspeed,1));
       controls['velocity'].set(format2(geap.camera.speedControl.value,1));
       controls['azimuth'].set(format2(geap.camera.LookAt.azimuth,1));
       controls['focusaltitudeMode'].set(geap.camera.LookAt.altitudeMode);
       if ((!geap.changed) ){
           if (controls['PointOnTerrain'].value==true){
               var pot=new PointOnTerrain(0,0);
               controls['potLat'].set(format2(pot.latitude,5));
               controls['potLon'].set(format2(pot.longitude,5));
               controls['potAlt'].set(format2(pot.altitude,3));
               controls['potProjected'].set(pot.projectedOntoGlobe);
           }
           if (controls['View'].value==true){
               var ve=new ViewExtents();
               controls['viewN'].set(format2(ve.north,7));
               controls['viewS'].set(format2(ve.south,7));
               controls['viewE'].set(format2(ve.east,7));
               controls['viewW'].set(format2(ve.west,7));
           }
       }
   }catch(e){
      //    alert(e);
   }
   if (geap.stopped){
      //return;
   }

   //if (traceFlying){
      geap.camera.path.add(geap.camera.LookAt.asPoint());
      var p=new Point();
      p.latitude=geap.camera.eye.latitude;
      p.longitude=geap.camera.eye.longitude;
      p.altitude=geap.camera.eye.altitude;
      p.altitudeMode=geap.camera.eye.altitudeMode;
      geap.camera.camerapath.add(p);
   //}
   if (autopilot){
       if (geap.metersCounter<1600 ){
          var a=(2*1600)/100;
          geap.camera.speedControl.increment=a;
       }
       if (geap.metersCounter>1600 ){
          geap.camera.tiltControl.increment=-2;
          geap.camera.rangeControl.increment=10;
       }
       if (geap.camera.eye.altitude>500){
          geap.camera.speedControl.increment=0;
          geap.camera.tiltControl.increment=0;
          geap.camera.rangeControl.increment=0;
          if (autopilot){
             autopilot=false;
          }
       }
    }
    if (logwindow){
       //var log=document.getElementById('logwindow');
       //log.innerHTML=geap.log.toString();
    }
}
//GEAPluginEvent callback end
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
function Playclicked(){
   try{
       if (geap.stopped){
          autopilot=(geap.camera.speedControl.value==0);
          geap.clock=0;
          geap.autoPilotSpeed(5.0);
          geap.fly();
          setText('Play','(stop)');
       }else{
          geap.pause();
          geap.autoPilotSpeed(0.2);
          setText('Play','GO!');
       }
   }catch(e){
       alert(e);
   }

}

function versionclick(){
   alert(plug.getParamValue('version'));
}

function autopilot_speedclick(){
   var v=controls['autopilot_speed'].value;
   v=v/10;
   controls['teleport'].set(v==5.0);
   geap.autoPilotSpeed(v);
   //alert('aps');
}

function altUpclick(){
    geap.camera.LookAt.altitude=parseInt(geap.camera.LookAt.altitude)+100;
    geap.camera.setParams();
}

function altitudeZeroclick(){
    geap.camera.LookAt.altitude=0;
    geap.camera.setParams();

}

function altDownclick(){
    geap.camera.LookAt.altitude=parseInt(geap.camera.LookAt.altitude)-100;
    geap.camera.setParams();
}

function considerterrainclick(){
    geap.camera.setConsiderTerrain(geap.camera.considerTerrain==0?1:0);
}
function getcameraclick(){
    geap.camera.getView();
}

function altModeclick(){
    //alert(geap.camera.LookAt.altitudeMode);
    if (geap.camera.LookAt.altitudeMode=='absolute'){
       geap.camera.LookAt.altitudeMode='relativeToGround';
       //geap.camera.LookAt.altitude=0;
    }else{
       geap.camera.LookAt.altitudeMode='absolute';
       //geap.camera.LookAt.altitude=1000;
    }
    geap.camera.setParams();
}

function azimuthclick(){
   //alert('azimuth');
   controls['azimuthLess'].set(false);
   controls['azimuthMore'].set(false);
   geap.camera.azimuthControl.increment=0;
}

function mach1click(){
   geap.camera.speedControl.value=1192;
}
function mach2click(){
   geap.camera.speedControl.value=1192*2;
}
function mach3click(){
   geap.camera.speedControl.value=1192*3;
}
function mach4click(){
   geap.camera.speedControl.value=1192*4;
}
function mach5click(){
   geap.camera.speedControl.value=1192*5;
}
function subsonicclick(){
   geap.camera.speedControl.value=100;
}


function northclick(){
   //alert('north');
   geap.camera.azimuthControl.targetValue=0;
}
function southclick(){
   geap.camera.azimuthControl.targetValue=180;
}
function eastclick(){
   geap.camera.azimuthControl.targetValue=-90;
}
function westclick(){
   geap.camera.azimuthControl.targetValue=90;
}

function teleportclick(){
   geap.autoPilotSpeed(5.0);
}

function tilt0click(){
   geap.camera.tiltControl.targetValue=0;
}
function tilt30click(){
   geap.camera.tiltControl.targetValue=30;
}
function tilt60click(){
   geap.camera.tiltControl.targetValue=60;
}
function tilt45click(){
   geap.camera.tiltControl.targetValue=45;
}
function tilt90click(){
   geap.camera.tiltControl.targetValue=90;
}


function earthviewclick(){
   //alert('earth');
   //var folder=new Folder('Placemarks');
   //var placemark=new NetworkLink(serverpath+'gallery/EarthView.kmz');
   //folder.add(placemark);
   //folder.load();
   geap.setLayer('EarthView',1)
}

function azimuthOnOffclick(){
   geap.camera.azimuthControl.increment=0;
}
function azimuthMoreclick(){
   geap.camera.azimuthControl.increment=5;
}
function azimuthLessclick(){
   geap.camera.azimuthControl.increment=-5;
}

function rangeOnOffclick(){
   //alert('range');
   geap.camera.rangeControl.increment=0;
}

function rangeMoreclick(){
   var inc=(geap.camera.LookAt.range/100);
   geap.camera.rangeControl.increment=inc;
}
function rangeLessclick(){
   var inc=(geap.camera.LookAt.range/100);
   geap.camera.rangeControl.increment=-inc;
}

function tiltMoreclick(){
//alert('tiltmore');
   geap.camera.tiltControl.increment=5;
}
function tiltOnOffclick(){
   geap.camera.tiltControl.increment=0;
}
function tiltLessclick(){
   geap.camera.tiltControl.increment=-5;
}

function speedMoreclick(){
   var i=geap.camera.speedControl.increment;
   if (i<0){
       controls['speedLess'].set(false);
       geap.camera.speedControl.increment=5;
   }
   if (i==0){
       geap.camera.speedControl.increment=5;
   }
   if (i>0){
       geap.camera.speedControl.increment=0;
   }
}
function speedLessclick(){
   var i=geap.camera.speedControl.increment;
   if (i>0){
       controls['speedMore'].set(false);
       geap.camera.speedControl.increment=-5;
   }
   if (i==0){
       geap.camera.speedControl.increment=-5;
   }
   if (i<0){
       geap.camera.speedControl.increment=0;
   }
}

function bankMoreclick(){
   var i=geap.camera.rollControl.increment;
   if (i<0){
       controls['bankLess'].set(false);
       geap.camera.rollControl.increment=5;
       geap.camera.tiltControl.increment=-5;
   }
   if (i==0){
       geap.camera.rollControl.increment=5;
   }
   if (i>0){
       geap.camera.rollControl.increment=0;
   }
}
function bankLessclick(){
   var i=geap.camera.rollControl.increment;
   if (i>0){
       controls['bankMore'].set(false);
       geap.camera.rollControl.increment=-5;
       geap.camera.tiltControl.increment=-5;
   }
   if (i==0){
       geap.camera.rollControl.increment=-5;
   }
   if (i<0){
       geap.camera.rollControl.increment=0;
   }
}


function debugclick(){
   geap.debugMode=!geap.debugMode;
}

function gridclick(){
   //alert(name);
   plug.sendKeys(gridkey);
}

function mailclick(){
   //alert(name);
   plug.sendKeys(mailkey);
}

function cloudsclick(){
   var folder=new Folder('Clouds Map')
   var placemark=new NetworkLink(serverpath+'gallery/Global Cloud Map.kml');
   folder.add(placemark);
   geap.loadKml(folder);
   //.load();
}

function downloadclick(){
   //alert('get plugin');
   window.location=serverpath+'setup.exe';
   //getContent('plug_x');
}
function pluginclick(){
   //alert('get plugin');
   getContent('plug_x');
}

function logclick(){
   getContent('log_x');
}

function sourceclick(){
   //alert('source');
   getContent('source_x');
}
function homeclick(){
   //alert('home');
   getContent('home_x');
}
function linksclick(){
   //alert('links');
   getContent('_links');
}

function cockpitclick(){
   cockpit=!cockpit;
   geap.trace('cockpit:'+cockpit);
   //alert('cockpit:'+cockpit);
   geap.setLayer('Cockpits',0);
   if (cockpit){
      geap.setLayer(cockpits[0],1);
   }
}

function terrainclick(){
   terrain=!terrain;
   geap.terrain(terrain);
   geap.trace('terrain:'+terrain);
}

function roadsclick(){
   roads=!roads;
   geap.roads(roads);
   geap.trace('roads:'+roads);
}

function bordersclick(){
   borders=!borders;
   geap.borders(borders);
   geap.trace('borders:'+borders);
}

function streamingclick(){
   geap.streamingMode=!geap.streamingMode;
   geap.trace('streaming:'+streaming);
}

function advertisingclick(){
   advertising=!advertising;
   if (advertising){
      setTimeout('bannersTimer()',1000);
   }

   var folder=new Folder('Advertising');
   var go=new GroundOverlay('bittime.jpg');
   go.color='c0ffffff';
   //alert(go);
   folder.add(go);
   geap.loadKml(folder);
   //folder.load();
}


function autopilotclick(){
   autopilot=!autopilot;
   if (autopilot)
      geap.autoPilotSpeed(5.0);
   geap.trace('autopilot:'+autopilot);
}


function viewlogclick(){
   //alert('viewlog');
   logwindow=!logwindow;
   var log=document.getElementById('logwindow');
   //alert(hb);
   if (!logwindow){
      log.innerHTML='';
      hb=90;
   }else{
      log.innerHTML=geap.log.toString();
      hb=90;
   }
   //resize();
}


function fullscreenclick(){
   try{
       fullscreen=!fullscreen;
       doResize();
   }catch(e){
      alert(e.description);
   }
}


function movierecclick(){
   geap.camera.snapshot=!geap.camera.snapshot;
}

function originclick(){
   geap.gotoOrigin();
}

function camerapathclick(){
   var doc=new Document('Camera Path');
   var ss=new Style("airlineStyle");
   ss.LineStyle.color='ff0000ff';
   ss.LineStyle.width=3;
   doc.add(ss);
   pp=new Placemark('camera path');
   pp.Geometry=geap.camera.camerapath;
   pp.styleUrl='#airlineStyle';
   geap.trace(doc.toString());
   //folder.add(pp);
   doc.add(pp);
   geap.loadKml(doc);
   //doc.load();
}
function focuspathclick(){
   var doc=new Document('Focus Path');
   var ss=new Style("airlineStyle");
   ss.LineStyle.color='ffff00ff';
   ss.LineStyle.width=3;
   doc.add(ss);
   pp=new Placemark('focus path');
   pp.Geometry=geap.camera.path;
   pp.styleUrl='#airlineStyle';
   geap.trace(doc.toString());
   //folder.add(pp);
   doc.add(pp);
   geap.loadKml(doc);
   //doc.load();
}


function circleclick(){
   geap.camera.circle();
   pp=new Placemark('Circle');
   pp.Geometry=geap.camera.path;
   geap.loadKml(pp);
   //pp.load();
}

function deleteclick(){
   var nl=new NetworkLink(serverpath+'gallery/del_ciampino.kml');
   geap.loadKml(nl);
   //nl.load();
}
function loadclick(){
   //alert('load');
   var folder=new Document('Placemarks');
   var placemark=new NetworkLink(serverpath+'gallery/ciampino.kml');
   geap.trace(placemark);
   folder.add(placemark);
   geap.openKml(folder);
   //folder.open();
   //geap.setLayer('ciampino_Loader',1);
}

function clockclick(){
    geap.clock=0;
}

function snapshotclick(){
   //geap.camera.snapshot=!geap.camera.snapshot;
   var fn=geap.saveImage('snapshot'+pad(snapIndex,2));
   //var html='<img width=180 height=120 src="'+fn+'" ></img>';
   //setText('snapshot1',html);
   snapIndex++;
   alert(fn + ' has been saved');
}

function cameraplacemarkclick(){
   geap.camera.getView();
   pp=new Placemark('camera');
   pp.Geometry=geap.camera.eye;
   pp.Geometry.extrude=1;
   geap.loadKml(pp);
   //pp.load();
}

function focusplacemarkclick(){
   geap.camera.getView();
   pp=new Placemark('focus');
   pp.Geometry=geap.camera.LookAt.asPoint();
   geap.loadKml(pp);
   //pp.load();
}
   /*
   var p=new Point();
   p.onTerrain(0,0);
   p.onTerrain(0,0.1);
   pp=new Placemark('p0,0.1');
   pp.Geometry=p.clone();
   folder.add(pp);
   p.onTerrain(-0.1,0);
   pp=new Placemark('p-0.1,1');
   pp.Geometry=p.clone();
   folder.add(pp);
   */
   /*
   pp=new Placemark('turnPoint');
   pp.Geometry=geap.camera.rollControl.LookAt.asPoint();
   folder.add(pp);

   pp=new Placemark('FocusPoint');
   pp.Geometry=geap.camera.LookAt.asPoint();
   pp.LookAt=geap.camera.LookAt;
   folder.add(pp);


   pp=new Placemark('Turn');
   pp.Geometry=geap.camera.rollControl.path;
   folder.add(pp);
   pp=new Placemark('P1');
   var p=geap.camera.rollControl.path.points[0];
   pp.Geometry=p;
   folder.add(pp);
   pp=new Placemark('P2');
   var p=geap.camera.rollControl.path.points[1];
   pp.Geometry=p;
   folder.add(pp);

   folder.load();
   */


function flyclick(){
   try{
       if (geap.stopped){
          geap.clock=0;
          geap.autoPilotSpeed(5.0);
          geap.fly();
          controls['fly'].set('pause');
       }else{
          geap.pause();
          geap.autoPilotSpeed(0.2);
          controls['fly'].set('fly');
       }
   }catch(e){
       alert(e);
   }
}

function viewsnap(){
   var html='';
   var html='<iframe width=98% height=95% src="list.html"></iframe>';
   //for (var i=0;i<geap.snapshots.length;i++){
   //     html+='<img width=180 height=120 src="'+geap.snapshots[i]+'" ></img>';
   //}
   //setText('log',html);
}


function openFile(kml){
   //alert(plug);
   plug.openFile(kml);
}

