/**
*@fileoverview In dieser Datei werden Methoden f�r Ziel-/Regionsauswahlboxen definiert
*@author Guido F�nders, fuenders@traveltainment.de
*/

/**
*Enth�lt Methoden f�r das dynamische F�llen und Updaten von Ziel-/Regionsauswahlboxen
*@params {Object} ttregs  Regionsarray
*@constructor
*@extends TTIBE
*/
function Target(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;
  
  this.countReq = 0;
  //Feld definition
  this.fieldArea = "ibeInput[area]";
  this.fieldDest = "ibeInput[dest]";

  var defAuswahl = {
    ziel:"<Alle Reiseziele>",
    region:"<Alle Regionen>"
  };

  this.optFirstRegSelect= optUserRegSelect || defAuswahl;

  /**
  *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.UpdateArea = function(){
  
  	if(typeof(window["TTREGS_"+this.port])!='undefined') {
    	this.Regionen = window["TTREGS_"+this.port];
  	}else if ( this.countReq < 50 ) {
  		if ( this.countReq == 0 ) {
  			this.Include("script",HOME_URL+'js/travel/libtt/data/area_'+this.port+'.js');
  		}
  		if(typeof(window["TTREGS_"+this.port])=='undefined'){
  			this.countReq++;
        	window.setTimeout("IBE.UpdateArea()",20); return;
        }else {
        	this.Regionen = window["TTREGS_"+this.port];
        }
  	}
  	
  	this.countReq = 0;
  	if ( this.req['fTargetArea'] != 'FALSE' ) {
	    // Erstes Element der Regionauswahlbox erstellen
		if( document.forms[this.formName].elements[this.fieldArea] ) {
		    document.forms[this.formName].elements[this.fieldArea].options[0] = new Option(this.optFirstRegSelect["ziel"],"-1");
		}
  	}

  	if ( this.req['fTargetArea'] == 'FALSE' ) {
  		this.optFirstRegSelect["region"] = "----- Alle Reiseziele -----";
  	}
  		
    // Erstes Element der Zielauswahl erstellen
	if( document.forms[this.formName].elements[this.fieldDest] ) {
		var opt=document.forms[this.formName].elements[this.fieldDest].options;
		
		if ( this.req['fTargetArea'] == 'FALSE' ) {
			if (opt.length==1) {
				 opt[0] = new Option(this.optFirstRegSelect["region"],"-1");
			}else {
	
				if (opt.length > 2) {
					if ((opt[1].value == "") && (opt[1].text == "")) {
						while (opt.length > 2)
							opt[opt.length - 1] = null;
					}
					else{
						while (opt.length)
							opt[opt.length - 1] = null;
					}
				}
	
				
				opt[opt.length] = new Option(this.optFirstRegSelect["region"], "-1");
			}
		}else {
			while(opt.length>0)
			  opt[opt.length-1] = null;
			opt[0] = new Option(this.optFirstRegSelect["region"],"-1");
		}
		
		for(i=0; i < this.Regionen.length; i++){
		  var sr=this.Regionen[i].split("|");
		  if( this.req['CustomRegion'] == undefined ) {
			if(sr[1]>=10000)
				opt[opt.length]=new Option(sr[0],sr[1]);
			else if ( this.req['fTargetArea'] == 'FALSE' )
				opt[opt.length]=new Option(sr[0],sr[1]);
		  } else {
			  var CustomRegion = ""+this.req['CustomRegion']+"";
			  regex = new RegExp( CustomRegion, "i" );
			  if( sr[1].match( regex ) )
				opt[opt.length]=new Option(sr[0],sr[1]);
		  }
		}
		
		if ( this.req['fTargetArea'] != 'FALSE' )
    		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[this.fieldDest];
    var kenner  = zielSel.value;
    this.valZiel = kenner;

    // 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[this.fieldArea].options;

    while(opt.length>1)
      opt[opt.length-1] = null;
	
		for(i=0; i < this.Regionen.length; i++){
		  var sr = this.Regionen[i].split("|");
			if( this.req['CustomRegion'] == undefined ) {
			  	if(sr[1]<10000 && (kenner<0 || sr[2]==kenner)){
					//opt[opt.length]=new Option(sr[0],sr[1]+"|"+sr[2]);
					opt[opt.length]=new Option(sr[0],sr[3]+"|"+sr[2]);
				}
			} else {
			  var CustomRegion = ""+this.req['CustomRegion']+"";
			  regex = new RegExp( CustomRegion, "i" );
			  	if( sr[1]<10000 && sr[2].match( regex ) && (kenner<0 || sr[2]==kenner) ) {
					opt[opt.length]=new Option(sr[0],sr[3]+"|"+sr[2]);
				}
			}
		}
	
    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[this.fieldArea].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[this.fieldDest];
        
        selZiel.value = kenner[1];
        this.valZiel=kenner[1];
        this.strZiel=selZiel.options[selZiel.options.selectedIndex].text;
      }catch(e){}
    }
  };

  /**
  *Wird von der Funktion UpdateArea 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[this.fieldDest].options;
    // ist das richtige Ziel ausgew�hlt?
    if((opt.selectedIndex<0 || opt.value!=this.valZiel) && this.valZiel!=0){
      try{
        document.forms[this.formName].elements[this.fieldDest].value = this.valZiel;
      }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[this.fieldArea].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="";
        }
      }
    }
  };

  this.SetToparea = function() {
	 if( this.valZiel > 0 ) {
		var opt=document.forms[this.formName].elements[this.fieldDest].options;
		if( opt.selectedIndex == 0 ) {
			for( var i = 0; i < opt.length; i++ ) {
				if( opt[i].value == this.valZiel ) {
					opt.selectedindex = i;
					break;
				}
			}
		 }
	 }
  };
}

