function pot(x,y)
	{
	  var i,z=1;
	  for (i=1;i<=y;i++)
	    z*=x;
	  return z;
	}

function geoDistance(b1,l1,b2,l2)
	{
	 var f=0.003352811;
	 var a=6378.14

	 var F = (b1+b2)/2;
	 F=Math.PI/180*F;

	 var G = (b1-b2)/2;
	 G=Math.PI/180*G;

	 var l = (l1-l2)/2;
	 l=Math.PI/180*l;

	 var S = pot(Math.sin(G),2)*pot(Math.cos(l),2)+pot(Math.cos(F),2)*pot(Math.sin(l),2);
	 var C = pot(Math.cos(G),2)*pot(Math.cos(l),2)+pot(Math.sin(F),2)*pot(Math.sin(l),2);

	 var w= Math.atan(Math.sqrt(S/C));
	 var D= 2*w*a;

	 var R= Math.sqrt(S*C)/w;
	 var H1= (3*R-1)/(2*C);
	 var H2= (3*R+1)/(2*S);

	 var s = D * ( 1 + f * H1 * pot(Math.sin(F),2) *  pot(Math.cos(G),2) - f * H2 *  pot(Math.cos(F),2) *  pot(Math.sin(G),2) )
	 return s;
	 }


function mergeMarks(lt,lg,kmDist)
	{
	
	var avlat= new Array;
	var avlng = new Array;
	var clusterCodes= new Array;
	var taken=new Array;
	var countItems= new Array;
	var li=0;


	
	
	
	for(ind=0;ind<lt.length;ind++)
		{
		taken[ind]=0;
		}



	var dsor=1;


	for(i=lt.length-1;i>=0;i--)
		{
		countItems[li]=0;

		if(taken[i]==1)
				{
				continue;
				}

			else
				{

				if(i-20>=0)
					{
					j=i-20;
					}
					
				else
					{
					j=0;
					}
				
				for(j;j<i+1;j++)
					{
					if(taken[j]==1)
						{
						continue;
						}
					else
						{
						var l1=lt[i]*1;
						var b1=lg[i]*1;
						var l2=lt[j]*1;
						var b2=lg[j]*1;

						var distance=geoDistance(l1,b1,l2,b2);

						if(distance<kmDist || (lt[i]==lt[j] && lg[i]==lg[j]))
							{
							taken[j]=1;

							if(dsor==1)
								{
								countItems[li]++;
								dsor++;
								avlat[li]=((l1+l2)/dsor)*1;
								avlng[li]=((b1+b2)/dsor)*1;
								clusterCodes[li]=createClustercodes(j);
								}
							else
								{
								countItems[li]++;
								dsor++;
								avlat[li]=Math.sqrt(pot((-avlat[li]+(avlat[li]-l2)/dsor),2));
								avlng[li]=Math.sqrt(pot((-avlng[li]+(avlng[li]-b2)/dsor),2));
								clusterCodes[li]=clusterCodes[li]+createClustercodes(j);
								}

							}
						}
					}

				}

		dsor=1;		
		li++;
		}
		
	
	
		
		

	var batch=new Array;
	batch=setM(avlat,avlng,clusterCodes,countItems);
	return batch;
	}