﻿function gs2ll(form) {
	igs=new Array(3);
	ilat=new Array(3);
	ilon=new Array(3);
	igs[1]=form.gs1.value;

	indx="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	ermsg="２,４または６桁で入力してください　\n";
	ermsg+="(例)  PM, PM74 または PM74rs";

	gs=igs[1];
	gs=gs.toUpperCase();
	if (gs.length==0){alert(ermsg); return;}
	c1=gs.charAt(0);
	c2=gs.charAt(1);
	c3=parseInt(gs.charAt(2));
	c4=parseInt(gs.charAt(3));
	c5=gs.charAt(4);
	c6=gs.charAt(5);
	if ((gs.length!=6 && gs.length!=4 && gs.length!=2 && gs.length!=0)
			||indx.indexOf(c1)<0 || indx.indexOf(c2)<0 || indx.indexOf(c5)<0 
			|| indx.indexOf(c6)<0) { 
		// INVALID GRIDSQ
		alert(ermsg);
		}
 
	if (gs=="" ) {
	   ilat[1]="";
	   ilon[1]="";
	}
	else {
		with (Math) {
		lon=-180;
		lon+=(indx.indexOf(c1)*20);  // calc char 1
		lat=((indx.indexOf(c2)*10)-90); // calc char 2
		gs=c1+c2;
		if (!isNaN(c3) || !isNaN(c4)) {	// add char 3 and 4
		    gs=c1+c2+c3.toString()+c4.toString();
			lon+=(2*c3);
			lat+=c4;
			
			if (c5!="" && c6!="") {	//c5,6 exist, we have a 6 character gridsquare
				gs=c1+c2+c3.toString()+c4.toString()+c5.toLowerCase()+c6.toLowerCase();
				lonm=(5*indx.indexOf(c5))+2.5;
				lon+=(lonm/60);
				latm=(2.5*indx.indexOf(c6))+1.25;
				lat+=(latm/60);
				lond=2.5/60;
				latd=1.25/60;
				zoom=11;
				}
			else { // only 4 characters, so add to center on sub-square
			  lon+=1;
			  lat+=0.5;
			  lond=1;
			  latd=0.5;
			  zoom=4;
				}
			}
		else  { // only two characters, so center on grid-square
			lon+=10;
			lat+=5;
			lond=10;
			latd=5;
			zoom=2;
		}
		igs[1]=gs;
		ilat[1]=lat;
		ilon[1]=lon;
		} //math
	} //else
	form.gs1.value=igs[1];
	
	//----- MAP -----
	plotMap(lat, lon, lat-latd, lon-lond, lat+latd, lon+lond, zoom);
} // end gs2ll

function plotMap(nLat, eLng, ND11, ED11, ND22, ED22, zoom){
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.setCenter(new GLatLng(nLat, eLng), zoom);

		var points = [];
		points[0] = new GLatLng(ND11, ED11);
		points[1] = new GLatLng(ND22, ED11);
		points[2] = new GLatLng(ND22, ED22);
		points[3] = new GLatLng(ND11, ED22);
		points[4] = new GLatLng(ND11, ED11);

		var polygon = new GPolygon(points, '#000000', 3, 0.5, '#0000ff', 0.2);
		map.addOverlay(polygon);
		var polyline = new GPolyline(points, "#0000ff", 2, 1);
		map.addOverlay(polyline);
	}
}
