function dms(from,min,max) {
	with (document.getElementById("ll")) {
		for (var i = 0; i < 2; i++) {
			lat_2[i].checked = lat_1[i].checked;
			lon_2[i].checked = lon_1[i].checked;
		}
		lat_d2.value = parseInt(lat_d1.value, 10);
		lat_ms2.value = (parseInt(lat_m1.value, 10) + parseInt(lat_s1.value, 10) / 60.0).toFixed(3);
		lon_d2.value = parseInt(lon_d1.value, 10);
		lon_ms2.value = (parseInt(lon_m1.value, 10) + parseInt(lon_s1.value, 10) / 60.0).toFixed(3);

		var lon = parseInt(lat_d1.value, 10) + (parseInt(lat_m1.value, 10) + parseInt(lat_s1.value, 10) / 60.0) / 60.0;
		if (lat_1[1].checked) lon = -lon;
		lat_dms3.value = lon.toPrecision(8);
		var lat = parseInt(lon_d1.value, 10) + (parseInt(lon_m1.value, 10) + parseInt(lon_s1.value, 10) / 60.0) / 60.0;
		if (lon_1[0].checked) lat = -lat;
		lon_dms3.value = lat.toPrecision(8);

		if (from != lat_lon) {
			lat_lon.value = (lat_1[0].checked ? 'N' : 'S') + ' ' + parseInt(lat_d1.value, 10) + '°' + parseInt(lat_m1.value, 10) + "'" + parseInt(lat_s1.value, 10) + '" ' + (lon_1[0].checked ? 'W' : 'E') + ' ' + parseInt(lon_d1.value, 10) + '°' + parseInt(lon_m1.value, 10) + "'" + parseInt(lon_s1.value, 10) + '"';
		}
	}
}
function dm(from,min,max) {
	with (document.getElementById("ll")) {
		for (var i = 0; i < 2; i++) {
			lat_1[i].checked = lat_2[i].checked;
			lon_1[i].checked = lon_2[i].checked;
		}
		lat_d1.value = parseInt(lat_d2.value, 10);
		lat_m1.value = parseInt(lat_ms2.value, 10);
		lat_s1.value = (parseFloat(lat_ms2.value) - parseInt(lat_ms2.value)) * 60.0;
		lon_d1.value = parseInt(lon_d2.value, 10);
		lon_m1.value = parseInt(lon_ms2.value, 10);
		lon_s1.value = (parseFloat(lon_ms2.value) - parseInt(lon_ms2.value)) * 60.0;

		var lon = parseInt(lat_d2.value, 10) + parseFloat(lat_ms2.value) / 60.0;
		if (lat_1[1].checked) lon = -lon;
		lat_dms3.value = lon.toPrecision(8);
		var lat = parseInt(lon_d2.value, 10) + parseFloat(lon_ms2.value) / 60.0;
		if (lon_1[0].checked) lat = -lat;
		lon_dms3.value = lat.toPrecision(8);

		if (from != lat_lon) {
			lat_lon.value = (lat_2[0].checked ? 'N' : 'S') + ' ' + parseInt(lat_d2.value, 10) + '°' + parseFloat(lat_ms2.value).toFixed(3) + "' " + (lon_2[0].checked ? 'W' : 'E') + ' ' + parseInt(lon_d2.value, 10) + '°' + parseFloat(lon_ms2.value).toFixed(3) + "'";
		}
	}
}
function d(from,min,max) {
	with (document.getElementById("ll")) {
		var lon = parseFloat(lat_dms3.value);
		if (!isNaN(lon)) {
			var isNorth = lon >= 0.0;
			lat_1[0].checked = lat_2[0].checked = isNorth;
			lat_1[1].checked = lat_2[1].checked = !isNorth;
			lon = Math.abs(lon);
			lat_d1.value = lat_d2.value = parseInt(lon, 10);
			lon -= parseInt(lon, 10); lon *= 60.0;
			lat_ms2.value = lon.toFixed(3);
			lat_m1.value = parseInt(lon, 10);
			lon -= parseInt(lon, 10); lon *= 60.0;
			lat_s1.value = lon;
		}
		var lat = parseFloat(lon_dms3.value);
		if (!isNaN(lat)) {
			var isEast = lat >= 0.0;
			lon_1[0].checked = lon_2[0].checked = !isEast;
			lon_1[1].checked = lon_2[1].checked = isEast;
			lat = Math.abs(lat);
			lon_d1.value = lon_d2.value = parseInt(lat, 10);
			lat -= parseInt(lat, 10); lat *= 60.0;
			lon_ms2.value = lat.toFixed(3);
			lon_m1.value = parseInt(lat, 10);
			lat -= parseInt(lat, 10); lat *= 60.0;
			lon_s1.value = lat;
		}
		if (from != lat_lon) {
			lat_lon.value = lat_dms3.value + ' ' + lon_dms3.value;
		}
	}
}
function t(from) {
	with (document.getElementById("ll")) {
		var found = lat_lon.value.match(/^\s*lat=(['"])(-?\d*\.\d+)\1\s+lon=(["'])(-?\d*\.\d+)\3\s*$/);
		if (found) {
			lat_dms3.value = found[2];
			lon_dms3.value = found[4];
			return d(from,null,null)
		}
		var found = lat_lon.value.match(/^\s*lon=(['"])(-?\d*\.\d+)\1\s+lat=(["'])(-?\d*\.\d+)\3\s*$/);
		if (found) {
			lon_dms3.value = found[2];
			lat_dms3.value = found[4];
			return d(from,null,null)
		}
		var found = lat_lon.value.match(/^\s*([nNsS])\s*(\d+)[\s°]+(\d+)[\s']+(\d+)[\s"]+([wWeEoO])\s*(\d+)[\s°]+(\d+)[\s']+(\d+)[\s"]*$/);
		if (found) {
			lat_1[0].checked = found[1].toLowerCase() == 'n';
			lat_1[1].checked = found[1].toLowerCase() != 'n';
			lat_d1.value = found[2];
			lat_m1.value = found[3];
			lat_s1.value = found[4];
			lon_1[0].checked = found[5].toLowerCase() == 'w';
			lon_1[1].checked = found[5].toLowerCase() != 'w';
			lon_d1.value = found[6];
			lon_m1.value = found[7];
			lon_s1.value = found[8];
			return dms(from,null,null);
		}
		var found = lat_lon.value.match(/^\s*([nNsS])\s*(\d+)[\s°]+(\d+\.\d+)[\s']+([wWeEoO])\s*(\d+)[\s°]+(\d+\.\d+)[\s']*$/);
		if (found) {
			lat_2[0].checked = found[1].toLowerCase() == 'n';
			lat_2[1].checked = found[1].toLowerCase() != 'n';
			lat_d2.value = found[2];
			lat_ms2.value = found[3]
			lon_2[0].checked = found[4].toLowerCase() == 'w';
			lon_2[1].checked = found[4].toLowerCase() != 'w';
			lon_d2.value = found[5];
			lon_ms2.value = found[6];
			return dm(from,null,null);
		}
		var found = lat_lon.value.match(/^\s*([+-]?(?:\d+(?:\.\d*)?|\.\d+))\s+([+-]?(?:\d+(?:\.\d*)?|\.\d+))\s*$/);
		if (found) {
			lat_dms3.value = found[1];
			lon_dms3.value = found[2];
			return d(null,null,null);
		}
	}
}
