/**
 * A JavaScript wrapper class around the NCSSimpleVectorLayer
 */
this.typeOf = function(t) {
  //return String(t.constructor).split(" ")[1].split("(").join("");
  if (t && typeof(t.constructor)!="undefined")
    return String(t.constructor).split(" ")[1].split("(")[0];
  else return t;
}
function NCSVectorLayer(NCSView, ViewDivName, layerName, status)
{
    this.layerName = layerName;
    this.ncsView = NCSView;
    this.viewDivName=ViewDivName;
    this.status=status;
    this.captureCoord=null;
    this.fillColor = "#000000";
    this.penColor  = "#000000";
    this.lineThickness = 2.0;
    this.currentType = 0;
    this.dpPoint=null;
    this.gLaenge=0;
    this.sLaenge=0;
    this.msKey=null;
    this.objectPointsX = new Array();
    this.objectPointsY = new Array();
    this.AreaPointsX = new Array();
    this.AreaPointsY = new Array();
    this.objectNumPoints = 0;
    this.drawEnd=false;
    this.cntEnd=0;
    this.pan=false;
    this.objectTag="";
    this.position=getPosition(this.ncsView);
    this.polyExtent=new GeoExtent();
    if (this.position.x==0 && this.position.y==0) 
      this.position=getPosition(this.viewDivName);
    this.winX=null;
    this.winY=null;
    this.handle=function(delta,x2,y2,w,h) {
      var x1=w/2;
      var y1=h/2;
      var xmin = this.ncsView.GetTopLeftWorldCoordinateX();
      var ymin = this.ncsView.GetBottomRightWorldCoordinateY();
      var xmax = this.ncsView.GetBottomRightWorldCoordinateX();
      var ymax = this.ncsView.GetTopLeftWorldCoordinateY();
      var wc1=this.Pixel2WordCoord(x2,y2,w,h,xmin,ymin,xmax,ymax);
      var difX=(xmax-xmin)/10;
      var difY=(ymax-ymin)/10;
      if (delta < 0) {
        //window.status= "down";
        xmin=xmin+difX;
        ymin=ymin+difY;
        xmax=xmax-difX;
        ymax=ymax-difY;
        var aExtent=xmin+","+ymin+","+xmax+","+ymax;
      }
      else {
        //window.status="up";
        xmin=xmin-difX;
        ymin=ymin-difY;
        xmax=xmax+difX;
        ymax=ymax+difY;
        var aExtent=xmin+","+ymin+","+xmax+","+ymax;
      }
      difX=xmax-xmin;
      difY=ymax-ymin;
      aExtent=this.diffXY(x2,y2,wc1[0],wc1[1],difX,difY,w,h);
      setExtent(aExtent);
    }
    this.whichKey=function(e){
      this.msKey=1;
      if (e && e.which) {
        this.msKey=(e.which==3)? 2:e.which;
        return this.msKey
      }
      else if (event && event.button) {
        this.msKey=event.button;
        return this.msKey
      }
      else return this.msKey;
    }
    this.getMouseXY=function(e) {
      //this.position=getPosition(this.ncsView);          
      this.position=getPosition("mapview");
      if (e && e.pageX){
        this.winX=e.pageX;
        this.winY=e.pageY;
      }
      else{
        this.winX=event.clientX+document.body.scrollLeft;
        this.winY=event.clientY+document.body.scrollTop;
      }
      this.winX-=(this.position.x+1);
      this.winY-=(this.position.y+1);
      return new Array(this.winX,this.winY);
    }
    this.mapmousemove=function(e) {
      var w=ECWVectorLayer.ncsView.GetViewWidth();
      var h=ECWVectorLayer.ncsView.GetViewHeight();    
      var winXY=ECWVectorLayer.getMouseXY(e);
      if (ECWVectorLayer.winX>0 && ECWVectorLayer.winX<w && ECWVectorLayer.winY>0 && ECWVectorLayer.winY<h) {
        if (ECWVectorLayer.ncsView.GetNumberLayers()>0) {
          if (!ECWVectorLayer.pan) {            
            var wc1=ECWVectorLayer.Pixel2Word(winXY[0],winXY[1]);
            ECWVectorLayer.status.showMapCoords(wc1);
            if (ECWVectorLayer.objectNumPoints>0 && ECWVectorLayer.dpPoint && !ECWVectorLayer.drawEnd) {
              switch (ECWVectorLayer.currentType) {
                /*
                case NCSVectorLayer.POLYLINE:
                  ECWVectorLayer.ncsView.SetLayerParameter(ECWVectorLayer.layerName,"polyline2="+ECWVectorLayer.dpPoint[0]+","+ECWVectorLayer.dpPoint[1]+"|"+wc1[0]+","+wc1[1]);
                break;
                */
                case NCSVectorLayer.POLYLINE: case NCSVectorLayer.POLYGON:
                  ECWVectorLayer.objectPointsX[ECWVectorLayer.objectNumPoints] = wc1[0];
                  ECWVectorLayer.objectPointsY[ECWVectorLayer.objectNumPoints] = wc1[1];                                                                         //filledpolygon1  
                  var vecObject = "linewidth=" + ECWVectorLayer.lineThickness + ";color=" + ECWVectorLayer.penColor + ";fillcolor=" + ECWVectorLayer.fillColor + ";"+objectTag+"=";
                  for (i=0; i<ECWVectorLayer.objectPointsX.length; i++){
                    vecObject += ECWVectorLayer.objectPointsX[i] + "," + ECWVectorLayer.objectPointsY[i] + (i==ECWVectorLayer.objectPointsX.length? "" : "|");
                  }
                  vecObject += ";";
                  ECWVectorLayer.ncsView.SetLayerParameter(ECWVectorLayer.layerName,vecObject);
                break
              }
              ECWVectorLayer.sLaenge=Math.sqrt(Math.pow(wc1[0]-ECWVectorLayer.dpPoint[0],2)+Math.pow(wc1[1]-ECWVectorLayer.dpPoint[1],2));
             ECWVectorLayer.status.showMeasure(ECWVectorLayer.sLaenge,ECWVectorLayer.gLaenge+ECWVectorLayer.sLaenge);
            }
            else {
              ECWVectorLayer.status.showMapCoords(wc1);
            }
          }
        }
      }
      else {
        if (ECWVectorLayer.objectNumPoints>0 && ECWVectorLayer.dpPoint && !ECWVectorLayer.drawEnd) {
          if (ECWVectorLayer.winY<10) ECWVectorLayer.winY-=10*(10);        
          if (ECWVectorLayer.winX<0 || ECWVectorLayer.winX>w) {
            var difX=(ECWVectorLayer.winX<0)?ECWVectorLayer.winX:(ECWVectorLayer.winX-w);
          }
          else var difX=0;
          if (ECWVectorLayer.winY<0 || ECWVectorLayer.winY>h) {
            var difY=(ECWVectorLayer.winY<0)?ECWVectorLayer.winY:(ECWVectorLayer.winY-h);
          }
          else var difY=0;
          moveMap(ECWVectorLayer.ncsView,difX,difY);
        }      
      }
    }
    this.wheel=function(event){
      var delta = 0;
      if (!event) event = window.event;
      if (event.wheelDelta) {
        delta = event.wheelDelta/120;
        //if (window.opera) delta = -delta;
      }
      else if (event.detail) {
        delta = -event.detail/3;
      }
      var w=ECWVectorLayer.ncsView.GetViewWidth();
      var h=ECWVectorLayer.ncsView.GetViewHeight();
      if (delta && ECWVectorLayer.winX>0 && ECWVectorLayer.winX<w && ECWVectorLayer.winY>0 && ECWVectorLayer.winY<h) ECWVectorLayer.handle(delta,ECWVectorLayer.winX,ECWVectorLayer.winY,w,h);
      if(event.stopPropagation) {
        event.stopPropagation();
      } 
      else if (event.preventDefault) {
        event.preventDefault();
      } 
    }
    this.mapmousedown=function(e) {
      if (ECWToolbar1.currentUID == "UID_VIEW_PAN") {
        ECWVectorLayer.pan=true;
      }
    }
    
    this.mapmouseup=function(e) {
      ECWVectorLayer.pan=false;
      var msKey=ECWVectorLayer.whichKey(e);
      if (!ECWVectorLayer.drawEnd && msKey==2) {
        var winXY=ECWVectorLayer.getMouseXY(e);
        var wc1=ECWVectorLayer.Pixel2Word(winXY[0],winXY[1]);
        ECWVectorLayer.mouseDown(wc1[0],wc1[1]);
        ECWVectorLayer.mouseUp(wc1[0],wc1[1]);
        if (ECWVectorLayer.currentType==NCSVectorLayer.POLYGON) {
          ECWVectorLayer.mouseUp(wc1[0],wc1[1],true);
        }
      }
    }
    this.mapdoppelclick=function(e){
      if (!ECWVectorLayer.drawEnd) {
        if (ECWVectorLayer.objectNumPoints>0 && ECWVectorLayer.dpPoint) {
          if (ECWVectorLayer.currentType==NCSVectorLayer.POLYLINE) {
            ECWVectorLayer.status.showMeasure("",ECWVectorLayer.gLaenge);
          }
          else {
            var x0=ECWVectorLayer.AreaPointsX[0];
            var y0=ECWVectorLayer.AreaPointsY[0];
            var xn=ECWVectorLayer.AreaPointsX[(ECWVectorLayer.objectNumPoints-1)];
            var yn=ECWVectorLayer.AreaPointsY[(ECWVectorLayer.objectNumPoints-1)];
            if (x0!=xn || y0!=yn) {
              this.sLaenge=Math.sqrt(Math.pow(x0-xn,2)+Math.pow(y0-yn,2));
              ECWVectorLayer.status.showMeasure("",this.gLaenge+this.sLaenge);
            }
          }
        }
      }
      if (this.currentType==NCSVectorLayer.POLYLINE)
        this.clear();
      this.drawEnd=true;
    }
    this.mapclick=function() {
      var w=this.GetViewWidth();
      var h=this.GetViewHeight();
    }
    this.setEvents=function(){
      var aObj=window.document;
      if (isIE && typeOf(this.ncsView)!="NCSJSView")
        var aObj2=this.ncsView;
      else var aObj2=getObject("mapview");
      if (aObj.addEventListener) {
        aObj2.addEventListener('DOMMouseScroll', this.wheel, true);
        //document.addEventListener('DOMMouseScroll', this.wheel, true);
        aObj.addEventListener('dblclick',this.mapdoppelclick,false);        
        aObj.addEventListener('mousemouse',this.mapmousemove,false);
        aObj.addEventListener('mousedown',this.mapmousedown,false);        
        aObj.addEventListener('mouseup',this.mapmouseup,false);
      }
      aObj2.onmousewheel = this.wheel;
      aObj.onmousemove  = this.mapmousemove;
      aObj.onmousedown=this.mapmousedown;
      aObj.onmouseup  = this.mapmouseup;
      aObj.ondblclick=this.mapdoppelclick;
      ECWVectorLayer=this;
    }
    this.setEvents();
}
NCSVectorLayer.POLYLINE      = 0;
NCSVectorLayer.POLYGON       = 1;
NCSVectorLayer.ELLIPSE       = 2;
NCSVectorLayer.CIRCLE        = 3;
NCSVectorLayer.FILLEDCIRCLE  = 4;
NCSVectorLayer.FILLEDPOLYGON = 5;
NCSVectorLayer.FILLEDELLIPSE = 6;
NCSVectorLayer.RECTANGLE     = 7;
NCSVectorLayer.FILLEDRECTANGLE = 8;
NCSVectorLayer.prototype.setView = function(value)
{
	this.ncsView = value;
}
NCSVectorLayer.prototype.setTransparency = function(value)
{
    this.ncsView.SetLayerTransparency(this.layerName, this.fillColor, value);
}
NCSVectorLayer.prototype.redraw = function()
{
    this.ncsView.SetLayerParameter(this.layerName, "fillcolor=" + this.fillColor + ";color=" + this.penColor + ";linewidth=" + this.lineThickness + ";");
}
NCSVectorLayer.prototype.setMode = function(value)
{
	if (value == "polyline")
    {
    	this.currentType = NCSVectorLayer.POLYLINE;
    }
	else if (value == "polygon")
	{
		this.currentType = NCSVectorLayer.POLYGON;
    }
    else if (value == "elipse")
    {
    	this.currentType = NCSVectorLayer.ELLIPSE;
    }
    else if (value == "circle")
    {
    	this.currentType = NCSVectorLayer.CIRCLE;
    }
    else if (value == "filledcircle")
    {
    	this.currentType = NCSVectorLayer.FILLEDCIRCLE;
    }
    else if (value == "filledpolygon")
    {
    	this.currentType = NCSVectorLayer.FILLEDPOLYGON;
    }
    else if (value == "filledelipse")
	{
		this.currentType = NCSVectorLayer.FILLEDELLIPSE;
    }
    else if (value == "rectangle")
	{
		this.currentType = NCSVectorLayer.RECTANGLE;
    }
    else if (value == "filledrectangle")
	{
		this.currentType = NCSVectorLayer.FILLEDRECTANGLE;
    }
    else
    {
    	this.currentType = NCSVectorLayer.POLYLINE;
    }
}
NCSVectorLayer.prototype.mouseDown = function(worldx,worldy)
{
    if (this.drawEnd) {
      this.clear();
      if (this.captureCoord) this.captureCoord.clear();
    }

    switch(this.currentType)
	{
		case 0:
		case 1:
		case 5:
		    if (this.objectNumPoints == 0)
		    {
                this.objectPointsX[this.objectNumPoints] = worldx;
                this.objectPointsY[this.objectNumPoints] = worldy;
                this.objectNumPoints ++;
            }
        break;

		case 2:
		     // havent done ellipse code yet
        break;

		case 3:
		case 4:
		case 7:
		case 8:
        	this.objectNumPoints = 0;
            this.objectPointsX = new Array();
            this.objectPointsY = new Array();
            this.objectPointsX[this.objectNumPoints] = worldx;
            this.objectPointsY[this.objectNumPoints] = worldy;
            this.objectNumPoints ++;
		break;
		case 5:
		     // filled polygon not done yet
		break;
		case 6:
		     // filled ellipse not done yet.
		break;

		default:
		break;
    }
}
NCSVectorLayer.prototype.mouseUp = function(worldx,worldy,isIntern)
{
  if (this.drawEnd) {
    if (this.cntEnd>0) {
      this.cntEnd=0;
      return false;
    }
    else this.cntEnd++;
  }
  var roundX=roundValue(worldx,nk);
  var roundY=roundValue(worldy,nk);
  if (this.captureCoord) {
    if (!isIntern)
      this.captureCoord.AddCoord(roundX,roundY);
    else this.captureCoord.AddCoord(this.AreaPointsX[0],this.AreaPointsY[0]);
  }
  this.AreaPointsX[this.objectNumPoints-1] = roundX;
  this.AreaPointsY[this.objectNumPoints-1] = roundY;
  this.polyExtent.AddCoord(roundX,roundY);
  if (this.currentType == NCSVectorLayer.POLYGON) {
    this.status.showArea(this.getAbsArea());
  }
  if (this.objectNumPoints > 1)
    this.gLaenge+=this.sLaenge;
  //doppelclick für IE  
  if (this.dpPoint) {
    if ((this.dpPoint[0]==worldx && this.dpPoint[1]==worldy) || this.msKey==2) {
      this.mapdoppelclick();
      return false;
    }
    else {
      this.dpPoint[0]=worldx;
      this.dpPoint[1]=worldy;
    }
  }
  else {
    this.dpPoint=new Array(worldx,worldy);
  }
  var vecObject = "";
  
    switch(this.currentType)
	{
		case 0:
		case 1:
		case 5:
		    if (this.currentType == 0) objectTag = "polyline1";
		    if (this.currentType == 1) objectTag = "polygon1";
		    if (this.currentType == 5) objectTag = "filledpolygon1";
		    this.objectPointsX[this.objectNumPoints] = worldx;
                    this.objectPointsY[this.objectNumPoints] = worldy;
                    this.objectNumPoints++;

                    this.objectPointsX[this.objectNumPoints] = worldx;
                    this.objectPointsY[this.objectNumPoints] = worldy;
                    vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";" + objectTag + "=";
                    for (i=0; i<this.objectPointsX.length; i++)
                    {
                      vecObject += this.objectPointsX[i] + "," + this.objectPointsY[i] + (i==this.objectPointsX.length? "" : "|");
                    }
                    vecObject += ";";
		break;

		case 2:
		break;
		case 3:
		    this.objectPointsX[1] = worldx;
            this.objectPointsY[1] = worldy;
		break;
		case 4:
		    this.objectPointsX[1] = worldx;
            this.objectPointsY[1] = worldy;
		break;
		case 5:
		    this.objectPointsX[this.objectNumPoints] = worldx;
            this.objectPointsY[this.objectNumPoints] = worldy;
            this.objectNumPoints++;
		break;
		case 6:
		break;
		case 7:
		break;
		case 8:
		break;
    }
    this.ncsView.SetLayerParameter(this.layerName, vecObject);
}
NCSVectorLayer.prototype.mouseMove = function(worldx,worldy)
{
/*
        var wc1=new Array(worldx,worldy)
        this.status.showMapCoords(wc1);
        */       
	var vecObject = "";

	switch(this.currentType)
	{
		case 0:
		default:
		break;

        case 1:
            /*
		    this.objectPointsX[this.objectNumPoints] = worldx;
            this.objectPointsY[this.objectNumPoints] = worldy;
            vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";"+objectTag+"=";
            for (i=0; i<this.objectPointsX.length; i++)
            {
                vecObject += this.objectPointsX[i] + "," + this.objectPointsY[i] + (i==this.objectPointsX.length? "" : "|");
            }
            vecObject += ";";
            */
		break;

        case 2:
		break;

        case 3:
		    this.objectPointsX[1] = worldx;
            this.objectPointsY[1] = worldy;
            vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";"+objectTag+"="
	               + this.objectPointsX[0] + "," + this.objectPointsY[0] + "|"
                   + this.objectPointsX[1] + "," + this.objectPointsY[1] + ";";
        break;

        case 4:
		    this.objectPointsX[1] = worldx;
            this.objectPointsY[1] = worldy;
            vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";"+objectTag+"="
	               + this.objectPointsX[0] + "," + this.objectPointsY[0] + "|"
                   + this.objectPointsX[1] + "," + this.objectPointsY[1] + ";";
		break;

        case 5:
		    this.objectPointsX[this.objectNumPoints] = worldx;
            this.objectPointsY[this.objectNumPoints] = worldy;
            vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";"+objectTag+"=";
            for (i=0; i<this.objectPointsX.length; i++)
            {
                vecObject += this.objectPointsX[i] + "," + this.objectPointsY[i] + (i==this.objectPointsX.length? "" : "|");
            }
            vecObject += ";";
		break;

		case 6:
		break;

		case 7:
		    this.objectPointsX[1] = worldx;
            this.objectPointsY[1] = worldy;
            vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";"+objectTag+"="
	               + this.objectPointsX[0] + "," + this.objectPointsY[0] + "|"
                   + this.objectPointsX[1] + "," + this.objectPointsY[0] + "|"
                   + this.objectPointsX[1] + "," + this.objectPointsY[1] + "|"
                   + this.objectPointsX[0] + "," + this.objectPointsY[1]  + ";";
		break;
		case 8:
		    this.objectPointsX[1] = worldx;
            this.objectPointsY[1] = worldy;
            vecObject = "linewidth=" + this.lineThickness + ";color=" + this.penColor + ";fillcolor=" + this.fillColor + ";"+objectTag+"="
	               + this.objectPointsX[0] + "," + this.objectPointsY[0] + "|"
                   + this.objectPointsX[1] + "," + this.objectPointsY[0] + "|"
                   + this.objectPointsX[1] + "," + this.objectPointsY[1] + "|"
                   + this.objectPointsX[0] + "," + this.objectPointsY[1]  + ";";
		break;
    }
    if (this.currentType!=NCSVectorLayer.POLYGON)
      this.ncsView.SetLayerParameter(this.layerName, vecObject);
}
NCSVectorLayer.prototype.clear = function()
{
    this.ncsView.SetLayerParameter(this.layerName, "polyline1=;");
    this.ncsView.SetLayerParameter(this.layerName, "polygon1=;");
    this.ncsView.SetLayerParameter(this.layerName, "filledpolygon1=;");
    this.objectNumPoints = 0;
    this.objectPointsX = new Array();
    this.objectPointsY = new Array();

    this.dpPoint=null;
    this.gLaenge=0;
    this.sLaenge=0;
    this.AreaPointsX = new Array();
    this.AreaPointsY = new Array();
    this.polyExtent=new GeoExtent();
    this.drawEnd=false;
    this.cntEnd=0;    
}
NCSVectorLayer.prototype.save = function()
{
	return "<?xml version='1.0' ?><ECWERROR value='0'>Not Yet Implemented.</ECWERROR>";
}
NCSVectorLayer.prototype.load = function(xml)
{
	alert(xml);
}
NCSVectorLayer.prototype.getArea=function(){
  if (this.objectNumPoints<3) return 0;
  if (this.objectNumPoints>3){
    //A=0.5*[(x1-x2)*(y1+y2)+(x2-x3)*(y2+y3)+...+(xn-x1)*(yn+y1)]
    var summe=0;
    for (var i=0;i<(this.objectNumPoints-1);i++){  //Flï¿½he eines Vielecks
      var x1=this.AreaPointsX[i];
      var y1=this.AreaPointsY[i];
      var x2=this.AreaPointsX[i+1];
      var y2=this.AreaPointsY[i+1];
      var px=(x1-x2);
      var py=(y1+y2);
      summe+=px*py;
    }
    var x0=this.AreaPointsX[0];
    var y0=this.AreaPointsY[0];
    var xn=this.AreaPointsX[(this.objectNumPoints-1)];
    var yn=this.AreaPointsY[(this.objectNumPoints-1)];
    if (x0!=xn || y0!=yn) {
      var px=(xn-x0);
      var py=(yn+y0);
      summe+=px*py;
    }
    //return Math.abs(summe)/2;
    return summe/2;
  }
  else{ //Flache eines Dreieck
    var x1=this.AreaPointsX[0];
    var y1=this.AreaPointsY[0];
    var x2=this.AreaPointsX[1];
    var y2=this.AreaPointsY[1];
    var x3=this.AreaPointsX[2];
    var y3=this.AreaPointsY[2];
    //return Math.abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)) / 2;
    return (x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)) / 2;
  }
}
NCSVectorLayer.prototype.PointsAsString=function(trenner){
  var result="";
  if (this.getArea()<0) {
    for (var i=0; i<this.AreaPointsX.length;i++) {
      result+=(result==""?"":trenner)+this.AreaPointsX[i]+trenner+this.AreaPointsY[i];
    }
  }
  else {
    for (var i=(this.AreaPointsX.length-1);i>=0;i--) {
      result+=(result==""?"":trenner)+this.AreaPointsX[i]+trenner+this.AreaPointsY[i];
    }  
  }
  return result;
}
NCSVectorLayer.prototype.getAbsArea=function(){
  return Math.abs(this.getArea());
}
NCSVectorLayer.prototype.getExtent=function(){
  if (this.polyExtent && this.polyExtent.xmax!=0 && this.polyExtent.xmin!=0 && this.polyExtent.ymax!=0 && this.polyExtent.ymin!=0) {
    return this.polyExtent.xmin+";"+this.polyExtent.ymin+";"+this.polyExtent.xmax+";"+this.polyExtent.ymax;
  }
  else return "";
}
NCSVectorLayer.prototype.getPixelExtent=function(viewWidth,viewHeight,xmin,ymin,xmax,ymax){
  if (this.polyExtent && this.polyExtent.xmax!=0 && this.polyExtent.xmin!=0 && this.polyExtent.ymax!=0 && this.polyExtent.ymin!=0) {
    var pxP1=this.WordCoord2Pixel(this.polyExtent.xmin,this.polyExtent.ymin,viewWidth,viewHeight,xmin,ymin,xmax,ymax); 
    var pxP2=this.WordCoord2Pixel(this.polyExtent.xmax,this.polyExtent.ymax,viewWidth,viewHeight,xmin,ymin,xmax,ymax);
    return pxP1[0]+";"+pxP1[1]+";"+pxP2[0]+";"+pxP2[1];
  }
  else return "";
}
NCSVectorLayer.prototype.getPolyExtentArea=function(){
  if (this.polyExtent && this.polyExtent.xmax!=0 && this.polyExtent.xmin!=0 && this.polyExtent.ymax!=0 && this.polyExtent.ymin!=0) {
    var b=this.polyExtent.xmax-this.polyExtent.xmin;
    var h=this.polyExtent.ymax-this.polyExtent.ymin;
    return b*h;
  }
  else return 0;
}
NCSVectorLayer.prototype.Pixel2WordCoord=function(pX,pY,viewWidth,viewHeight,xmin,ymin,xmax,ymax){  
  var theDifX=xmax-xmin;
  var theDifY=ymax-ymin;
  var Xpercent=pX/viewWidth;
  var Ypercent=(viewHeight-pY)/viewHeight;
  var theX=xmin+(theDifX*Xpercent);
  var theY=ymin+(theDifY*Ypercent);
  return new Array(theX,theY);
}
NCSVectorLayer.prototype.Pixel2Word=function(pX,pY){
  var w=this.ncsView.GetViewWidth();
  var h=this.ncsView.GetViewHeight();
  var xmin = this.ncsView.GetTopLeftWorldCoordinateX();
  var ymin = this.ncsView.GetBottomRightWorldCoordinateY();
  var xmax = this.ncsView.GetBottomRightWorldCoordinateX();
  var ymax = this.ncsView.GetTopLeftWorldCoordinateY();
  return this.Pixel2WordCoord(pX,pY,w,h,xmin,ymin,xmax,ymax);
}

NCSVectorLayer.prototype.WordCoord2Pixel=function(wX,wY,viewWidth,viewHeight,xmin,ymin,xmax,ymax){
  var theDifX=xmax-xmin;
  var theDifY=ymax-ymin;
  var Xpercent=(wX-xmin)/theDifX;
  var Ypercent=(wY-ymin)/theDifY;
  wX=Xpercent*viewWidth;
  wY=viewHeight-(Ypercent*viewHeight);
  return new Array(Math.round(wX),Math.round(wY));
}
NCSVectorLayer.prototype.Word2Pixel=function(wX,wY){
  var w=this.ncsView.GetViewWidth();
  var h=this.ncsView.GetViewHeight();
  var xmin = this.ncsView.GetTopLeftWorldCoordinateX();
  var ymin = this.ncsView.GetBottomRightWorldCoordinateY();
  var xmax = this.ncsView.GetBottomRightWorldCoordinateX();
  var ymax = this.ncsView.GetTopLeftWorldCoordinateY();
  return this.WordCoord2Pixel(wX,wY,w,h,xmin,ymin,xmax,ymax);
}
NCSVectorLayer.prototype.diffXY=function(pX,pY,theX,theY,theDifX,theDifY,viewWidth,viewHeight) {
  var Xpercent=pX/viewWidth;
  var Ypercent=(viewHeight-pY)/viewHeight;
  var xmin=theX-theDifX*Xpercent;
  var ymin=theY-theDifY*Ypercent;
  return xmin+","+ymin+","+(xmin+theDifX)+","+(ymin+theDifY);
}
NCSVectorLayer.prototype.setCaptureCoord=function(cpCoord) {
  this.captureCoord=cpCoord;
}
function ECWVectorMouseDown(buttonMask, dScreenX, dScreenY , worldx, worldy) {  
  if (ECWToolbar1.currentUID == "UID_ANNOT_POLYGON" || ECWToolbar1.currentUID == "UID_ANNOT_POLYLINE")
  {
    //var element = parent.toolsFrame.document.getElementById("fillColor");
    var filled = false;//(element.options[element.selectedIndex].value != "none") ? true : false;
    ECWVectorLayer.setMode((filled ? "filled" : "") + (ECWToolbar1.currentUID == "UID_ANNOT_POLYGON"?"polygon":"polyline"));
    ECWVectorLayer.mouseDown(worldx, worldy);
  }
}
function ECWVectorMouseUp(buttonMask, dScreenX, dScreenY , worldx, worldy)
{
	if (ECWToolbar1.currentUID == "UID_ANNOT_POLYGON" || ECWToolbar1.currentUID == "UID_ANNOT_POLYLINE")
	{
	   ECWVectorLayer.mouseUp(worldx, worldy);
  }
}
function ECWVectorMouseMove(buttonMask, dScreenX, dScreenY , worldx, worldy)
{  
    if (ECWToolbar1.currentUID == "UID_ANNOT_POLYGON" || ECWToolbar1.currentUID == "UID_ANNOT_POLYLINE")
	{
	   ECWVectorLayer.mouseMove(worldx, worldy);
    }
}
function ECWVectorSetTransparency(value)
{
	     ECWVectorLayer.setTransparency(1.0-value);
	     ECWVectorLayer.redraw();
}
function ECWVectorSetLineWidth(value)
{
    ECWVectorLayer.lineThickness = value;
    ECWVectorLayer.redraw();
}
function ECWVectorSetPenColor(value)
{
    ECWVectorLayer.penColor = value;
    ECWVectorLayer.redraw();
}
function ECWVectorSetFillColor(value)
{
    ECWVectorLayer.fillColor = value;
    ECWVectorLayer.redraw();
}
