//--- Abflugvon und Airline cachen
function cControllFlug()
{	
	this.arFlug = new Array();					//--- Alle Flüge und deren Leistungen und Id
	this.arFlugBuchen = new Array();			//--- Alle Flüge die auch gebucht werden	
	this.arAirPortName = new Array();
	this.arAirlineName = new Array();	
	this.airlineCache = false;
	
//	this.objFlugklasse = false;
	
	this._init = function(e)
	{
		this._loadNames();	
		addEvent(document.getElementById('ABFLUGVON') , "change" , this.resetAirline.scope(this));
		addEvent(document.getElementById('AIRLINE') , "change" , this.resetAirline.scope(this));
		addEvent(document.getElementById('FLUGKLASSE') , "change" , this.setFlugKlasse.scope(this));
		this.resetAirline(false);		
		this.setFlugKlasse(null);
	}
	
	this.init = function(isOnload)
	{
		if(isOnload)
		{
			this._init();
		}else{
			addEvent(window,"load",this._init.scope(this));
		}
	}
	
	//--- bei einem onchange auf den Abflughafen wird die Selectbox der Airline neu aufgebaut
	this.resetAirline = function(e)
	{		
		var objAbflug = document.getElementById('ABFLUGVON');
		var objAirline = document.getElementById('AIRLINE');
		if(!this.airlineCache)
		{
			this.airlineCache = (getSearch(false,"AIRLINE")) ? getSearch(false,"AIRLINE") : objAirline.value;
		}else{
			this.airlineCache = objAirline.value;
		}
				
		var airline = null;		
		var newOption = false;
		
		var arAirlineCache = new Array();
		var counter = 0;
		
		//--- Airlineauswahl löschen um gleich wieder auf zu bauen
		objAirline.options.length = 0;
		objAirline.selectedIndex = 0;		
		for(var flugleistung in this.arFlug)
		{
			airline = this.arFlug[flugleistung]['airline'];
			if(this.arFlug[flugleistung]['abflug'] != objAbflug.value || arAirlineCache[airline])
			{				
				continue;
			}

			if(airline == this.airlineCache)
			{
				newOption = new Option(this.arAirlineName[airline], airline, false, true);
			}else{
				newOption = new Option(this.arAirlineName[airline], airline);
			}
			objAirline.options[objAirline.options.length] = newOption;
			arAirlineCache[airline] = true;
			counter++;
		}		
		
		if(document.getElementById('airline_count'))
		{
			document.getElementById('airline_count').innerHTML = counter;
		}
		
		this.toDisplay();
		this.uncheckLeistung();
//		decho("ABFLUG: " + objAbflug.value);
//		decho("AIRLINE: " + objAirline.value);
//		decho("lastAbflug: " + objAbflug.value);
//		decho(this.arFlug);
		this.arFlugBuchen = new Array();
		
		if(getSearch(false,"debugger") == "true")
		{
			alert("Anfang" + objAirline.value);
		}
		
		this.affectAirRoute(objAbflug.value,objAirline.value,objAbflug.value);
		this.resetFlugKlasse();
		this.checkLeistung();
	}
	
	this.resetFlugKlasse = function()
	{
		var objFlugKlasse = document.getElementById('FLUGKLASSE');
		if(!objFlugKlasse)
		{
			return false;
		}
		objFlugKlasse.options.length = 0;
		
		for(var flugleistung in this.arFlugBuchen) 
		{
			var objCodeSelect = document.getElementById('SELECT_' + this.arFlugBuchen[flugleistung]);
			break;
		}
		
		var selected = false;
		for(i = 0; objCodeSelect.options[i]; i++)
		{			
			//--- Flugklassen auswahl auf ausgewählte Klasse setzen -> eigentlich nur nach erfolgreicher Preisanfrage relevant
			selected = (i == objCodeSelect.selectedIndex) ? true : false;						
			var newOption = new Option(objCodeSelect.options[i].innerHTML, objCodeSelect.options[i].innerHTML,false,selected);
			objFlugKlasse.options[objFlugKlasse.length] = newOption;
		}				
		
		if(getSearch(false,'REISEBEGINN'))
		{
			objFlugKlasse.value = "Economy Class";
		}
		
		//--- Wenn nur eine Auswahl als Flugklasse feststeht, wird sie als Text angezeigt
		if(objFlugKlasse.options.length == 1)
		{
			document.getElementById('FLUGKLASSE_block').style.display = "none";
		}else{
			document.getElementById('FLUGKLASSE_block').style.display = "";			
		}
	}
	
	//--- Ausgewählte Flugklasse bei den Codes setzen
	this.setFlugKlasse = function(e)
	{
		var objFlugKlasse = document.getElementById('FLUGKLASSE');
		if(!objFlugKlasse)
		{
			return false;
		}
		var objCodeSelect = false;
		//--- alle gebuchten Flüge durchgehen und Flugklasse setzen
		for(var flugleistung in this.arFlugBuchen) 
		{			
			var objCodeSelect = document.getElementById('SELECT_' + this.arFlugBuchen[flugleistung]);
			//--- Flugklassen Code nach der richtigen Flugklasse durchforsten  
			//--->  muss leider sei, da keine Gruppen ids vergeben sind, z.B. für Businessclass = 1, Economy  = 2
			for(var i = 0;objCodeSelect.options[i];i++)
			{
				if(objCodeSelect.options[i].innerHTML == objFlugKlasse.value)
				{
					objCodeSelect.selectedIndex = i;
					break;
				}
			}
		}		
	}
	
	//--- Flug und Airline als HTML Text irgendwo anzeigen
	this.toDisplay = function()
	{
		if(document.getElementById('abflugvon_display'))
		{
			document.getElementById('abflugvon_display').innerHTML = this.arAirPortName[document.getElementById('ABFLUGVON').value];
		}
		
		if(document.getElementById('menu_left_abflughafen'))
		{
			document.getElementById('menu_left_abflughafen').innerHTML = this.arAirPortName[document.getElementById('ABFLUGVON').value];
		}
		
		if(document.getElementById('menu_left_fluglinie'))
		{
			document.getElementById('menu_left_fluglinie').innerHTML = this.arAirlineName[document.getElementById('AIRLINE').value];
		}
//		document.getElementById('airline_display').innerHTML = this.arAirlineName[document.getElementById('AIRLINE')];		
	}
	
	//--- da nur Codes bekannt sind und der User mit Codes (z.B. VIE oder OS) nichts anfangen kann müssen die richtigen Namen aus den Selectboxen geladen werden
	this._loadNames = function()
	{
		var objAbflug = document.getElementById('ABFLUGVON');
		for(i = objAbflug.options.length - 1; i >= 0; i--)
		{
			this.arAirPortName[objAbflug.options[i].value] = objAbflug.options[i].innerHTML;
		}

		var objAirline = document.getElementById('AIRLINE');
		for(i = objAirline.options.length - 1; i >= 0; i--)
		{			
			this.arAirlineName[objAirline.options[i].value] = objAirline.options[i].innerHTML;
		}					
	}

	//--- cachet die gesplittete Leistung (Ab - Ankunftlughafen - Airline) in Array um später z.B. die Abflughäfen Selectbox oder Airlines zusammen zu bauen
	this.loadLeistung = function(FLUGLEISTUNG, FLUGID, FLUGZWANG, flug1_abflug, flug1_ankunft, flug2_abflug, flug2_ankunft)
	{
//		alert(abflug + " - " + flug1_abflug);
		this.arFlug[FLUGLEISTUNG] = new Array();
		this.arFlug[FLUGLEISTUNG]['abflug'] = this.getCod(FLUGLEISTUNG,'abflug');
		this.arFlug[FLUGLEISTUNG]['ankunft'] = this.getCod(FLUGLEISTUNG,'ankunft');
		this.arFlug[FLUGLEISTUNG]['airline'] = this.getCod(FLUGLEISTUNG,'airline');
		this.arFlug[FLUGLEISTUNG]['id'] = FLUGID;
		this.arFlug[FLUGLEISTUNG]['zwang'] = FLUGZWANG;
		this.arFlug[FLUGLEISTUNG]['zubringer'] = false;
		this.arFlug[FLUGLEISTUNG]['haupt'] = false;
		this.arFlug[FLUGLEISTUNG]['inland'] = false;		
		this.arFlug[FLUGLEISTUNG]['buchen'] = false;
		if(flug1_abflug == 1 && flug2_abflug == 1)
		{
			this.arFlug[FLUGLEISTUNG]['zubringer'] = true;
		}else if(flug1_abflug == 1 && flug2_ankunft == 1)
		{
			this.arFlug[FLUGLEISTUNG]['haupt'] = true;
		}else if(flug1_ankunft == 1 && flug2_ankunft == 1)
		{
			this.arFlug[FLUGLEISTUNG]['inland'] = true;
		}
		
		if(this.arFlug[this.arFlug[FLUGLEISTUNG]['ankunft'] + "_x_" + this.arFlug[FLUGLEISTUNG]['abflug'] + "_y_" + this.arFlug[FLUGLEISTUNG]['airline']])
		{
			this.arFlug[FLUGLEISTUNG]['rueckflug'] = true;
		}else{
			this.arFlug[FLUGLEISTUNG]['rueckflug'] = false;
		}		
		
		
		
/*		this.arFlug[FLUGLEISTUNG]['FLUGID'] = FLUGID;
		this.arFlug[FLUGLEISTUNG]['FLUGZWANG'] = FLUGZWANG;
		this.arFlug[FLUGLEISTUNG]['FLUGZWANG'] = FLUGZWANG;
*/		
		

//		alert("Abflug: " + abflug + " - Ankunft: " + ankunft + " - Airline: " + airline );
		//--- Ersten Flug merken - der wird angecheckt, wenn nicht schon angecheckt
/*		if(this.firstAbflug === null || this.firstAirline === null)
		{
			this.firstAbflug = abflug;
			this.firstAirline = airline;
		}
*/
		//--- Wenn diese Array Spalte noch nicht existiert anlegen
/*		if(!this.arAbflug[abflug])
		{
			this.arAbflug[abflug] = new Array();
			this.arAbflug[abflug]['airline'] = new Array();
		}
		
		this.arAbflug[abflug]['airline'][airline] = ankunft;
		this.arAbflug[abflug]['ankunft'][ankunft] = true;		
*/
	}
	
	this.getCod = function(FLUGLEISTUNG,type)
	{
		var COD = FLUGLEISTUNG.split("_");
		if(type == "abflug")
		{
			return COD[0];
		}else if(type == "ankunft")
		{
			return COD[2];
		}else if(type == "airline")
		{
			return COD[4];
		}else{
			return COD;
		}
	}
	
	//--- Alle gecachten Leistungen abchecken
	this.uncheckLeistung = function()
	{
		var htmlLeistung = null;
		this.cacheRoute = new Array();
		
		for(var flugleistung in this.arFlug)
		{			
			if(!this.arFlug[flugleistung]['zwang'])
			{
				htmlLeistung = document.getElementById('LEIST_' + flugleistung);
				if(htmlLeistung)
				{
					htmlLeistung.checked = false;
				}			
				this.arFlug[flugleistung]['buchen'] = false;
			}
		}
		
		this.cacheRoute = new Array();
		
	}

	//--- Alle gecachten Leistungen anchecken
	this.checkLeistung = function()
	{
		var htmlLeistung = null;
		for(var flugleistung in this.arFlug)
		{
			htmlLeistung = document.getElementById('LEIST_' + flugleistung);
			if(this.arFlug[flugleistung]['buchen'] === true && htmlLeistung)
			{		
//				alert(flugleistung);
				htmlLeistung.checked = true;
			}
		}
	}

	
	//--- baut die Flugroute zusammen
	this.affectAirRoute = function(abflug,airline)
	{
		if(getSearch(false,"debugger") == "true")
		{
			alert("Airline: " + airline);
		}
		var ankunft = null;		
		var haupflug = false;
		
		//--- Erstmal versuchen einen direkt Flug ohne Zubringer zu finden - wenn keiner gefunden wurde wird ein Zubringer gesucht		
		for(var flugleistung in this.arFlug)
		{
			if(this.arFlug[flugleistung]['abflug'] == abflug && !this.arFlug[flugleistung]['zubringer'])
			{
				if(this.arFlug[flugleistung]['haupt'] && this.arFlug[flugleistung]['airline'] == airline || 
					(this.arFlug[flugleistung]['ankunft'] != this.cacheRoute[this.arFlug[flugleistung]['ankunft']] 
					&& !this.arFlug[flugleistung]['zwang'] && !this.arFlug[flugleistung]['rueckflug']
					&& (this.arFlug[flugleistung]['inland'] || (!this.arFlug[flugleistung]['inland'] && this.arFlug[flugleistung]['airline'] == airline)))
					)
				{
					ankunft	= this.arFlug[flugleistung]['ankunft'];
					//airline	= this.arFlug[flugleistung]['airline'];
					this.arFlug[flugleistung]['buchen'] = true;
					haupflug = true;
					this.arFlugBuchen[flugleistung] = this.arFlug[flugleistung]['id'];
					break;
				}
			}
		}		
		
		if(getSearch(false,"debugger") == "true")
		{
			decho(this.arFlug[flugleistung]);
		}
		
		//--- Wenn kein Hauptflug gefunden wurde, wird nach Zubringer gesucht (Also zu erst nach Hauptflug suchen -> Vorgabe!!)
		if(ankunft === null)
		{			
			for(var flugleistung in this.arFlug)
			{					
				if(this.arFlug[flugleistung]['abflug'] == abflug && this.arFlug[flugleistung]['zubringer'])
				{
					if( this.arFlug[flugleistung]['ankunft'] != this.cacheRoute[this.arFlug[flugleistung]['ankunft']]
					&& !this.arFlug[flugleistung]['zwang'] && !this.arFlug[flugleistung]['rueckflug']
					&& (this.arFlug[flugleistung]['inland'] || (!this.arFlug[flugleistung]['inland'] && this.arFlug[flugleistung]['airline'] == airline)))
					{
						ankunft	= this.arFlug[flugleistung]['ankunft'];
						//airline	= this.arFlug[flugleistung]['airline'];						
						this.arFlug[flugleistung]['buchen'] = true;
						break;
					}
				}
			}
		}

		//--- Wenn kein Ankunftflughafen gefunden wurde befindet sich die Reise am Ende
		if(ankunft && !this.cacheRoute[ankunft])
		{		
			this.cacheRoute[abflug] = true;
			this.cacheRoute[ankunft] = true;
			
//			decho( abflug + " - " + ankunft);
			
			//--- Rückflug suchen
			for(var flugleistung in this.arFlug)
			{
				if(this.arFlug[flugleistung]['abflug'] == ankunft && this.arFlug[flugleistung]['ankunft'] == abflug)
				{				
					if(this.arFlug[flugleistung]['inland'] == 1 || (this.arFlug[flugleistung]['inland'] == 0 && this.arFlug[flugleistung]['airline'] == airline))
					{
						this.arFlug[flugleistung]['buchen'] = true;						
						if(haupflug)
						{
							this.arFlugBuchen[flugleistung] = this.arFlug[flugleistung]['id'];
						}
						break;
					}
				}
			}
			//--- nächsten Ankunftsflughafen suchen
			this.affectAirRoute(ankunft,airline,abflug);			
		}
		return true;
	}	
}
