var selectedAuthorities = new Array();
var selectedTowns = new Array();
var debugLevel = 0;

// maps the authority name to their ID
var authorityDB = new Array();
authorityDB["Eastbourne"] = 139;
authorityDB["Hastings"] = 182;
authorityDB["Lewes"] = 215;
authorityDB["Rother"] = 311;
authorityDB["Wealden"] = 416;

// maps the town/location name to their proximity ID
var townDB = new Array();
townDB["Battle"] = 1;
townDB["Bexhill"] = 2;
townDB["Crowborough"] = 3;
townDB["Eastbourne"] = 4;
townDB["Flimwell"] = 5;
townDB["Hailsham"] = 6;
townDB["Hastings"] = 7;
townDB["Heathfield"] = 8;
townDB["Lewes"] = 9;
townDB["Newhaven"] = 10;
townDB["Peacehaven"] = 11;
townDB["Polegate"] = 12;
townDB["Rye"] = 13;
townDB["Seaford"] = 14;
townDB["St Leonards"] = 15;
townDB["Uckfield"] = 16;
townDB["Wadhurst"] = 17;


function debug( msg )
{
	if( debugLevel >= 2 )
	{
		alert( msg );
	}
}

function info( msg )
{
	if( debugLevel >= 1 )
	{
		alert( msg );
	}
}

function Town( _name, _distance )
{
  this._name = _name;
  this._distance = _distance;
  
}

function getNumericDistance( town )
{
	if( town._distance == "one" )
	{
		return 1;
	}
	else if( town._distance == "two" )
	{
		return 2;
	}
	else if( town._distance == "five" )
	{
		return 5;
	}
	else if( town._distance == "ten" )
	{
		return 10;
	}
	else
	{
		return 0;
	}
}

function Authority( _name )
{
  this._name = _name;
}

function addAuthority( name )
{
	removeAuthority( name );
  selectedAuthorities[selectedAuthorities.length] = new Authority( name);;
  debug( "Added authority '" + name + "'" );
}

function removeAuthority( name )
{
	var tmpArray = new Array();
  for( var kk = 0; kk < selectedAuthorities.length; kk++ )
  {
    if( selectedAuthorities[kk] && selectedAuthorities[kk]._name == name )
    {
    	selectedAuthorities[kk] = null;
      debug( "Removed authority '" + name + "'");
    }
    else
    {
			tmpArray[tmpArray.length] = selectedAuthorities[kk];
		}
  }
  selectedAuthorities = tmpArray;
}

function addTown( name, distance )
{
  // in case it's already been added
  removeTown( name );

  selectedTowns[selectedTowns.length] = new Town( name, distance );;
  debug( "Added town '" + name + "' for distance '" + distance + "'" );
}

function removeTown( name )
{
	var tmpArray = new Array();
  for( var kk = 0; kk < selectedTowns.length; kk++ )
  {
    if( selectedTowns[kk] && selectedTowns[kk]._name == name )
    {
      debug( "Removing town '" + name + "' [" + selectedTowns[kk]._distance + "]");
      selectedTowns[kk] = null;
    }
    else
    {
			tmpArray[tmpArray.length] = selectedTowns[kk];			
		}
  }
  selectedTowns = tmpArray;
}

function searchDistricts()
{
  var frm = document.forms['locationForm'];

	if( selectedAuthorities.length == 0 )
	{
		info( "Searching all districts" );
		frm.all_authorities.value = "true";
	  frm.submit();
		return;
	}
	
	var buffer = "Searching the following districts:";
	buffer += "\n-------------------------------------";
	for( var kk = 0; kk < selectedAuthorities.length; kk++ )
  {
		buffer += "\n" + selectedAuthorities[kk]._name;
	}
	buffer += "\n-------------------------------------";
	info( buffer );

  var idString = "";
  for( var kk = 0; kk < selectedAuthorities.length; kk++ )
  {
    if( selectedAuthorities[kk] != null )
    {
      authorityId = authorityDB[selectedAuthorities[kk]._name];

      if( kk > 0 )
      {
        idString += ",";
      }
      idString += authorityId;
    }
  }

	frm.action = getAreaAction();
  frm.authority.value = idString;
  frm.proximity.value = "";
  frm.submit();
}

function searchTowns()
{
  var frm = document.forms['locationForm'];

	var buffer = "Searching the following selectedTowns:";
	buffer += "\n-------------------------------------";
	for( var kk = 0; kk < selectedTowns.length; kk++ )
  {
		buffer += "\n" + selectedTowns[kk]._name + " [" + selectedTowns[kk]._distance + " miles]";
	}
	buffer += "\n-------------------------------------";
	info( buffer );
	
  var idString = "";
	for( var kk = 0; kk < selectedTowns.length; kk++ )
  {
    if( selectedTowns[kk] != null )
    {
			info( "Adding: " + selectedTowns[kk]._name );
      townId = townDB[selectedTowns[kk]._name];

      if( kk > 0 )
      {
        idString += ",";
      }
      idString += townId + ":" + getNumericDistance( selectedTowns[kk] );

    }
		info( "idString: " + idString );
	}

	frm.action = getProximityAction();
  frm.authority.value = "";
  frm.proximity.value = idString;
  frm.submit();
}

function toggleDistrictCheckboxes()
{
  var frm = document.forms['districtForm'];
  var targetState = frm.all_authorities.checked ? true : false;
  for ( var kk = 0; kk < frm.elements['authorityId'].length; kk++ )
  {
		frm.elements['authorityId'][kk].disabled = targetState;
  }
}

function validateDistrictSearchForm()
{
	var frm = document.forms['districtForm'];

	if( frm.all_authorities.checked )
	{
		return true;
	}
	
	for( var kk = 0; kk < frm.elements['authorityId'].length; kk++ )
	{
		var box = frm.elements['authorityId'][kk];
		if( box.checked )
		{
			return true;
		}
	}
	
	alert( "Please ensure you have selected one or more districts to search within" );
	return false;
}

function validateTownSearchForm()
{
	var frm = document.forms['townForm'];

	for( var kk = 0; kk < frm.elements['proximity_multiple'].length; kk++ )
	{
		var dropdown = frm.elements['proximity_multiple'][kk];
		if( dropdown.selectedIndex > 0 )
		{
			return true;
		}
	}
	
	alert( "Please ensure you have selected at least one town within which to search" );
	return false;
}
