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

// maps the authority name to their ID
var districtDB = new Array();
districtDB["Rural Sussex"] = 294;
districtDB["Gatwick Diamond"] = 295;
districtDB["Coastal West Sussex"] = 296;

// maps the town/location name to their proximity ID
var townDB = new Array();
townDB["Midhurst"] = 18;
townDB["Petworth"] = 19;
townDB["Billinghurst"] = 20;
townDB["Horsham"] = 21; 
townDB["Gatwick Airport"] = 22;
townDB["Crawley"] = 23;
townDB["East Grinstead"] = 24;
townDB["Haywards Heath"] = 25;
townDB["Burgess Hill"] = 26;
townDB["Storrington"] = 27;
townDB["Pulborough"] = 28;
townDB["Arundel"] = 29;
townDB["Shoreham by Sea"] = 30;
townDB["Worthing"] = 31;
townDB["Littlehampton"] = 32;
townDB["Bognor Regis"] = 33;
townDB["Chichester"] = 34;
townDB["Selsey"] = 35;
townDB["Leatherhead"] = 73;
townDB["Dorking"] = 72;
townDB["Reigate"] = 74;
townDB["Redhill"] = 75;
townDB["Godstone"] = 76;
townDB["Horley"] = 77;

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 );
  selectedDistricts[selectedDistricts.length] = new Authority( name);;
  debug( "Added authority '" + name + "'" );
}

function removeAuthority( name )
{
	var tmpArray = new Array();
  for( var kk = 0; kk < selectedDistricts.length; kk++ )
  {
    if( selectedDistricts[kk] && selectedDistricts[kk]._name == name )
    {
    	selectedDistricts[kk] = null;
      debug( "Removed authority '" + name + "'");
    }
    else
    {
			tmpArray[tmpArray.length] = selectedDistricts[kk];
		}
  }
  selectedDistricts = 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( selectedDistricts.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 < selectedDistricts.length; kk++ )
  {
		buffer += "\n" + selectedDistricts[kk]._name;
	}
	buffer += "\n-------------------------------------";
	info( buffer );

  var idString = "";
  for( var kk = 0; kk < selectedDistricts.length; kk++ )
  {
    if( selectedDistricts[kk] != null )
    {
      districtId = districtDB[selectedDistricts[kk]._name];

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

	frm.action = getAreaAction();
  frm.areaIds.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.areaIds.value = "";
  frm.proximity.value = idString;
  frm.submit();
}

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

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

	if( frm.all_areas.checked )
	{
		return true;
	}
	
	for( var kk = 0; kk < frm.elements['area'].length; kk++ )
	{
		var box = frm.elements['area'][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;
}
