var currentSatelliteSelected = 0;
var req;
var map;
var satellitesAndPositions = new Array(); 
var satellitesAndPositionsTmp = new Array(); 
var currentTime = 0;
//var dr = 120;
//var dr = 60;
var dr = 240;
var counter = 0;
//var strSatList = "25544|20580|32050|29272|31789|";
//var strSatList = "25544";
//var homeLatitude = 38.892796;
//var homeLongitude = -77.329906;
//var homeName = "Acasa";
//var kt = 0; // category
//var angle= 30;
var positionInArray = 0;
var markersArray = new Array();
var linesArray = new Array();
var drawingsArray = new Array();
var footArray = new Array();
var drawingOverlay;
var footOverlay;
var markerSelectedSat;
var drawLines = false;
var footPrint = false;
var showLabels = false;
var keepSelectedCentered = false;
var doneGeo = false;
intTimezone_now_tzstring = "";
// How many satellites? satellitesAndPositions.length
// How many positions? satellitesAndPositions[0].length

function go()
{

if (counter == 1)
{

if (drawingOverlay != null)
	{
		map.addOverlay(drawingOverlay);
	}

}

	if (markerSelectedSat != null)
	{
		map.removeOverlay(markerSelectedSat)
	}

	if(markersArray != null)
	{
		for (var i=0;i<markersArray.length;i++)
		{
			if(markersArray[i] != null)
			{
				map.removeOverlay(markersArray[i]);
				if (footOverlay != null)
				{
					map.removeOverlay(footOverlay);
					footOverlay= null;
				}

			}
		}
	}

	if(linesArray != null)
	{
		for (var i=0;i<linesArray.length;i++)
		{
			if(linesArray[i] != null)
			{
				map.removeOverlay(linesArray[i]);
			}
		}
	}

	if((satellitesAndPositions[0] != null))
	{
		var info = "";
		for (var i=0;i<satellitesAndPositions.length;i++)
		{
			var sid = satellitesAndPositions[i][0].id;
			ps = getPosition(sid, currentTime);
			if (ps==null)
			{
				if (currentTime<100)
				{
					currentTime = satellitesAndPositions[0][0].timestamp;
					info += "<p> pause ";
				}
				info += "<li>" + sid + " no data" + " for time " + currentTime + " " + counter;
			}
			else
			{
				info += "<li>" + ps.name + " " + ps.id + " [" + ps.latitude + ", " + ps.longitude + "]: " + currentTime + " " + ps.prn + " " + counter;


				var icSat = new GIcon();
				icSat.image = "/img/icons/00000.gif";
				icSat.shadow = "/img/icons/00000s.png";
				//icSat.iconSize = new GSize(30, 30);
				icSat.iconAnchor = new GPoint(15, 15);
				icSat.infoWindowAnchor = new GPoint(0, 15);


				if(showLabels)
				{
					icSat.image = "/inc/label.php?x=" + ps.name;
						icSat.shadow = "/img/icons/labels.png";
				}

				else
				{
					//icSat.iconSize = new GSize(30, 30);
					
					if (!checkIcon(ps.id))
					{
						icSat.image = "/img/icons/00000.gif";
						icSat.shadow = "/img/icons/00000s.png";
					}
					else
					{
						icSat.image = "/img/icons/"+ps.id+".gif";
						icSat.shadow = "/img/icons/"+ps.id+"s.png";
					}
					
						//icSat.image = "/img/icon.php?s="+ps.id+"&a=1";
						//icSat.shadow = "/img/icon.php?s="+ps.id+"&a=2";
				}

				if (satellitesAndPositions.length == 1)
				{
					// only one satellite to be tracked - force satellite in the center
					selectSatellite(satellitesAndPositions[0][0].id);
					map.panTo(new GLatLng(ps.latitude, ps.longitude));
				}

				if (keepSelectedCentered)
				{
					if (currentSatelliteSelected == ps.id)
					{
						map.panTo(new GLatLng(ps.latitude, ps.longitude));
					}

				}
				var icCircle = new GIcon();
				icCircle.image = "/img/circle.gif";
				icCircle.iconSize = new GSize(40, 40);
				icCircle.iconAnchor = new GPoint(20, 20);
				icCircle.infoWindowAnchor = new GPoint(0, 15);

				//var markerSat = new GMarker(new GLatLng(ps.latitude,ps.longitude),icSat);
				//map.addOverlay(markerSat);
				var vx = round(ps.latitude,2);
				var vy = round(ps.longitude,2);
				var vz = round(ps.altitude,2);

				markerSat = createMarker(new GLatLng(ps.latitude, ps.longitude), icSat, ps.id, ps.name);
				if ((ps.id == currentSatelliteSelected) && (satellitesAndPositions.length > 1))
				{
					markerSelectedSat = createMarker(new GLatLng(ps.latitude, ps.longitude), icCircle, ps.id, ps.name);
					map.addOverlay(markerSelectedSat);
					if (footPrint)
					{
						footOverlay = new GPolygon(polyArray1(vz, vx, vy, 20),"#00EA00", 2, 1, "#E1E100", 0.2);
						map.addOverlay(footOverlay);
					}
				}


				map.addOverlay(markerSat);



				markersArray[i] = markerSat;
				

				// Draw a line between the home location and the satellite
				var polyline = new GPolyline([new GLatLng(homeLatitude, homeLongitude), new GLatLng(ps.latitude, ps.longitude)],"#770077", 2);

				if (drawLines)
				{
					map.addOverlay(polyline);
					linesArray[i] = polyline;
				}

				if (footPrint)
				{
					if (satellitesAndPositions.length == 1)
					{
						footOverlay = new GPolygon(polyArray1(vz, vx, vy, 50),"#00EA00", 2, 1, "#E1E100", 0.2);
						map.addOverlay(footOverlay);
					}

				}

				if (currentSatelliteSelected == 0)
				{
					displayRealTimeData(null);
				}
				else if(ps.id==currentSatelliteSelected)
				{
					displayRealTimeData(ps);
				}

			}
			
		}
	}

if (kt!=10)//geostationary
{
	if (dr - counter == 10)
	{
		//redrawTerminator();
		
		if (satellitesAndPositions.length==1)
		{
			//getServerSideDrawing();
		}
		
		if(mode == 1)
			getServerSidePositions();
		if(mode == 2)
			getServerSideVisiblePositions();

	}
}
else
{
	if(doneGeo)
	{
		doneGeo = true;
		getServerSideVisiblePositions();
	}
}


	if (counter == dr)
	{
		counter = 0;
	}

	
}
function tick()
{
	go();
	if (kt!=10)
	{
		currentTime++;
		counter++;
	}
setTimeout("tick()", 1000); 
	
}


function ObjectPosition(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)
{
	this.id=a;
	this.latitude=b;
	this.longitude=c;
	this.azimuth=d;
	this.elevation=e;
	this.countrycode=f;
	this.country=g;
	this.city=h;
	this.region=i;
	this.ra=j;
	this.dec=k;
	this.altitude=l; // km
	this.speed=m; // km/s
	this.timestamp=n;
	this.prn=o;
	this.name=p;
	this.eclipsed=q;
}


function getPosition(sid, t)
{
	var p = null;
	if (satellitesAndPositions != null)
	{
		for (var i=0;i<satellitesAndPositions.length;i++)
		{
			for (var j=0;j<satellitesAndPositions[i].length;j++)
			{
				if ((satellitesAndPositions[i][j].id == sid) && (satellitesAndPositions[i][j].timestamp == t))
				{
					p = satellitesAndPositions[i][j];
					positionInArray = i;
					break;
				}
			}
		}
	}
	return p;
}

function getServerSidePositions() {

	var url = "/sat/tracking-txt.php?s=" + strSatList + "&d=" + dr + "&hlat=" + homeLatitude + "&hlng=" + homeLongitude + "&halt=" + 10 + "&tz=" + intTimezone_now_tzstring + "&o=N&RandomKey=" + Math.random() * Date.parse(new Date());
	
    if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    } 
	//				document.getElementById("x2").innerHTML += "ACUM? ";
  	req.open('GET', url, true); 
	req.send('');
	
	req.onreadystatechange=function() {
    if(req.readyState == 4) {
		if (req.status == 200)
		{
		//document.getElementById("x2").innerHTML += "YES!";
	      doit(req);
		}
    }
  }

}


function getServerSideVisiblePositions() {

	var url = "/sat/tracking-k.php?k=" + kt + "&d=" + dr + "&hlat=" + homeLatitude + "&hlng=" + homeLongitude + "&a=" + angle + "&halt=" + 10 + "&v=" + visible + "&tz=" + intTimezone_now_tzstring + "&o=N&RandomKey=" + Math.random() * Date.parse(new Date());
	
    if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    } 
	//				document.getElementById("x2").innerHTML += "ACUM? ";
  	req.open('GET', url, true); 
	req.send('');
	
	req.onreadystatechange=function() {
    if(req.readyState == 4) {
		if (req.status == 200)
		{
		//document.getElementById("x2").innerHTML += "YES!";
	      doit(req);
		}
    }
  }

}

function getServerSideDrawing() {

	var url = "/sat/drawing-txt1.php?s=" + strSatList + "&RandomKey=" + Math.random() * Date.parse(new Date());
	
    if(window.XMLHttpRequest) {
		req1 = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        req1 = new ActiveXObject("Microsoft.XMLHTTP");
    } 
	//				document.getElementById("x2").innerHTML += "ACUM? ";
  	req1.open('GET', url, true); 
	req1.send('');
	req1.onreadystatechange=function() {
    if(req1.readyState == 4) {
		if (req1.status == 200)
		{
	      processDrawing(req1);
		}
    }
  }

}
/*
function processDrawing(req1) {
	//alert(strSatList);
	if (drawingOverlay != null)
			map.removeOverlay(drawingOverlay);
	txt1  = req1.responseText;
	var txtArray = txt1.split("\n");
	var encodedPath = txtArray[0];	
	var levels = txtArray[1];	
			 drawingOverlay = new GPolyline.fromEncoded({
				color: "#FF0000",
				weight: 2,
				points: encodedPath,
				levels: levels,
				zoomFactor: 6,
				numLevels: 4
			});
		}
*/

function processDrawing(req1) {
	//alert(strSatList);
	if (drawingOverlay != null)
			map.removeOverlay(drawingOverlay);
	txt1  = req1.responseText;
	var txtArray = txt1.split("\n");
	var encodedPath = txtArray[0];
	var levels = txtArray[1];	
	var zoomFactor = txtArray[2];	
	var numLevels = txtArray[3];	
			 drawingOverlay = new GPolyline.fromEncoded({
				color: "#FF0000",
				weight: 2,
				points: encodedPath,
				levels: levels,
				zoomFactor: zoomFactor,
				numLevels: numLevels
			});
		}


function doit(req) {

	satellitesAndPositionsTmp = new Array();
	txt  = req.responseText;
	txtArray = txt.split('\n');

	//alert(txt);
	var scnt = (txtArray.length-1)/dr;
	//alert(txtArray[txtArray.length-2]);
	if (scnt>0) // at least 1 satellite
	{
		for (var k=0;k<scnt;k++)
		{	
			satellitesAndPositionsTmp[k] = new Array(); 
			var w=0;
			for (i=k*dr; i<(k+1)*dr; i++)
			{
				//document.getElementById("test").innerHTML += txtArray[i];
				valArray =  txtArray[i].split('|');
				satellitesAndPositionsTmp[k][w] = new ObjectPosition(
					valArray[12], //a
					valArray[0], //b
					valArray[1], //c
					valArray[2], //d
					valArray[3], //e
					valArray[4], //f
					valArray[5], //g
					valArray[6], //h
					valArray[7], //i
					valArray[8], //j
					valArray[9], //k
					valArray[10], //l
					valArray[11], //m
					valArray[13], //n
					valArray[14], //o
					valArray[15], //p
					valArray[16] //q
					); 
				
				w++;
				}
		}

		//document.getElementById("x4").innerHTML += "<p>" + txt;
		//document.getElementById("x3").innerHTML = "";

		//setTimeout("bogus()", 2000); 

		satellitesAndPositions = satellitesAndPositionsTmp;


		if (satellitesAndPositionsTmp != null)
		{
			currentTime = satellitesAndPositionsTmp[scnt-1][0].timestamp;
			for (var i=0;i<satellitesAndPositionsTmp.length;i++)
			{
				//document.getElementById("x3").innerHTML += "<p>";
				for (var j=0;j<satellitesAndPositionsTmp[i].length;j++)
				{
						var p = satellitesAndPositionsTmp[i][j];
						//document.getElementById("x3").innerHTML += p.timestamp + " ";
				}
			}
		}
	}

}


function bogus ()
{
	satellitesAndPositions = satellitesAndPositionsTmp;
	currentTime = satellitesAndPositions[0][0].timestamp;
}
function createMap(size)
{
	var objDate_now = new Date();
	intTimezone_now_tzstring = GetTimezoneString(objDate_now, false);
	if(mode == 1)
	{
		getServerSidePositions();
	}
	if(mode == 2)
		getServerSideVisiblePositions();

	var icHome = new GIcon();
	if (homeIcon == 'h')
	{
		icHome.image = "/img/home.gif";
	}
	if (homeIcon == 'm')
	{
		icHome.image = "/img/airplane.gif";
	}
	icHome.iconSize = new GSize(20, 20);
	icHome.iconAnchor = new GPoint(15, 15);
	icHome.infoWindowAnchor = new GPoint(0, 15);
	map = new GMap2(document.getElementById("satmap"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	var markerHome = new GMarker(new GLatLng(homeLatitude,homeLongitude),icHome);
	GEvent.addListener(markerHome, "click", function() {
	markerHome.openInfoWindowHtml("<table width=230 bgcolor=#E9E9E9 class=brd><tr><td><b>" + homeName + "</b><br>Latitude: " + homeLatitude + "<br>Longitude: " + homeLongitude + "</td></tr></table>");
	});
	map.setCenter(new GLatLng(homeLatitude, homeLongitude), size);
	map.addOverlay(markerHome);
	//footOverlay = new GPolygon(polyArray(353, homeLatitude, homeLongitude, 5),"#f33f00", 2, 1, "#ff0000", 0.2);
	//redrawTerminator();



		//getServerSideDrawing();



	if (mode>0)
	{
		tick();
	}

}

function createMarker(point, ic, id, name)
{
	var mrk = new GMarker(point, ic);
  	GEvent.addListener(mrk, "click", function() {
    //mrk.openInfoWindowHtml(name + " " + id);
	selectSatellite(id)
  });
  return mrk;
}

function selectSatellite(id)
{
	currentSatelliteSelected = id;
	for (var i=0;i<satellitesAndPositions.length;i++)
	{
		if(satellitesAndPositions[i][0].id == id)
		{
			var ssel = satellitesAndPositions[i][0];
			break;
		}
	}
}

function checkIcon(id)
{
	/*
	var h = 0;
	var w = 0;
	var imgIc = new Image();
	imgIc.src = "http://www.n2yo.com/img/icons/"+id+".gif";
	h = imgIc.height;
	w = imgIc.width;
	if (imgIc.complete)
	{
		return true;
	}
	else
	{
		return false;
	}
	*/
	for (var i=0;i<iconsArray.length;i++)
	{
		if (iconsArray[i] == id+'.gif')
		{
			return true;
		}
	}
	return false;
}
function displayRealTimeData(s)
{
	var html = "";
	if (s==null)
	{
		document.getElementById("centered").disabled = true;
		html += "<p>&nbsp;<p>&nbsp;<p>&nbsp<p align=center>&nbsp;<FONT COLOR=#9A9A9A>No satellite selected. <br>Please select a satellite on the map</FONT>\n\n";
	}
	else
	{
		if(satellitesAndPositions.length == 1)
			document.getElementById("centered").disabled = true;
		else
			document.getElementById("centered").disabled = false;
		if (s.eclipsed==1)
			ecl = "YES";
		else
			ecl = "NO";
		html += "<h4 align=center><a href=/satellite/?s="+s.id+">"+s.name+"</a></h4>\n\n";
		if(kt==20) //GPS
		{
			html += "<h5 align=center>PRN "+s.prn+"</h5>\n";
		}
		html += "<table border=0 cellspacing=0 cellpadding=2>";
		html += "<tr><td colspan=2>"+getFormatedDate(s.timestamp)+"</td></tr>";
		html += "<tr><td>Latitude: </td><td><b>"+round(s.latitude, 2)+"&deg;</b></td></tr>";
		html += "<tr><td>Longitude: </td><td><b>"+round(s.longitude, 2)+"&deg;</b></td></tr>";
		html += "<tr><td>Right Ascension: </td><td><b>"+getFormatedRA(s.ra)+"</b></td></tr>";
		html += "<tr><td>Declination: </td><td><b>"+getFormatedDec(s.dec)+"</b></td></tr>";
		html += "<tr><td>Azimuth: </td><td><b>"+round(s.azimuth,2)+"&deg;</b></td></tr>";
		html += "<tr><td>Elevation: </td><td><b>"+getFormatedElevation(s.elevation)+"</b></td></tr>";
		html += "<tr><td>Altitude [km]: </td><td><b>"+round(s.altitude,2)+"</b></td></tr>";
		html += "<tr><td>Altitude [miles]: </td><td><b>"+round(0.6213712*s.altitude,2)+"</b></td></tr>";
		html += "<tr><td>Speed [km/s]: </td><td><b>"+round(s.speed,2)+"</b></td></tr>";
		html += "<tr><td>Speed [miles/s]: </td><td><b>"+round(0.6213712*s.speed,2)+"</b></td></tr>";
		html += "<tr><td>Eclipsed? </td><td><b>"+ecl+"</b></td></tr>";
		if (s.speed>5) 
			html += "<tr><td colspan=2><A HREF=passes/?s="+s.id+"><b>5 DAY PREDICTIONS WITH GRAPHICS &#187;</b></A></td></tr>";
		html += "</table>";
	
		// display the place over info
		if (s.city != "NULL")
		{
			if (s.countrycode == "US")
			{
				document.getElementById("loc").innerHTML = " <b>"+ s.city + ", " + s.region + "</b>";
			}
			else
			{
				document.getElementById("loc").innerHTML = " <b>"+ s.city + ", " + s.country + "</b>";
			}
		}
		else 
		{
			document.getElementById("loc").innerHTML = "&nbsp;";
		}

	}
	if (kt != '')
	{
		document.getElementById("satCnt").innerHTML = satellitesAndPositionsTmp.length;
	}
		document.getElementById("satinfo").innerHTML = html;

	return true;
}
function getFormatedDate(t)
{
	var d = new Date(t*1000);
	fd = d.toGMTString();
	/*
	var year = d.getFullYear();
	var month = d.getMonth()+1;
	var day = d.getDate();
	var hours = d.getHours();
	var minutes = d.getMinutes();
	var seconds = d.getSeconds();
	var fd = month+"."+day+"."+year+" "+hours+":"+minutes+":"+seconds+" UTC";
	*/
	return fd;
}
function getFormatedRA(ra)
{
	ra1 = (ra*24)/360;
	rah=Math.floor(ra1);
	ra2=ra1%1;
	ram=Math.floor(ra2*60);
	ra3=(ra2*60)%1;
	ras=Math.floor(ra3*60);
	var rastr = rah + 'h ' + ram + 'm ' + ras + 's ';
	return rastr;
}

function getFormatedDec(dec)
{
	dech=Math.floor(dec);
	dec2=dec%1;
	dec2=Math.abs(dec2);
	decm=Math.floor(dec2*60);
	dec3=(dec2*60)%1;
	decs=Math.floor(dec3*60);
	var decstr = dech + "&deg; " + decm + "' " + decs + "'' ";
	return decstr;
}

function getFormatedElevation(e)
{
	var stre = '';
	if (e>10)
	{
		stre = "<font color=#008000>+"+round(e,2)+"&deg;</font>";
	}
	else if ((e<=10) && (e>0))
	{
		stre = "<font color=#C1C100>+"+round(e,2)+"&deg;</font>";
	}
	else 
	{
		stre = "<font color=#000000>"+round(e,2)+"&deg;</font>";
	}
	return stre;
}


function round(number,X) { 
	//
X = (!X? 2 : X); 
return Math.round(number*Math.pow(10,X))/Math.pow(10,X); 
}

function GetTimezoneString(objInputDate, blnJsDateCompat) {
	var objDate = new Date(objInputDate);

	var intDateTZ				= objDate.getTimezoneOffset();
	var strDateTZ_sign			= (intDateTZ > 0 ? "-" : "+")
	var intDateTZ_hours			= Math.floor(Math.abs(intDateTZ) / 60);
	var intDateTZ_minutes		= Math.abs(intDateTZ_hours - (Math.abs(intDateTZ) / 60)) * 60;
	var strDateTZ_normalised	= (blnJsDateCompat ? "UTC" : "GMT") + strDateTZ_sign + PrefixChar(intDateTZ_hours, "0", 2) + (blnJsDateCompat ? "" : ":") + PrefixChar(intDateTZ_minutes, "0", 2);

	return strDateTZ_normalised;
}

function PrefixChar(strValue, strCharPrefix, intLength) {
	var intStrValue_length = String(strValue).length;
	if (intStrValue_length < intLength) {
		for (var intI=0; intI<(intLength-intStrValue_length); ++intI) {
			strValue = strCharPrefix + strValue;
		}
	}
	return strValue;
}

	function polyArray(salt, plat, plon, npoints)
	{

		var re=6375;
		var alfa = 180*(Math.acos(re/(re+salt)))/3.141;
		var parr = new Array();
		var dp = alfa/npoints;
		// K I
		for (i=0;i<npoints;i++)
		{
			parr[i] = new GLatLng(plat+i*dp, plon - Math.sqrt(alfa*alfa - i*dp*i*dp));
		}
		// K II
		for (i=0;i<npoints;i++)
		{
			parr[npoints+i] = new GLatLng(plat+(alfa-i*dp), plon + Math.sqrt(alfa*alfa - (alfa-i*dp)*(alfa-i*dp)));
		}
		// K III
		for (i=0;i<npoints;i++)
		{
			parr[2*npoints+i] = new GLatLng(plat-i*dp, plon + Math.sqrt(alfa*alfa - dp*i*dp*i));
		}
		// K IV
		for (i=0;i<npoints;i++)
		{
			parr[3*npoints+i] = new GLatLng(plat-(alfa-i*dp), plon - Math.sqrt(alfa*alfa - (alfa-i*dp)*(alfa-i*dp)));
		}
		parr[4*npoints] = new GLatLng(plat, plon - alfa);
		return parr;
	}

	function polyArray1(salt, lat1, lon1, points)
	{

		var parr = new Array();
		re=6375;
		k = re/(re+salt);

		max=Math.acos(k) - (0.1 * 3.141)/180;	// protection 0.01 degrees to avoid an exception
		var dg = max/points;
		//K I
		for (i=0; i<points; i++)
		{
			lat2 = (lat1 * 3.141)/180 - max + i*dg;
			gamma = (lon1 * 3.141)/180;
			var alfa = Math.sin((lat1 * 3.141)/180);
			var beta = Math.cos((lat1 * 3.141)/180);
			lon2 = gamma - Math.acos((k-alfa*Math.sin (lat2))/(beta*Math.cos(lat2)));
			//alert((lon2*180)/3.14);
			parr[i] = new GLatLng((lat2*180)/3.14, (lon2*180)/3.14);
		}
		//K II
		for (i=0; i<points; i++)
		{
			lat2 = (lat1 * 3.141)/180 + i*dg;
			gamma = (lon1 * 3.141)/180;
			var alfa = Math.sin((lat1 * 3.141)/180);
			var beta = Math.cos((lat1 * 3.141)/180);
			lon2 = gamma - Math.acos((k-alfa*Math.sin (lat2))/(beta*Math.cos(lat2)));
			//alert((lon2*180)/3.14);
			parr[points+i] = new GLatLng((lat2*180)/3.14, (lon2*180)/3.14);
		}
		//K III
		for (i=0; i<points; i++)
		{
			lat2 = (lat1 * 3.141)/180 + max-i*dg;
			gamma = (lon1 * 3.141)/180;
			var alfa = Math.sin((lat1 * 3.141)/180);
			var beta = Math.cos((lat1 * 3.141)/180);
			lon2 = gamma + Math.acos((k-alfa*Math.sin (lat2))/(beta*Math.cos(lat2)));
			//alert((lon2*180)/3.14);
			parr[2*points+i] = new GLatLng((lat2*180)/3.14, (lon2*180)/3.14);
		}
		//K IV
		for (i=0; i<points; i++)
		{
			lat2 = (lat1 * 3.141)/180 -i*dg;
			gamma = (lon1 * 3.141)/180;
			var alfa = Math.sin((lat1 * 3.141)/180);
			var beta = Math.cos((lat1 * 3.141)/180);
			lon2 = gamma + Math.acos((k-alfa*Math.sin (lat2))/(beta*Math.cos(lat2)));
			//alert((lon2*180)/3.14);
			parr[3*points+i] = new GLatLng((lat2*180)/3.14, (lon2*180)/3.14);
		}
		parr[4*points] = parr[0];

		return parr;
	}

