
var pch=false;

function PostcodeHandler(prefix)
{
  this.remote=new PostcodeToDistance(this);
  this.cr_prefix=prefix;
  this.e_dist=document.getElementById(this.cr_prefix+"distance_miles");
  this.e_indicator=document.getElementById(this.cr_prefix+"postcode_indicator");
}

PostcodeHandler.prototype=new PostcodeToDistanceListener;

PostcodeHandler.prototype.onGet_distance=function(res)
{
  //kaylee_debug("recieved distance of "+res)

  res=parseFloat(res);
  if (isNaN(res)) { this.e_dist.value='error'; }
  else { this.e_dist.value=round_off(1,res); }

  pch=false;
  this.e_indicator.style.display='none';
}


function check_postcode(e_postcode,alerts)
{
  var uk_postcode_re=new RegExp('([A-Z]{1,2}[0-9R][0-9A-Z]?) *([0-9][A-Z]{2})','i');
  var match=uk_postcode_re.exec(e_postcode.value);
  //kaylee_debug("testing "+uk_postcode_re.toString()+" against "+e_postcode.value+": "+match);
  if (match)
  {
    e_postcode.value=match[1].toUpperCase() + ' ' + match[2].toUpperCase();
    return true;
  }
  else
  {
    if (alerts)
    {
      e_postcode.focus();
      window.alert("Postcode is not a recognised UK postcode.");
    }
    return false;
  }
}

function services_postcode_update(prefix, alerts)
{
  var e_dist=document.getElementById(prefix+"distance_miles");
  if (!e_dist) { return true; }

  if (pch) { return false; }

  e_dist.value='';

  var e_postcode=document.getElementById(prefix+"postcode");
  var e_company=document.getElementById(prefix+"company_name");

  if (!check_postcode(e_postcode,alerts)) { return false; }

  pch=new PostcodeHandler(prefix);
  pch.remote.get_distance(e_company.value, e_postcode.value);
  pch.e_indicator.style.display='';

  return true;
}

