function Map () {
	
	this.keys = new Array()
	this.values = new Array()
		
	this.put = function(key, value){
		var replaced = false;
		
		for(var i = 0; i < this.keys.length; i++){
			if(this.keys[i] == key){
				this.values[i] = value;
				replaced = true;
				break;
			}
		}
		
		if(!replaced){
			this.keys.push(key);
			this.values.push(value);
		}
		
	}
	
	this.get = function(key){
		for(var i = 0; i < this.keys.length; i++){
			if(this.keys[i] == key){
				log("get["+i+"]");
				return this.values[i];
			}
		}
		log("Empty!"+key);
	}

}


function LayerManager(){

	this.layer = new Map();	
	this.locks = new Map();
	this.values = new Map();
	
	this.maplayersId = 'maplayers';
	this.state = 0;
	
	this.clear = 'clear.gif';
	this.formName = 'form';
	this.fieldName = 'field';
	
	this.mapname = '#1';
	
	this.setClearImg = function(img){
		this.clear = img;
	}
	
	this.setField = function(form, field){
		this.formName = form;
		this.fieldName = field;
	}
	
	this.setSubmit = function(doSubmit){
		this.doSubmit = doSubmit;
	}
	
	this.addLayer = function(id, src, lock, value, top, left){
	
		//preload		
		var img = new Image();
		img.src = src;
		
		this.layer.put( id, src );
		this.locks.put( id, lock );
		this.values.put( id, value );
		
		if(lock == 1){
			this.showLayer(id);
		}
	
	}
	/*
	this.initialize = function(){
		for( i=0; i < this.locks.keys.length; i++){
			
			if(this.locks.values[i] == 1){				
				var id = this.locks.keys[i];				
				this.swapSelection(this.values.get(id),true);
				
			}
		}	
	}*/
	
	this.showLayer = function(id){
		log('showLayer '+id);
		this.removeNotLocked();
		
		this._showLayer(id);
		this.debug();					
	}
	
	this._showLayer = function(id){
		var img = document.getElementById(id);
		img.setAttribute('usemap',this.mapname);
		if(this.isIE()){
//			img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
//				+ this.layer.get(id)+"', sizingMethod='scale')";
			img.src = this.layer.get(id);
		}else{
			img.src = this.layer.get(id);
		}
	}
	
	this.hideLayer = function(id){
		log('hideLayer '+id);
		this.removeNotLocked();
		
		this._hideLayer(id);
		this.debug();					
	}
	
	this._hideLayer = function(id){
		var img = document.getElementById(id);
		img.setAttribute('usemap',this.mapname);
		if(this.isIE()){
			img.src = this.clear;
		}else{
			img.src = this.clear;
		}
	}
	
	this.removeNotLocked = function (){
		log('removeNotLocked');
	
		
		for( i=0; i < this.locks.keys.length; i++){
			
			if(this.locks.values[i] == 0){
				log('remove='+i);
				
				var img = document.getElementById(this.locks.keys[i]);
				if(this.isIE()){
//					img.style.filter = null;
					img.src = this.clear;
				} else {
					img.src = this.clear;
				}
			}
		}	
	}
	
	this.swapLayer = function (id){
		var select;
		if(this.locks.get(id) == 0){
			log('lock='+id);
			this.locks.put( id, 1);	
			this._showLayer(id);
			select = true;	
		}else{
			this.locks.put( id, 0);
			log('unlock='+id);
			this.removeNotLocked();
			select = false;
		}
		
		this.swapSelection(this.values.get(id),select);
		if(this.doSubmit==1){
			var form = this.formName;
			document.forms[form].submit();
		}
	}

	this.swapSelection = function (value, selected){
		
		var form = this.formName;
		var field = this.fieldName;
	
		var select = document.forms[form].elements[field];
	
		//document.forms["search"].elements["cf_immo_search_street"].value=code;
	
		for (i = 0; i < select.length; ++i){
			if (select.options[i].value == value){
				log('select value='+value+' '+selected);
				select.options[i].selected = selected;
				break;
			}
		}
		this.debug('swapSelection');
	}
	
	this.showSelection = function ()
	{
		for( i=0; i < this.locks.keys.length; i++){
			
			if(this.locks.values[i] == 1){
				log('show='+i);
				this.showLayer(this.locks.keys[i]);
			}
		}	
		this.debug('showSelection');
	}
	
	this.switchLayer = function (oldid, newid){
		var select;
		
		this.locks.put( oldid, 0);

		if(this.locks.get(newid) == 0){
			log('lock='+newid);
			this.locks.put( newid, 1);	
			this._showLayer(newid);
			this.removeNotLocked();
			select = true;	
		}else{
			this.locks.put( newid, 0);
			log('unlock='+newid);
			this.removeNotLocked();
			select = false;
		}

		this.setSingleSelection(this.values.get(newid), select);
		if(this.doSubmit==1){
			var form = this.formName;
			document.forms[form].submit();
		}
	}

	this.setSingleSelection = function (value, select)
	{
		var form = this.formName;
		var field = this.fieldName;
		var select = document.forms[form].elements[field];
		for (i = 0; i < select.length; ++i){
			log('counter='+i);
			if (select.options[i].value == value){
				log('select value='+value+' '+select);
				select.options[i].selected = select;
			}
			else{
				log('select value='+value+' '+false);
				select.options[i].selected = false;
			}
		}
		this.debug('setSingleSelection');
	}
	
	/* Aufruf aus Formular */
	this.processSelection = function(){
		
		
		var form = this.formName;
		var field = this.fieldName;
	
		var htmlForm = document.forms[form];
		if (htmlForm!=null) var select = document.forms[form].elements[field];

		if (null!=select) for (i = 0; i < select.length; ++i){
			var val = select.options[i].value;
			
			for (j = 0; j < this.values.values.length; j++){
				if(this.values.values[j] == val){
				
					if (select.options[i].selected == true){
						if(this.locks.values[j]==0){
							this.locks.values[j] = 1;
							this._showLayer(this.locks.keys[j]);
						}					
					}else{
						if( this.locks.values[j] == 1){
							this.locks.values[j] = 0;
						}
					}
				
				}
			}
		}
		this.removeNotLocked();
		this.debug('processSelection');
	}



	this.isIE = function (){
		//return false;
		return navigator.appName == 'Microsoft Internet Explorer';
	}	
	
	
	this.debug = function (msg) {
		if(LayerManager.debug){
			var txt = "<div>"+msg 
					+"<table border='1'><tr> <td>id</td> <td>value</td> <td>lock</td> <td>layers</td> </tr> ";
			for( i=0; i < this.locks.keys.length; i++){
			
				txt += 	"<tr>"+
						"<td>"+this.locks.keys[i]+"</td>"+
						"<td>"+this.values.values[i]+"</td>"+
						"<td>"+this.locks.values[i]+"</td>"+
						"<td>"+this.layer.values[i]+"</td>"+
						"</tr>";
			}
			
			txt += "</table>";
			document.getElementById("log").innerHTML = txt;
		}
	}	
}
LayerManager.debug = false;

function log(msg){

/*var value = document.getElementById("log").innerHTML;
	
	value =  msg+ "<br/>" +value;
	
	document.getElementById("log").innerHTML = value;
*/
}
