/* SELECT CONTROLS*/

				// Funktion zum Raussuchen der Formelemente
		function findFormElement( name )
		{
			for ( var i=0; i<document.forms.length; i++ )
				if ( document.forms[i].elements[name] != null ) return document.forms[i].elements[name];
			return null;
		}
		
		
		// Funktion zum Loeschen des Selektors
		function clearSelector( name )
		{
			var selector = findFormElement( name );
			while ( selector.options.length )
				selector.options[0] = null;
		}
	
	
		// Hauptobjekt
		// ------------------------------------------------------------------------------------------
		function selectorControl( selectOne , selectTwo  ){
			this.selectA	= null;
			this.selectB	= null;
			this.selectNameA	= selectOne;
			this.selectNameB	= selectTwo;
			this.entries	= new Array();
			this.defaultA	= 0;
			this.defaultB	= 0;
			
			this.getSubEntryList 	= selectorControlGetSubEntryList;
			this.addObjectList		= selectorControlAddList;
			this.addEntry			= selectorControlAddEntry;
			this.recalc				= selectorControlRefresh;
			this.setValueA			= selectorControlSetValueA;
			this.setValueB			= selectorControlSetValueB;
			this.init				= selectorControlInit;
		}
		
		function selectorControlSetValueA( defValue ){
			for ( var i=0; i<this.entries.length; i++ )
				if ( this.entries[i].value ==  defValue )
					this.defaultA = i;			

		}
		
		function selectorControlSetValueB( defValue ){
			var subs = this.getSubEntryList( this.entries[this.defaultA].value );
			for ( var i=0; i<subs.length; i++ )
				if ( subs[i].value ==  defValue )
					this.defaultB = i;			
		}
		
		function selectorControlInit(){
			this.selectA	= document.getElementById(this.selectNameA);
			this.selectB	= document.getElementById( this.selectNameB );
			clearSelector( this.selectNameA );
			for ( var i=0; i<this.entries.length; i++ )
				this.selectA.options[this.selectA.options.length] = new Option( this.entries[i].text, this.entries[i].value, false, false );
			this.selectA.selectedIndex = this.defaultA;
			this.recalc( true );			
		}
		
		function selectorControlGetSubEntryList( entryValue )
		{
			for ( var i=0; i<this.entries.length; i++ )
			{
				if ( this.entries[i].value == entryValue )
				{
					return this.entries[i].subentries;
				}
			}
			return null;
		}
		
		function selectorControlAddEntry( mainText, mainValue, subEntryArray )
		{
			this.entries[this.entries.length] = new selectorEntry( mainText, mainValue, subEntryArray );
		}
		
		function selectorControlAddList(list)
		{
			for (var i=0; i<list.entries.length; i++)
			{
				//alert("87:" + list.getItem(list.keys[i]));
				//item = list.getItem(list.keys[i]);
				temp = new selectorObjectEntry(list.entries[i]);
				this.entries[this.entries.length] = temp;
			}
		}
		
		function selectorControlRefresh()
		{
			var curValue	= this.selectA.options[this.selectA.selectedIndex].value;
			var subEntries	= this.getSubEntryList( curValue );

			clearSelector( this.selectB.name );
			for ( var i=0; i<subEntries.length; i++ )
			{
				this.selectB.options[this.selectB.options.length] = new Option( subEntries[i].text, subEntries[i].value, false, false );
			}
			if ( arguments[0] )
			{
				this.selectB.selectedIndex = this.defaultB;
			}
			else
				this.selectB.selectedIndex = 0;
		}
		
		/**
		 * selectorEntry
		 * Creates a selectorEntry from given values
		 */
		function selectorEntry( mainText, mainValue, subEntryArray )
		{
			this.text		= mainText;
			this.value		= mainValue;
			this.subentries	= new Array();
			for ( var i=0; i<subEntryArray.length; i++ )
			{
				this.subentries[i]			= new Object();
				this.subentries[i].text		= subEntryArray[i][0];
				this.subentries[i].value	= subEntryArray[i][1];
			}
		}
		
		/**
		 * selectorObjectEntry
		 * Creates a selectorEntry-Object from a given Object-Item
		 * The ObjectItem must implement the following interface:
		 *   - String getPrimkey()
		 *   - String getname()
		 *   - objectList getShips()
		 */
		function selectorObjectEntry(objectItem)
		{	
			this.text		= objectItem.getName();
			this.value		= objectItem.getPrimkey();
			this.subentries	= new Array();
			
			var temp = objectItem.getShips();
			for (var i=0; i<temp.entries.length; i++)
			{
				var item = temp.entries[i];
				this.subentries[i] = new Object();
				this.subentries[i].text = item.getName();
				this.subentries[i].value	= item.getPrimkey();
			}
		}

// Ende des Objekt-Zeugs
// ------------------------------------------------------------------------------------------

/* END SELCT CONTROLS */


// Object-definitions
// ------------------------------------------------------------------------------------------

// Object-definition for a Operator
function Operator(primkey, name)
{
	this.primkey = primkey;
	this.name = name;
	this.ships = new ShipList();
	
	this.addShip 		= OperatorAddShip;	
	this.getName = OperatorGetName;
	this.getPrimkey		= OperatorGetPrimkey;
	this.getShips		= OperatorGetShips;
	this.getShip 		= OperatorGetShip;
	this.setName = OperatorSetName;
	this.setShips		= OperatorSetShips;
}

function OperatorGetName()
{
	return this.name;
}

function OperatorGetPrimkey()
{
	return this.primkey; 
}

function OperatorGetShips() 
{
	return this.ships; 
}

function OperatorGetShip(primkey) 
{
	return this.ships[primkey];
}

function OperatorSetName(name)
{
	this.name = name;
}

function OperatorSetShips(ships)
{
	this.ships = ships;
}

function OperatorAddShip(ship)
{
	ship.operator = this;
	this.ships.addItem(ship);
}

// ------------------------------------------------------------------------------------------

// Object-definition for a Ship
function Ship(primkey, name)
{
	this.primkey = primkey;
	this.operator	 = null;
	this.name = name;
	
	this.getName = ShipGetName;
	this.getOperator 		= ShipGetOperator;
	this.getPrimkey 	= ShipGetPrimkey;	
	
	this.setName = ShipSetName;
	this.setOperator 		= ShipSetOperator;
}

function ShipGetName()
{
	return this.name;
}

function ShipGetOperator() 
{
	return this.operator;
}

function ShipGetPrimkey()
{
	return this.primkey;
}

function ShipSetName(name)
{
	this.name = name;
}

function ShipSetOperator(operator)
{
	this.operator = operator;
}

// ------------------------------------------------------------------------------------------

// List for managing Operator-Objects
function OperatorList()
{
	this.entries = new Array();
	this.keys = new Array();
	
	this.addItem = OperatorListAdd;
	this.getItem = OperatorListGet;
}

// Adds a Operator-Object to the list
function OperatorListAdd(operator)
{
	this.keys[this.keys.length] = operator.getPrimkey();
	this.entries[this.entries.length] = operator;
}

// Returns a Operator-Object for the given primkey
function OperatorListGet(primkey)
{
	for (var i=0;i<this.entries.length;i++)
	{
		if (this.entries[i].getPrimkey() == primkey)
			return this.entries[i];
	}
	return null;
}

// ------------------------------------------------------------------------------------------

// List for managing Ship-Objects
function ShipList()
{
	this.entries = new Array();
	this.keys = new Array();
	
	this.addItem = ShipListAdd;
	this.getItem = ShipListGet;
}

// Adds a Ship-Object to the list
function ShipListAdd(ship)
{
	this.keys[this.keys.length] = ship.getPrimkey();
	this.entries[this.entries.length] = ship;
}

// Returns a Ship-Object for the given primkey
function ShipListGet(primkey)
{
	for (var i=0;i<this.entries.length;i++)
	{
		if (this.entries[i].getPrimkey() == primkey)
			return this.entries[i];
	}
	return null;
}

