// *********************************************************************************
// RoutingManager Klasse 
// *********************************************************************************
//Init und Eigenschaften
function RoutingManager(Map, OverlayManager, GDirectionsManager, PanelAbstandOben,PanelAbstandUnten,PanelBreite){
	this.Map = Map;
    this.OverlayManager = OverlayManager;
    this.GDirections = GDirectionsManager;
    this.PanelAbstandOben = PanelAbstandOben;
	this.PanelAbstandUnten = PanelAbstandUnten;
	this.PanelBreite = PanelBreite;
	this.div = $('RoutingPanelContainer');
    this.PfeilDiv = $('RoutingPanelPfeil');
	this.TourEtappenIds = new Array(); //Strings mit POI-Ids
	this.TourEtappenTitel = new Array(); //Strings mit POI-Titel
	this.RoutingBerechnungsMethode = 'Schnell';
    this.PanelSichtbar = true;

var WegBerechnung = $('RoutingBerechnungsMethoden').value.split(";");
var WegBerechnungFelder = WegBerechnung[0].split("@");
   if(WegBerechnungFelder[0] != undefined){
   this.RoutingBerechnungsMethode = WegBerechnungFelder[0]
   }
}

RoutingManager.prototype = new GControl();

//*********************************************************************************
//initialize
RoutingManager.prototype.initialize = function(map) {
map.getContainer().appendChild($('RoutingPanelContainer'));
map.getContainer().appendChild($('RoutingPanelPfeil'));
this.div.style.display = '';
this.PfeilDiv.style.display = '';
this.ResizeRoutingPanel();
var Self = this;
  GEvent.addDomListener(this.PfeilDiv, "click", function() {
  Self.RoutingPanelSwitchSichtbarkeit();
  });
this.ManageRoute('Init', null, null)
GEvent.addListener(map, "infowindowopen", onInfoWindowOpen); 
return this.div;
}

//*********************************************************************************
//ResizeRoutingPanel
RoutingManager.prototype.ResizeRoutingPanel = function() {
var MapSize = this.Map.getSize()

this.div.style.width = (this.PanelBreite - BoxModelHack(12)) + "px";
var panelHeight = MapSize.height - this.PanelAbstandOben - this.PanelAbstandUnten - BoxModelHack(12)
this.div.style.height = panelHeight + "px";
this.div.style.left = (MapSize.width - this.PanelBreite) + "px";
this.div.style.top = this.PanelAbstandOben + "px";

this.PfeilDiv.style.left = (MapSize.width - 15) + "px";
this.PfeilDiv.style.top = (this.PanelAbstandOben + panelHeight - 15 + BoxModelHack(12)) + "px";
}

//*********************************************************************************
//RoutingPanelSwitchSichtbarkeit
RoutingManager.prototype.RoutingPanelSwitchSichtbarkeit = function() {
var GrafikId = $('RoutingPanelPfeilGrafik');
  if(this.PanelSichtbar == true){
  this.PanelSichtbar = false;
  this.div.style.display = 'none';
  GrafikId.src = 'Bilder/PfeilUp.png';
  }else{
  this.PanelSichtbar = true;
  this.div.style.display = ''
  GrafikId.src = 'Bilder/PfeilDown.png';
  }
}

//*********************************************************************************
//ManageRoute
//Zentrale Funktion, die: PanelUpdate, TrackZeichnen, DatenLesen steuert
RoutingManager.prototype.ManageRoute = function(Fkt, Id, szTitel) {
  switch(Fkt.toUpperCase()){
  case 'INIT':
  this.PanelUpdate();
  break;

  case 'ADD':
    if(Id == this.TourEtappenIds[this.TourEtappenIds.length-1]){ //Schauen, ob gewählter Punkt nicht gleich dem letzten Punkt ist  
    break;
    }
  this.TourEtappenIds.push(Id);
  this.TourEtappenTitel.push(szTitel);
    if(this.TourEtappenIds.length > 1){ 
    this.PanelUpdate();
      if(this.RoutingBerechnungsMethode != 'TeleAtlas'){
      this.CheckInNetzEtappe(Id); //Geotracks-Daten
   	  } else {
      this.CheckInTeleAtlasEtappe(Id); //Teleatlas-Daten
      }
    } else {
    this.PanelUpdate();
    }
  break;

  case 'DEL':
    if(this.RoutingBerechnungsMethode != 'TeleAtlas'){
      if(this.TourEtappenIds.length > 1){ 
	  var TrackId = "POI-" + this.TourEtappenIds[this.TourEtappenIds.length-2] + "-" + "POI-" + this.TourEtappenIds[this.TourEtappenIds.length-1] + this.RoutingBerechnungsMethode
      this.OverlayManager.HideTrack(TrackId, false); 
      } else {
	  this.DeleteTempSessionXml(); //Wenn die erste Etappe gelöscht wird, auf dem Server auch die Temporären Files löschen!
	  }
    this.TourEtappenIds.pop();
    this.TourEtappenTitel.pop();
	} else {
    this.TourEtappenIds.pop();
    this.TourEtappenTitel.pop();
      if(this.TourEtappenIds.length > 1){ 
      this.CheckInTeleAtlasEtappe(Id); //Teleatlas-Daten
	  } else {
      this.GDirections.clear()
      }
	}
  this.PanelUpdate();
  break;
  }
}

//*********************************************************************************
//PanelUpdate
RoutingManager.prototype.PanelUpdate = function() {
var szText;	
var szAdditionalPois = '';
var lKm = 0.0;
var lHodi = 0;
var lHopu = 0;	
var anzahlBerechnungsMethoden = 0;
szText = $('POIS_RoutingPanelTitel').value + '<br>';

  if(this.GetAnzahlEtappen() == 0){ //Noch nichts vorhanden ************************
  var WegBerechnung = $('RoutingBerechnungsMethoden').value.split(";");
    for(var i = 0; i<WegBerechnung.length; i++) {
    var WegBerechnungFelder = WegBerechnung[i].split("@");
      if(WegBerechnungFelder[1] != undefined){
	  anzahlBerechnungsMethoden++;
	  }
    }

    if(anzahlBerechnungsMethoden>1){
    szText = szText + '<br>';
    szText = szText + $('Txt1').value + '<br>';
	}

    for(var i = 0; i<WegBerechnung.length && anzahlBerechnungsMethoden>1; i++) {
    var WegBerechnungFelder = WegBerechnung[i].split("@");
      if(WegBerechnungFelder[1] != undefined){
      var BerechnungsMethode = WegBerechnungFelder[0];
      var BerechnungsMethodeText = WegBerechnungFelder[1];
        if(BerechnungsMethode == this.RoutingBerechnungsMethode){
	    var szChecked = 'checked';
	    } else {
	    var szChecked = '';
	    }
      szText = szText + "<input type='radio' " + szChecked + " name='RoutingMethode' value='" + BerechnungsMethode + "' onclick=\"Routing.RoutingBerechnungsMethode='" + BerechnungsMethode + "';RecalcRoutingAbstandIstKorrekt();\"> " + BerechnungsMethodeText + "<br>";
      }
    }
  szText = szText + '<br>';
  szText = szText + $('Txt2').value + '<br>';

  } else if(this.GetAnzahlEtappen() == 1){ //Startetappe da ***********************
  szText = szText + '<br>';
  szText = szText + $('Txt4').value + '<br>';
  szText = szText + '1. ' + this.TourEtappenTitel[0] + '<br>';
//Murgs - geklammerter Code funktioniert nicht in iFrames
  szText = szText + '&nbsp;&nbsp;&nbsp;&nbsp;' + '<a href=\"javascript:Routing.ManageRoute(\'Del\',\'' + this.TourEtappenIds[0] + '\',null);\">' + $('Txt5').value + '</a><br>';
//  szText = szText + '&nbsp;&nbsp;&nbsp;&nbsp;' + '<a href=\"javascript:parent.DeleteFromRouting(\'' + this.TourEtappenIds[0] + '\');\">' + $('Txt5').value + '</a><br>';
  szText = szText + '<br>';
  szText = szText + $('Txt3').value + '<br>';

  } else { //Mehr als eine Etappe da *********************************
    //Track KM, HODI, HOPU berechnen
    for(var i=0; i<this.OverlayManager.Tracks.length; i++){
      if(this.OverlayManager.Tracks[i].SichtbarAufKarte == true && this.OverlayManager.Tracks[i].WegCharakter != null){
      var Etappen = this.OverlayManager.Tracks[i].WegCharakter.split('|');
        for(iEtappe=0; iEtappe<Etappen.length; iEtappe++){
          if(Etappen[iEtappe].indexOf('@') < 1){
          break;
          }
       	var EtappenDaten = Etappen[iEtappe].split('@');
	    lKm = lKm + parseFloat(EtappenDaten[1]);
	    lHodi = lHodi + parseInt(EtappenDaten[2]);
	      if(parseInt(EtappenDaten[3]) > lHopu){
          lHopu = parseInt(EtappenDaten[3]);
	      }
        }
      }
    }
  szLeistung = $('Txt6').value
  lKm = Math.round(lKm * 100) / 100;
  szLeistung = szLeistung.replace('iiiii', lKm.toString());
  szLeistung = szLeistung.replace('jjjjj', lHodi.toString());
  szLeistung = szLeistung.replace('kkkkk', lHopu.toString());
    if(this.RoutingBerechnungsMethode != 'TeleAtlas'){
    szText = szText + szLeistung + '<br>';	
	}
  szText = szText + '<br>';
  szText = szText + $('Txt4').value + '<br>';
    for(var i=0; i<this.GetAnzahlEtappen(); i++){
	szAdditionalPois = szAdditionalPois + this.TourEtappenIds[i] + ',';
    szText = szText + (i+1).toString() + '. ' + this.TourEtappenTitel[i] + '<br>';
	}
//Murgs - geklammerter Code funktioniert nicht in iFrames
  szText = szText + '&nbsp;&nbsp;&nbsp;&nbsp;' + '<a href=\"javascript:Routing.ManageRoute(\'Del\',\'' + this.TourEtappenIds[this.GetAnzahlEtappen()-1] + '\',null);\">' + $('Txt5').value + '</a><br>';
//  szText = szText + '&nbsp;&nbsp;&nbsp;&nbsp;' + '<a href=\"javascript:parent.DeleteFromRouting(\'' + this.TourEtappenIds[this.GetAnzahlEtappen()-1] + '\');\">' + $('Txt5').value + '</a><br>';
//  szText = szText + '<br>';
//  szText = szText + $('Txt3').value + '<br>';
  szText = szText + '<br>';
  szText = szText + '<br>';
    if(this.RoutingBerechnungsMethode != 'TeleAtlas'){
    szText = szText + $('Txt7').value + ':<br>';
    var szAufruf = PoisUrl.replace('PoisApi01.asp','NetworkRoutingDrucken.asp') + '&AdditionalPois=' + szAdditionalPois + '&Random=' + Math.random();
    szText = szText + '<a href=\"javascript:LibWindowEinfach(\'' + szAufruf + '\',780, 660, 5, 5);\">' + $('Txt8').value + '</a><br>';
    var szAufruf = PoisUrl.replace('PoisApi01.asp','TisFlashMap.asp') + '&AdditionalPois=' + szAdditionalPois + '&WhatTopic=OnlineKarten';
    szText = szText + '<a href=\"javascript:LibWindowEinfach(\'' + szAufruf + '\',700, 650, 5, 5);\">' + $('Txt9').value + '</a><br>';
    var szAufruf = PoisUrl.replace('PoisApi01.asp','TrackToGoogleSatMap.asp') + '&AdditionalPois=' + szAdditionalPois + '&WhatTopic=OnlineKarten';
    szText = szText + '<a href=\"javascript:LibWindowEinfach(\'' + szAufruf + '\',0, 0, 0, 0);\">' + $('Txt12').value + '</a><br>';
      if($('DownloadIo').value == '1'){
	  var isSchweizerWanderweg = false;	  
	  var mapCenterX = this.Map.getCenter().lng();  
	  var mapCenterY = this.Map.getCenter().lat();  
		if(this.RoutingBerechnungsMethode == 'X02' && mapCenterX > 6 && mapCenterX < 10.5 && mapCenterY > 45.8 && mapCenterY < 47.6){  
	    isSchweizerWanderweg = true;	
		}
	    
		if(!isSchweizerWanderweg){  
        var szAufruf = PoisUrl.replace('PoisApi01.asp','TisGpsTracks.asp') + '&AdditionalPois=' + szAdditionalPois + '&What=GenerateTempFile&WhatTopic=Pc';
        szText = szText + '<a href=\"javascript:LibWindowEinfach(\'' + szAufruf + '\',475,550,35,35);\">' + $('Txt10').value + '</a><br>';
	    }
      var szAufruf = PoisUrl.replace('PoisApi01.asp','TisGpsTracks.asp') + '&AdditionalPois=' + szAdditionalPois + '&What=GenerateTempFile&WhatTopic=Kml';
      szText = szText + '<a href=\"javascript:LibWindowEinfach(\'' + szAufruf + '\',475,550,35,35);\">' + 'Google Earth' + '</a><br>';
	  }
	} else {
    szText = szText + '<a href=\"javascript:PrintElement(\'RoutingPanelContainer\');\">' + $('Txt13').value + '</a><br>';
	}
  }
this.div.innerHTML = szText;
}

//*********************************************************************************
//CheckInTeleAtlasEtappe
RoutingManager.prototype.CheckInTeleAtlasEtappe = function(Id) {
var EtappenXY = new Array();

this.GDirections.clear()
  for(var i=0; i<this.GetAnzahlEtappen(); i++){
  EtappenXY.push(this.OverlayManager.GetPoiXY(this.TourEtappenIds[i]));  
  }
this.GDirections.loadFromWaypoints(EtappenXY, {preserveViewport:true});
}

//*********************************************************************************
//CheckInNetzEtappe
RoutingManager.prototype.CheckInNetzEtappe = function(Id) {
var AjaxLoad = null
var Self = this;
var szWegStartZiel = "POI-" + this.TourEtappenIds[this.TourEtappenIds.length-2] + "|" + "POI-" + this.TourEtappenIds[this.TourEtappenIds.length-1] + "|" + this.RoutingBerechnungsMethode 
ShowTimedMessage(1000, $('Txt11').value)
AjaxLoad = GpsTracksAjax(AjaxLoad); 
var UrlMitParametern = PoisUrl + '&cmd=NetworkSucheWeg&WegStartZiel=' + szWegStartZiel + '&Random=' + Math.random();
//window.clipboardData.setData('Text', UrlMitParametern);
AjaxLoad.open("GET", UrlMitParametern, true);
  AjaxLoad.onreadystatechange = function() {
    if(AjaxLoad.readyState == 4) {
    var TrackAsXmlText = decodeXml(AjaxLoad.responseText);
    var TrackAsDomRoh = TextToDom(TrackAsXmlText);
    var TrackAsDomArray = TrackAsDomRoh.getElementsByTagName("track");
    var TrackAsDom = TrackAsDomArray[0] //track hat nur ein Element (#netz fiel in Zeile vorher heraus!)
	var TrackId = TrackAsDom.getAttribute('PrId') + Self.RoutingBerechnungsMethode;
    var _Track = new Track(TrackId);
	var WegPois = '';
	_Track.Track = TrackAsDom
      for (var i=0; i<_Track.Track.childNodes.length; i++){ //Im head tag wichtige Infos lesen
	    if(_Track.Track.childNodes[i].nodeName == 'head'){
        _Track.PrArt = _Track.Track.childNodes[i].getAttribute('PrArt') 
        _Track.PrSchwer = _Track.Track.childNodes[i].getAttribute('PrSchwer')
          for (var x=0; x<_Track.Track.childNodes[i].childNodes.length; x++){ 
    	    if(_Track.Track.childNodes[i].childNodes[x].nodeName == 'WegCharakter'){
			_Track.WegCharakter = _Track.Track.childNodes[i].childNodes[x].childNodes[0].nodeValue
			}

            if(_Track.Track.childNodes[i].childNodes[x].nodeName == 'WegText'){
			_Track.WegText = _Track.Track.childNodes[i].childNodes[x].childNodes[0].nodeValue
			}

            if(_Track.Track.childNodes[i].childNodes[x].nodeName == 'WegPois'){
			WegPois = _Track.Track.childNodes[i].childNodes[x].childNodes[0].nodeValue
			}
          }
		}
      }

      if(WegPois.length < 7){ //NICHTS gefunden!
      StopTimedMessage();
      alert(_Track.WegText);
      DeleteFromRouting(Self.TourEtappenIds[Self.GetAnzahlEtappen()-1]);
	  } else {
      Self.OverlayManager.Tracks.push(_Track);
      Self.OverlayManager.ShowTrack(TrackId);  
      Self.OverlayManager.Refresh();
      StopTimedMessage();
	  }
    Self.PanelUpdate(); //Damit Gesamt-Länge der Strecke stimmt
    }
  }	
AjaxLoad.send(null);
}

//*********************************************************************************
//GetAnzahlEtappen
RoutingManager.prototype.GetAnzahlEtappen = function(){
return this.TourEtappenIds.length;
}

//*********************************************************************************
//DeleteTempSessionXml
RoutingManager.prototype.DeleteTempSessionXml = function(){
var AjaxLoad = null
AjaxLoad = GpsTracksAjax(AjaxLoad); 
var UrlMitParametern = PoisUrl + '&cmd=DeleteTempSessionXml&Random=' + Math.random();
AjaxLoad.open("GET", UrlMitParametern, true);
  AjaxLoad.onreadystatechange = function() {
    if(AjaxLoad.readyState == 4) { //kein relevantes Return
    }
  }	
AjaxLoad.send(null);
}

//*********************************************************************************
//onInfoWindowOpen
function onInfoWindowOpen(){
var infoWindow = map.getInfoWindow();
infoWindow.hide();
//var BlowupPoint = infoWindow.getPoint();
//map.showMapBlowup(BlowupPoint, {mapType:G_NORMAL_MAP});
}

//*********************************************************************************
//PrintElement
function PrintElement(elementId) {
var printContent = $(elementId);
var sFeatures = "height=200,width=300,status=no,toolbar=no,menubar=no,location=no";
win = window.open("","Print", sFeatures);
win.document.write(printContent.innerHTML);
win.document.close();
win.focus();
win.print();
win.close();	
}











































