			// ************
			// DefaultSelect
			// ************

			function DefaultSelect( container, resources, listener, resourceset, initvalue ){

				this.container = container;
				this.resources = resources;
				this.listener = listener;

				this.update = function ( resourceSet, initvalue ){
					//alert(resourceSet + '.');
					rows = this.resources.getResourceSet( resourceSet );

					if( this.container ){

						this.container.length = 0;
						selectRow = 0;

						for( var r = 0 ; r < rows.length ; r++ ){
							o = rows[r];
							visibleRow = true;
							if( o.usedIn ){
								for( var ui = 0 ; ui < o.usedIn.length; ui++ ){
									visibleRow = false;
									if( o.usedIn[ui].listener == container ){
										visibleRow = true;
										break;
									}
								}
							}
							if( visibleRow){
								this.container.options[selectRow] = new Option( o.name, o.value);
								if( o.value == initvalue || o.value == this.container.getAttribute("selectedValue") || selectRow == initvalue){
									this.container.options[selectRow].selected = true;
								}
								selectRow++;
							}
						}
					}
				}

				if( resourceset ){
					this.update( resourceset, initvalue );
				}
			};
		//*************************************************************************************
		// RESOURCES
		//*************************************************************************************

			function simpleItemPool(){

				var  base_array = new Array();

				this.addItem = function( name, item ){

					a = base_array[ name ];

					if( !a){
						a = new Array();
						base_array[ name ] = a;
					}

					item.resourceSet = name;
					a.push( item );
				}

				this.getResourceSet = function( name ){
					return base_array[ name ];
				}

				this.GetSelected = function(name,origValue){
					// alert(name);
					var myArray = this.getResourceSet(name);

					for(i=0;i<myArray.length;i++){
						if(myArray[i].value == origValue){
							return myArray[i].name;
						}
					}
					return null;
				}

			};


		//*************************************************************************************
		// Listener
		//*************************************************************************************

			function Listener( resource ){

				this.resource = resource;
				this.listenerGroups = new Array();

				this.out = function( s, reset ){

					out = document.getElementById("debug");
					if( reset ){
						out.innerHTML = "";
					}
					out.innerHTML += s;

				}

				this.setResource = function( r ){
					this.resource =  r ;
				}

				this.removeListener = function( listener, resourceSet ){
					group = this.listenerGroups[ resourceSet ];
					for( var i in group){
						if( group[i] == listener ){
							group.splice(i,1);
						}
					}
					rs = this.resource.getResourceSet( resourceSet );
					for( var i in rs ){
						this.removeItemReservation( listener, rs[i] );
					}
					this.updateListeners( resourceSet );
				}

				this.addListener = function( listener, resourceSet, initValue ){
					if( 	listener.getAttribute("resourceSet") != null &&
						listener.getAttribute("resourceSet") != resourceSet ){
						this.removeListener( listener, listener.getAttribute("resourceSet") );
					}

					group = this.listenerGroups[ resourceSet ];
					if( !group ){
						group = new Array();
						this.listenerGroups[resourceSet] = group ;
					}

					newListener = true;

					for( var i in group){

						if( listener == group[i] ){
							newListener = false;
						}

					}

					if( newListener ){
						group.push(listener);
					}

					listener.setAttribute( "resourceSet", resourceSet );
					listener.setAttribute( "selectedValue", "" );

					if( initValue ){
						this.selectItem( listener, initValue );
					}else{
						listener.content.update( resourceSet );
					}
				}

				this.selectItem = function( listener, value, resourceSet ){

					set = this.resource.getResourceSet( listener.getAttribute("resourceSet") );
					listener.setAttribute("selectedValue", "" );
					for( var i in set ){
						if( ( set[i].value == value || value == "autoselect" ) && ( set[i].value != "" && value != "" ) ){
							usedIn = set[i].usedIn;
							if( !usedIn ){
								usedIn = new Array();
								set[i].usedIn = usedIn;
							}
							newListener = true;
							for( var u in usedIn ){
								if( listener ==  usedIn[u].listener){
									newListener = false;
								}
							}

							if( newListener ){
								addNew = false;
								if( value == "autoselect" && usedIn.length == 0 ){
									addNew = true;
									value = "";
								} else if ( value != "autoselect"  ){
									addNew = true;
								}
								if( addNew ){
									usedIn.push( { listener:listener, amount:1} );
									listener.setAttribute("selectedValue", set[i].value );
								}
							}
						} else {
							this.removeItemReservation( listener, set[i] );
						}
					}
					this.updateListeners( listener.getAttribute("resourceSet") );
				}
				this.removeItemReservation = function( listener, item){
					used = item.usedIn;
					for( var u in used){
						if( used[u].listener == listener){
							used.splice( u,1);
						}
					}
				}

				this.getResourceSet = function( resourceSet, listener ){
					return this.resource.getResourceSet( resourceSet );
				}

				this.updateListeners = function( listenerGroup ){
					group = this.listenerGroups[listenerGroup];
					for( var i in group ){
						group[i].content.update( listenerGroup );
					}
				}
			};
