var hayford=new Array(4);
hayford.e2=0.0067681703;
hayford.c=6399936.609;
function calcularBsubPhi(phi)
	{
	var A1,A2,J2,J4,J6,alpha,beta,gamma;
	var cos2phi=Math.pow(Math.cos(phi),2);
	A1=Math.sin(2*phi);
	A2=A1*cos2phi;
	J2=phi+A1/2;
	J4=(3*J2+A2)/4;
	J6=(5*J4+A2*cos2phi)/3;
	alpha=3/4*hayford.e2;
	beta=5/3*Math.pow(alpha,2);
	gamma=35/27*Math.pow(alpha,3);
	return 0.9996*hayford.c*(phi-alpha*J2+beta*J4-gamma*J6);
	}
function determHuso(lambda)
	{
	var huso=(lambda/6)+31;
	while(huso<1)
		huso+=60;
	return parseInt(huso);
	}
function meridCentralHuso(huso)
	{
	var lambda=6*huso-183;
	return lambda;
	}
function geo2utm(lat,lon)
	{	
	var xi,A,n,nu,tseta,BsubPhi,deltaLambda,lambda0,lambda,phi,cos2phi,husoXY;
	phi=lat*Math.PI/180;
	lambda=lon*Math.PI/180;
	husoXY=new Array(3);
	husoXY[0]=determHuso(lon);
	//husoXY[0]=30;
	lambda0=meridCentralHuso(husoXY[0])*Math.PI/180;
	deltaLambda=lambda-lambda0;
	A=Math.cos(phi)*Math.sin(deltaLambda);
	xi=1/2*Math.log((1+A)/(1-A));
	n=Math.atan2(Math.tan(phi),Math.cos(deltaLambda))-phi;
	cos2phi=Math.pow(Math.cos(phi),2);
	nu=hayford.c*0.9996/Math.pow((1.0+hayford.e2*cos2phi),0.5);
	tseta=hayford.e2/2*xi*xi*cos2phi;
	BsubPhi=calcularBsubPhi(phi);
	husoXY[2]=n*nu*(1+tseta)+BsubPhi;
	husoXY[1]=xi*nu*(1+tseta/3)+500000;
	return husoXY;
	}

