function Form(  abflugtag, abflugmonat, rueckflugtag, rueckflugmonat, erwachsene, kinder, kleinkinder, klasse, currentDate, vonstadt, nachstadt, nachairport, nachairportcode, uParameter, buchungsform )
{
	var _brandInventoryID = 1330;
	var _BEPosition = 0;
	
	var _abflugtag = abflugtag;
	var _abflugmonat = abflugmonat;
	var _rueckflugtag = rueckflugtag;
	var _rueckflugmonat = rueckflugmonat;
	var _erwachsene = erwachsene;
	var _kinder = kinder;
	var _kleinkinder = kleinkinder;
	var _klasse = klasse;
	var _departHelper;
	var _returnHelper;
	var _currentDate = getCurrentDate(currentDate.value);
	var _uParameter = uParameter;
	var _buchungsform = buchungsform;
	var _vonstadt = vonstadt;
	var _nachstadt = nachstadt;
	var _nachairport = nachairport;
	var _nachairportcode = nachairportcode;
	
	initialize();
	
	this.validate = validate;
	this.refreshPassengers = refreshPassengers;
	this.refreshDepartDate = refreshDepartDate;
	this.refreshReturnDate = refreshReturnDate;
	this.setBrandInventoryID = setBrandInventoryID;
	this.setBEPosition = setBEPosition;

	function initialize()
	{
		initializeDates();
		initializePassengers();
	}
	
	function validate()
	{
	    var vonstadt =  _vonstadt.value;
		var nstadt =  _nachstadt.value;
		var nachairport =  _nachairport.value;
		var nachairportcode =  _nachairportcode.value;
		var departDate =  _departHelper.getSelectedDate();
		var returnDate = _returnHelper.getSelectedDate();
		
		if( nstadt.length == 0 )
		{
			alert( 'Bitte geben Sie ein Flugziel an!' );
			return false;
		}
	    else if( returnDate < departDate )
		{
			alert( 'Ihr Ankunfdatum liegt vor Ihrem Abflugdatum!' );
			return false;
		}

		//SmartSource tracking
		_uParameter.value = 
		BESS	(  
				(document.location.href.indexOf("book-flights-online.html")==-1) ? 1 : 0,
				(_buchungsform.DepartureRegionID) ? _buchungsform.DepartureRegionID.value : "",
				(_buchungsform.From) ? _buchungsform.From.value : "",
				(_buchungsform.DestinationID) ? _buchungsform.DestinationID.value : "",
				
				_brandInventoryID,
				(_klasse.value == "Economy") ? 1 : 2,
				_erwachsene.value,
				_kinder.value,
				_kleinkinder.value,
				0,
				0,
				Math.ceil((departDate-_currentDate)/1000/60/60/24),
				Math.ceil((returnDate-departDate)/1000/60/60/24),
				_BEPosition,
				_uParameter.value
				);
		
		
		return true;
	}

	function refreshPassengers( selectBox )
	{
		var maxPassengers = 9;
		var maxAdults;
		var maxChildren;
		var maxInfants;
				
		var chosenAdults = _adultHelper.getSelectedValue();
		var chosenChildren  = _childHelper.getSelectedValue();
		var chosenInfants = _infantHelper.getSelectedValue();

		if(selectBox == _erwachsene ) 
		{
			if( chosenAdults + chosenChildren + chosenInfants > 9 )
			{
				chosenChildren = 0;
				chosenInfants = 0;
			}
			else if(chosenInfants > chosenAdults)
			{
				chosenInfants = chosenAdults;
			}
		}
		
		maxInfants = maxPassengers - chosenAdults - chosenChildren;
		if (maxInfants > chosenAdults) 
		{ 
			maxInfants = chosenAdults;
		}
		maxChildren = maxPassengers - chosenAdults - chosenInfants;	

		_childHelper.setMaxValue( maxChildren );
		_childHelper.refresh();
		_infantHelper.setMaxValue( maxInfants );
		_infantHelper.refresh();
			
		if(selectBox == _erwachsene ) 
		{
			_childHelper.setSelectedValue( 0 );
			_infantHelper.setSelectedValue( 0 );
		}
	}

	function refreshDepartDate()
	{
		_departHelper.refreshDay();
	}
	
	function refreshReturnDate()
	{
		_returnHelper.refreshDay();
	}
	
	function initializeDates()
	{
		var dateTime = new DateTime();
		var startDate = dateTime.getDateTime();
		var initialDay = dateTime.getDateTime().getDay();
		
		dateTime.addDay( 1 );
		var initalDepartureDate = dateTime.moveNextWeekday( initialDay ).getDateTime();
		
		dateTime.addDay( 1 );
		var initalReturnDate = dateTime.moveNextWeekday( initialDay ).getDateTime();
		
		_departHelper = new DateSelectHelper( _abflugtag, _abflugmonat, initalDepartureDate, startDate  );
		_returnHelper = new DateSelectHelper( _rueckflugtag, _rueckflugmonat, initalReturnDate, startDate  );	
		
		_departHelper.populate();
		_returnHelper.populate();
	}
	
	function initializePassengers()
	{
		_adultHelper = new CountableNounSelectHelper( erwachsene, 'Erwachsener', 'Erwachsene', 1, 9, 1 );
		_childHelper = new CountableNounSelectHelper( kinder, 'Kind', 'Kinder', 0, 8, 0 );
		_infantHelper = new CountableNounSelectHelper( kleinkinder, 'Baby', 'Babys', 0, 1, 0 );
		
		_adultHelper.populate();
		_childHelper.populate();
		_infantHelper.populate();
	}
	
	function setBrandInventoryID(id)
	{
		_brandInventoryID = id;
	}
	
	function setBEPosition(pos)
	{
		_BEPosition = pos;
	}
	
	function getCurrentDate(date)
	{
		//date will be dd/mm/yyyy
		var dates = (date.length > 0) ? date.split("/") : "";		
		return (dates.length == 3) ? new Date(dates[2],dates[1]-1,dates[0]) : new DateTime().getDateTime();
	}
}




