
// extent constructor takes minX, minY, maxX, maxY as parameters 
//                         or
// a single parameter = copy values from another extent object (copy constructor)
function extent(p1, p2, p3, p4){
  if (!(this instanceof extent ))
    return new extent(p1, p2, p3, p4); 
  if (!p2) { // single parameter means copy passed extent values to new extent 
    this.minX=p1.minX;
    this.minY=p1.minY;
    this.maxX=p1.maxX;
    this.maxY=p1.maxY;
  } 
  else{// multiple parameter means copy passed values to new extent
    this.minX=p1;
    this.minY=p2;
    this.maxX=p3;
    this.maxY=p4;
  }
  this.minX -= 0;
  this.minY -= 0; 
  this.maxX -= 0;
  this.maxY -= 0;
  this.xSize=Math.abs(this.maxX-this.minX);
  this.ySize=Math.abs(this.maxY-this.minY); 
}
extent.prototype.set=function(minX, minY, maxX, maxY){
  this.minX=minX;
  this.maxY=maxY;
  this.maxX=maxX;
  this.minY=minY;
  this.minX -= 0;
  this.maxY -= 0;
  this.maxX -= 0;
  this.minY -= 0; 
  this.xSize=Math.abs(this.maxX-this.minX);
  this.ySize=Math.abs(this.maxY-this.minY); 
}
extent.prototype.setWithArray=function(box){
  this.minX=box[0];
  this.minY=box[1];
  this.maxX=box[2];
  this.maxY=box[3];
  this.minX -= 0;
  this.maxY -= 0;
  this.maxX -= 0;
  this.minY -= 0; 
  this.xSize=Math.abs(this.maxX-this.minX);
  this.ySize=Math.abs(this.maxY-this.minY); 
}
extent.prototype.setFrom= function(fromExt) {
  this.minX=fromExt.minX;
  this.maxY=fromExt.maxY;
  this.maxX=fromExt.maxX;
  this.minY=fromExt.minY;
  this.xSize=Math.abs(this.maxX-this.minX);
  this.ySize=Math.abs(this.maxY-this.minY); 
}  
extent.prototype.toString= function() {
  return this.minX+','+this.minY+','+this.maxX+','+this.maxY;
} 
extent.prototype.checkNumeric = function() {
  if (isNaN(this.minX) || isNaN(this.maxX) || isNaN(this.minY) || isNaN(this.maxY))
    return false
        else
    return true;
}
extent.prototype.checkBounds = function() {
  if(this.minY >= this.maxY || this.minX >= this.maxX)
    return false;
  else
    return true;     
} 
extent.prototype.within = function(containingExt) {
  if (this.minX < containingExt.minX || this.minX > containingExt.maxX ||
      this.maxX < containingExt.minX || this.maxX > containingExt.maxX ||
      this.maxY < containingExt.minY || this.maxY > containingExt.maxY ||
      this.minY < containingExt.minY || this.minY > containingExt.maxY){   
    return false
  }  
  else
    return true;     
}  

extent.prototype.getDegPixel = function() {
  var v = Math.pow(10,4);
  var DDMapScaleFactor=this.xSize/iWidth;
  degPixel = parseInt(DDMapScaleFactor * v +(5/10))/v;
  return degPixel;
}  
			
extent.prototype.addBorder = function(pixels) {
  borderSize = pixels * this.getDegPixel();	
  this.minX -= borderSize;  
  this.maxX += borderSize;
  this.maxY += borderSize;
  this.minY -= borderSize;
  return this;
  }  


