QuickWMS-Extension/WMSquick.js: Unterschied zwischen den Versionen

GISWiki - Das freie Portal für Geoinformatik (GIS)
Wechseln zu: Navigation, Suche
 
 
Zeile 1: Zeile 1:
 
<pre>
 
<pre>
 +
 +
 
/*
 
/*
 
* Project quickWMS: Generic JavaScript WMS Client  
 
* Project quickWMS: Generic JavaScript WMS Client  
Zeile 19: Zeile 21:
 
* Functions : none
 
* Functions : none
 
*/
 
*/
 
+
 
function quickWMS(x1, y1, x2, y2, srs) {
 
function quickWMS(x1, y1, x2, y2, srs) {
  this.inheritFrom = mapWMS;
+
this.inheritFrom = mapWMS;
  this.inheritFrom(x1, y1, x2, y2, srs);
+
this.inheritFrom(x1, y1, x2, y2, srs);
  this.toolMode="";
+
this.toolMode="";
  this.slBox=new Array(0, 0, 0, 0);   // array variable for the selected area  
+
this.slBox=new Array(0, 0, 0, 0); // array variable for the selected area  
  this.zBox=new Array(0, 0, 0, 0); // private zoom array variable
+
this.zBox=new Array(0, 0, 0, 0); // private zoom array variable
  this.prevBBox = new Array;
+
this.prevBBox = new Array;
  this.prevBBox[this.prevBBox.length]=new Array(this.BBox[0], this.BBox[1], this.BBox[2], this.BBox[3]);  
+
this.prevBBox[this.prevBBox.length]=new Array(this.BBox[0], this.BBox[1], this.BBox[2], this.BBox[3]);
 +
 
 +
this.indexBBox=0;
 +
 +
/// events
 +
this.onMouseMove=null;
 +
this.onMouseClick=null;
 +
this.onMouseUp=null;
 +
this.onMouseDown=null;
 +
 +
// write the html for the selection
 +
this.writeHTML[this.writeHTML.length]= function (objRef){
 +
openLayer(objRef.name+"Selection","selectionLayer","visibility:inherit;",0, 0, objRef.width, objRef.height, true);
 +
if (browser.isOldNS) document.write('<table border="2" width="100%" height="100%"><tr height=5 bgcolor="black"><td colspan="3"></td></tr><tr><td bgcolor="black" width="5"></td><td></td><td bgcolor="black" width="5"></td></tr></table>');
 +
closeLayer();
 +
hideLayer(objRef.name+"Selection");
 +
 +
openLayer(objRef.name+"zoom","zoomSelectionLayer","visibility:inherit;",0, 0, objRef.width, objRef.height, true);
 +
if (browser.isOldNS) document.write('<table border="2" width="100%" height="100%"><tr height=5 bgcolor="black"><td colspan="3">ola</td></tr><tr><td bgcolor="black" width="5"></td><td></td><td bgcolor="black" width="5"></td></tr></table>');
 +
closeLayer();
 +
hideLayer(objRef.name+"zoom");
 +
}
  
  this.indexBBox=0;
+
// functions
   
+
// this function is called from the writeDOM function in its parent (mapWMS)
  /// events 
+
this.initialize = function () {
  this.onMouseMove=null;
+
assignMouseEvent(this.name,"mousemove",WMS_mouseMove, true);
  this.onMouseClick=null;
+
assignMouseEvent(this.name,"mouseup",WMS_mouseUp, true);
  this.onMouseUp=null;
+
assignMouseEvent(this.name,"mousedown",WMS_mouseDown, true);
  this.onMouseDown=null; 
+
}
   
+
  // write the html for the selection
+
  this.writeHTML[this.writeHTML.length]= function (objRef){  
+
    openLayer(objRef.name+"Selection","selectionLayer","visibility:inherit;",0, 0, objRef.width, objRef.height, true);
+
    if (browser.isOldNS) document.write('<table border="2" width="100%" height="100%"><tr height=5 bgcolor="black"><td colspan="3"></td></tr><tr><td bgcolor="black" width="5"></td><td></td><td bgcolor="black" width="5"></td></tr></table>');
+
    closeLayer();
+
    hideLayer(objRef.name+"Selection");  
+
   
+
    openLayer(objRef.name+"zoom","zoomSelectionLayer","visibility:inherit;",0, 0, objRef.width, objRef.height, true);
+
    if (browser.isOldNS) document.write('<table border="2" width="100%" height="100%"><tr height=5 bgcolor="black"><td colspan="3">ola</td></tr><tr><td bgcolor="black" width="5"></td><td></td><td bgcolor="black" width="5"></td></tr></table>');
+
    closeLayer();
+
    hideLayer(objRef.name+"zoom");     
+
    }
+
  
  // functions
+
this.mouseToolManager=WMS_mouseToolManager;
  // this function is called from the writeDOM function in its parent (mapWMS)
+
  this.initialize = function () {
+
this.setSelectionXY= function(x1, y1, x2, y2){
      assignMouseEvent(this.name,"mousemove",WMS_mouseMove, true);
+
if (x1) this.slBox[0]=x1;
      assignMouseEvent(this.name,"mouseup",WMS_mouseUp, true);
+
if (y1) this.slBox[1]=y1;
      assignMouseEvent(this.name,"mousedown",WMS_mouseDown, true);    
+
if (x2) this.slBox[2]=x2;
    }
+
if (y2) this.slBox[3]=y2;
 +
var pX1=geo2MouseX(this,this.slBox[0]);
 +
var pY1=geo2MouseY(this,this.slBox[3]);
 +
var pX2=geo2MouseX(this,this.slBox[2]);
 +
var pY2=geo2MouseY(this,this.slBox[1]);
 +
if (browser.isOldNS) layer = getLayer(this.name+"Selection").clip;//style
 +
else layer = getLayer(this.name+"Selection").style;
 +
if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
 +
else {layer.left=pX1;layer.width=pX2-pX1;}
 +
if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
 +
else {layer.top=pY1;layer.height=pY2-pY1;}
 +
if (parseInt(layer.width)>this.width) layer.width=this.width;
 +
if (parseInt(layer.left)<0) layer.left=0;
 +
if (parseInt(layer.height)>this.height) layer.height=this.height;
 +
if (parseInt(layer.top)<0) layer.top=0;
 +
}
 +
 +
this.setSelection = function (x1, y1, x2, y2){
 +
if (x1) {var pX1=x1;this.slBox[0]=mouse2GeoX(this,x1)}
 +
else var pX1=geo2MouseX(this,this.slBox[0]);
 +
if (y1) {var pY1=y1;this.slBox[3]=mouse2GeoY(this,y1)}
 +
else var pY1=geo2MouseY(this,this.slBox[3]);
 +
if (x2) {var pX2=x2;this.slBox[2]=mouse2GeoX(this,x2)}
 +
else var pX2=geo2MouseX(this,this.slBox[2]);
 +
if (y2) {var pY2=y2;this.slBox[1]=mouse2GeoY(this,y2)}
 +
else var pY2=geo2MouseY(this,this.slBox[1]);
 +
 +
if (browser.isOldNS) {layer = getLayer(this.name+"Selection").clip;}//style
 +
else layer = getLayer(this.name+"Selection").style;
 +
 +
// check the correct position in the slBox array
 +
if (this.slBox[1]>this.slBox[3]){
 +
var tVal=this.slBox[1];
 +
this.slBox[1]=this.slBox[3];
 +
this.slBox[3]=tVal;
 +
tVal=pY1;
 +
pY1=pY2;
 +
pY2=tVal;
 +
}
 +
if (this.slBox[0]>this.slBox[2]){
 +
var tVal=this.slBox[0];
 +
this.slBox[0]=this.slBox[2];
 +
this.slBox[2]=tVal;
 +
tVal=pX1;
 +
pX1=pX2;
 +
pX2=tVal;
 +
}
 +
 +
//getLayer(this.name+"Selection").bgColor="#CC00EE";
 +
if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
 +
else {layer.left=pX1;layer.width=pX2-pX1;}
 +
if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
 +
else {layer.top=pY1;layer.height=pY2-pY1;}
 +
if (parseInt(layer.width)>this.width) layer.width=this.width;
 +
if (parseInt(layer.left)<0) layer.left=0;
 +
if (parseInt(layer.height)>this.height) layer.height=this.height;
 +
if (parseInt(layer.top)<0) layer.top=0;
 +
}
  
  this.mouseToolManager=WMS_mouseToolManager;
+
this.setZoomBox = function (x1, y1, x2, y2){
 
+
if (x1) {var pX1=x1;this.zBox[0]=mouse2GeoX(this,x1)}
  this.setSelectionXY= function(x1, y1, x2, y2){
+
else var pX1=geo2MouseX(this,this.zBox[0]);
    if (x1) this.slBox[0]=x1;
+
if (y1) {var pY1=y1;this.zBox[3]=mouse2GeoY(this,y1)}
    if (y1) this.slBox[1]=y1;
+
else var pY1=geo2MouseY(this,this.zBox[3]);
    if (x2) this.slBox[2]=x2;
+
if (x2) {var pX2=x2;this.zBox[2]=mouse2GeoX(this,x2)}
    if (y2) this.slBox[3]=y2;
+
else var pX2=geo2MouseX(this,this.zBox[2]);
    var pX1=geo2MouseX(this,this.slBox[0]);  
+
if (y2) {var pY2=y2;this.zBox[1]=mouse2GeoY(this,y2)}
    var pY1=geo2MouseY(this,this.slBox[3]);   
+
else var pY2=geo2MouseY(this,this.zBox[1]);
    var pX2=geo2MouseX(this,this.slBox[2]);    
+
    var pY2=geo2MouseY(this,this.slBox[1]);
+
if (browser.isOldNS){ layer = getLayer(this.name+"zoom").clip;}//alert(layer)}//style
    if (browser.isOldNS) layer = getLayer(this.name+"Selection").clip;//style
+
else layer = getLayer(this.name+"zoom").style;
    else layer = getLayer(this.name+"Selection").style;
+
    if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
+
if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
    else {layer.left=pX1;layer.width=pX2-pX1;}
+
else {layer.left=pX1;layer.width=pX2-pX1;}
    if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
+
    else {layer.top=pY1;layer.height=pY2-pY1;}
+
if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
    if (parseInt(layer.width)>this.width) layer.width=this.width;
+
else {layer.top=pY1;layer.height=pY2-pY1;}
    if (parseInt(layer.left)<0) layer.left=0;
+
    if (parseInt(layer.height)>this.height) layer.height=this.height;
+
    if (parseInt(layer.top)<0) layer.top=0;
+
// this class will not use the inherited updateBBox method because it keeps a list of previous requests
    }
+
this.updateBBox = function (x1, y1, x2, y2){
   
+
if (this.onBeforeChange){this.onBeforeChange(this,x1,y1,x2,y2);}
  this.setSelection = function (x1, y1, x2, y2){
+
copy(this.BBox,this.lastBBox);
    if (x1) {var pX1=x1;this.slBox[0]=mouse2GeoX(this,x1)}  
+
var nI=this.prevBBox.length;
    else var pX1=geo2MouseX(this,this.slBox[0]);
+
for (var i=this.indexBBox+1;i<nI;i++) {this.prevBBox.length--}
    if (y1) {var pY1=y1;this.slBox[3]=mouse2GeoY(this,y1)}
+
this.BBox[0]=x1/1;this.BBox[2]=x2/1;
    else var pY1=geo2MouseY(this,this.slBox[3]);
+
this.BBox[1]=y1/1;this.BBox[3]=y2/1;
    if (x2) {var pX2=x2;this.slBox[2]=mouse2GeoX(this,x2)}
+
this.indexBBox+=1;
    else var pX2=geo2MouseX(this,this.slBox[2]);
+
geoConstraints(this);
    if (y2) {var pY2=y2;this.slBox[1]=mouse2GeoY(this,y2)}
+
this.prevBBox[this.prevBBox.length]=new Array(this.BBox[0],this.BBox[1],this.BBox[2],this.BBox[3]);
    else var pY2=geo2MouseY(this,this.slBox[1]);
+
this.refresh();
       
+
}
    if (browser.isOldNS) {layer = getLayer(this.name+"Selection").clip;}//style
+
// this function is also overrided
    else layer = getLayer(this.name+"Selection").style;
+
this.cancelRequest = function(){
   
+
hideLayer(this.name+"Status");
    // check the correct position in the slBox array
+
clearInterval(this.waitFunction);
    if (this.slBox[1]>this.slBox[3]){
+
if (this.indexBBox>0) {
      var tVal=this.slBox[1];
+
this.prevBBox.length--
      this.slBox[1]=this.slBox[3];
+
this.indexBBox--;
      this.slBox[3]=tVal;
+
}
      tVal=pY1;
+
copy(this.lastBBox,this.BBox);
      pY1=pY2;
+
this.refresh();
      pY2=tVal;
+
}
    }
+
this.back=function(){
    if (this.slBox[0]>this.slBox[2]){
+
if (this.indexBBox>0){
      var tVal=this.slBox[0];
+
this.indexBBox-=1;
      this.slBox[0]=this.slBox[2];
+
this.BBox[0]=this.prevBBox[this.indexBBox][0];
      this.slBox[2]=tVal;
+
this.BBox[1]=this.prevBBox[this.indexBBox][1];
      tVal=pX1;
+
this.BBox[2]=this.prevBBox[this.indexBBox][2];
      pX1=pX2;
+
this.BBox[3]=this.prevBBox[this.indexBBox][3];
      pX2=tVal;     
+
this.refresh();
    }
+
return true;
   
+
}
    //getLayer(this.name+"Selection").bgColor="#CC00EE";   
+
else return false;
    if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
+
}
    else {layer.left=pX1;layer.width=pX2-pX1;}
+
this.home=function(){
    if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
+
this.updateBBox(this.initBBox[0], this.initBBox[1],this.initBBox[2],this.initBBox[3]);
    else {layer.top=pY1;layer.height=pY2-pY1;}
+
}
    if (parseInt(layer.width)>this.width) layer.width=this.width;
+
    if (parseInt(layer.left)<0) layer.left=0;
+
this.forward=function(){
    if (parseInt(layer.height)>this.height) layer.height=this.height;
+
if (this.indexBBox<this.prevBBox.length-1){
    if (parseInt(layer.top)<0) layer.top=0;  
+
this.indexBBox+=1;
    }
+
this.BBox[0]=this.prevBBox[this.indexBBox][0];
 +
this.BBox[1]=this.prevBBox[this.indexBBox][1];
 +
this.BBox[2]=this.prevBBox[this.indexBBox][2];
 +
this.BBox[3]=this.prevBBox[this.indexBBox][3];
 +
this.refresh();
 +
}
 +
}
 +
 +
}
  
  this.setZoomBox = function (x1, y1, x2, y2){
 
    if (x1)  {var pX1=x1;this.zBox[0]=mouse2GeoX(this,x1)}
 
    else var pX1=geo2MouseX(this,this.zBox[0]);
 
    if (y1)  {var pY1=y1;this.zBox[3]=mouse2GeoY(this,y1)}
 
    else var pY1=geo2MouseY(this,this.zBox[3]);
 
    if (x2)  {var pX2=x2;this.zBox[2]=mouse2GeoX(this,x2)}
 
    else var pX2=geo2MouseX(this,this.zBox[2]); 
 
    if (y2)  {var pY2=y2;this.zBox[1]=mouse2GeoY(this,y2)}
 
    else var pY2=geo2MouseY(this,this.zBox[1]);
 
       
 
    if (browser.isOldNS){ layer = getLayer(this.name+"zoom").clip;}//alert(layer)}//style
 
    else layer = getLayer(this.name+"zoom").style;
 
   
 
    if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
 
    else {layer.left=pX1;layer.width=pX2-pX1;}
 
   
 
    if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
 
    else {layer.top=pY1;layer.height=pY2-pY1;}   
 
    } 
 
   
 
  // this class will not use the inherited updateBBox method because it keeps a list of previous requests
 
  this.updateBBox = function (x1, y1, x2, y2){       
 
    if (this.onBeforeChange){this.onBeforeChange(this,x1,y1,x2,y2);}
 
    copy(this.BBox,this.lastBBox);
 
    var nI=this.prevBBox.length;
 
    for (var i=this.indexBBox+1;i<nI;i++) {this.prevBBox.length--}     
 
    this.BBox[0]=x1/1;this.BBox[2]=x2/1;
 
    this.BBox[1]=y1/1;this.BBox[3]=y2/1;
 
    this.indexBBox+=1;
 
    geoConstraints(this);
 
    this.prevBBox[this.prevBBox.length]=new Array(this.BBox[0],this.BBox[1],this.BBox[2],this.BBox[3]);     
 
    this.refresh();
 
    }
 
  // this function is also overrided
 
  this.cancelRequest = function(){   
 
    hideLayer(this.name+"Status");
 
    clearInterval(this.waitFunction);   
 
    if (this.indexBBox>0) {     
 
      this.prevBBox.length--
 
      this.indexBBox--;     
 
      }
 
    copy(this.lastBBox,this.BBox);
 
    this.refresh();
 
    }
 
  this.back=function(){
 
    if (this.indexBBox>0){
 
      this.indexBBox-=1;
 
      this.BBox[0]=this.prevBBox[this.indexBBox][0];
 
      this.BBox[1]=this.prevBBox[this.indexBBox][1];
 
      this.BBox[2]=this.prevBBox[this.indexBBox][2];
 
      this.BBox[3]=this.prevBBox[this.indexBBox][3];
 
      this.refresh();
 
      return true;
 
      }
 
    else return false;
 
    }
 
  this.home=function(){
 
    this.updateBBox(this.initBBox[0], this.initBBox[1],this.initBBox[2],this.initBBox[3]);     
 
    }
 
 
 
  this.forward=function(){
 
    if (this.indexBBox<this.prevBBox.length-1){   
 
      this.indexBBox+=1;
 
      this.BBox[0]=this.prevBBox[this.indexBBox][0];
 
      this.BBox[1]=this.prevBBox[this.indexBBox][1];
 
      this.BBox[2]=this.prevBBox[this.indexBBox][2];
 
      this.BBox[3]=this.prevBBox[this.indexBBox][3];
 
      this.refresh();
 
      }
 
    }
 
     
 
  }
 
 
</pre>
 
</pre>

Aktuelle Version vom 19. August 2005, 20:14 Uhr



/*
* Project quickWMS: Generic JavaScript WMS Client 
* File : WMSquick.js
* Author : Pedro Pereira Gonçalves
* email : pedro.goncalves@esa.int or pedro@inovagis.org
* Version : 0.1
* Description: Adds mouse events for selection and zoom to the mapWMS class
*                    Please read coderules.txt before making any change
* Tested on : Netscape 7.0, IE 5.5, IE 6.0
* Last Change : 2003-05-02
* Dependencies : WMSbrowsers.js, WMSmap.js, WMSlayers.js, WMStools.js
* Future Developments : 
* License : OpenSource (check license.txt in the same directory)
* History :
    2003-04-23 : Documentation added
    2003-03-20 : File Created
* Objects : dynamicWMS 
* Functions : none
*/
	
function quickWMS(x1, y1, x2, y2, srs) {
	this.inheritFrom = mapWMS;
	this.inheritFrom(x1, y1, x2, y2, srs);	
	this.toolMode="";
	this.slBox=new Array(0, 0, 0, 0);	 // array variable for the selected area 
	this.zBox=new Array(0, 0, 0, 0);	// private zoom array variable
	this.prevBBox = new Array;	
	this.prevBBox[this.prevBBox.length]=new Array(this.BBox[0], this.BBox[1], this.BBox[2], this.BBox[3]);		

	this.indexBBox=0;
		
	/// events 	
	this.onMouseMove=null;
	this.onMouseClick=null;
	this.onMouseUp=null;
	this.onMouseDown=null;	
		
	// write the html for the selection
	this.writeHTML[this.writeHTML.length]= function (objRef){		
		openLayer(objRef.name+"Selection","selectionLayer","visibility:inherit;",0, 0, objRef.width, objRef.height, true);
		if (browser.isOldNS) document.write('<table border="2" width="100%" height="100%"><tr height=5 bgcolor="black"><td colspan="3"></td></tr><tr><td bgcolor="black" width="5"></td><td></td><td bgcolor="black" width="5"></td></tr></table>');
		closeLayer();
		hideLayer(objRef.name+"Selection");		
		
		openLayer(objRef.name+"zoom","zoomSelectionLayer","visibility:inherit;",0, 0, objRef.width, objRef.height, true);
		if (browser.isOldNS) document.write('<table border="2" width="100%" height="100%"><tr height=5 bgcolor="black"><td colspan="3">ola</td></tr><tr><td bgcolor="black" width="5"></td><td></td><td bgcolor="black" width="5"></td></tr></table>');
		closeLayer();
		hideLayer(objRef.name+"zoom");			
		}

	// functions 
	// this function is called from the writeDOM function in its parent (mapWMS)
	this.initialize = function () {
			assignMouseEvent(this.name,"mousemove",WMS_mouseMove, true);
			assignMouseEvent(this.name,"mouseup",WMS_mouseUp, true);
			assignMouseEvent(this.name,"mousedown",WMS_mouseDown, true);			
		}

	this.mouseToolManager=WMS_mouseToolManager;
	
	this.setSelectionXY= function(x1, y1, x2, y2){
		if (x1)	this.slBox[0]=x1;
		if (y1) this.slBox[1]=y1;
		if (x2) this.slBox[2]=x2;
		if (y2) this.slBox[3]=y2;
		var pX1=geo2MouseX(this,this.slBox[0]);		
		var pY1=geo2MouseY(this,this.slBox[3]);		
		var pX2=geo2MouseX(this,this.slBox[2]);			
		var pY2=geo2MouseY(this,this.slBox[1]);
		if (browser.isOldNS) layer = getLayer(this.name+"Selection").clip;//style
		else layer = getLayer(this.name+"Selection").style;
		if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
		else {layer.left=pX1;layer.width=pX2-pX1;}
		if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
		else {layer.top=pY1;layer.height=pY2-pY1;}
		if (parseInt(layer.width)>this.width) layer.width=this.width;
		if (parseInt(layer.left)<0) layer.left=0;
		if (parseInt(layer.height)>this.height) layer.height=this.height;
		if (parseInt(layer.top)<0) layer.top=0;
		}
		
	this.setSelection = function (x1, y1, x2, y2){
		if (x1)	{var pX1=x1;this.slBox[0]=mouse2GeoX(this,x1)} 
		else var pX1=geo2MouseX(this,this.slBox[0]);
		if (y1)	{var pY1=y1;this.slBox[3]=mouse2GeoY(this,y1)}
		else var pY1=geo2MouseY(this,this.slBox[3]);
		if (x2)	{var pX2=x2;this.slBox[2]=mouse2GeoX(this,x2)}
		else var pX2=geo2MouseX(this,this.slBox[2]);	
		if (y2)	{var pY2=y2;this.slBox[1]=mouse2GeoY(this,y2)}
		else var pY2=geo2MouseY(this,this.slBox[1]);
				
		if (browser.isOldNS) {layer = getLayer(this.name+"Selection").clip;}//style
		else layer = getLayer(this.name+"Selection").style;
		
		// check the correct position in the slBox array 
		if (this.slBox[1]>this.slBox[3]){
			var tVal=this.slBox[1];
			this.slBox[1]=this.slBox[3];
			this.slBox[3]=tVal;
			tVal=pY1;
			pY1=pY2;
			pY2=tVal;
		}
		if (this.slBox[0]>this.slBox[2]){
			var tVal=this.slBox[0];
			this.slBox[0]=this.slBox[2];
			this.slBox[2]=tVal;
			tVal=pX1;
			pX1=pX2;
			pX2=tVal;			
		}
		
		//getLayer(this.name+"Selection").bgColor="#CC00EE";		
		if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
		else {layer.left=pX1;layer.width=pX2-pX1;}
		if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
		else {layer.top=pY1;layer.height=pY2-pY1;}
		if (parseInt(layer.width)>this.width) layer.width=this.width;
		if (parseInt(layer.left)<0) layer.left=0;
		if (parseInt(layer.height)>this.height) layer.height=this.height;
		if (parseInt(layer.top)<0) layer.top=0;		
		}  

	this.setZoomBox = function (x1, y1, x2, y2){
		if (x1)	{var pX1=x1;this.zBox[0]=mouse2GeoX(this,x1)} 
		else var pX1=geo2MouseX(this,this.zBox[0]);
		if (y1)	{var pY1=y1;this.zBox[3]=mouse2GeoY(this,y1)}
		else var pY1=geo2MouseY(this,this.zBox[3]);
		if (x2)	{var pX2=x2;this.zBox[2]=mouse2GeoX(this,x2)}
		else var pX2=geo2MouseX(this,this.zBox[2]);	
		if (y2)	{var pY2=y2;this.zBox[1]=mouse2GeoY(this,y2)}
		else var pY2=geo2MouseY(this,this.zBox[1]);
				
		if (browser.isOldNS){ layer = getLayer(this.name+"zoom").clip;}//alert(layer)}//style
		else layer = getLayer(this.name+"zoom").style;
		
		if (pX1>pX2){layer.left=pX2;layer.width=pX1-pX2;}
		else {layer.left=pX1;layer.width=pX2-pX1;}
		
		if (pY1>pY2){layer.top=pY2;layer.height=pY1-pY2;}
		else {layer.top=pY1;layer.height=pY2-pY1;}		
		}  
		
	// this class will not use the inherited updateBBox method because it keeps a list of previous requests
	this.updateBBox = function (x1, y1, x2, y2){				
		if (this.onBeforeChange){this.onBeforeChange(this,x1,y1,x2,y2);}
		copy(this.BBox,this.lastBBox);
		var nI=this.prevBBox.length;
		for (var i=this.indexBBox+1;i<nI;i++) {this.prevBBox.length--}			
		this.BBox[0]=x1/1;this.BBox[2]=x2/1;
		this.BBox[1]=y1/1;this.BBox[3]=y2/1;
		this.indexBBox+=1;
		geoConstraints(this);
		this.prevBBox[this.prevBBox.length]=new Array(this.BBox[0],this.BBox[1],this.BBox[2],this.BBox[3]);			
		this.refresh();
		}
	// this function is also overrided
	this.cancelRequest = function(){		
		hideLayer(this.name+"Status");
		clearInterval(this.waitFunction);		
		if (this.indexBBox>0) {			
			this.prevBBox.length--
			this.indexBBox--;			
			}
		copy(this.lastBBox,this.BBox);
		this.refresh();
		}
	this.back=function(){
		if (this.indexBBox>0){
			this.indexBBox-=1;
			this.BBox[0]=this.prevBBox[this.indexBBox][0];
			this.BBox[1]=this.prevBBox[this.indexBBox][1];
			this.BBox[2]=this.prevBBox[this.indexBBox][2];
			this.BBox[3]=this.prevBBox[this.indexBBox][3];
			this.refresh();
			return true;
			}
		else return false;
		}
	this.home=function(){
		this.updateBBox(this.initBBox[0], this.initBBox[1],this.initBBox[2],this.initBBox[3]);			
		}
	
	this.forward=function(){
		if (this.indexBBox<this.prevBBox.length-1){		
			this.indexBBox+=1;
			this.BBox[0]=this.prevBBox[this.indexBBox][0];
			this.BBox[1]=this.prevBBox[this.indexBBox][1];
			this.BBox[2]=this.prevBBox[this.indexBBox][2];
			this.BBox[3]=this.prevBBox[this.indexBBox][3];
			this.refresh();
			}
		}
			
	}