function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else {
    var expires = "";
  }
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return "leer";
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}

function swapFlight(e, lobId)
{
  // geklickte Radio-Element ID, z.B. Flug_2
  var itemId = e.id;
  //alert(itemId);
  setFlugCookie(itemId);
  // Radio-Element
  var item = $("#"+itemId);
  var itemValue = item.get(0).value;
  var itemValueV1lsnr = -1;
  var itemValueFacCode = -1;
  var tmpPos = itemValue.indexOf(" ");
  if (tmpPos > 0)
  {
    itemValueV1lsnr = itemValue.substring(0, tmpPos);
    itemValueFacCode = itemValue.substring((tmpPos+1));
    //itemValue = itemValueV1lsnr + " " + itemValueFacCode;
  }
  else
  {
    itemValueV1lsnr = itemValue;
  }
  //alert(itemValueV1lsnr);
  //alert(itemValueFacCode);
  // vom Radio-Element aus die nächst höhere TITLE_X Tabellenzeile suchen
  var titleRow = $("tr#title_"+lobId);
  // die ID von der TITLE_X Tabellenzeile, z.B. title_1
  var titleId = titleRow.attr('id');
  // in der TITLE_X Zeile die Anzahl der Facilities aus verstecktem DIV auslesen
  var anzFac = $("tr#"+titleId+" td").children("div.anzFac").html();

  // TR-Zeile mit Klasse "dates lob_X" suchen
  //var datesRow = titleRow.next().next().next().next();
  var datesRow = $("tr.dates.lob_"+lobId);
  // Klassenname von dates-TR-Zeile = dates
  var datesClass = datesRow.attr('class');

  //var dep_selection = item.parent().parent();
  var dep_selection = $("#dep_selection_"+lobId);
  //var dep_selectionId = item.parent().parent().attr('id');
  var dep_selectionId = dep_selection.attr('id');
  // v00snr aus verstecktem div holen
  var v00snr = $("div#"+dep_selectionId).children("div.v00snr").html();
  //alert(v00snr);
  var lastActionDiv = $("div#"+dep_selectionId).children("div#lastAction_"+v00snr);
  var hiddenTr = $("tr.hiddenTR_"+lobId);
  var hiddenTrClass = hiddenTr.attr('class');
  //var test1 = $(hiddenTr).children("td");
  //var test2 = $(hiddenTr).children("td").children("div");
  //var test3 = $(hiddenTr).children("td > div");
  //var test4 = $(hiddenTr).children("td > div > table#"+v00snr);
  var hiddenTbl = $(hiddenTr).find("table#"+v00snr);
  //var hiddenTbl = $(hiddenTr).find("td > div > table#"+v00snr);
  //var hiddenTbl = hiddenTr.children("td").children("div").children("table#"+v00snr);
  var hiddenTblId = hiddenTbl.attr('id');

  // "Alle" ausgewählt -> es ist aktuell ein Flug gewählt und "Alle"-TRs sind in hiddenTbl vorhanden
  if(itemValue == "all")
  {
    if(lastActionDiv.html() != "empty")
    {
      var hiddenAllTr = hiddenTbl.find("tbody > tr.all");
      //var hiddenAllTr = hiddenTbl.children("tbody").children("tr.all");
      var hiddenAllTrCount = hiddenAllTr.length;

      if(hiddenAllTrCount > 0)
      {
        // aktuelle Rows löschen, da in hidden Tabelle ja schon vorhanden
        for(i=0; i < hiddenAllTrCount; i++)
        {
          // jetzt TR zuerst leeren (PERFORMANCE) und dann löschen
          datesRow.next().empty().remove();
        }

        // von hinten nach vorne um Facility-Reihenfolge beizubehalten
        for(j=(hiddenAllTrCount-1); j >= 0; j--)
        {
          // gespeichertes TR-Objekt nach datesRow einfügen
          datesRow.after(hiddenAllTr[j]);
        }

        lastActionDiv.html("empty");
      }
      else
      {
        alert("No data for all airports found"); // TODO TRANS
      }
    }
  }
  else
  {
    // es ist ein Abflughafen gewählt worden --> "Alle"-TRs in hiddenTbl speichern
    // und TRs für den aktuellen Abflughafen aus hiddenTbl anzeigen
    var classSelect;
    // wenn FacCode in Radio-Value gefunden wurde, Flug-FacCode und v1lsnr Klassen Selektor verwenden
    if (itemValueFacCode != -1)
    {
      classSelect = "tr[class=\""+itemValueV1lsnr+" "+itemValueFacCode+"\"]";
    }
    else // wenn FacCode in Radio-Value nicht gefunden wurde, nur v1lsnr Klassen Selektor verwenden
    {
      classSelect = "tr[class=\""+itemValueV1lsnr+"\"]";
    }
    //alert(classSelect);

    var newTRs = $(hiddenTbl).children("tbody").children(classSelect);
    //alert("newTRs length: " + newTRs.length);

    // in newRows Array die neu anzuzeigenden Rows speichern
    var newRows = new Array();
    newRows = newTRs.clone();

    var countNewRows = newRows.size();
    // Array zum speichern der zu löschenden TR-Zeilen Objekte
    var deletedRows = new Array();

    // nur löschen und neue einfügen wenn auch welche zum Austauschen vorhanden sind
    if(countNewRows > 0)
    {
      // aktuelle Rows in Array speichern und löschen
      for(i=0; i < anzFac; i++)
      {
        // vor dem löschen TR-Objekt in Array speichern
        deletedRows.push(datesRow.next().clone());
        // jetzt TR zuerst leeren (PERFORMANCE) und dann löschen
        datesRow.next().empty().remove();
      }
      //alert(deletedRows.length +" Elemente gelöscht");
      if(lastActionDiv.html() == "empty")
      {
        // Wechsel von "Alle" auf einen Flughafen => "All"-TRs in hiddenTbl anhängen zum späteren wieder einfügen
        var hiddenAllTrCount = hiddenTbl.children("tbody").children("tr.all").size();
        if(hiddenAllTrCount == 0)
        {
          var lastHiddenTblTr = hiddenTr.find("table#"+v00snr+" tr:last");
          //var lastHiddenTblTr = hiddenTr.find("td > div > table#"+v00snr+" tr:last");
          //var lastHiddenTblTr = hiddenTr.children("td").children("div").children("table#"+v00snr+" tr:last");
          var deletedRowsCount = deletedRows.length;
          for(j=(deletedRowsCount - 1); j >= 0; j--)
          {
            var deletedTr = deletedRows[j];
            deletedTr.addClass("all");

            lastHiddenTblTr.after(deletedRows[j]);
          }
        }
        /*else
        {
          alert("'all' TRs schon vorhanden in hidden Tbl");
        }*/
      }

      // von hinten nach vorne um Facility-Reihenfolge beizubehalten
      for(j=(countNewRows-1); j >= 0; j--)
      {
        // gespeichertes TR-Objekt nach datesRow einfügen
        datesRow.after(newRows[j]);
      }
      lastActionDiv.html(itemValue);
    }
    else
    {
      alert(sNoFlightInfoFound); // No flight allotment for the selected departure airport found.
    }
  }
}

function setFlugCookie(radioId)
{
  //alert("setFlugCookie: " + radioId);
  var idInfos = radioId.split('_');
  /*
    idInfos[0]          => fl
    idInfos[1]          => v00snr
    idInfos[2]          => flug counter
  */
  var x = readCookie("selectedFlights");
  var content = -1;
  var isAll = "FALSE";
  var flugFound = "FALSE";
  var dep_selection;
  var v00snr = -1;
  // wenn alle selektiert wurde
  if (radioId.indexOf("fl_all_"+idInfos[2]) > -1)
  {
    isAll = "TRUE";
    dep_selection = $("#dep_selection_"+idInfos[2]);
    v00snr = dep_selection.children("div.v00snr").html(); // v00snr aus verstecktem div holen
  }

  // wenn Cookie nicht existiert
  if (x == "leer")
  {
    content = radioId;
    createCookie ("selectedFlights", content);
  }
  else
  {
    // cookie existiert bereits
    var tmpContent = x.split('§');
    var len = tmpContent.length;
    var flightInfos;
    if (len > 0)
    {
      for (i=0; i < len; i++)
      {
        flightInfos = tmpContent[i].split('_'); // jeder Cookie-Wert wird zerlegt
        //alert("idInfos = "+idInfos[1]+" | flightInfos = " + flightInfos[1]);
        //alert("idInfos = "+idInfos[2]+" | flightInfos = " + flightInfos[2]);
        if (isAll == "TRUE")
        {
          // wenn v00snr von Cookie gleich v00snr vom Angebot bei dem "Alle" selektiert wurde
          if (flightInfos[1] == v00snr)
          {
            flugFound = "TRUE";
            content = x.replace(tmpContent[i], ''); // aus Cookie String löschen
            content = content.replace('§§', '§'); // übrig gebliebenes §-Zeichen eliminieren
            if (content == '' || content == '§')
            {
              content = -1; // damit kein neues Cookie mit leerem Inhalt angelegt wird
              eraseCookie("selectedFlights"); // löschen wenn leer
            }
          }
        }
        else
        {
          // prüfen ob v00snr vom Cookie gleich der v00snr vom selektierten Flughafen ist
          if (flightInfos[1] == idInfos[1])
          {
            flugFound = "TRUE";
            // prüfen ob exakt selber Flug schon im Cookie steht anhand des Flug-Counters
            if (flightInfos[2] == idInfos[2])
            {
              // nix machen, Angebot und Flugauswahl schon in Cookie gespeichert
              break;
            }
            else
            {
              // vorhandenen Flug im Cookie durch neu selektierten Flug im gleichen Angebot austauschen
              content = x.replace(tmpContent[i], radioId);
            }
          }
        }
      }
    }

    // gewählter Flughafen wurde nicht in Cookie gefunden und es wurde nicht "Alle" geklickt
    if (flugFound == "FALSE" && isAll == "FALSE")
    {
      // zum aktuellen Cookie-Wert die aktuell selektierte Id hinzufügen
      content = x + "§" + radioId;
      //alert("Flug war noch nicht vorhanden, neuer content: " + content);
    }
    // wenn nicht -1, neuen Cookie-Content speichern
    if (content != -1)
    {
      createCookie("selectedFlights", content);
    }
  }
}

function markFlights()
{
  var cookie = readCookie("selectedFlights");
  if (cookie != "leer")
  {
    var flights = cookie.split('§');
    var len = flights.length;
    var radio;
    var radioLen;
    var select;
    var i = 0;
    while(i < len)
    {
      select = "input[id="+flights[i]+"]";
      //alert(select);
      radio = $(select);
      radioLen = radio.length;
      //alert("radio.length = " + radioLen);
      if (radioLen == 1)
      {
        //alert("radio "+radio.attr('id')+" wird geklickt...");
        radio.click();
      }
      i++;
    }
  }
}
