// map.js
// Use OS API and public maps to plot UK locator squares
//
// Julian Ross 11-Apr-2010

var osMap, screenOverlay, mapOV, postcodeService;
// Variables for contest overlays
var call = [];
var loc  = [];
var overlayOn = 0;

// Variables for postcode/gazetteer searches
var inputStr, sectorFlag, globalGazArray, locationFound, zoomVal, eastVal, eastValstr, o, da;

// Lookup Array for  OS map 100km squares
var letters = new Array(5);
for (var i=0; i<5; i++)
  letters[i] = new Array(5);

// Start of Functions required for postcode/gazetteer searches

// tiles quota
function tileCountResults(tilesUsed, maxTiles) {
  var s = "Tiles Used: " + tilesUsed + " of " + maxTiles;
  alert(s);
}

//clear search box when clicked on
function clearText() {
document.getElementById("searchArea").value = "";
}

// Is string an IARU locator
function isIARU(str) {
  //aa99aa
  var regexp = /^[A-R]{2}[0-9]{2}[A-X]{2}$/i;
  return regexp.test(str);
}

// Convert 6 character IARU locator to Map Point
function IARUtoMap(str) {
  var loc = str.toUpperCase();
  var gridProjection = new OpenSpace.GridProjection();
  var lon = (loc.charCodeAt(0)-65) * 20 + (loc.charCodeAt(2)-48) * 2 + (loc.charCodeAt(4)-65 +0.5) * 5/60   - 180;
  var lat = (loc.charCodeAt(1)-65) * 10 + (loc.charCodeAt(3)-48)     + (loc.charCodeAt(5)-65 +0.5) * 2.5/60 -  90;
  var lonlat = new OpenLayers.LonLat(lon, lat);
  var mapPoint = gridProjection.getMapPointFromLonLat(lonlat);
  return mapPoint;
}

// Convert Map Point to 6 character IARU locator
function maptoIARU(map) {
  //alert("maptoIARU called x");
  var gridProjection = new OpenSpace.GridProjection();
  var lonlat = gridProjection.getLonLatFromMapPoint(map);
  var iaru = lonlattoIARU(lonlat);
  //alert("maptoIARU: " + iaru);  
  return iaru;
}

// Convert long/lat to 6 character IARU locator
function lonlattoIARU(lonlat) {
  var lon = lonlat.lon +180;
  var lon1 = Math.floor(lon/20);
  var lon2 = Math.floor((lon - lon1*20)/2);
  var lon3 = Math.floor((lon - lon1*20 - lon2*2)/ (5/60));
  
  var lat = lonlat.lat + 90;
  var lat1 = Math.floor(lat/10);
  var lat2 = Math.floor((lat - lat1*10));
  var lat3 = Math.floor((lat - lat1*10 - lat2)/ (2.5/60));
  var iaru1 = String.fromCharCode(lon1+65, lat1+65, lon2+48, lat2+48, lon3+65, lat3+65);
  //alert("lonlattoIARU: " + iaru1);
  return iaru1;
}

function padDigits(n, totalDigits) 
    { 
        n = n.toString(); 
        var pd = ''; 
        if (totalDigits > n.length) 
        { 
            for (i=0; i < (totalDigits-n.length); i++) 
            { 
                pd += '0'; 
            } 
        } 
        return pd + n.toString(); 
    } 

function maptoMapRef(map) {
  var x = map.lat;
  var y = map.lon;
  var x500 = Math.floor(x/500000);
  var y500 = Math.floor(y/500000);

  var x100 = Math.floor((x - x500 * 500000)/100000);
  var y100 = Math.floor((y - y500 * 500000)/100000);

  xrem = x - x500 * 500000 -x100 * 100000;
  yrem = y - y500 * 500000 -y100 * 100000;

  var ngr = letters[x500+1][y500+2] + letters[x100][y100] + " " + padDigits(Math.floor(yrem/100),3)+ " " + padDigits(Math.floor(xrem/100),3) ;
  return ngr;
}

// Overlay locator square on map
function drawSquare(str) {
  var loc = str.toUpperCase();
  var gridProjection = new OpenSpace.GridProjection();
  var lon, lat, lonlat, mapPoint
  var points = [];
  
  //define our particular line styling, including width and colour of the line:
  var style_green = {
      strokeColor: "#000000",
      strokeOpacity: 1,
      strokeWidth: 1,
      fillColor: "#00FF00",
      fillOpacity: 0.2,
	  label : loc, // see context below
      labelAlign: "cm",
      fontColor: "black",
      fontSize: "20px",
      fontFamily: "Verdana",
      fontWeight: "normal"
   };
  
  var style_red = {
      strokeColor: "#000000",
      strokeOpacity: 1,
      strokeWidth: 1,
      fillColor: "#F82000",
      fillOpacity: 0.2,
	  label : loc, // see context below
      labelAlign: "cm",
      fontColor: "black",
      fontSize: "14px",
      fontFamily: "Verdana",
      fontWeight: "bold"
   };

   // Bottom Left
   lon = (loc.charCodeAt(0)-65) * 20 + (loc.charCodeAt(2)-48) * 2 + (loc.charCodeAt(4)-65) * 5/60   - 180;
   lat = (loc.charCodeAt(1)-65) * 10 + (loc.charCodeAt(3)-48)     + (loc.charCodeAt(5)-65) * 2.5/60 -  90;
   lonlat = new OpenLayers.LonLat(lon, lat);
   mapPoint = gridProjection.getMapPointFromLonLat(lonlat);
   points.push(new OpenLayers.Geometry.Point(mapPoint.getEasting(), mapPoint.getNorthing()));

    // Bottom Right
    lon = (loc.charCodeAt(0)-65) * 20 + (loc.charCodeAt(2)-48) * 2 + (loc.charCodeAt(4)-65+1) * 5/60   - 180;
    lonlat = new OpenLayers.LonLat(lon, lat);
    mapPoint = gridProjection.getMapPointFromLonLat(lonlat);
    points.push(new OpenLayers.Geometry.Point(mapPoint.getEasting(), mapPoint.getNorthing()));

    // Top Right
    lat = (loc.charCodeAt(1)-65) * 10 + (loc.charCodeAt(3)-48)     + (loc.charCodeAt(5)-65+1) * 2.5/60 -  90;
    lonlat = new OpenLayers.LonLat(lon, lat);
    mapPoint = gridProjection.getMapPointFromLonLat(lonlat);
    points.push(new OpenLayers.Geometry.Point(mapPoint.getEasting(), mapPoint.getNorthing()));

    // Bottom Left
    lon = (loc.charCodeAt(0)-65) * 20 + (loc.charCodeAt(2)-48) * 2 + (loc.charCodeAt(4)-65) * 5/60   - 180;
    lonlat = new OpenLayers.LonLat(lon, lat);
    mapPoint = gridProjection.getMapPointFromLonLat(lonlat);
    points.push(new OpenLayers.Geometry.Point(mapPoint.getEasting(), mapPoint.getNorthing()));
	
    //create a polygon feature from the array of points and using the style from above
    var linearRing = new OpenLayers.Geometry.LinearRing(points);
    var polygonFeature = new OpenLayers.Feature.Vector(linearRing, null, style_green);
    polygonFeature.style.fontSize=6;
    vectorLayer.addFeatures([polygonFeature]);
    //add it to the map
    osMap.addLayer(vectorLayer);
    // Push layer below searchbox so that events get through
    osMap.raiseLayer(vectorLayer, -1);
  return;
}

// Clear everything on squares overlay
function clearSquares() {
   vectorLayer.removeFeatures(vectorLayer.features);
   overlayOn=0;
   call=[];
   loc=[];
   return
}

// Load Squares set 1 (23cm)
function overlay1() {
clearSquares();
call[1]='G3ZME/P';   loc[1]='IO82NN';
for (var i=1;i<loc.length; i++)
     // Only plot if there is a valud locator  
     if (isIARU(loc[i])) {
       drawSquare(loc[i]);
	 }
    overlayOn=1;
   return
}
// eton wminter st pauls 1/20 students in oxbridge.
// Load Squares set 3 (2m)
function overlay3() {
clearSquares();
call[1]='MW1MDH'; loc[1]='IO83ME';
call[2]='G3RSC/P'; loc[2]='IO92FM';
call[3]='GM0FRC/P'; loc[3]='IO86EE';
call[4]='G3NFC/P'; loc[4]='IO93BA';
call[5]='G4MWS/P'; loc[5]='IO83WD';
call[6]='2E0HST'; loc[6]='IO83SC';
call[7]='F0DBT'; loc[7]='JN09MI';
call[8]='G80FA'; loc[8]='IO91CB';
call[9]='G4JGH'; loc[9]='IO92BK';
call[10]='G4VPD'; loc[10]='IO92BJ';
call[11]='M0SWZ'; loc[11]='IO83XK';
call[12]='G0NMY'; loc[12]='IO83VA';
call[13]='G4ATH/P'; loc[13]='IO83NU';
call[14]='G1ONE/P'; loc[14]='IO83RO';
call[15]='G0KSC/P'; loc[15]='JO01GN';
call[16]='MW3WZZ'; loc[16]='IO83LA';
call[17]='G2OA/P'; loc[17]='IO83MN';
call[18]='G0LGS'; loc[18]='IO81WV';
call[19]='G5RV/P'; loc[19]='IO90WV';
call[20]='G4WAC/P'; loc[20]='IO92BJ';
call[21]='GC4LZP'; loc[21]='IO82CV';
call[22]='G7RHF'; loc[22]='IO82QK';
call[23]='G4NNS'; loc[23]='IO91FF';
call[24]='G3VLG/P'; loc[24]='IO92GD';
call[25]='G1JZU'; loc[25]='IO83WV';
call[26]='G4BEE'; loc[26]='IO83RQ';
call[27]='G3IOE'; loc[27]='IO94DX';
call[28]='G2BOF'; loc[28]='IO91VI';
call[29]='M0PNN'; loc[29]='IO82TS';
call[30]='G3SMT'; loc[30]='IO82KV';
call[31]='2M0ZBH'; loc[31]='IO86GD';
call[32]='G0GER/P'; loc[32]='IO84LI';
call[33]='GM3WOJ'; loc[33]='IO77WS';
call[34]='M0WAF'; loc[34]='IO92VN';
call[35]='2M0CDO'; loc[35]='IO85VP';
call[36]='G3OAG'; loc[36]='IO83UM';
call[37]='M0DGQ'; loc[37]='IO92BK';
call[38]='G0OLE/P'; loc[38]='IO93PX';
call[39]='GW3SRT/P'; loc[39]='IO82LQ';
call[40]='GM4WZG/P'; loc[40]='IO86HA';
call[41]='MW6OXO/P'; loc[41]='IO82ET';
call[42]='G1BBY'; loc[42]='IO95CF';
call[43]='G3GHN/P'; loc[43]='JO01HH';
call[44]='MX0SRA/P'; loc[44]='IO83RO';
call[45]='G3WM/P'; loc[45]='JO01OC';
call[46]='G3ZVW'; loc[46]='IO80MS';
call[47]='GM4YEQ/P'; loc[47]='IO85MM';
call[48]='2E0GYO'; loc[48]='IO83NN';
call[50]='MW0TTE/P'; loc[50]='IO82HV';
call[51]='MM0CPS/P'; loc[51]='IO84BT';
call[52]='M1MHZ'; loc[52]='IO92WV';
call[53]='GW4BZD/P'; loc[53]='IO73UJ';
call[54]='GW4ZPL'; loc[54]='IO73WD';
call[55]='EI3GE'; loc[55]='IO63XD';
call[56]='EI7T/P'; loc[56]='IO62JI';
call[57]='M5FUN'; loc[57]='JO00DX';
call[58]='G5RR/P'; loc[58]='IO93GC';
call[59]='GI4GTY/P'; loc[59]='IO74AI';
call[60]='G0BBB'; loc[60]='IO91PK';
call[61]='G6KAR'; loc[61]='IO83SO';
call[62]='G3BNE'; loc[62]='JO01BJ';
call[63]='EI9JU'; loc[63]='IO65GA';
call[64]='G0TRB'; loc[64]='IO92EO';
call[65]='G1MZD'; loc[65]='IO92OB';
call[66]='GI1CET/P'; loc[66]='IO74DT';
call[67]='GM3UCI'; loc[67]='IO85BR';
call[68]='G3RCV/P'; loc[68]='JO01DH';
call[69]='GD0AMD'; loc[69]='IO74QE';
call[70]='EI9JS'; loc[70]='IO53QX';
call[71]='G0KNM'; loc[71]='IO82XL';
call[72]='M0PAR'; loc[72]='IO82UC';
call[73]='GM3PMB'; loc[73]='IO75QJ';
call[74]='GW8IZR'; loc[74]='IO73TI';
call[75]='G3CKR/P'; loc[75]='IO93AD';
call[76]='F1CBC'; loc[76]='JN09BO';
call[77]='GI4SNA'; loc[77]='IO64XM';
call[78]='G0NMY'; loc[78]='IO83VA';
call[79]='G7APD/P'; loc[79]='IO92KG';
call[80]='MW1LKR'; loc[80]='IO82KW';
call[81]='M0HZT/P'; loc[81]='IO81RF';
call[82]='M0MDG/P'; loc[82]='JO00EW';
call[83]='G1OFW'; loc[83]='IO91QH';
call[84]='G0KDV/P'; loc[84]='JO01BJ';
call[85]='G3XAN'; loc[85]='IO83ML';
call[86]='G4JNN'; loc[86]='IO93DS';
call[87]='2E0HST/P'; loc[87]='IO83SC';
call[88]='G4HGI'; loc[88]='IO83PL';
call[89]='G6XRK'; loc[89]='IO91RN';
call[90]='G3UD'; loc[90]='IO82VX';
call[91]='M0HJO'; loc[91]='IO70OP';
call[92]='G0VFW'; loc[92]='IO91RR';
call[93]='F1CXX'; loc[93]='JN18AT';
call[94]='GW4OKT'; loc[94]='IO83LE';
call[95]='M0COP'; loc[95]='IO82OM';
call[96]='G4WAW/P'; loc[96]='IO81QJ';
call[97]='G6DZH'; loc[97]='IO92AG';
call[98]='G6YLV'; loc[98]='IO91NT';
call[99]='2E0SQL'; loc[99]='IO91JS';
call[100]='MM3WJZ/P'; loc[100]='IO76LT';
call[101]='G7ITD'; loc[101]='IO81VU';
call[102]='G3MLO'; loc[102]='JO01MD';
call[103]='EI0W/P'; loc[103]='IO63RS';
call[104]='MI0SMK/P'; loc[104]='IO74AI';
call[105]='G8LED/P'; loc[105]='IO92LE';
call[106]='GW4ZAR'; loc[106]='IO83KF';
call[107]='GM4AAF/P'; loc[107]='IO86MQ';
call[108]='G3ZME/P'; loc[108]='IO82NN';
call[109]='G8ZK/P'; loc[109]='IO93NF';
call[110]='G1FYN'; loc[110]='IO95EF';
call[111]='G5LK/P'; loc[111]='JO01ND';
call[112]='G0ORG'; loc[112]='JO02LB';
call[113]='G3FJE/P'; loc[113]='IO92XA';
call[114]='G6BSE/P'; loc[114]='JO02KD';
call[115]='GM6TVR'; loc[115]='IO84JX';
call[116]='GM3HAM/P'; loc[116]='IO74WV';
call[117]='G4XZK/P'; loc[117]='IO82AW';
call[118]='G3TDH'; loc[118]='IO83WI';
call[119]='G1JZY'; loc[119]='IO83UM';
call[120]='2E0TRX'; loc[120]='IO91OG';
call[121]='M0DSZ'; loc[121]='IO82LS';
call[122]='G4FKA'; loc[122]='IO81SM';
call[123]='GM4JOJ'; loc[123]='IO97AN';
call[124]='G0SYA'; loc[124]='IO81RK';
call[125]='F4EGA'; loc[125]='JO10QK';
call[126]='G3PYE/P'; loc[126]='JO02ED';
call[127]='G6FRS/P'; loc[127]='IO91PF';
call[128]='GI4UUC'; loc[128]='IO74BS';
call[129]='GM4PPT'; loc[129]='IO75SK';
call[130]='GM4DDL'; loc[130]='IO75IM';
call[131]='G0ALC'; loc[131]='IO92AP';
call[132]='G4DHK'; loc[132]='IO81QL';
call[133]='G0OID'; loc[133]='IO81XM';
call[134]='EI9E/P'; loc[134]='IO62OM';
call[135]='GI8RQI'; loc[135]='IO64UI';
call[136]='G0IXZ'; loc[136]='IO93IF';
call[137]='G1WQC'; loc[137]='IO90KR';
call[138]='GU3TUX'; loc[138]='IN89VR';
call[139]='F/OK1CZ/P'; loc[139]='IN99OI';
call[140]='G0TAL'; loc[140]='IO93DR';
call[141]='G4GIQ'; loc[141]='IO83SG';
call[142]='G0NFH'; loc[142]='IO81QM';
call[143]='M1EVH'; loc[143]='IO82XO';
call[144]='G2AS/P'; loc[144]='IO93FL';
call[145]='G0CER'; loc[145]='IO82RV';
call[146]='G8NKX/M'; loc[146]='IO83PE';
call[147]='G1MHU'; loc[147]='IO93GO';
call[148]='G4APJ'; loc[148]='IO83UP';
call[149]='MW0GOV'; loc[149]='IO71LS';
call[150]='G0KYS'; loc[150]='IO80GO';
//call[151]='GM0FRC/P'; loc[151]='AA00AA';
call[152]='2E1UTD'; loc[152]='IO82MP';
call[153]='GM0HTT'; loc[153]='IO89JC';
call[154]='G4RFR/P'; loc[154]='IO80ST';
call[155]='M0DAD'; loc[155]='IO95FC';
call[156]='G4OBK'; loc[156]='IO94OF';
call[157]='G8TTI'; loc[157]='IO81WM';
call[158]='2E0TDX/P'; loc[158]='IO83TW';
call[159]='G8PIR/P'; loc[159]='JO02TM';
call[160]='G3UCA'; loc[160]='IO83QR';
call[161]='MM0DXE'; loc[161]='IO86OE';
//call[162]='G8KAP'; loc[162]='AA00AA';
//call[163]='G5RR/P'; loc[163]='IO93';
call[164]='G4JBH/P'; loc[164]='IO80LV';
call[165]='G1KOT'; loc[165]='JO01FN';
call[166]='2E0LES'; loc[166]='IO83KJ';
call[167]='2E0DTB'; loc[167]='IO82SQ';
call[168]='G4HRC/P'; loc[168]='JO01DP';
call[169]='M0BPQ'; loc[169]='IO91WP';
call[170]='G8BPY'; loc[170]='IO91UJ';
call[171]='G1FYS'; loc[171]='IO93CP';
call[172]='G0ROC/P'; loc[172]='IO83VQ';
call[173]='G4FZN/P'; loc[173]='IO94MJ';
call[174]='GW8JLY'; loc[174]='IO81JM';
call[175]='2E0DHT'; loc[175]='IO83SO';
call[176]='2E0CRZ'; loc[176]='IO83PQ';
call[177]='G6IPU/P'; loc[177]='JO02QV';
call[178]='GW0GPQ'; loc[178]='IO81BW';
call[179]='G4CTU'; loc[179]='IO82UJ';
call[180]='GM4AFF'; loc[180]='IO86TS';
call[181]='G8BVJ'; loc[181]='IO92VH';
call[182]='G4ENZ'; loc[182]='IO81VV';
call[183]='G8LIY'; loc[183]='IO83UC';
call[184]='GU6EFB'; loc[184]='IN89RK';
call[185]='G4BZP'; loc[185]='IO92KT';
call[186]='G0TLA/P'; loc[186]='IO93HL';
call[187]='2E0UOG'; loc[187]='IO83PN';
call[188]='EI4JY'; loc[188]='IO63XD';
call[189]='G4BTS'; loc[189]='IO93IM';
call[190]='G0ELG'; loc[190]='IO92DM';
call[191]='2E0MAS'; loc[191]='IO83QM';
call[192]='G7HFS/P'; loc[192]='JO00DT';
call[193]='G3WIM/P'; loc[193]='IO91XG';
call[194]='DLR1D'; loc[194]='JO30IK';
call[195]='PI4GN'; loc[195]='JO33II';
call[196]='M0XBF'; loc[196]='JO01HO';
call[197]='G4DZL'; loc[197]='IO92IS';
call[198]='G7HAH/P'; loc[198]='IO93WH';
call[199]='GW2OP/P'; loc[199]='IO71OP';
call[200]='DF0MU'; loc[200]='JO32PC';
call[201]='G0FBB/P'; loc[201]='JO01LD';
call[202]='G4FPJ'; loc[202]='IO83WG';
call[203]='ON4PRA/P'; loc[203]='JO20CW';
call[204]='G3VER/P'; loc[204]='IO91RU';
call[205]='F6KCP/P'; loc[205]='JN18OU';
call[206]='G4ADV/P'; loc[206]='IO70NK';
call[207]='F5CT'; loc[207]='JN08KI';
call[208]='M6MMS'; loc[208]='IO91AI';
call[209]='G8SRC/P'; loc[209]='IO91DM';
call[210]='G5FZ/P'; loc[210]='IO93RH';
call[211]='G0GSH'; loc[211]='IO92HM';
call[212]='M0BKV'; loc[212]='IO70RR';
call[213]='GM0ELP'; loc[213]='IO75XR';
call[214]='GW0HUS'; loc[214]='IO83JF';
call[215]='PA4VHF'; loc[215]='JO32JE';
call[216]='ON4MCL'; loc[216]='JO21IB';
call[217]='PD2TW'; loc[217]='JO33FI';
call[218]='DL8GP'; loc[218]='JN39LH';
call[219]='G4SHF'; loc[219]='IO92IN';
call[220]='DL5DBT'; loc[220]='JO31TN';
call[221]='G4BZA'; loc[221]='IO93XG';
call[222]='PA8KM'; loc[222]='JO32BS';
call[223]='PA0EMO'; loc[223]='JO23TE';
call[224]='G3ZGC'; loc[224]='IO91HJ';
call[225]='G4DFI'; loc[225]='JO01BL';
call[226]='G7IGC'; loc[226]='IO92EO';
call[227]='G3NIJ'; loc[227]='IO94DX';
call[228]='M0NWW'; loc[228]='JO01PW';
call[229]='G7EMD'; loc[229]='IO83TK';
call[230]='PA2CV/P'; loc[230]='JO22VE';
call[231]='ON7XC'; loc[231]='JO10KU';
call[232]='G8BPN'; loc[232]='IO82PE';
call[233]='G3SZJ'; loc[233]='IO92WI';
call[234]='G0UAZ'; loc[234]='IO83PQ';
call[235]='DL1KFS'; loc[235]='JO30FQ';
call[236]='PE1EWR'; loc[236]='JO11SL';
call[237]='ON5GS'; loc[237]='JO21SC';
call[238]='ON5LGS'; loc[238]='JO10OS';
call[239]='ON4AKV/P'; loc[239]='JO20MV';
call[240]='2W0IBM'; loc[240]='IO83LD';
call[241]='DM5C'; loc[241]='JO42RG';
call[242]='M0LIT'; loc[242]='IO92BN';
call[243]='G3NRQ'; loc[243]='JO03CK';
call[244]='G3ZEZ'; loc[244]='JO01NT';
call[245]='PI4DHV/P'; loc[245]='JO22MT';
call[246]='G7DWY'; loc[246]='IO93BR';
call[247]='G0AXC'; loc[247]='IO80JQ';
call[248]='G8PWX'; loc[248]='IO95GA';
call[249]='MM0CEZ'; loc[249]='IO75XU';
call[250]='G0FCA'; loc[250]='IO83VS';
call[251]='G4PFW/P'; loc[251]='IO91VC';
call[252]='F1TZE/P'; loc[252]='JN09WJ';
call[253]='2E0FLP/P'; loc[253]='IO81XW';
call[254]='G7PVZ'; loc[254]='IO91OM';
call[255]='EI2HX/P'; loc[255]='IO63RS';
call[256]='G0TAR'; loc[256]='JO01DI';
call[257]='PD4HDB'; loc[257]='JO32HN';
call[258]='GW8SFT/P'; loc[258]='IO82CI';
call[259]='MU3ZLQ'; loc[259]='IN89QK';
call[260]='GW1UJU'; loc[260]='IO83JF';
call[261]='PD0HCV'; loc[261]='JO31FW';
call[262]='PE1DCY'; loc[262]='JO22SI';
call[263]='G4PDI'; loc[263]='JO02DD';
call[264]='2E0UAC'; loc[264]='IO92FJ';
call[265]='G8ILD'; loc[265]='IO83WK';
call[266]='M0KCR'; loc[266]='JO01GH';
call[267]='M0SAA'; loc[267]='JO02HK';
call[268]='G4UDG'; loc[268]='IO83VT';
call[269]='G3UDA'; loc[269]='IO82OQ';
call[270]='G6HIE'; loc[270]='IO90ST';
call[271]='G4JLG'; loc[271]='IO83TM';
call[272]='G8YPL'; loc[272]='IO83ML';
call[273]='M3CJV'; loc[273]='IO83XM';
call[274]='2W0ZJA'; loc[274]='IO81HW';
call[275]='GW8BTX'; loc[275]='IO72XG';
call[276]='2E0CVU'; loc[276]='IO92BN';
call[277]='G8TIK'; loc[277]='IO82VF';
call[278]='G4EST'; loc[278]='IO83OM';
call[279]='GW0WZZ/P'; loc[279]='IO82LX';
call[280]='G3NPB'; loc[280]='IO70GE';
call[281]='M0TJU'; loc[281]='IO83WJ';
call[282]='F9OE'; loc[282]='IN78QG';
call[283]='G4ALY'; loc[283]='IO70VL';
call[284]='2E0FPC'; loc[284]='IO83VA';
call[285]='G4WBV'; loc[285]='IO81QL';
call[286]='G3ZKN'; loc[286]='IO81VV';
call[287]='G4XFD/M'; loc[287]='IO83WI';
call[288]='G3NKS'; loc[288]='IO81WV';
call[289]='G0VNI'; loc[289]='IO90FV';
call[290]='M3YYK'; loc[290]='IO82XP';
call[291]='G8SWZ/P'; loc[291]='IO82UP';
call[292]='G0GEP'; loc[292]='IO92CM';
call[293]='GM4JR'; loc[293]='IO85FB';
call[294]='2E0NJC'; loc[294]='IO71VE';
call[295]='G3XNO'; loc[295]='IO93DW';
call[296]='F1CKB/P'; loc[296]='IN97PL';
call[297]='MM1APS/P'; loc[297]='IO85LM';
call[298]='GW3ATZ/P'; loc[298]='IO83LC';
call[299]='G8NDN'; loc[299]='IO91GF';
call[300]='G4VRC/P'; loc[300]='IO90OW';
call[301]='G1ARU/P'; loc[301]='JO02HT';
call[302]='M6DLT'; loc[302]='IO83SS';
call[303]='2E0RUZ/P'; loc[303]='IO92GW';
call[304]='G8ZRE/P'; loc[304]='IO83JA';
call[305]='G7NBE/P'; loc[305]='IO92IR';
call[306]='G3SDC/P'; loc[306]='IO92NP';
call[307]='PA3PCV'; loc[307]='JO20VV';
call[308]='M0HAZ'; loc[308]='JO03DD';
call[309]='G4ARI/P'; loc[309]='IO92IQ';
call[310]='G3BPK/P'; loc[310]='IO83PN';
call[311]='M0BAO/P'; loc[311]='IO80PT';
call[312]='G3YRH'; loc[312]='IO95FA';
call[313]='GW4RWR/P'; loc[313]='IO82HV';
call[314]='MW0JLA/P'; loc[314]='IO81JW';
call[315]='G0IUE'; loc[315]='IO81WJ';
call[316]='2E0BXD'; loc[316]='IO70OJ';
call[317]='G4VDZ'; loc[317]='IO95AH';
call[318]='GM7NVA'; loc[318]='IO85PO';
call[319]='GM4ILS'; loc[319]='IO87IP';
call[320]='MS0LIV/P'; loc[320]='IO85OQ';
call[321]='G4OIV'; loc[321]='IO95FE';
call[322]='G8PNN/P'; loc[322]='IO95CI';
call[323]='M3IFG/P'; loc[323]='IO83WL';
call[324]='2E0FRY'; loc[324]='IO82XO';
call[325]='G4XZL/P'; loc[325]='IO90MX';
call[326]='G0OVA/P'; loc[326]='IO91QI';
call[327]='G6VBQ'; loc[327]='IO92XI';
call[328]='DL1EIP'; loc[328]='JO31DF';
call[329]='GW4EVX'; loc[329]='IO83KE';
call[330]='G6TXP/P'; loc[330]='JO01GH';
call[331]='G6ZMX'; loc[331]='IO91FQ';
call[332]='M3ZCB'; loc[332]='JO02BF';
call[333]='G0OKW'; loc[333]='JO02NI';
call[334]='GI0GDF'; loc[334]='IO64XM';
call[335]='M3RNX'; loc[335]='IO83TO';
call[336]='2E0CFV'; loc[336]='IO93BG';
call[337]='G6OCW'; loc[337]='IO83TK';
call[338]='GW4PJQ'; loc[338]='IO83GG';
call[339]='M0DEP'; loc[339]='IO90CR';
call[340]='2E0VXX/P'; loc[340]='IO82QJ';
call[341]='G4ERR'; loc[341]='IO81WU';
call[342]='G0BWV/A'; loc[342]='IO90OR';
call[343]='2E0JWJ'; loc[343]='IO81VG';
call[344]='MM1DDD/P'; loc[344]='IO86FD';
call[345]='G8LZE'; loc[345]='IO91SO';
call[346]='2E0TXT/P'; loc[346]='IO83TP';
call[347]='M5ABH/P'; loc[347]='IO93IE';
call[348]='G0LWU'; loc[348]='IO84NA';
call[349]='GD0TFG/P'; loc[349]='IO74PD';
call[350]='GW6NLP'; loc[350]='IO83KB';
call[351]='G3PYE/P'; loc[351]='JO02ED';
call[352]='G3OOU'; loc[352]='IO91WH';
call[353]='M3WDS'; loc[353]='IO81WV';
call[354]='G4WUX'; loc[354]='IO94CJ';
call[355]='MW0IDX'; loc[355]='IO83FH';
call[356]='G0AXJ/P'; loc[356]='IO85XP';
call[357]='2E0EET'; loc[357]='IO84OE';
call[358]='G6YKD'; loc[358]='IO82VM';
call[359]='G8HXE/P'; loc[359]='IO94WC';
call[360]='G8BNE'; loc[360]='IO94GA';
call[361]='G0LBO/M'; loc[361]='IO83SF';
call[362]='G1AEQ'; loc[362]='IO83SN';
call[363]='GW4KAZ'; loc[363]='IO73VE';
call[364]='G1DPI'; loc[364]='IO93JI';
call[365]='M1MAJ'; loc[365]='JO02BF';
call[366]='M0REG/P'; loc[366]='IO90TV';
call[367]='GM4GUF/P'; loc[367]='IO76HL';
   for (var i=1;i<loc.length; i++)
     // Only plot if there is a valud locator  
     if (isIARU(loc[i])) {
       drawSquare(loc[i]);
	 }
   overlayOn=1;
   return
}

// Load Squares set 4 (6m)
function overlay4() {
clearSquares();
call[1]='G3TDH'; loc[1]='IO83WI';
call[2]='G0CER'; loc[2]='IO82RV';
call[3]='G8BNE'; loc[3]='IO94GA';
call[4]='G1NXS'; loc[4]='IO83RK';
call[5]='G4YPV'; loc[5]='IO93LR';
call[6]='G3NFC/P'; loc[6]='IO93BA';
call[7]='M0AAD'; loc[7]='IO83WL';
call[8]='G3XNO'; loc[8]='IO93DW';
call[9]='GM4FVM'; loc[9]='IO85WU';
call[10]='G2OA/P'; loc[10]='IO83MN';
call[11]='MM0BSM'; loc[11]='IO86AD';
call[12]='G0BWC/P'; loc[12]='IO83RO';
call[13]='GI4FUE/P'; loc[13]='IO74DT';
call[14]='MW1MDH'; loc[14]='IO83ME';
call[15]='MM0DXE'; loc[15]='IO86OE';
call[16]='G3NKC'; loc[16]='IO83SB';
call[17]='G4ELJ'; loc[17]='IO91PH';
call[18]='YU7BL'; loc[18]='JN95VF';
call[19]='G3JKY/P'; loc[19]='JO01HH';
call[20]='G1WAC/P'; loc[20]='IO92BJ';
call[21]='IK5GQK'; loc[21]='JN53OS';
call[22]='G8LZE'; loc[22]='IO91SO';
call[23]='G0BBB'; loc[23]='IO91PK';
call[24]='G8XTJ'; loc[24]='IO91PQ';
call[25]='HA8KL'; loc[25]='KN06FE';
call[26]='IW0RNA'; loc[26]='JN62IW';
call[27]='G3EDD'; loc[27]='JO02DE';
call[28]='G0DRM'; loc[28]='IO83SB';
call[29]='G4ALE/P'; loc[29]='IO91XG';
call[30]='G6UBM'; loc[30]='JO01CE';
call[31]='G0FWU'; loc[31]='IO83UB';
call[32]='GM3HAM/P'; loc[32]='IO74WV';
call[33]='GM3WIL'; loc[33]='IO75QL';
call[34]='GM4JOJ'; loc[34]='IO97AN';
call[35]='GM3WOJ'; loc[35]='IO77WS';
call[36]='GM0ELP'; loc[36]='IO75XR';
call[37]='G3BJ'; loc[37]='IO82NL';
call[38]='G1IZF'; loc[38]='IO93FT';
call[39]='M0KBD'; loc[39]='IO94IN';
call[40]='G0FWU'; loc[40]='IO83UB';
call[41]='G4ATH/P'; loc[41]='IO83NU';
call[42]='G0OLE/P'; loc[42]='IO93PX';
call[43]='G3OCA'; loc[43]='IO92GW';
call[44]='G4OXD/P'; loc[44]='IO92XA';
call[45]='M0MDG/P'; loc[45]='JO00EW';
call[46]='MM0CPS/P'; loc[46]='IO84BT';
call[47]='G7DOR/P'; loc[47]='IO91TE';
call[48]='G4SHF'; loc[48]='IO92IN';
call[49]='G3WZK'; loc[49]='IO91OH';
call[50]='G4VPD'; loc[50]='IO92BJ';
call[51]='G2AS/P'; loc[51]='IO93FL';
call[52]='G6DZH'; loc[52]='IO92AG';
call[53]='IZ5EME'; loc[53]='JN52NS';
call[54]='G3VLG/P'; loc[54]='IO92GD';
call[55]='G3VYF'; loc[55]='JO01FN';
call[56]='G2BOF'; loc[56]='IO91VI';
call[57]='I5TAT'; loc[57]='JN53FL';
call[58]='MW3WZZ'; loc[58]='IO83LA';
call[59]='G4MWS/P'; loc[59]='IO83WD';
call[60]='G3SMT'; loc[60]='IO82KV';
call[61]='ON8DM'; loc[61]='JO10JS';
call[62]='G4AZN'; loc[62]='IO91IQ';
call[63]='G8TCQ/P'; loc[63]='IO80LV';
call[64]='G3XMM'; loc[64]='IO81VV';
call[65]='IK5EKL'; loc[65]='JN53LS';
call[66]='EA6/M0DLL'; loc[66]='JN20BA';
call[67]='M0KCR/P'; loc[67]='JO01GH';
call[68]='G3WMP'; loc[68]='JO01OC';
call[69]='G4HRC/P'; loc[69]='JO01DR';
call[70]='IT9BYB/P'; loc[70]='JM68QD';
call[71]='IZ5ENZ'; loc[71]='JN53KQ';
call[72]='IZ0MQN'; loc[72]='JN63EF';
call[73]='G0FBB/P'; loc[73]='JO01LD';
call[74]='G3TCR/P'; loc[74]='IO91KH';
call[75]='G4OHM/P'; loc[75]='IO82XJ';
call[76]='GW3JXN'; loc[76]='IO72SC';
call[77]='G3PYE/P'; loc[77]='JO02ED';
call[78]='G4PTJ'; loc[78]='IO91XA';
call[79]='IK5YOJ'; loc[79]='JN53LR';
call[80]='2E0UAC'; loc[80]='IO92FJ';
call[81]='G3TOE'; loc[81]='JO00AS';
call[82]='G0CXJ'; loc[82]='IO92EC';
call[83]='G4SCY'; loc[83]='IO83WA';
call[84]='G0MDQ'; loc[84]='IO83JI';
call[85]='M1SLH'; loc[85]='IO91IQ';
call[86]='G4DEZ'; loc[86]='JO03AE';
call[87]='MM0BQI/P'; loc[87]='IO85RW';
call[88]='GW3XRM'; loc[88]='IO73WF';
call[89]='G1SMI'; loc[89]='IO83PM';
call[90]='2E0UOG'; loc[90]='IO83PN';
call[91]='GD3TNS'; loc[91]='IO74SD';
call[92]='GM4AAF/P'; loc[92]='IO86MQ';
call[93]='G0DHI'; loc[93]='IO84MV';
call[94]='M0RRC/P'; loc[94]='IO91TW';
call[95]='GM8BBA'; loc[95]='IO75XT';
call[96]='G3UD'; loc[96]='IO82VX';
call[97]='G4BEE'; loc[97]='IO83RQ';
call[98]='G8ONK'; loc[98]='IO83MR';
call[99]='GW2OP/P'; loc[99]='IO71OP';
call[100]='MM0TFU'; loc[100]='IO75QH';
call[101]='GM4DDL'; loc[101]='IO75IM';
call[102]='G4APJ'; loc[102]='IO83UP';
call[103]='2E0DTO'; loc[103]='IO83RJ';
call[104]='M0NZR'; loc[104]='IO83QL';
call[105]='G0IXZ'; loc[105]='IO93IF';
call[106]='MW1ARM'; loc[106]='IO83II';
call[107]='GW4OKT'; loc[107]='IO83LE';
call[108]='G0BVD'; loc[108]='IO70WW';
call[109]='G4BRA/P'; loc[109]='IO80ST';
call[110]='G4BQJ'; loc[110]='IO83QJ';
call[111]='GU8FBO'; loc[111]='IN89QK';
call[112]='G5RS/P'; loc[112]='IO91TF';
call[113]='G3MDG/P'; loc[113]='IO91QQ';
call[114]='G5RV/P'; loc[114]='IO90WV';
call[115]='G4JTR'; loc[115]='IO91ML';
call[116]='G3ZVW'; loc[116]='IO80MS';
call[117]='HA2VR/P'; loc[117]='JN87UE';
call[118]='G8NDN'; loc[118]='IO91GF';
call[119]='S51D'; loc[119]='JN75RX';
call[120]='G4DFI'; loc[120]='JO01BL';
call[121]='G3VER/P'; loc[121]='IO91RU';
call[122]='OE6MDF'; loc[122]='JN77XG';
call[123]='M0DMJ'; loc[123]='IO91TK';
call[124]='LZ7J'; loc[124]='KN22PR';
call[125]='SP9LJD'; loc[125]='JO90EB';
call[126]='G3RTU'; loc[126]='IO83UM';
call[127]='2E0VPX'; loc[127]='IO91QV';
call[128]='G3RR/P'; loc[128]='IO93GC';
call[129]='M0BXR'; loc[129]='IO83QJ';
call[130]='2E0XBF'; loc[130]='JO01HO';
call[131]='G3ZME/P'; loc[131]='IO82NN';
call[132]='G0MJY'; loc[132]='IO82VJ';
call[133]='MW0BAV/P'; loc[133]='IO82LQ';
call[134]='EA6TT'; loc[134]='JM19KO';
call[135]='MW6OXO/P'; loc[135]='IO82ET';
call[136]='GD6ICR'; loc[136]='IO74PF';
call[137]='MI0SMK/P'; loc[137]='IO74AI';
call[138]='G4FRS/P'; loc[138]='IO91PF';
call[139]='G8HDS'; loc[139]='IO83VO';
call[140]='GI0RQK/P'; loc[140]='IO74AI';
call[141]='G4YSG'; loc[141]='IO93II';
call[142]='EB3JT/P'; loc[142]='JN01LX';
call[143]='G2BQY/P'; loc[143]='IO81RF';
call[144]='GW4EVX'; loc[144]='IO83KE';
call[145]='G8SRC/P'; loc[145]='IO91DM';
call[146]='G0LGS'; loc[146]='IO81WV';
call[147]='G3RCV/P'; loc[147]='JO01DH';
call[148]='EA5/G3XGS'; loc[148]='IM98PB';
call[149]='G3VZM'; loc[149]='IO83MG';
call[150]='G3JDT'; loc[150]='IO83QI';
call[151]='G5FZ/P'; loc[151]='IO93RH';
call[152]='EA6/W3DM'; loc[152]='JM19HN';
call[153]='EA3DU'; loc[153]='JN11BJ';
call[154]='EA5DFE'; loc[154]='IM97NX';
call[155]='M0DDT'; loc[155]='IO91JR';
call[156]='MW0IDX'; loc[156]='IO83FH';
call[157]='GW4DRR'; loc[157]='IO73RH';
call[158]='EI9E/P'; loc[158]='IO62OM';
call[159]='EI7DGB'; loc[159]='IO53NF';
call[160]='GW4ZAR'; loc[160]='IO83KF';
call[161]='G8LED/P'; loc[161]='IO92LE';
call[162]='EA3GXL'; loc[162]='JN11BJ';
call[163]='M5AEC'; loc[163]='JO02NK';
call[164]='G4EHT'; loc[164]='IO92CQ';
call[165]='G8NKX/M'; loc[165]='IO83PE';
call[166]='G0ROC/P'; loc[166]='IO83VQ';
call[167]='G1MZD'; loc[167]='IO92OB';
call[168]='M3SWK'; loc[168]='IO83VA';
call[169]='G0NFH'; loc[169]='IO81QM';
call[170]='G3BXF/P'; loc[170]='IO92KG';
call[171]='G4HGI'; loc[171]='IO83PL';
call[172]='M0ADJ/P'; loc[172]='IO91BX';
call[173]='G6TGO'; loc[173]='IO83UJ';
call[174]='G1MHU'; loc[174]='IO93GO';
call[175]='G3KNU'; loc[175]='IO93QN';
call[176]='G1PUV'; loc[176]='IO83VC';
call[177]='G3WGV'; loc[177]='IO84QN';
call[178]='G3XAN'; loc[178]='IO83ML';
call[179]='G4RRA'; loc[179]='IO80BS';
call[180]='G7ICY'; loc[180]='IO83NE';
call[181]='G4FVP/P'; loc[181]='IO94MJ';
call[182]='G0EIY'; loc[182]='IO82OR';
call[183]='G0UAZ'; loc[183]='IO83PQ';
call[184]='G4EPA'; loc[184]='IO92KI';
call[185]='G4ENZ'; loc[185]='IO81VV';
call[186]='PA6M'; loc[186]='JO21IO';
call[187]='G3TPW'; loc[187]='IO94ND';
call[188]='G7HAH/P'; loc[188]='IO93WH';
call[189]='G8EOP'; loc[189]='IO93EQ';
call[190]='GW8ASD'; loc[190]='IO83LB';
call[191]='GW0GPQ'; loc[191]='IO81BW';
   for (var i=1;i<loc.length; i++)
     // Only plot if there is a valud locator  
     if (isIARU(loc[i])) {
       drawSquare(loc[i]);
	 }
   overlayOn=1;
   return
}

// Load Squares set 2 (70m)
function overlay2() {
clearSquares();
call[1]='G4MWS/P'; loc[1]='IO83WD';
call[2]='G0ROC/P'; loc[2]='IO83VQ';
call[3]='G3RCV/P'; loc[3]='JO01DH';
call[4]='G2BQY/P'; loc[4]='IO81RF';
call[5]='MM0CPS/P'; loc[5]='IO84BT';
call[6]='G5FZ/P'; loc[6]='IO93RH';
call[7]='G0VHF/P'; loc[7]='JO01PU';
call[8]='G3PYE/P'; loc[8]='JO02ED';
call[9]='EI9EP'; loc[9]='IO62OM';
call[10]='G2OA/P'; loc[10]='IO83MW';
call[11]='GM3HAM/P'; loc[11]='IO74WV';
call[12]='GW8DIR/P'; loc[12]='IO82LQ';
call[13]='GW2OP/P'; loc[13]='IO71OP';
call[14]='PA6NL'; loc[14]='JO01BX';
call[15]='G0UAZ'; loc[15]='IO83PQ';
call[16]='G0BWC/P'; loc[16]='IO83RO';
call[17]='GI4FUM/P'; loc[17]='IO74DT';
call[18]='MM0BQI/P'; loc[18]='IO85RW';
call[19]='GW3ATZ'; loc[19]='IO83LE';
call[20]='GM4JTJ'; loc[20]='IO86RP';
call[21]='GM8GAX'; loc[21]='IO86EE';
call[22]='MW3WZZ'; loc[22]='IO83LA';
call[23]='GM4AAF/P'; loc[23]='IO86RQ';
call[24]='G4APJ'; loc[24]='IO83UP';
call[25]='G0OLE'; loc[25]='IO93PX';
call[26]='G8PWX'; loc[26]='IO95GA';
call[27]='G8LED/P'; loc[27]='IO92LE';
call[28]='G3VLG/P'; loc[28]='IO92GD';
call[29]='G3ZVW'; loc[29]='IO80MS';
call[30]='G4SCY'; loc[30]='IO83WA';
call[31]='G3TDH'; loc[31]='IO83WI';
call[32]='G0FBB/P'; loc[32]='JO01LD';
call[33]='G8OHM/P'; loc[33]='IO82XJ';
call[34]='G4BRA/P'; loc[34]='IO80ST';
call[35]='G8NKX/M'; loc[35]='IO83PE';
call[36]='G4HGI'; loc[36]='IO83PL';
call[37]='2E0UOG'; loc[37]='IO83PN';
call[38]='G4AYU'; loc[38]='IO83PQ';
call[39]='G1HBE'; loc[39]='IO83XL';
call[40]='G3SRC/P'; loc[40]='IO91XG';
call[41]='G5LK/P'; loc[41]='JO01ND';
call[42]='GD8EXI'; loc[42]='IO74PC';
call[43]='G4JLG'; loc[43]='IO83TM';
call[44]='G0CER'; loc[44]='IO82RV';
call[45]='M0RRC/P'; loc[45]='IO91TW';
call[46]='G8LIY'; loc[46]='IO83UC';
call[47]='G3XDY'; loc[47]='JO02OB';
call[48]='G5LK/P'; loc[48]='JO01ND';
call[49]='M0XBF'; loc[49]='JO01HO';
call[50]='2E0ORC'; loc[50]='IO83XL';
call[51]='G5RR/P'; loc[51]='IO93GC';
call[52]='G0NMY'; loc[52]='IO83VA';
call[53]='G3VER/P'; loc[53]='IO91RU';
call[54]='G3FJE/P'; loc[54]='IO92XA';
call[55]='GW8ASD'; loc[55]='IO83LB';
call[56]='G8ONK'; loc[56]='IO83MR';
call[57]='G8FCQ'; loc[57]='IO92KO';
call[58]='M3VBH/P'; loc[58]='IO80LV';
call[59]='G2AS/P'; loc[59]='IO93FL';
call[60]='G8TEST'; loc[60]='IO83QE';
call[61]='G8PIR/P'; loc[61]='JO02TM';
call[62]='G5RV/P'; loc[62]='IO90WV';
call[63]='G0WUU'; loc[63]='IO92SR';
call[64]='G8EOP'; loc[64]='IO93EQ';
call[65]='G1MZD'; loc[65]='IO92OB';
call[66]='M0TMR/P'; loc[66]='IO91RU';
call[67]='G4UDG'; loc[67]='IO83VB';
call[68]='G3WKZ'; loc[68]='IO91KM';
call[69]='G4SJH'; loc[69]='IO91PI';
call[70]='GI6ATZ'; loc[70]='IO74AJ';
call[71]='M5FRA/P'; loc[71]='IO93DG';
call[72]='G0EXB/P'; loc[72]='IO94MJ';
call[73]='GM4JR'; loc[73]='IO85FB';
   for (var i=1;i<loc.length; i++)
     // Only plot if there is a valud locator  
     if (isIARU(loc[i])) {
       drawSquare(loc[i]);
	 }
    overlayOn=1;
   return
}

function squareCalls(locx) {
  var str = '';
  if (overlayOn == 1) {
     for (var i=1; i<loc.length; i++) 
	   if (loc[i]==locx) 
	     str = str + call[i] + ' ';
  }
  return str;
}

function searchPostcode(){
  //hide and clear list box
  document.getElementById('selectGaz').style.display='none';
  da = document.getElementById("selectGaz");
  da.options.length = 0;
  locationFound = 0;
  eastValstr = "";

  //clear menu if already populated
  da.options.length = 0;
  sectorFlag = 0;

  var query = document.getElementById("searchArea");
  inputStr = query.value;
  //document.getElementById("markersCheckBox").checked = false;
  document.getElementById("searchArea").value = "Enter IARU/place/postcode";

  // If we have a valid IARU locator then centre on it else handover to Post Code search
  if (isIARU(inputStr)) {
    osMap.setCenter(IARUtoMap(inputStr),6);
    drawSquare(inputStr);
  }
  else {
    //ascertain if postcode sector or full postcode
    if (inputStr.length < 5) {
      sectorFlag = 1;
    }

    //search postcode service
    postcodeService.getLonLat(inputStr, onResult);
  }
  return;
}

//result of search postcode is passed here
function onResult(mapPoint) {
  //set zoom level depending on sector or full postcode
  if  (sectorFlag == 0)
    {zoomVal = 9;}
  else {zoomVal = 5}


  //if not a valid PostCode, pass to gazetteer search
  //an eastValStr of length three indicates no match found for postcode
  if (mapPoint != null) {
    eastVal = mapPoint.getEasting();
    eastValstr = eastVal.toString();
  }

  //no postcode match, so search gazetteer
  if (eastValstr.length == 3 || mapPoint == null) {
    var osGaz = new OpenSpace.Gazetteer;
    var gazArray = osGaz.getLocations(inputStr, gazOptions)
  }

  //zoom to postcode
  if (mapPoint != null && eastValstr.length > 3) {
    osMap.setCenter(mapPoint, zoomVal);
    // Find the IARU locator for this postcode and draw square on the map
    var iaru=maptoIARU(mapPoint);
    drawSquare(iaru);

    locationFound = 1;
    document.getElementById("postcode").value = "";
  }
  return false;
}

function gazOptions(searchVal) {
  //if one match found
  if (searchVal.length == 1) {
    osMap.setCenter(searchVal[0].location, 7);
    var iaru=maptoIARU(osMap.getCenter());
    drawSquare(iaru);
    locationFound = 1;
  }

  //if several choices, create a list box
  if (searchVal != null && searchVal.length > 1) {
    locationFound = 1;
    globalGazArray = searchVal;
    o = document.createElement("OPTION");
    o.text= "Select a place";
    da.options.add(o);

    //build list box
    for (var i=0 ; i < searchVal.length; i++) {
      o = document.createElement("OPTION");
      o.text= searchVal[i].name + ", " + searchVal[i].county;
      da.options.add(o);
    }

    //make list box visible
    document.getElementById('selectGaz').style.display='block';
  }

  if (locationFound == 0) {
    alert("No locator, postcode or place found");
  }
}

//zoom to item selected from list box
function zoomGazSel(selObj) {
  osMap.setCenter(globalGazArray[selObj.selectedIndex-1].location, 7);
  var iaru=maptoIARU(osMap.getCenter());
  drawSquare(iaru);

  //hide list box
  document.getElementById('selectGaz').style.display='none';

  //clear text field
  document.getElementById("searchArea").value = "Enter IARU/place/postcode";
}


function displayAngle(angle) {
  var str = "";
  // So  that floor rounds towards zero work with +ve numbers
  if (angle<0) {str = "-"; angle=Math.abs(angle);}
  var deg = Math.floor(angle);
  var arcMin = Math.floor((angle - deg)*60);
  var arcSec = (angle - deg - arcMin/60)*60*60;
  str = str + deg + "&deg; " + arcMin + '" ' + arcSec.toFixed(2) + "'";
  return str;
}

// End of Functions required for postcode/gazetteer searches
function initmapbuilder() {
  // Creating the Openspace map and the postcode service
  osMap = new OpenSpace.Map('map');
  postcodeService = new OpenSpace.Postcode();

  // Adding the map overview
  mapOV = new OpenSpace.Control.OverviewMap();
  osMap.addControl(mapOV);
  //fix to put copyright on top of overview map: Needs api fix for later version
  var ccControl = osMap.getControlsByClass("OpenSpace.Control.CopyrightCollection")
  osMap.removeControl(ccControl[0]);
  ccControl = new OpenSpace.Control.CopyrightCollection();
  osMap.addControl(ccControl);
  ccControl.activate();
  //end of fix

  // Turning the overview map off
  mapOV.minimizeControl();

  // ----
  // create a screen overlay called "coords" and position it ten pixels from the right and top of the map window. 
  // Add this as a new layer to the map. 
  // This layer will then remain at the same position relative to the map window as the map is scrolled underneath.
  screenOverlay = new OpenSpace.Layer.ScreenOverlay("coords");
  screenOverlay.setPosition(new OpenLayers.Pixel(80, 50));
  osMap.addLayer(screenOverlay);
  //we create an object to handle the coordinate transformation.
  gridProjection = new OpenSpace.GridProjection();
  //register what to do when the mouse moves over the map
  osMap.events.register("mousemove", osMap, createCursorPos);


  var longitude = document.getElementById("longitude");
  var latitude = document.getElementById("latitude");
  var longitude2 = document.getElementById("longitude2");
  var latitude2 = document.getElementById("latitude2");
  var easting  = document.getElementById("easting");
  var northing = document.getElementById("northing");
  var mapref  = document.getElementById("mapref");
  var iaruloc  = document.getElementById("iaruloc");
  var stations  = document.getElementById("stations");

  // Initialise array holding OS map 100km square letters lookup
  letters[4] = ["A","B","C","D","E"];
  letters[3] = ["F","G","H","J","K"];
  letters[2] = ["L","M","N","O","P"];
  letters[1] = ["Q","R","S","T","U"];
  letters[0] = ["V","W","X","Y","Z"];
  // Note: Array indexes are letters[Northing][Easting]

  //function that is called as a result
  function createCursorPos(e) {
    // the mouse position (e) is converted into a map position via the OpenLayers function getLonLatFromViewportPx(). 
    // This returns a point in the coordinate system of the map base layer, in our case this is British National Grid. 
    // We can then transform that point back into longitude/latitude by calling our previously defined convertor function. 
    // Finally the details are displayed in the screen overlay by setting the HTML contents.
    pt = osMap.getLonLatFromViewPortPx(e.xy);
    lonlat = gridProjection.getLonLatFromMapPoint(pt);
	var iarux = lonlattoIARU(lonlat);
    //screenOverlay.setHTML("<DIV style=\"width: 170px; height=75px; color: black; background-color: transparent ; font-size: 14px; font: Courier New\">" +
    //                      "E: " + Math.round(pt.lon) + " " + "N: " + Math.round(pt.lat) + "<BR>" + 
	//  	  				  "LON: " + (lonlat.lon).toFixed(4) + "  " + " LAT: " + (lonlat.lat).toFixed(4) + " </DIV>");
    longitude.innerHTML  = (lonlat.lon).toFixed(4);
    latitude.innerHTML   = (lonlat.lat).toFixed(4);
    longitude2.innerHTML = displayAngle(lonlat.lon);
    latitude2.innerHTML  = displayAngle(lonlat.lat);
    easting.innerHTML    = Math.round(pt.lon);
    northing.innerHTML   = Math.round(pt.lat);
	mapref.innerHTML     = maptoMapRef(pt);
    iaruloc.innerHTML    = iarux;
	stations.innerHTML   = squareCalls(iarux);
	
    osMap.setCenter(osMap.getCenter);
  }
  // ---


  // Create a vector layer to draw the IARU squares on
  vectorLayer = new OpenLayers.Layer.Vector("Vector Layer");

  // Adding the postcode/gazetteer search box
  //define an overlay for search box
  searchBox = new OpenSpace.Layer.ScreenOverlay("search");
  //set its position
  searchBox.setPosition(new OpenLayers.Pixel(80, 0));
  //and add to the map
  osMap.addLayer(searchBox);
  searchBox.setHTML(
      "<div id=\"OpenSpace.Layer.ScreenOverlay_132\" style=\"position: absolute; width: 500px; height: 100%; z-index: 440; left: 0px; top: 3px;\" class=\"olLayerDiv\">" + 
      "<div id=\"div1\" style=\"z-index:999; padding-left: 0px; font-size: 14px; \">" + 
      "<form name=\"searchForm\" onsubmit=\"return false;\">" + 
      "<input type=\"text\" name=\"searchArea\" id=\"searchArea\" onclick=\"clearText()\" value=\"IARU/place/postcode\"/>" +
      "<input type=\"button\" onclick=\"searchPostcode();\" value=\"Find\" title=\"find place by postcode or 1:50,000 gazetteer\"></button>   " + 
      "<input type=\"button\" onclick=\"clearSquares();\" value=\"clear\" title=\"Clear squares from the map\"></button>" + 
//      "<input type=\"button\" onclick=\"overlay1();\" value=\"23cm\" title=\"23cm - 2011 VHF NFD QSOs worked\"></button>" + 
      "<input type=\"button\" onclick=\"overlay2();\" value=\"70cm\" title=\"70cm - 2011 VHF NFD QSOs worked\"></button>" + 
      "<input type=\"button\" onclick=\"overlay3();\" value=\"2m\" title=\"2m - 2011 VHF NFD QSOs worked\"></button>" + 
      "<input type=\"button\" onclick=\"overlay4();\" value=\"6m\" title=\"6m - 2011 VHF NFD QSOs worked\"></button>" + 
      "<select name=\"select\" id=\"selectGaz\" onchange=\"zoomGazSel(this.form.select)\" style=\"display: block\">" + 
      "<option>Select a place</option><option></option></select></form></div></div>");

  //hide list box select
  document.getElementById('selectGaz').style.display='none';
  searchBox.events.register("mouseover", searchBox, function(){
    //de-activate keyboard and navigation controls
    osMap.controls[0].deactivate();
    osMap.controls[1].deactivate();
  });

  searchBox.events.register("mouseout", searchBox, function(){
    //activate keyboard and navigation controls
    osMap.controls[0].activate();
    osMap.controls[1].activate();
  });

  // Defining the center of the map and the zoom level
  osMap.setCenter(IARUtoMap("IO83RE"),5);

  clusterControl = new OpenSpace.Control.ClusterManager();
  osMap.addControl(clusterControl);
  clusterControl.activate();
}


// Query Remaining daily tile quota
//var supportService = new OpenSpace.SupportService();
//supportService.getTileCount(tileCountResults);

// <End>

