﻿var symbolimg = -1;

function gotoJFindu()
{
	var newwindow = window.open("http://www.jfindu.net/find.asp?call="+document.aspnetForm.DPRSCall.value,"jFinduLoc","");
	if (window.focus)
		newwindow.focus();
	return (false);
}

function gotoFindu()
{
	var newwindow = window.open("http://map.findu.com/"+document.aspnetForm.DPRSCall.value,"FinduLoc","");
	if (window.focus)
		newwindow.focus();
	return (false);
}

function valMyCall(mycallfield)
{
  if (trim(mycallfield.value).length < 3)
  {
    alert("Please enter a value for the \"MyCall\" field of at least 3 characters.");
    mycallfield.focus();
    return (false);
  }

  if (mycallfield.value.length > 8)
  {
    alert("Please enter at most 8 characters in the \"MyCall\" field.");
    mycallfield.focus();
    return (false);
  }
  mycallfield.value = mycallfield.value.toUpperCase();

  var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";
  var checkStr = mycallfield.value;
  var allValid = true;
  var i;
  var ndx;
  for (i = 0;  i < checkStr.length;  i++)
  {
    ndx = checkOK.indexOf(checkStr.charAt(i));
    if (ndx < 0)
    {
    	allValid = false;
        break;
    }
  }
  if (!allValid)
  {
    alert("Please enter only \""+checkOK+"\" characters in the \"MyCall\" field.");
    mycallfield.focus();
    return (false);
  }
  valSymbol(document.aspnetForm.Symbol);
  return (setDPRSCall(mycallfield));
}

function setDPRSCall(dstarcall)
{
	var tstr = trim(dstarcall.value);
	var firstspace = tstr.indexOf(' ');
	if (firstspace < 0)
	{
		document.aspnetForm.DPRSCall.value = tstr;
		return (true);
	}
	if (firstspace < 3)
	{
	    alert("Please enter a 3 letter or greater callsign before the first space in the \"MyCall\" field.");
	    dstarcall.focus();
	    return (false);
	}
	var lastspace = tstr.lastIndexOf(' ');
	if (lastspace < tstr.length - 3)
	{
	    alert("SSID may only be 1 or 2 letters in the \"MyCall\" field.");
	    dstarcall.focus();
	    return (false);
	}
	document.aspnetForm.DPRSCall.value = tstr.substring(0, firstspace)+'-'+tstr.substring(lastspace+1,tstr.length);
	return (true);
}

function valSymbol(symfield)
{
  if (symfield.selectedIndex < 0)
  {
    alert("Please select one of the \"Symbol\" options.");
    symfield.focus();
    return (false);
  }
  var txtstr = symfield.options[symfield.selectedIndex].value;
	if (symbolimg == -1)
	{
		for (i in document.images)
		{
			if (document.images[i].src == "http://www.aprs-is.net/images/APRSP1.bmp")
			{
				symbolimg = i;
				break;
			}
		}
	}
  document.images[symbolimg].src = "http://www.aprs-is.net/images/APRS" + txtstr.substring(txtstr.indexOf(',')+1, txtstr.length) + ".bmp";
  if (txtstr.charAt(txtstr.indexOf(',')+1) == 'P')
  {
  	document.aspnetForm.Overlay.disabled = true;
  	document.aspnetForm.GPSSymbol.value = txtstr.substring(0, txtstr.indexOf(','))+"  ";
  }
  else
  {
  	document.aspnetForm.Overlay.disabled = false;
  	document.aspnetForm.GPSSymbol.value = padText(txtstr.substring(0, txtstr.indexOf(','))+document.aspnetForm.Overlay.value, 4);
  }
  calcFullMessage();
  return (true);
}

function padText(textin, textlen)
{
  var textout = textin;
  for (i = textin.length; i < textlen; i++)
  {
  	textout += ' ';
  }
  return (textout);
}

function trim(textin)
{
  var textout = textin;
  var i = 0;
  for (;i < textin.length; i++)
  {
  	if (textin.charAt(i) != ' ')
  	  break;
  }
  if (i == textin.length)
  	return ("");
  if (i > 0)
  	textout = textin.substring(i+1, textin.length);
  i = textout.length - 1;
  for (;i >= 0; i--)
  {
  	if (textout.charAt(i) != ' ')
  	  break;
  }
  if (i < textout.length - 1)
    textout = textout.substring(0, i+1);
  return textout;
}

var ascii = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^";
function calcFullMessage()
{
  	var fullstr = padText(document.aspnetForm.MyCall.value, 8) + "," + document.aspnetForm.GPSSymbol.value + trim(document.aspnetForm.GPSMessage.value)
	var checksum = 0;
	for (i = 0; i < fullstr.length; i++)
	{
		checksum ^= fullstr.charCodeAt(i);
	}
	document.aspnetForm.FinalGPSMessage.value = fullstr.substr(fullstr.indexOf(',')+1, fullstr.length) + "*" +toHex(checksum);
}

var hexchars = "0123456789ABCDEF";
function toHex(intin)
{
	var strout = "";
	var tempint = intin/16;
	strout += hexchars.charAt(tempint);
	tempint = intin%16;
	strout += hexchars.charAt(tempint);
	return (strout);
}

function valOverlay(ovlfield)
{
  if (ovlfield.value.length > 1)
  {
    alert("Please enter only 1 characters in the \"Overlay Character\" field.");
    ovlfield.focus();
    return (false);
  }
  ovlfield.value = ovlfield.value.toUpperCase();

  var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  var checkStr = ovlfield.value;
  var allValid = true;
  var i;
  var ndx;
  for (i = 0;  i < checkStr.length;  i++)
  {
    ndx = checkOK.indexOf(checkStr.charAt(i));
    if (ndx < 0)
    {
    	allValid = false;
        break;
    }
  }
  if (!allValid)
  {
    alert("Please enter only \""+checkOK+"\" characters in the \"Overlay Character\" field.");
    ovlfield.focus();
    return (false);
  }
  valSymbol(document.aspnetForm.Symbol);
  return (true);
}

function valGPS(gpsmsg)
{
  if (gpsmsg.value.length > 13)
  {
    alert("Please enter at most 13 characters in the \"GPS Message\" field.");
    gpsmsg.focus();
    return (false);
  }
  gpsmsg.value = gpsmsg.value.toUpperCase();

  var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890!\"#$%&'()*+,-./:;<=>?@[\\]^";
  var checkStr = gpsmsg.value;
  var allValid = true;
  var i;
  var ndx;
  for (i = 0;  i < checkStr.length;  i++)
  {
    ndx = checkOK.indexOf(checkStr.charAt(i));
    if (ndx < 0)
    {
    	allValid = false;
        break;
    }
  }
  if (!allValid)
  {
    alert("Please enter only \""+checkOK+"\" characters in the \"GPS Message\" field.");
    gpsmsg.focus();
    return (false);
  }
  valSymbol(document.aspnetForm.Symbol);
  return (true);
}
