function Form(erwachsene, kinder, kleinkinder, nachstadt)
{
	var _brandInventoryID = 1330;
	var _BEPosition = 0;
		
	var _erwachsene = erwachsene;	
	var _departHelper;
	var _returnHelper;	
	var _nachstadt = nachstadt;
	
	initialize();
	
	this.validate = validate;
	this.refreshPassengers = refreshPassengers;
	this.refreshDepartDate = refreshDepartDate;
	this.refreshReturnDate = refreshReturnDate;
	this.setBrandInventoryID = setBrandInventoryID;
	this.setBEPosition = setBEPosition;

	function initialize()
	{		
		initializePassengers();
	}
	
	function validate()
	{	    
		var nstadt =  _nachstadt.value;		
		
		if( nstadt.length == 0)
		{
			alert( 'Bitte geben Sie ein Flugziel an!' );
			return false;
		}
	   		
		
		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 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();
	}
}




function CountableNounSelectHelper( selectCountableNoun, singularText, pluralText, minValue, maxValue, initialValue )
{
	var _selectCountableNoun = selectCountableNoun;
	var _singularText = singularText;
	var _pluralText = pluralText;
	var _minValue = parseInt(minValue,10);
	var _maxValue = parseInt(maxValue,10);
	var _initialValue = parseInt(initialValue,10);

	//Expose public methods
	this.populate = populate;
	this.refresh = refresh;
	this.setMinValue = setMinValue;
	this.getMinValue = getMinValue;

	this.setMaxValue = setMaxValue;
	this.getMaxValue = getMaxValue;

	this.getSelectedValue = getSelectedValue;
	this.setSelectedValue = setSelectedValue;

	function populate()
	{
		populateSelect( _initialValue );
	}

	function refresh()
	{
		var selectedValue = getSelectedValue();
		populateSelect( selectedValue );
	}

	function populateSelect( selectedValue )
	{
		var i;
		_selectCountableNoun.length = 0;

		for( i = _minValue; i <= _maxValue; i++ )
		{
			if( i == 1 || i == -1 )
			{
				_selectCountableNoun[ i - _minValue ] = new Option( i + ' ' + _singularText, i);
			}
			else
			{
				_selectCountableNoun[ i - _minValue ] = new Option( i + ' ' + _pluralText, i );
			}
			if( i == selectedValue )
			{
				_selectCountableNoun.selectedIndex = i - _minValue;
			}
		}
	}

	function getSelectedValue()
	{
		return parseInt( _selectCountableNoun.selectedIndex + minValue, 10 );
	}

	function setSelectedValue( value )
	{
		_selectCountableNoun.selectedIndex = parseInt( value, 10 ) - _minValue;
	}

	function setMinValue( value )
	{
		_minValue = parseInt( value,10);
	}

	function setMaxValue( value )
	{
		_maxValue = parseInt( value,10);
	}

	function getMinValue()
	{
		return _minValue;
	}

	function getMaxValue()
	{
		return _maxValue;
	}

}