function getLatLon(dblX,dblY) {
	var PI = 3.14159265358979
	var DegToRad = PI / 180
	var RadToDeg = 180 / PI
	var PId2 = PI / 2
	var PId4 = PI / 4
	var dblPrecision = 0.0000000005 * DegToRad

	var dblEllipsoid_a = 6378137
	var f = 1 / 298.257
	var dblEllipsoid_e2 = (2 * f) - (f * f)
	var dblEllipsoid_e = Math.sqrt(dblEllipsoid_e2)
	var dblEllipsoid_ed2 = dblEllipsoid_e / 2

	var dblProj_Phi0 = DegToRad * 45.3091666666667
	var dblProj_LambdaC = DegToRad * -86
	var dblProj_AlphaC = DegToRad * 337.255555556
	var dblProj_k0 = 0.9996
	var dblProj_X = 499839.834
	var dblProj_Y = 528600.24
	var dblProj_CosAlphaC = Math.cos(dblProj_AlphaC)
	var dblProj_SinAlphaC = Math.sin(dblProj_AlphaC)
	var CosPhi0 = Math.cos(dblProj_Phi0)
	var SinPhi0 = Math.sin(dblProj_Phi0)
	var SinPhi02 = SinPhi0 * SinPhi0
	var eSinPhi0 = dblEllipsoid_e * SinPhi0

	var dblProj_B = Math.sqrt(1 + ((dblEllipsoid_e2 * (Math.pow(CosPhi0,4))) / (1 - dblEllipsoid_e2)))
	var dblProj_Binv = 1 / dblProj_B
	var A = (dblEllipsoid_a * dblProj_B * dblProj_k0 * Math.sqrt(1 - dblEllipsoid_e2)) / (1 - (dblEllipsoid_e2 * SinPhi02))
	var dblProj_AdB = A / dblProj_B
	var dblProj_BdA = dblProj_B / A
	var dblProj_Ad2B = dblProj_AdB * 0.5
	var t0 = Math.tan(PId4 - (dblProj_Phi0 / 2)) / (Math.pow(((1 - eSinPhi0) / (1 + eSinPhi0)),(dblEllipsoid_e / 2)))
	D = (dblProj_B * Math.sqrt(1 - dblEllipsoid_e2)) / (CosPhi0 * Math.sqrt(1 - (dblEllipsoid_e2 * SinPhi02)))
	var f
	if (dblProj_Phi0 > 0) {
	  f = D + Math.sqrt((D * D) - 1)
	}else{
	  f = D - Math.sqrt((D * D) - 1)
	}
	var dblProj_E = f * (Math.pow(t0,dblProj_B))
	var G = (f - (1 / f)) / 2
	var dblProj_Gamma0 = Math.asin(dblProj_SinAlphaC / D)
	var dblProj_Lambda0 = dblProj_LambdaC - (Math.asin(G * Math.tan(dblProj_Gamma0)) / dblProj_B)
	var dblProj_SinGamma0 = Math.sin(dblProj_Gamma0)
	var dblProj_CosGamma0 = Math.cos(dblProj_Gamma0)
	var dblProj_u0 = (A / dblProj_B) * Math.atan(Math.sqrt((D * D) - 1) / dblProj_CosAlphaC)
	if (dblProj_Phi0 < 0) {
		dblProj_u0 = dblProj_u0 * -1
	}

	var lcV = ((dblX - dblProj_X) * dblProj_CosAlphaC) - ((dblY - dblProj_Y) * dblProj_SinAlphaC)
	var lcU = ((dblY - dblProj_Y) * dblProj_CosAlphaC) + ((dblX - dblProj_X) * dblProj_SinAlphaC)
	var lcU = lcU + dblProj_u0
	var Q = Math.exp(-1 * dblProj_BdA * lcV)
	var Qinv = 1 / Q
	var s = (Q - Qinv) / 2
	var T = (Q + Qinv) / 2
	var V = Math.sin(lcU * dblProj_BdA)
	var U = ((V * dblProj_CosGamma0) + (s * dblProj_SinGamma0)) / T
	var lcT = Math.pow((dblProj_E / Math.sqrt((1 + U) / (1 - U))),dblProj_Binv)
	var LastPhi = PId2 - (2 * Math.atan(lcT))
	var dPhi
	var Phi
	lngIteration = 0
	do
	{
	  eSinPhi = dblEllipsoid_e * Math.sin(LastPhi)
	  Phi = PId2 - (2 * Math.atan(lcT * (Math.pow(((1 - eSinPhi) / (1 + eSinPhi)),dblEllipsoid_ed2))))
	  dPhi = Math.abs(Phi - LastPhi)
	  LastPhi = Phi
	  lngIteration = lngIteration + 1
	  if (lngIteration > 10) {
		break
	  }
	}
	while (dPhi > dblPrecision)
	dblY = Phi * RadToDeg
	Lambda = dblProj_Lambda0 - (Math.atan(((s * dblProj_CosGamma0) - (V * dblProj_SinGamma0)) / Math.cos(lcU * dblProj_BdA)) / dblProj_B)
	dblX = Lambda * RadToDeg
	return (new point(dblY, dblX))	
}
