/**
*@fileoverview In dieser Datei werden Methoden für Ziel-/Regionsauswahlboxen definiert
*/

/**
*Enthält Methoden für das dynamische Füllen und Updaten von Länder-/Regionsauswahlboxen
*@params {Object} ttregs  Regionsarray
*@constructor
*@extends TTIBE
*/
function Zielauswahl(optUserRegSelect){
  /**
  *Flag, ob ein Ziel(-Filter) ausgewählt ist oder nicht
  *@type Bool
  */
  this.gfilt = false;
  /**
  *Regions-Array
  *@type Array
  */
  this.Regionen = [];
  if(typeof(window["TTREGS_"+this.port])!='undefined')
    this.Regionen = window["TTREGS_"+this.port];
  /**
  *Name des ausgewählten Ziels
  *@type String
  */
  this.strZiel = "";//ttregs.g_strZiel;
  /**
  *Value des ausgewählten Ziels
  *@type Int
  */
  this.valZiel = -1;//ttregs.g_nZiel;
  /**
  *Name der ausgewählten Region
  *@type String
  */
  this.strReg = "";//ttregs.g_strRegion;
  /**
  *Value der ausgewählten Region im Format('Zielgebietskenner'|'Regionskenner')
  *@type String
  */
  this.valReg = -1;//ttregs.g_nRegion;


  var defAuswahl = {
    tt_countries:"Toutes les destinations",
    tt_region:"Toutes les régions"
  };

  this.optFirstRegSelect= optUserRegSelect || defAuswahl;

  if(this.req['show_regModBalearen']==1){
    for(var i in this.Regionen){
      var sr=this.Regionen[i].split('|');
      if(sr[1]==10000)
        sr[0]='Mallorca, Ibiza, Menorca';
      this.Regionen[i]=sr.join('|');
    }
    this.Regionen.sort();
  }

  this.getTTZiel = function(topregion){
    topregion = topregion || 0;
    for(var i in this.Regionen){
      var tr = this.Regionen[i].split("|")[3] || 0;
      if(tr==topregion){
        return this.Regionen[i].split("|")[2] || 0;
      }
    }
    return 0;
  };

  this.getTTRegion = function(topregion){
    topregion = topregion || 0;
    for(var i in this.Regionen){
      var tr = this.Regionen[i].split("|")[3] || 0;
      if(tr==topregion){
        return this.Regionen[i].split("|")[1] || 0;
      }
    }
    return 0;
  };

  this.getTTRegionGruppe = function(zielgebiets_kenner){
    zielgebiets_kenner = zielgebiets_kenner || 0;
    for(var i in this.Regionen){
      var tr = this.Regionen[i].split("|")[1] || 0;
      if(tr==zielgebiets_kenner){
        return this.Regionen[i].split("|")[1] || 0;
      }
    }
    return 0;
  };

  this.getTTFlugdauer = function(zk){
    zk = zk || 0;
    for(var i in this.Regionen){
      var aktzk = this.Regionen[i].split("|")[1] || 0;
      if(aktzk==zk){
        return this.Regionen[i].split("|")[2] || 0;
      }
    }
    return 0;
  };

  var topregion=this.req['topRegion'] || 0;
  var flugdauer=this.req['flugdauer'] || 0;

  var topRegionGruppe=this.req['topRegionGruppe'] || 0;

  var zielgebiets_kenner=this.req['zielgebiets_kenner'] || 0;

  if(parseInt(topRegionGruppe)>=10000){
      this.valZiel = parseInt(topRegionGruppe);
    this.valReg  = this.getTTRegionGruppe(parseInt(zielgebiets_kenner));
  }else if(parseInt(topRegionGruppe)>0){
    this.valReg  = this.getTTRegionGruppe(parseInt(zielgebiets_kenner));
    this.valZiel = this.getTTZiel(parseInt(topRegionGruppe));
  }else{
    this.valReg  = zielgebiets_kenner!=''?zielgebiets_kenner:0;
    this.valZiel = flugdauer!=''?flugdauer:0;

    if(this.valReg!=0 && (this.valZiel==0 || this.valZiel=="-1")){
      this.valZiel = this.getTTFlugdauer(this.valReg);
      this.req['flugdauer']=this.valZiel;
      flugdauer = this.valZiel;
    }
  }

  /**
  *füllt die "ziel"-Selectbox und ruft danach FixRSel auf, welche dann die Regionen füllt
  *@param {Array} rec Regionsarray
  *@return falls Kein Array übergeben wurde "false", ansonsten nix
  *@type void
  */
  this.UpdateRegionen = function() {

      // Erstes Element der Regionauswahlbox erstellen
      document.forms[this.formname].elements["tt_region"].options[0] = new Option(this.optFirstRegSelect['tt_region'], "-1");

      // Erstes Element der Zielauswahl erstellen
      var opt = document.forms[this.formname].elements["tt_countries"].options;
      while (opt.length > 0)
          opt[opt.length - 1] = null;
      opt[0] = new Option(this.optFirstRegSelect['tt_countries'], "-1");


      if (this.port == 654)
      {
      this.fillSelFromArray('tt_countries', optLaender654);  }
      else if (this.port == 653)
          this.fillSelFromArray('tt_countries', optLaender653);
      else if (this.port == 655)
          this.fillSelFromArray('tt_countries', optLaender655);
      else if (this.port == 652)
          this.fillSelFromArray('tt_countries', optLaender652);
      /*for(var i in this.Regionen){
      var sr=this.Regionen[i].split("|");
      if(sr[1]>=10000)
      opt[opt.length]=new Option(sr[0],sr[1]);
      }*/

      this.FixRSel();
  };



  /**
  *RZC => ReiseZiel_onChange: Updated die Regionsauswahl
  *@param {int} ds Deselect (optional) wenn gesetzt wird die Auswahl aufgehoben
  */
  this.RZC = function(ds) {
      var zielSel = document.forms[this.formname].elements["tt_countries"];
      var str_kenner = zielSel.value;
      var kenner = str_kenner.split(",");
      this.valZiel = kenner[0];

      // globale Variable "g_strZiel" updaten
      if (zielSel.selectedIndex > 0) {
          this.strZiel = zielSel[zielSel.selectedIndex].text;
      } else this.strZiel = "";

      // Filter auf true setzen wenn Ziel ausgewählt ist
      this.gfilt = kenner != -1;

      var opt = document.forms[this.formname].elements["tt_region"].options;

      while (opt.length > 1)
          opt[opt.length - 1] = null;

      //wenn Land gewählt
      if (this.valZiel >= 0) {
          for (var i in this.Regionen) {
              var sr = this.Regionen[i].split("|");
              for (var jj = 0; jj < kenner.length; jj++) {
                  if (sr[1] < 10000 && (sr[2] == kenner[jj] || sr[3] == kenner[jj])) {
                      opt[opt.length] = new Option(sr[0], sr[1] + "|" + sr[2] + "|" + sr[3]);
                  }
              }
          }
      }
      else {
          for (var i in this.Regionen) {
              var sr = this.Regionen[i].split("|");
              if (sr[1] < 10000) {
                  opt[opt.length] = new Option(sr[0], sr[1] + "|" + sr[2] + "|" + sr[3]);
              }
          }
      }

      if (ds) {
          opt.selectedIndex = 0;
          this.strReg = "";
          this.valReg = -1;
      }
  };

  /**
  *REGC => Region_onChange: Updated die Zielauswahl
  */
  this.REGC=function(){
    var ropt=document.forms[this.formname].elements["tt_region"].options;
    var kenner=ropt[ropt.selectedIndex].value.split("|");

    // Globale Variable "g_nRegion" auf aktuellen Value setzen
    this.valReg=kenner[0];

    // Wenn eine Region ausgewählt ist:
    if(ropt.selectedIndex>0){
      // evtl enthaltene Klammerausdrücke werden weggeschnitten
      this.strReg = ropt[ropt.selectedIndex].text.replace(/([^(]*)\((.*)/,"$1");
    }else this.strReg="";

    // Wenn kein Zielfilter gesetzt ist, aber eine Region selektiert ist,
    // setze Das Ziel entsprechend.
    if(this.gfilt==false && kenner[0]>=0){
      try{
        var selZiel = document.forms[this.formname].elements["tt_countries"];
        for(var jj=0;jj<optLaender.length;jj++){
            var tmp_L1 = optLaender[jj].split(";");
            var tmp_L2 = tmp_L1[1].split(",");
            if(this.port=="655"){
                //Ausnahme Frankreich
                if (tmp_L2[0] == '10000'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10001' || kenner[1] == '10002' || kenner[1] == '10003' || kenner[1] == '10004' || kenner[1] == '10005' || kenner[1] == '10006' || kenner[1] == '10007' || kenner[1] == '10008' || kenner[1] == '10009' || kenner[1] == '10010' || kenner[1] == '10011' || kenner[1] == '10012' || kenner[1] == '10013' || kenner[1] == '10014' || kenner[1] == '10015' || kenner[1] == '10016' || kenner[1] == '10017' || kenner[1] == '10018' || kenner[1] == '10019' || kenner[1] == '10020'){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                //Ausnahme Spanien
                else if (tmp_L2[0] == '10021'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10022' || kenner[1] == '10023' || kenner[1] == '10024' || kenner[1] == '10025' || kenner[1] == '10028' || kenner[1] == '10029' || kenner[1] == '10030' || kenner[1] == '10031' || kenner[1] == '10032' || kenner[1] == '10033' || kenner[1] == '10034' || kenner[1] == '10035'){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                //Ausnahme Italien
                else if (tmp_L2[0] == '10040'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10041' || kenner[1] == '10042' || kenner[1] == '10043' || kenner[1] == '10044' || kenner[1] == '10045' || kenner[1] == '10046'){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                else{
                    if (tmp_L2[0] == kenner[1]){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=kenner[1];
                        jj=optLaender.length;
                    }
                }
            }
            else{
               //Ausnahme Spanien
                if (tmp_L2[0] == '10004'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10005' || kenner[1] == '10042' || kenner[1] == '10159') {
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }

//                //Italy (adds 10132)
//                if (tmp_L2[0] == '10131') {
//                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10132') {
//                        selZiel.value = tmp_L1[1];
//                        this.valZiel = tmp_L2[0];
//                        jj = optLaender.length;
//                    }
//                }
                
                //Ausnahme Griechenland
                else if (tmp_L2[0] == '10007'){
                if (tmp_L2[0] == kenner[1] || kenner[1] == '10008') {
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                //Ausnahme Egypte
                else if (tmp_L2[0] == '10006'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10057'){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                //Ausnahme Maurice
                else if (tmp_L2[0] == '10023'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '10024'){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                //Ausnahme Frankreich
                else if (tmp_L2[0] == '30000'){
                    if (tmp_L2[0] == kenner[1] || kenner[1] == '30002' || kenner[1] == '30003' || kenner[1] == '30004' || kenner[1] == '30005' || kenner[1] == '30006' || kenner[1] == '30007' || kenner[1] == '30008' || kenner[1] == '30010' || kenner[1] == '30011' || kenner[1] == '30012'){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=tmp_L2[0];
                        jj=optLaender.length;
                    }
                }
                else{
                    if (tmp_L2[0] == kenner[1]){
                        selZiel.value = tmp_L1[1];
                        this.valZiel=kenner[1];
                        jj=optLaender.length;
                    }
                }
            }
        }

        this.strZiel=selZiel.options[selZiel.options.selectedIndex].text;


      }catch(e){}
    }
  };

  /**
  *Wird von der Funktion UpdateRegionen aufgerufen und selektiert das Ziel
  *anhand der Variablen "valZiel". Ist "valZiel" kein Value der Selectbox
  *wird ein entsprechendes Optionselement angehängt (falls die Variable "strZiel"
  *gesetzt ist). Danach wird die Funktion RZC aufgerufen, die die
  *"region"-Selectbox füllt. Falls die Variable "valReg" gesetzt ist, wird
  *eine entsprechende Region selektiert
  */
  this.FixRSel = function() {
      var opt = document.forms[this.formname].elements["tt_countries"].options;
      // ist das richtige Ziel ausgewählt?

      if ((opt.selectedIndex < 0 || opt.value != this.valZiel) && this.valZiel != 0) {
          try {
              //document.forms[this.formname].elements["tt_countries"].value = this.valZiel;
              for (i = 0; i < opt.length; i++) {
                  if (this.port == "655") {
                      //Ausnahme Frankreich
                      if (this.valZiel == '10001' || this.valZiel == '10002' || this.valZiel == '10003' || this.valZiel == '10004' || this.valZiel == '10005' || this.valZiel == '10006' || this.valZiel == '10007' || this.valZiel == '10008' || this.valZiel == '10009' || this.valZiel == '10010' || this.valZiel == '10011' || this.valZiel == '10012' || this.valZiel == '10013' || this.valZiel == '10014' || this.valZiel == '10015' || this.valZiel == '10016' || this.valZiel == '10017' || this.valZiel == '10018' || this.valZiel == '10019' || this.valZiel == '10020') {
                          if (opt[i].value.split(",")[0] == '10000') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      //Ausnahme Spanien
                      else if (this.valZiel == '10022' || this.valZiel == '10023' || this.valZiel == '10024' || this.valZiel == '10025' || this.valZiel == '10028' || this.valZiel == '10029' || this.valZiel == '10030' || this.valZiel == '10031' || this.valZiel == '10032' || this.valZiel == '10033' || this.valZiel == '10034' || this.valZiel == '10035') {
                          if (opt[i].value.split(",")[0] == '10021') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      //Ausnahme Italien
                      else if (this.valZiel == '10041' || this.valZiel == '10042' || this.valZiel == '10043' || this.valZiel == '10044' || this.valZiel == '10045' || this.valZiel == '10046') {
                          if (opt[i].value.split(",")[0] == '10040') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      else {
                          if (opt[i].value.split(",")[0] == this.valZiel) {
                              opt.selectedIndex = i; break;
                          }
                      }
                  }
                  else {
                      //MALDIVES (http://parttappl/redmine/issues/2661)
                      if (zielgebiets_kenner == '204' || zielgebiets_kenner == '776') {
                          if (opt[i].value.split(",")[0] == '10058' || opt[i].value.split(",")[0] == '30164' || opt[i].value.split(",")[0] == '205') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      //Réunion (http://parttappl/redmine/issues/2661)
                      if (zielgebiets_kenner == '291' || zielgebiets_kenner == '421') {
                          if (opt[i].value.split(",")[0] == '10059' || opt[i].value.split(",")[0] == '30112' || opt[i].value.split(",")[0] == '292' || opt[i].value.split(",")[0] == '422') {
                              opt.selectedIndex = i; break;
                          }
                      }

                      //Ausnahme Spanien
                      if (this.valZiel == '10005' || this.valZiel == '10042') {
                          if (opt[i].value.split(",")[0] == '10004') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      //Ausnahme Griechenland
                      else if (this.valZiel == '10008') {
                          if (opt[i].value.split(",")[0] == '10007') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      //Ausnahme Frankreich
                      else if (this.valZiel == '30002' || this.valZiel == '30003' || this.valZiel == '30004' || this.valZiel == '30005' || this.valZiel == '30006' || this.valZiel == '30007' || this.valZiel == '30008' || this.valZiel == '30010' || this.valZiel == '30011' || this.valZiel == '30012') {
                          if (opt[i].value.split(",")[0] == '30000') {
                              opt.selectedIndex = i; break;
                          }
                      }
                      else {
                          if (opt[i].value.split(",")[0] == this.valZiel) {
                              opt.selectedIndex = i; break;
                          }
                      }
                  }

              }
          } catch (e) {
              if (this.strZiel != "")
                  opt[opt.length] = new Option(this.strZiel, this.valZiel, true, true);
              else {
                  opt.selectedIndex = 0; this.RZC(); return;
              }
          }
      }
      this.RZC();

      opt = document.forms[this.formname].elements["tt_region"].options;
      if (opt.selectedIndex < 0 || opt[opt.selectedIndex].value.split("|")[0] != this.valReg) {
          for (i = 0; i < opt.length; i++)
              if (opt[i].value.split("|")[0] == this.valReg) {
              opt.selectedIndex = i; break;
          }

          if (i == opt.length) {
              if (this.strReg != "")
                  opt[opt.length] = new Option(this.strReg + " (keine Ang.)", this.valReg + "|" + this.valZiel, true, true);
              else {
                  opt.selectedIndex = 0; this.valReg = -1; this.strReg = "";
              }
          }
      }
  };
}
