function LinkedSelection( inputSelects, callback, data )
{
	var self = this;				
	var selects = new Array();		

	var changeHandler = function()
	{
		var value = this.selectedValue();
		if( typeof(this.nextSelect) == 'object' )
		{
			for( var i = this.nextSelect.selectID + 1; i < selects.length; i++ )
				selects[i].replaceOptions( new Array() );
		}
        
		if( value == '--' )
		{
			if( this.selectID < selects.length ){
				if(selects[ this.selectID +1 ])selects[ this.selectID +1 ].replaceOptions( new Array() );
            }
			return;
		}

		if( typeof(this.nextSelect) == 'object' )
		{
		  
			if( !data[ this.nextSelect.id ][ value ] )
			{
				if( !data[ this.nextSelect.id ] )
					data[ this.nextSelect.id ] = {};

				data[ this.nextSelect.id ][ value ] = new Array();
			}

			this.nextSelect.replaceOptions( data[ this.nextSelect.id ][ value ] );
			callback( new Array() );
		}
		else
		{

			var selected = new Array();
			for( var i = 0; i < selects.length; i++ )
			{
				selected.push( { 'id' : selects[i].id,
								 'value': selects[i].selectedValue(),
								 'text' : selects[i].selectedText() } );
			}
			callback( selected );
		}
	};


	var replaceOptions = function( newOptions )
	{
		var opts = this.getElementsByTagName( 'option' );
		while( opts.length > 0 )
			this.removeChild( opts[0] );

		if( newOptions.length == 0)
			this.addOption( '--', 'Bitte Suchkriterium wählen...' );
		else
			this.addOption( '--', 'Bitte wählen:' );

		for( var i = 0; i < newOptions.length; i++ )
			this.addOption( newOptions[i][0], newOptions[i][1] );
	};

	var addOption = function( value, text )
	{
		var opt = document.createElement( 'option' );
		opt.value = value;
		opt.appendChild( document.createTextNode( text ) );
		this.appendChild( opt );
	};

	var selectedValue = function()
	{
		return this.options[ this.selectedIndex ].value;
	};

	var selectedText = function()
	{
		return this.options[ this.selectedIndex ].text;
	};

	var selectByValue = function( value )
	{
		for( var i = 0; i < this.options.length; i++ )
		{
			if( this.options[i].value == value )
				this.selectedIndex = i;
		}
	}

	this.init = function()
	{

		for( var i = 0; i < inputSelects.length; i++ )
		{
			var t = document.getElementById( inputSelects[i] );

			if(!t)
				continue;

			t.replaceOptions = replaceOptions;
			t.addOption = addOption;
			t.selectedValue = selectedValue;
			t.selectedText = selectedText;
			t.selectByValue = selectByValue;
			t.selectID = selects.length;
			t.onchange = changeHandler;
			selects.push( t );

			if( selects.length > 1 )
				selects[ selects.length-2 ].nextSelect = t;
		}
	};
	this.init();
}
