// per AJAX Seite nachladen und Inhalt ausfuehren
function loadAjaxData(link, parameters, parameterFunktion){
new Request({
    method: 'get',
    url: link,
    onRequest: function() {
  },
  onFailure: function() {
   // Fehlerseite anzeigen
   alert("Die Daten konnten leider nicht abgefragt werden.");
  },
  onComplete: function(response) {
   eval(response);
   if(parameterFunktion == "category"){
    loadLocalCategory();
   }
   if(parameterFunktion == "company"){
    loadLocalCompany();
   }
  }
}).send(parameters);
}

// per AJAX Informationen zu einem Eintrag nachladen und Inhalt ausfuehren
function loadAjaxDetailInformation(link, parameters){
new Request({
    method: 'get',
    url: link,
    onRequest: function() {
       
  },
  onFailure: function() {
   // Fehlerseite anzeigen
   alert("Die Daten konnten leider nicht abgefragt werden.");
  },
  onComplete: function(response) {
   if(document.getElementById("linienverlauf") != null) document.getElementById("linienverlauf").innerHTML = response;
  }
}).send(parameters);
}

// Funktionen die die per AJAX nachgeladenen Daten in einen Array schreibt
function addLocalCategory(kategoriename, icon, geoinfo, kategorieID, haltestellenId){
 var isInArray = false;
 for(var i = 0; i < arrayLocalCategoryNames.length; i++) {
  var tempArray = arrayLocalCategoryNames[i];
  if(tempArray[0] == kategoriename) isInArray = true; // Name schon vorhanden?
 }

 if(!isInArray){
  arrayLocalCategoryNames[arrayLocalCategoryNames.length] = new Array(kategoriename, icon, geoinfo, kategorieID, haltestellenId); // Namen der Kategorie speichern (nur zum ueberpruefen, ob vorhanden)
  if(geoinfo != null && geoinfo != "" && geoinfo.indexOf(",")>0){
   var marker = createCategoryMarker(geoinfo,icon,kategorieID, haltestellenId, arrayLocalCategoryMarker.length+1); // Marker generieren und speichern fuer Ansicht auf Karte
   arrayLocalCategoryMarker[arrayLocalCategoryMarker.length] = new Object();
   arrayLocalCategoryMarker[arrayLocalCategoryMarker.length-1] = marker;
  }
 }
}

// die Funktion ansich wird noch nicht gebraucht, daher direkt weiterleiten!
function addAllLocalCompanys(name, symbol, koords, companyinfo, categoryID, markerID){addLocalCompany(name, symbol, koords, companyinfo, categoryID, markerID);}

// generiert einen Marker mit der Einrichtung und schreibt diesen Marker in einen Array
function addLocalCompany(firmenname, iconUrl, coords, infotext, kategorie, markerID){
    var lat = parseFloat(coords.substring(0, coords.indexOf(",")));
    var lng = parseFloat(coords.substring(coords.indexOf(",")+1, coords.length));
    
    var newIcon = new GIcon(G_DEFAULT_ICON);
    newIcon.image = iconUrl; // version 1.5 - Einrichtungen haben das Logo der Kategorie
    newIcon.iconSize = new GSize(32, 32);
    newIcon.iconAnchor = new GPoint(0, 0);
    newIcon.shadow = "";
    newIcon.infoWindowAnchor = new GPoint(22, 1);
        
    var marker = new GMarker(new GLatLng(lat,lng),newIcon);
    // Marker Kategorie zuweisen
    marker.bxmarkergroup = kategorie;
    marker.bxrecordid = markerID;
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml('<b>'+firmenname+'</b><br>'+infotext+'<br>[ <a title="weitere Informationen zu diesem Eintrag unterhalb der Karte anzeigen" href="index.htm#linienverlauf" onclick="loadAjaxDetailInformation(\'/www/kombus/specials/companyinfo.htm\', \'recordid='+marker.bxrecordid+'\');return false;">mehr</a> <span class="spanMore">&raquo;</span>]');
    });

    // den Marker zum Array hinzufuegen
    arrayLocalCompanyMarker[arrayLocalCompanyMarker.length] = new Object();
    arrayLocalCompanyMarker[arrayLocalCompanyMarker.length-1] = marker;
}

// erstellt immer einen neuen Marker mit der Haltestelle
function createNewHaltestellenMarker(coords, haltestellenID) {
  var lat = parseFloat(coords.substring(0, coords.indexOf(",")));
  var lng = parseFloat(coords.substring(coords.indexOf(",")+1, coords.length));
  var marker = new GMarker(new GLatLng(lat,lng));
  marker.bxrecordid = haltestellenID;
  arrayMarker[arrayMarker.length] = new Object();
  arrayMarker[arrayMarker.length-1] = marker;
}

function createCategoryMarker(coords, iconurl, kategorieID, haltestellenID, currentIndex) {
// Berechnung der Anordnung als Kreis
var radius = 0.00175;
var abs_grad = 30;
var pos = abs_grad * currentIndex;


    var lat = parseFloat(coords.substring(0, coords.indexOf(",")));
    var lng = parseFloat(coords.substring(coords.indexOf(",")+1, coords.length));

var new_x = lat - radius * Math.cos((pos + 90) * Math.PI / 180);
var new_y = lng - radius * Math.sin((pos + 90) * Math.PI / 180);

    var categoryIcon = new GIcon(G_DEFAULT_ICON);
    categoryIcon.iconSize = new GSize(32, 32);
    categoryIcon.iconAnchor = new GPoint(0, 0);
    categoryIcon.shadow = "";
    categoryIcon.infoWindowAnchor = new GPoint(32, 1);

    var newIcon = new GIcon(categoryIcon);
    newIcon.image = iconurl;

    var marker = new GMarker(new GLatLng(new_x,new_y),newIcon);
    marker.bxrecordid = kategorieID;
    marker.haltestelle = haltestellenID;
    GEvent.addListener(marker, "click", function() {
        // wenn Array mit Unternehmen schon voll, diese leeren und Marker entfernen!!!
        if(arrayLocalCompanyMarker.length > 0) hideCompanyMarkers(); 
        loadAjaxData("/www/kombus/specials/ajaxcompany.htm", "kategorie="+marker.bxrecordid+"&haltestelle="+haltestellenID, "company");
    });
    return marker;
}

function makeStopMarker(coords, id){
    var lat = parseFloat(coords.substring(0, coords.indexOf(",")));
    var lng = parseFloat(coords.substring(coords.indexOf(",")+1, coords.length));
    var newPoint = new GLatLng(lat, lng);
    newPoint.bxrecordid = id;
    return newPoint;
}

// laed alle Kategorien zu einer Haltestelle als Marker
function loadLocalCategory(){
for(var i = 0; i < arrayLocalCategoryMarker.length; i++) {
  map.addOverlay(arrayLocalCategoryMarker[i]);
 }
}

// laed alle Unternehmen zu einer Haltestelle und Kategorie
function loadLocalCompany(){
 for(var i = 0; i < arrayLocalCompanyMarker.length; i++) {
  map.addOverlay(arrayLocalCompanyMarker[i]);
 }
}

// entfernt alle Einrichtung-Marker von der Karte
function hideCompanyMarkers(){
 for(var i = 0; i < arrayLocalCompanyMarker.length; i++) {
    arrayLocalCompanyMarker[i].closeInfoWindow();
    arrayLocalCompanyMarker[i].hide();
 }
 arrayLocalCompanyMarker = null;
 arrayLocalCompanyMarker = new Array();
}

// entfernt alle Kategorie-Marker von der Karte
function hideCategoryMarkers(){
 for(var i = 0; i < arrayLocalCategoryMarker.length; i++) {
    arrayLocalCategoryMarker[i].closeInfoWindow();
    arrayLocalCategoryMarker[i].hide();
 }
 arrayLocalCategoryMarker = null;
 arrayLocalCategoryMarker = new Array();
 arrayLocalCategoryNames = null;
 arrayLocalCategoryNames = new Array();
}




// versteckt alle Marker
function hideDirMarkers() {

 /*
 alle Marker entfernen
 ANPASSUNG XP - Nov. 08! 
 */
 if(directionsArray != null && directionsArray.length > 0){
   for(var c = 0; directionsArray.length > c; c++){
    var tempDir =  directionsArray[c];
    var numMarkersInDir = tempDir.getNumRoutes();
    for (var i = 0; (numMarkersInDir+1) > i; i++) {
      var marker = tempDir.getMarker(i);
       if (marker != null) {
         GEvent.clearInstanceListeners(marker); // alle Listener entfernen und selber setzen
         marker.closeInfoWindow();
         marker.hide();
       }
    }
   }
  
 }

 /*
 var numMarkers = 0;
 numMarkers = directions.getNumGeocodes();
 for (var i = 0; numMarkers > i; i++) {
  var marker = directions.getMarker(i);
  if (marker !== null) {
    if(arrayMarkerIds[i] != null) marker.bxrecordid = arrayMarkerIds[i]; // zu jedem Marker noch die recordid zuordnen
    arrayMarker[i] = marker;
    GEvent.clearInstanceListeners(marker); // alle Listener entfernen und selber setzen
    marker.closeInfoWindow();
    marker.hide();
  }
 }
 */
 
 // neue Haltestellen zeichnen
 drawNewMarkers();

}


// bei der Uebergabe der ID eines Datensatzes kann man die Haltestelle suchen und auf der Karte anzeigen
function gotoMarker(markerId){
 if(markerId != null && arrayMarker.length > 0){
    for (var i = 0; i < (arrayMarker.length -1); i++) {
        if(arrayMarker[i].bxrecordid == markerId) {
            if(arrayLocalCompanyMarker.length > 0) hideCompanyMarkers();
            if(arrayLocalCategoryMarker.length > 0) hideCategoryMarkers();
            map.setCenter(arrayMarker[i].getPoint(), 15);
            loadAjaxData("/www/kombus/specials/ajaxhaltestelle.htm", "haltestelle="+arrayMarker[i].bxrecordid, "category");
        }    
    }
 }
}


// je nach Filterkriterium werden Marker mit dieser Kategorie an- oder ausgeblendet
function changeCompanyFilter(markerid, buttonid){
 var selectedBox = document.getElementById(buttonid);
  
 for(var i = 0; i < arrayLocalCompanyMarker.length; i++) {
    if (arrayLocalCompanyMarker[i].bxmarkergroup == markerid) {
      // wenn der Marker die Kategorie-ID hat, wir geschaut, ob er an oder aus ist und sein Status gewechselt

      if(selectedBox != null && selectedBox.checked == true ){
        arrayLocalCompanyMarker[i].show();
      }else{
        arrayLocalCompanyMarker[i].hide();
      }
    }
 }
}

var allSelected = true;

function switchAllFilters(){
  var theForm = document.getElementById("kategorieFilterForm");
// alle INPUT-Felder die Haken anpassen
if(allSelected && theForm != null && theForm.length > 0){
  // aus dem Form alle Inputs laden
  for(var i = 0; i < theForm.length; i++) {
    theForm.elements[i].checked = false;
  }
  // alle Marker ausblenden
  for(var i = 0; i < arrayLocalCompanyMarker.length; i++) {
    arrayLocalCompanyMarker[i].hide();
  }
  allSelected = false;
}else if(!allSelected && theForm != null){
  for(var i = 0; i < theForm.length; i++) {
    theForm.elements[i].checked = true;
  }
  // alle Marker ausblenden
  for(var i = 0; i < arrayLocalCompanyMarker.length; i++) {
    arrayLocalCompanyMarker[i].show();
  }
  allSelected = true;
}
}

// anhand der Koordinaten wird im Array nach dem passenden Marker gesucht und die BX-Id zur?ckgegeben
function getOverlayId(coords){
  var bxid="";
  for (var i = 0; i < (arrayMarker.length -1); i++) {
    var tm = arrayMarker[i];
    if(tm.getLatLng() == coords){bxid=tm.bxrecordid;}
  }
  return bxid;
}

function showAllCompaniesForThisEvent(buttonName){
var theButton = document.getElementById(buttonName);
var theForm = document.getElementById("kategorieFilterForm");

if(theButton != null && theButton.checked == true && arrayMarkerIds != null && arrayMarkerIds.length > 0){
 // alte Eintraege loeschen
 if(arrayLocalCompanyMarker.length > 0){
  hideCompanyMarkers();
 }

 // alle Einrichtungen zu den entsprechenden Haltestellen laden
 for (var i = 0; arrayMarkerIds.length > i; i++) {
  loadAjaxData("/www/kombus/specials/ajaxallcompanys.htm", "haltestelle="+arrayMarkerIds[i], "company"); // Alle Einrichtungen laden
 }
 // vom Filterformular alle Haken wieder aktivieren
 if(theForm != null && theForm.length > 0){
    for(var i = 0; i < theForm.length; i++) {
     theForm.elements[i].checked = true;
    }
 }
 
} else if (theButton != null && theButton.checked == false){
  hideCompanyMarkers();
}

// button zuruecksetzen
//theButton.checked = false;
}



// Initialisierung damit Array durchsucht werden kann
if(!Array.indexOf)
{
  Array.prototype.indexOf = function(el, fromIndex)
  {
    // fromIndex
    // The index at which to begin the search. Defaults to 0, i.e. the whole array will be searched.
    if(!fromIndex) { var fromIndex = 0; }

    // If negative, it is taken as the offset from the end of the array.
    // Note that even when the index is negative, the array is still searched from front to back.
    // If the calculated index is less than 0, the whole array will be searched.
    else if(fromIndex < 0) {
      fromIndex += this.length;
      if(fromIndex < 0) { fromIndex = 0; }
    }

    // If the index is greater than or equal to the length of the array, -1 is returned, i.e. the array will not be searched.
    else if(fromIndex >= this.length) { return -1; }

    for(var i = fromIndex; i < this.length; i++) { if(el == this[i]) { return i; } }
    return -1;
  }
}


/* Newsletter-Anmeldung - Validierung der Eingabefelder */

function checkNewsletterForm(newsletterForm){
  if(newsletterForm.Name != null && newsletterForm.Name.value == "Ihr Name") newsletterForm.Name.value = "";
  if(newsletterForm.Email != null && newsletterForm.Email.value == "Email Adresse") newsletterForm.Email.value = "";
  return true;
}

/* Volltextsuche */
function checkFullsearchForm(searchForm){
  if(searchForm.search != null && searchForm.search.value == "Volltextsuche") searchForm.search.value = "";
  return true;
}

/* Fahrplanauskunft */
function loadDestinationInfo(theForm, infoDivId, contentDivId){
  var preloader = $(infoDivId);
  var myForm = $(theForm);
  myForm.set('send', {
    url: 'detailinfo.htm', 
    method: 'post',
    update: $(contentDivId),
    onFailure: function() {
    // Fehlerseite anzeigen
    alert("Die Daten konnten leider nicht abgefragt werden.");
    },
		onRequest: function() {
     // Preloader anzeigen
     preloader.setStyles({
       display:'block',
       opacity: 1
      });   
    },
		onComplete: function(response) {
		  // Preloader ausblenden
			preloader.setStyles({
       display:'none',
       opacity: 0
      });
      // Response schreiben
      $(contentDivId).set('html', '');
      $(contentDivId).set('html', response);
		}
  });
  myForm.send();
}
