var BoxColor = "#000000";	// color of box
var BoxSize = 1;	// box line width;


// Global vars
var iWidth = 400;	// image width (default)
var iHeight = 300;	// image height (default)
var hspc = 0;		// horizontal image offset
var vspc = 0;		// vertical image offset
var ovBoxSize = 1;	// Zoombox line width;
var zbMapImage = "MapImage"; // default
var MapTopUnits = 0;
var MapBottomUnits = 0;
var MapRightUnits = 0;
var MapLeftUnits = 0;
var Coordinate_X_View = 0;
var Coordinate_Y_View = 0;
var mouseXview;
var mouseYview;
var XArray = new Array();
var YArray = new Array();
var full_len = 0;
var dx, dy, dx_last_segment, dy_last_segment, len, last_len;
var PixelToMapX, PixelToMapY, PixelToMap;
var button_state;  // pokazivaet kakaia knopka bila najata (zoomin, TRACKPOLYLINE, ili drugaia)
var stopDraw = false;
var DataWin;

var MODE_BOX = 1;
var currMode = MODE_BOX;

var zooming = false;

var mouseX=0;
var mouseY=0;
var x1=0;
var y1=0;
var x2=0;
var y2=0;
var zleft=0;
var zright=0;
var ztop=0;
var zbottom=0;

// Global vars for browser type and version
var isNav = (navigator.appName.indexOf("Netscape")>=0);
var isNav4 = false;
var isIE4 = false;
var is5up = false;

if (isNav) {
	if (parseFloat(navigator.appVersion)<5) {
		isNav4=true;
	} else {
		is5up = true;
	}
} else {
	isIE4=true;
	if (navigator.appVersion.indexOf("MSIE")>0) {
		isIE4 = false;
		is5up = true;
	}
}

function initZoomBox(iMapWidth, iMapHeight, MapImageName)
{
	iWidth = iMapWidth;
	iHeight = iMapHeight;
	zbMapImage = MapImageName;

	// zoom/selection box
	content = '<img name="zoomImageTop" src="pixel.gif" width=1 height=1>';
	createLayer("zoomBoxTop",0,0,iWidth,iHeight, 1, false,content);
	content = '<img name="zoomImageLeft" src="pixel.gif" width=1 height=1>';
	createLayer("zoomBoxLeft",0,0,iWidth,iHeight, 1, false,content);
	content = '<img name="zoomImageRight" src="pixel.gif" width=1 height=1>';
	createLayer("zoomBoxRight",0,0,iWidth,iHeight, 1, false,content);
	content = '<img name="zoomImageBottom" src="pixel.gif" width=1 height=1>';
	createLayer("zoomBoxBottom",0,0,iWidth,iHeight, 1, false,content);
	//createLayer("myCanvas", 0,0,iWidth,iHeight, 302, true, content);
	//createLayer("myCanvas1", 0,0,iWidth,iHeight, 301, true, content);

	// set zoom box color
	setLayerBackgroundColor("zoomBoxTop", BoxColor);
	setLayerBackgroundColor("zoomBoxLeft", BoxColor);
	setLayerBackgroundColor("zoomBoxRight", BoxColor);
	setLayerBackgroundColor("zoomBoxBottom", BoxColor);
	
	MapTopUnits = parseFloat(document.MapForm.Top.value);        
	MapBottomUnits = parseFloat(document.MapForm.Bottom.value);
	MapLeftUnits = parseFloat(document.MapForm.Left.value);
	MapRightUnits = parseFloat(document.MapForm.Right.value);
	PixelToMapY = Math.abs(MapBottomUnits-MapTopUnits)/iHeight;
	PixelToMapX = Math.abs(MapRightUnits-MapLeftUnits)/iWidth;
	PixelToMap = (PixelToMapX+PixelToMapY)/2;
	if (isNav) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
	}

	document.onmousedown = mapTool;
	document.onmouseup = chkMouseUp;
	document.onmousemove = getMouse;

	updateZoomBoxCursor();
}

function setZoomBoxMode(mode)
{
	if ( mode == MODE_BOX)
	{
		currMode = mode;
		updateZoomBoxCursor();
	}
}


/****************************************************************************************
DHTML layer functions
****************************************************************************************/

// Create a DHTML layer
function createLayer(name, inleft, intop, width, height, zindex, visible, content) {
	  var layer;
	  if (isNav4) {
	    document.writeln('<layer name="' + name + '" left=' + inleft + ' top=' + intop + ' width=' + width + ' height=' + height +	' visibility=' + (visible ? '"show"' : '"hide"') +  '>');
	    document.writeln(content);
	    document.writeln('</layer>');
	  } else {
	    document.writeln('<div id="' + name + '" style="position:absolute; overflow:hidden; left:' + inleft + 'px; top:' + intop + 'px; width:' + width + 'px; height:' + height + 'px;' + '; z-index:'+zindex+'; visibility:' + (visible ? 'visible;' : 'hidden;'));
	    document.writeln(content);
	    document.writeln('</div>');
	  }
}

// get the layer object called "name"
function getLayer(name) {
	  if (isNav4)
	    return(document.layers[name]);
	  else if (isIE4) {
	    layer = eval('document.all.' + name + '.style');
	    return(layer);
	  } else if (is5up) {
		var theObj = document.getElementById(name);
		return theObj.style
	  }
	  else
	    return(null);
}

function isVisible(name) {
	  var layer = getLayer(name);
	  if (layer != null) {
		  if (isNav && layer.visibility == "show")
		    return(true);
		  if (isIE && layer.visibility == "visible")
		    return(true);
	  }
	  return(false);
}

// move layer to x,y
function moveLayer(name, x, y) {
	var layer = getLayer(name);
	if (layer != null) {
		if (isNav4)
		layer.moveTo(x, y);
		else {
		layer.left = x + "px";
			layer.top  = y + "px";
		}
	}
}

// set layer background color
function setLayerBackgroundColor(name, color) {
	var layer = getLayer(name);
    if (layer != null) {
		if (isNav4)
		layer.bgColor = color;
		else
		layer.backgroundColor = color;
	}
}

// toggle layer to invisible
function hideLayer(name) {
	var layer = getLayer(name);
	if (layer != null) {
		if (isNav4)
		layer.visibility = "hide";
		else
			 layer.visibility = "hidden";
	}
}

// toggle layer to visible
function showLayer(name) {
	var layer = getLayer(name);
	if (layer != null) {
		if (isNav4)
		layer.visibility = "show";
		else
		 layer.visibility = "visible";
	}
}

// clip layer display to clipleft, cliptip, clipright, clipbottom
	// Not working with Mozilla Milestone 12 (Nav5)
function clipLayer(name, clipleft, cliptop, clipright, clipbottom) {
	  var layer = getLayer(name);
	  if (layer == null) return;
	  if (isNav4) {
		    layer.clip.left   = clipleft;
		    layer.clip.top    = cliptop;
		    layer.clip.right  = clipright;
		    layer.clip.bottom = clipbottom;
	  }
	  else {
		    layer.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
	  }
}

function boxIt(theLeft,theTop,theRight,theBottom) {
		clipLayer("zoomBoxTop",theLeft,theTop,theRight,theTop+ovBoxSize);
		clipLayer("zoomBoxLeft",theLeft,theTop,theLeft+ovBoxSize,theBottom);
		clipLayer("zoomBoxRight",theRight-ovBoxSize,theTop,theRight,theBottom);
		clipLayer("zoomBoxBottom",theLeft,theBottom-ovBoxSize,theRight,theBottom);
		showLayer("zoomBoxTop");
		showLayer("zoomBoxLeft");
		showLayer("zoomBoxRight");
		showLayer("zoomBoxBottom");
}


/****************************************************************************************
Navigation functions - used to resize zoom box
****************************************************************************************/

// get cursor location
function getImageXY(e) {
	if (isNav) {
		mouseX=e.pageX;
		mouseY=e.pageY;
	} else {
		mouseX=event.clientX + document.body.scrollLeft-2;		
		mouseY=event.clientY + document.body.scrollTop-2;
	}
	// subtract offsets from page left and top
	mouseX = mouseX-hspc;
	mouseY = mouseY-vspc;
    //status = event.clientX+" "+event.clientY;
}

// start zoom in
function startZoomBox(e) {
	getImageXY(e);
	// keep it within the MapImage
	if ((mouseX<iWidth) && (mouseY<iHeight)) {
		if (zooming) {
			stopZoomBox(e);
		} else {
			x1=mouseX;
			y1=mouseY
			x2=x1+1;
			y2=y1+1;
			zleft=x1;
			ztop=y1;
			zbottom=y1;
			zright=x1
        //status="x1="+x1+"  y1="+y1+"  x2="+x2+"  y2="+y2;
			boxIt(x1,y1,x2,y2);
			zooming=true;
		}
	}
	return false;

}

// stop zoom box display
function stopZoomBox(e) {
	zooming=false;

	if ( (zright <zleft+2) && (ztop < zbottom+2) )
	{
		zright = zleft;
		zbottom = ztop;
	}

	hideLayer("zoomBoxTop");
	hideLayer("zoomBoxLeft");
	hideLayer("zoomBoxRight");
	hideLayer("zoomBoxBottom");
	window.scrollTo(0,0);

	return true;
}
// View cursor coordinates
//////////////////////////////////////////////////////
// get the coords at mouse position
function getMouse(e) {
    //Moi dobavlenni kod
   
    /*
    var MapImg2 = document.images[zbMapImage];
	if( document.all)
	{
	var	vspc2 = 0; //custom values
	var	hspc2 = 0;
		var element2 = MapImg2;

		do
		{
			hspc2 += element2.offsetLeft;
			vspc2 += element2.offsetTop;

		}
		while( (element2 = element2.offsetParent))
	}
	else
	{
		hspc2 = MapImg2.x;
		vspc2 = MapImg2.y;
	}    
	
    mouseXview = event.x - hspc2 - 2 + document.body.scrollLeft; mouseYview = event.y - vspc2 - 2 + document.body.scrollTop;
    */
    getImageXY(e);
    mouseXview = mouseX;     //mouse coordinats on image
    mouseYview = mouseY;
    if ((mouseXview < 0 || mouseYview < 0)||(mouseXview >= iWidth || mouseYview >= iHeight))
    {
    status="";
    return false;
    }
    else
    {
      if (MapTopUnits > MapBottomUnits)
      {
        Coordinate_Y_View = MapTopUnits-(MapTopUnits-MapBottomUnits)/iHeight*mouseYview; 
      }
      else
      {
        Coordinate_Y_View = MapTopUnits+(MapBottomUnits-MapTopUnits)/iHeight*mouseYview;
      }
      if (MapRightUnits > MapLeftUnits)
      {  
        Coordinate_X_View = MapLeftUnits+(MapRightUnits-MapLeftUnits)/iWidth*mouseXview;
      }
      else
      {
        Coordinate_X_View = MapRightUnits+(MapLeftUnits-MapRightUnits)/iWidth*mouseXview;
      }
      status="x= "+Math.round(Coordinate_X_View)+", y= "+Math.round(Coordinate_Y_View)+",  Total:"+document.MapForm.TxbFullLen.value+",  Segment:"+document.MapForm.Txblen.value+" m"+",  Square:"+document.MapForm.Square_value.value+" ha,  Selected:"+document.MapForm.SelectedObject.value;
      //status="MapTopUnits= "+MapTopUnits+"MapLeftUnits="+MapLeftUnits+"MapBottomUnits= "+MapBottomUnits+"MapRightUnits= "+MapRightUnits;
         //DataWin.document.forms[0].TextBox1.value = Math.round(len*PixelToMap)+" m";
    }    
   document.onmousemove = null;
   // getImageXY(e);                   
    //////////////////////////    
    if (XArray.length >= 1)   
    {
      
    if ((document.MapForm.Command.value.toUpperCase() == "TRACKPOLYLINE")||(document.MapForm.Command.value.toUpperCase() == "TRACKPOLYGON"))
    {
        if ((mouseXview < 0 || mouseYview < 0)||(mouseXview >= iWidth || mouseYview >= iHeight))
            {
            }
        else
         {
            jg_templine.clear();                                                        
            document.onmousemove = null;                                        
            if (document.MapForm.Command.value.toUpperCase() == "TRACKPOLYLINE")
             {     
                if (!stopDraw)
                {    
                    DRAWtempline(XArray[XArray.length-1], YArray[YArray.length-1], mouseX, mouseY);    
                    button_state = "TRACKPOLYLINE";
                    ///
                        dx = Math.abs(mouseX - XArray[XArray.length-1]);
                        dy = Math.abs(mouseY - YArray[YArray.length-1]);
                        len = Math.sqrt(dx*dx+dy*dy);
                        document.MapForm.Txblen.value = Math.round(len*PixelToMap);
                }   
                    ///
                   // document.onmousemove = getMouse;
             }
             else
             {
             if (document.MapForm.Command.value.toUpperCase() == "TRACKPOLYGON")
             {
                 //document.onmousemove = null;  
                 if (!stopDraw)
                 { 
                    DRAWtempline(XArray[XArray.length-1], YArray[YArray.length-1], mouseX, mouseY);
                    if (XArray.length > 1)
                    DRAWtempline(XArray[0], YArray[0], mouseX, mouseY); 
                   //   button_state = "TrackPolygon";
                 }else
                 {  
                    DRAW(XArray[XArray.length-1], YArray[YArray.length-1], XArray[0], YArray[0]);
                    DRAWellipse(XArray[XArray.length-1]-1, YArray[YArray.length-1]-1, 4, 4);
                    DRAWellipse(XArray[0], YArray[0], 4, 4); 
                 }  
                   // document.onmousemove = getMouse;
             }  
             }	
             document.onmousemove = getMouse;                
	     }	     
	 }else  
	 {
	 if (button_state == "TRACKPOLYGON")  
	            {
	                jg_templine.clear();
	                DRAW(XArray[XArray.length-1], YArray[YArray.length-1], XArray[0], YArray[0]);
	                button_state == "";
	            }else  if (button_state == "TRACKPOLYLINE")
	            {
	                jg_templine.clear();
	                document.MapForm.Txblen.value = "0";
	                button_state == "";
	            }
	     }	            
	}
	/////////////////////////////////////////////
	if (mouseX>iWidth)
		mouseX = iWidth - 1;
	if (mouseY>iHeight)
		mouseY = iHeight - 1;
	if (mouseX<=0)
		mouseX=1;
	if (mouseY<=0)
		mouseY=1;
		
	if (zooming) {
		x2=mouseX;
		y2=mouseY;
	 	setClip();	
    }
    document.onmousemove = getMouse;
	return false;
}    

// clip zoom box layer to mouse coords
function setClip() {
	var tempX=x1;
	var tempY=y1;
	if (x1>x2) {
		zright=x1;
		zleft=x2;
	} else {
		zleft=x1;
		zright=x2;
	}
	if (y1>y2) {
		zbottom=y1;
		ztop=y2;
	} else {
		ztop=y1;
		zbottom=y2;
	}

	if ((x1 != x2) && (y1 != y2)) {
		boxIt(zleft,ztop,zright,zbottom);
	}
}

/****************************************************************************************
Click/Mouse functions - used to catch mouse button events
****************************************************************************************/

// check for mouseup
function chkMouseUp(e) {

	if ((currMode == MODE_BOX) && (zooming)) {
		stopZoomBox(e);
if (zleft == zright && ztop == zbottom)
			onZoomXY(zleft, ztop);
		else
		   	onZoomBox(zleft, ztop, zright, zbottom);
	}
	
	return false;
}

// perform appropriate action with mapTool
function mapTool (e) {

	// check mouse left button
	var button;
	if (document.layers) { button = e.which; }
	else 
	{	
		if (!isNav)
			button = event.button;
		else
			button = (e.button == 0 ? 1 : 0);			
	}
  	// adjust left-top
	onResize();

	getImageXY(e);
	if((document.MapForm.Command.value.toUpperCase() != "TRACKPOLYLINE")&&(document.MapForm.Command.value.toUpperCase() != "TRACKPOLYGON")&&(document.MapForm.Command.value.toUpperCase() != "POINT"))
	{
	 if ( (currMode == MODE_BOX) && (!zooming) && (mouseX>=0) && (mouseX<iWidth) && (mouseY>=0) && (mouseY<iHeight))
		    {
		        startZoomBox(e);
	            return false;
	        }
	 else if (zooming) 
	    {
		    getMouse(e);
		    stopZoomBox(e);
		    return false;
	    }
    }
    else
    {   	 
        //alert(XArray.length+"Length");
        if ((mouseXview < 0 || mouseYview < 0)||(mouseXview >= iWidth || mouseYview >= iHeight))
        {
        }
        else
        {
        if (!stopDraw)
        {
            XArray[XArray.length] = mouseX;
            YArray[YArray.length] = mouseY;
              
        if (XArray.length > 1) 
        {
            if (document.MapForm.Command.value.toUpperCase() == "POINT")
            {
                DRAWellipse(XArray[XArray.length-1]-1, YArray[YArray.length-1]-1, 4, 4);
            }else{
            DRAW(XArray[XArray.length-2], YArray[YArray.length-2], XArray[XArray.length-1], YArray[YArray.length-1]);
            DRAWellipse(XArray[XArray.length-2]-1, YArray[YArray.length-2]-1, 4, 4); //
            DRAWellipse(XArray[XArray.length-1]-1, YArray[YArray.length-1]-1, 4, 4); //
             dx = Math.abs(XArray[XArray.length-1]-XArray[XArray.length-2]);
             dy = Math.abs(YArray[YArray.length-1]-YArray[YArray.length-2]);
             last_len = Math.sqrt(dx * dx + dy * dy);
             full_len = full_len+last_len; 
             if (document.MapForm.Command.value.toUpperCase() == "TRACKPOLYLINE")
             {            
                document.MapForm.TxbFullLen.value = Math.round(full_len * PixelToMap)+" m";
             }else if (document.MapForm.Command.value.toUpperCase() == "TRACKPOLYGON")
             {
                dx_last_segment = Math.abs(XArray[XArray.length-1]-XArray[0]);
                dy_last_segment = Math.abs(YArray[YArray.length-1]-YArray[0]);
                document.MapForm.TxbFullLen.value = Math.round((full_len + Math.sqrt(dx_last_segment * dx_last_segment + dy_last_segment * dy_last_segment)) * PixelToMap) + " m";
             }
            }
        }
        else 
        DRAWellipse(mouseX-1, mouseY-1, 4, 4);
        //alert(XArray+" XArray"+YArray+" YArray");
        //DRAWPolyline(XArray, YArray);
        }
       }
	}
	return true;
}


function onResize()
{
	var MapImg = document.images[zbMapImage];
	if (MapImg == null) return;

	if( document.all)
	{
		vspc = 0; //custom values
		hspc = 0;
		var element = MapImg;

		do
		{
			hspc += element.offsetLeft;
			vspc += element.offsetTop;

		}
		while( (element = element.offsetParent))
	}
	else
	{
		hspc = MapImg.x;
		vspc = MapImg.y;
	}

	moveLayer( "zoomBoxTop", hspc, vspc);
	moveLayer( "zoomBoxLeft", hspc, vspc);
	moveLayer( "zoomBoxRight", hspc, vspc);
	moveLayer( "zoomBoxBottom", hspc, vspc);
	moveLayer( "myCanvas", hspc, vspc);//Mnou dobavlenni kod
	moveLayer( "myCanvas1", hspc, vspc);//Mnou dobavlenni kod
}

function updateZoomBoxCursor()
{
  if (!is5up) return;

  var MapImg = document.images[zbMapImage];
  if (MapImg == null) return;

  switch (currMode)
  {
    case MODE_BOX:
	MapImg.style.cursor = "crosshair";
	  break;
	default:
		MapImg.style.cursor = "default";
  }
}
///////////////////////////////Area calculate
var al1;
var al2;
var dx;
var dy;
var dxp;
var dyp;
var s_in;
var s_out;
var a;
var i, j;
var AA, BB, CC;
var AA1, BB1, CC1;
//////////////////////////
var max = 100;
var count=0, i, j;
var sd_X = new Array();     //sd[0,n]
var sd_Y = new Array();     //sd[1,n]
var sd_Angle = new Array(); //sd[2,n]
var S;
//////////////////////////

function BeginFunc()
{
    dxp = sd_X[1] - sd_X[count];
    dyp = sd_Y[1] - sd_Y[count];
    a = Math.sqrt(dxp * dxp + dyp * dyp);
    dxp = dxp / a;
    dyp = dyp / a;
    i = 1;
    while (i <= (count-1))
        {
            dx = sd_X[i + 1] - sd_X[i];
            dy = sd_Y[i + 1] - sd_Y[i];
            a = Math.sqrt(dx * dx + dy * dy);
            dx = dx / a;
            dy = dy / a;
            if ((dx == dxp) && (dy == dyp))
                    {
                        count--;
                        for (j = i; j <= count; j++)
                        {
                            sd_X[j] = sd_X[j + 1];
                            sd_Y[j] = sd_Y[j + 1];
                            sd_Angle[j] = sd_Angle[j + 1];
                        }
                    }
                    dxp = dx;
                    dyp = dy;
                    i++;
                }
                dx = sd_X[1] - sd_X[count];
                dy = sd_Y[1] - sd_Y[count];
                al1 = ArcCos(dx / Math.sqrt(dx * dx + dy * dy));
                for (i = 1; i <= count-1 ; i++)
                {
                    dx = sd_X[i + 1] - sd_X[i];
                    dy = sd_Y[i + 1] - sd_Y[i];
                    al2 = ArcCos(dx / Math.sqrt(dx * dx + dy * dy));
                    sd_Angle[i] = Math.PI - al1 + al2;
                    if (sd_Angle[i] > 2 * Math.PI) sd_Angle[i] = sd_Angle[i] - 2 * Math.PI;
                    else if (sd_Angle[i] < 0) sd_Angle[i] = 2 * Math.PI + sd_Angle[i];
                    al1 = al2;
                }
                dx = sd_X[1] - sd_X[count];
                dy = sd_Y[1] - sd_Y[count];
                al2 = ArcCos(dx / Math.sqrt(dx * dx + dy * dy));
                sd_Angle[count] = Math.PI - al1 + al2;
                if (sd_Angle[count] > 2 * Math.PI) sd_Angle[count] = sd_Angle[count] - 2 * Math.PI;
                else if (sd_Angle[count] < 0) sd_Angle[count] = 2 * Math.PI + sd_Angle[count];
                s_in = 0;
                s_out = 0;
                for (i = 1; i <= count; i++)
                {
                    if (sd_Angle[i] < 0) sd_Angle[i] = 2 * Math.PI + sd_Angle[i];
                    s_in = s_in + sd_Angle[i];
                    s_out = s_out + (2 * Math.PI - sd_Angle[i]);
                }
                if (s_out < s_in) for (i = 1; i <= count; i++) sd_Angle[i] = 2 * Math.PI - sd_Angle[i];
}
function ArcCos(a)
{
    var res;
    if (Math.abs(a) < (1.0E-30)) res = Math.PI / 2;
                else res = Math.acos(a);
                if (dx < 0)
                    if (dy >= 0) res = Math.PI + res;
                    else res = -Math.PI - res;
                else if (dy < 0) res = -res;
                return res;
}
function St(x1, y1, x2, y2, x3, y3)
{
    var a,b,c,p;
    a = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    b = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
    c = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
    p=(a+b+c)/2;
    return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
function Mline(x, y)
{
    return AA*x+BB*y+CC;
}
function Sline(x, y)
{
    return AA1*x+BB1*y+CC1;
}
function cross(c)
{
    var a1,b1;
    var res;
    if (c==1)
        {
            a1=count;
            b1=2;
        }else if (c==count)
            {
                a1=count-1;
                b1=1;
            }else 
            {
                a1=c-1;
                b1=c+1;
            }
            res = true;
            AA=sd_Y[b1]-sd_Y[a1];
            BB=-(sd_X[b1]-sd_X[a1]);
            CC=sd_Y[a1]*(sd_X[b1]-sd_X[a1])-sd_X[a1]*(sd_Y[b1]-sd_Y[a1]);
            if (count==4) 
            {
                for (i=1;i<=count;i++)
                if ((Mline(sd_X[i],sd_Y[i])*Mline(sd_X[c], sd_Y[c])>0)&&(i!=c)) break;
                res = false;
            }
            for (i=1;i<=count-1;i++)
            {
                AA1=sd_Y[i+1]-sd_Y[i];
                BB1=-(sd_X[i+1]-sd_X[i]);
                CC1=sd_Y[i]*(sd_X[i+1]-sd_X[i])-sd_X[i]*(sd_Y[i+1]-sd_Y[i]);
                if (Mline(sd_X[i], sd_Y[i])*Mline(sd_X[i+1],sd_Y[i+1])<0)
                    if (Sline(sd_X[a1], sd_Y[a1])*Sline(sd_X[b1],sd_Y[b1])<0) return res;
            }
            AA1=sd_Y[1]-sd_Y[count];
            BB1=-(sd_X[1]-sd_X[count]);
            CC1=sd_Y[count]*(sd_X[1]-sd_X[count])-sd_X[count]*(sd_Y[1]-sd_Y[count]);
            if (Mline(sd_X[count], sd_Y[count]) * Mline(sd_X[1], sd_Y[1]) < 0)
                if (Sline(sd_X[a1], sd_Y[a1]) * Sline(sd_X[b1], sd_Y[b1]) < 0) return res; 
            return false;
}
function Calc()
{   
   ////////////////Arrays copyng
   //alert(XArray.length);
   for (i=0; i<XArray.length; i++)
       {
            sd_X[i+1] = XArray[i];
            sd_Y[i+1] = YArray[i];          
       }  
 /*   sd_X[1] = 0;
    sd_X[2] = 0;
    sd_X[3] = 5;
    sd_X[4] = 5;
    sd_Y[1] = 0;
    sd_Y[2] = 5;
    sd_Y[3] = 5;
    sd_Y[4] = 0;  */
    //alert(sd_X.length);
    //alert(PixelToMap);
    count = sd_X.length-1;
   //////////////////////////   
    BeginFunc();
    S = 0;
    var temp_result;
    while (count > 3)
        {
            i = 1;
            while ((sd_Angle[i] > Math.PI) || (cross(i))) i++;
            if (i == 1) S = S + St(sd_X[1], sd_Y[1], sd_X[2], sd_Y[2], sd_X[count], sd_Y[count]);
            else
                if (i == count) S = S + St(sd_X[count], sd_Y[count], sd_X[1], sd_Y[1], sd_X[count - 1], sd_Y[count - 1]);
                    else S = S + St(sd_X[i], sd_Y[i], sd_X[i - 1], sd_Y[i - 1], sd_X[i + 1], sd_Y[i + 1]);
                count--;
                for (j = i; j <= count; j++)
                {
                    sd_X[j] = sd_X[j + 1];
                    sd_Y[j] = sd_Y[j + 1];
                    sd_Angle[j] = sd_Angle[j + 1];
                }
                BeginFunc();
        }
        S = PixelToMap*PixelToMap*(S + St(sd_X[1], sd_Y[1], sd_X[2], sd_Y[2], sd_X[3], sd_Y[3]));
        //alert(S);
        //label1.Text = "Площадь фигуры:  " + S.ToString();
        //Area function on javascript//document.MapForm.Square_value.value = Math.round(S)+" m";
}
      


