MochiKit.Base.update(BitMap.Map.prototype, {
	"dbviewContentIdPref":null,

	"dbviewTilelayer":null,

	"dbviewContentId":-1,

	"dbviewGetDBView": function(cid,callback){
		doSimpleXMLHttpRequest(BitSystem.urls.geodataplus+"view_dbviews.php", {dbview_content_id:cid}).addCallback( bind(this.dbviewCallback, this), cid, callback );
	},

	"dbviewCallback": function(cid,callback,rslt){
	    var xml = rslt.responseXML.documentElement;
		var tl = BitMap.Geodataplus.tilelayers[cid] = {};
		this.parseDBViewXML(tl, xml);

		if( callback != undefined ){
			callback( cid );
		}
	},
	
	// based on func in gmap/scripts/Edit.js
	"parseDBViewXML": function(tl, xml){
		// convenience
		var $s = partial( bind(this.getXMLTagValue, this), xml );
		var $i = function( s ){ return parseInt( $s( s ) )};
		var $f = function( s ){ return parseFloat( $s( s ) )};

		// assign maptype values to data array	
		tl.dbview_content_id = $i('dbview_content_id');
		tl.title = $s('title');
		tl.minzoom = $i('minzoom');
		tl.maxzoom = $i('maxzoom');		
		tl.ispng = $s('ispng');
		tl.tilesurl = $s('tilesurl');
		tl.opacity = $f('opacity');

		// get the datakey info
		if( $('geodataplus_dbview_details') ){
			$('geodataplus_dbview_details').innerHTML = $s('datakey');
		}
	},

	"dbviewSetTilelayer": function(cid){
		// change
		if( cid != this.dbviewContentId ){
			// remove
			if ( this.dbviewTilelayer != null ){
				this.map.removeOverlay( this.dbviewTilelayer );
				if( typeof( BitMap.Geodataplus.tilelayers[ this.dbviewContentId ] ) != 'undefined' ){
					this.map.removeControl( BitMap.Geodataplus.tilelayers[ this.dbviewContentId ].keycontrol );
				}
			}

			// add the tilelayer, cid == -1 is no tilelayer do nothing
			if( cid > -1 ){
				var myCopyright = new GCopyrightCollection("");
				myCopyright.addCopyright(new GCopyright("",
					new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
					0,""));

				// Create the tile layer overlay and 
				// implement the three abstract methods   		
				var t = BitMap.Geodataplus.tilelayers[cid];

				if( t == undefined ){
					this.dbviewGetDBView(cid, bind(this.dbviewSetTilelayer, this));
					return;
				}

				var opts = {
					isPng:( t.ispng == true || t.ispng == 'true' )?true:false,
					opacity:t.opacity,
					tileUrlTemplate:t.tilesurl
				}

				var tilelayer = new GTileLayer(myCopyright,  t.minzoom, t.maxzoom, opts)
				// tilelayer.getTileUrl = this.makeGetTileUrl( t.tilesurl );

				this.dbviewTilelayer = new GTileLayerOverlay(tilelayer);

				this.map.addOverlay( this.dbviewTilelayer );

				/*
				if( t.keycontrol == undefined ){
					t.keycontrol = this.buildDBViewKey( removeElement('geodataplus_dbview_'+cid) );
				}
				this.map.addControl( t.keycontrol );
				*/

				// BitBase.setElementDisplay( 'tilelayers_hide_btn','inline' );
			}else{
				this.dbviewTilelayer = null;
				// BitBase.setElementDisplay( 'tilelayers_hide_btn','none' );
			}
			this.dbviewContentId = cid;
		}
	},

	"buildDBViewKey":function( div ){
		ref = this.map;
		var control = function(){};
		control.prototype = new GControl();
		control.prototype.initialize = function(){
			var container = DIV( null, div );
			ref.getContainer().appendChild( container );
			return container;
		};

		control.prototype.getDefaultPosition = function() {
			return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(8,40));
		};

		mycontrol = new control();
		return mycontrol;
	},

	"getDbviews":function(s){
		opts = {};
		e1 = $('region_content_id');
		if ( e1 != null ){
			opts.region_content_id = e1.options[e1.selectedIndex].value;
		}
		e2 = $('datasettheme_content_id');
		if ( e2 != null ){
			opts.datasettheme_content_id = e2.options[e2.selectedIndex].value;
		}
		opts.display_mode = 'view';
		s += '&'+queryString(opts); 
		doSimpleXMLHttpRequest(BitSystem.urls.geodataplus+"view_dbviews.php?"+s).addCallback( bind(this.getDbviewsCallback, this) );
	},

	"getDbviewsCallback": function(rslt){
		$('geodataplus_dbview_themes').innerHTML = rslt.responseText;
		BitMap.show('geodataplus_dbview_themes');
	},

	"setDbviewPref": function(cid,name){
		// $('dbview_content_id').value = cid;
		// $('geodataplus_dbview_name').innerHTML = name;
		this.dbviewSetTilelayer(cid);
	}

});

