var osMap, screenOverlay, mapOV, postcodeService;
var pos;

// Variables for markers
var size,offset,infoWindowAnchor,icon,content,popUpSize;

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

// Start of Functions required for postcode/gazetteer searches
//clear search box when clicked on
function clearText(){
document.getElementById("searchArea").value = "";
}

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 a place/postcode";

//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);
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);
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("neither postcode or place found");
}
}

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

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

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

// End of Functions required for postcode/gazetteer searches
function initmapbuilder()
{
// Creating the Openspace map and the postcode service
osMap = new OpenSpace.Map('map');
// osMap = new OpenSpace.Map('map', {centreInfoWindow: false} );
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();

// 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: 200px; height: 100%; z-index: 340; 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=\"enter a place/postcode\"/><input type=\"button\" onclick=\"searchPostcode();\" value=\"Find\" title=\"find place by postcode or 1:50,000 gazetteer\"></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(new OpenSpace.MapPoint(420000,240000),1);
// osMap.setCenter(new OpenSpace.MapPoint(405000,430000),1);

// Defining markers
// Belfast
pos = new OpenSpace.MapPoint(127050,546500);
size = new OpenLayers.Size(24,24);
offset = new OpenLayers.Pixel(-8,-8);
infoWindowAnchor = new OpenLayers.Pixel(8,8);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/belfast/\"><strong>Belfast Airport</strong></a><p><a href=\"/operators/eurojet/\">Eurojet</a></p>';
popUpSize = new OpenLayers.Size(180,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Biggin
pos = new OpenSpace.MapPoint(541290,160840);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/biggin/\"><strong>Biggin Hill Airport</strong></a><p><a href=\"/operators/centrelineair/\">Centreline Air Charter</a><br /><a href=\"/operators/interflight/\">Interflight Air Charter</a><br /><a href=\"/operators/lea/\">London Executive Aviation</a><br /><a href=\"/operators/oryxjet/\">Oryx Jet</a></p>';
popUpSize = new OpenLayers.Size(215,155);
osMap.createMarker(pos, icon, content, popUpSize);

// Birmingham
pos = new OpenSpace.MapPoint(417255,283850);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/birmingham/\"><strong>Birmingham Airport</strong></a><p><a href=\"/operators/eurojet/\">Eurojet</a></p>';
popUpSize = new OpenLayers.Size(190,120);
osMap.createMarker(pos, icon, content, popUpSize);

// Blackbushe
pos = new OpenSpace.MapPoint(479670,158880);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/blackbushe/\"><strong>Blackbushe Airport</strong></a><p><a href=\"/operators/premiair/\">PremiAir Business Aviation</a></p></p>';
popUpSize = new OpenLayers.Size(220,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Bristol
pos = new OpenSpace.MapPoint(350490,165460);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/bristol/\"><strong>Bristol Airport</strong></a><p><a href=\"/operators/centrelineair/\">Centreline Air Charter</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Cambridge
pos = new OpenSpace.MapPoint(548960,258740);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/cambridge/\"><strong>Cambridge Airport</strong></a><p><a href=\"/operators/ambeo/\">Ambeo</a><br /><a href=\"/operators/marshallexec/\">Marshall Executive Aviation</a></p>';
popUpSize = new OpenLayers.Size(215,125);
osMap.createMarker(pos, icon, content, popUpSize);

// Chester
pos = new OpenSpace.MapPoint(334890,365270);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/chester/\"><strong>Chester Airport</strong></a><p><a href=\"/operators/ultimate/\">Ultimate Jets Europe</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Edinburgh
pos = new OpenSpace.MapPoint(315925,673575);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/edinburgh/\"><strong>Edinburgh Airport</strong></a><p><a href=\"/operators/saxonair/\">SaxonAir Charter</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Fairoaks
pos = new OpenSpace.MapPoint(500190,162100);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/fairoaks/\"><strong>Fairoaks Airport</strong></a><p><a href=\"/operators/synergy/\">Synergy Aviation</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Farnborough
pos = new OpenSpace.MapPoint(486070,153450);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/farnborough/\"><strong>Farnborough Airport</strong></a><p><a href=\"/operators/blink/\">Blink</a><br /><a href=\"/operators/bookajet/\">Bookajet</a><br /><a href=\"/operators/corporatejetmanagement/\">Corporate Jet Management</a><br /><a href=\"/operators/execjet/\">Executive Jet Charter</a><br /><a href=\"/operators/gama/\">Gama Aviation</a><br /><a href=\"/operators/lea/\">London Executive Aviation</a><br /><a href=\"/operators/manhattan/\">Manhattan Jet Charter</a><br /><a href=\"/operators/tagaviation/\">TAG Aviation (UK)</a><br /><a href=\"/operators/triair/\">Triair</a></p>';
popUpSize = new OpenLayers.Size(215,245);
osMap.createMarker(pos, icon, content, popUpSize);

// Glasgow
pos = new OpenSpace.MapPoint(247850,666170);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/glasgow/\"><strong>Glasgow Airport</strong></a><p><a href=\"/operators/aircharterscotland/\">Air Charter Scotland</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Gloucestershire
pos = new OpenSpace.MapPoint(387300,222800);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/gloucestershire/\"><strong>Gloucestershire Airport</strong></a><p><a href=\"/operators/executiveaviation/\">Executive Aviation Services</a></p>';
popUpSize = new OpenLayers.Size(215,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Liverpool
pos = new OpenSpace.MapPoint(343140,382580);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/liverpool/\"><strong>Liverpool Airport</strong></a><p><a href=\"/operators/adaviation/\">AD Aviation</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// London City
pos = new OpenSpace.MapPoint(544355,179950);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/londoncity/\"><strong>London City Airport</strong></a><p><a href=\"/operators/execujet/\">ExecuJet UK</a><br /><a href=\"/operators/lea/\">London Executive Aviation</a></p>';
popUpSize = new OpenLayers.Size(215,125);
osMap.createMarker(pos, icon, content, popUpSize);

// Luton
pos = new OpenSpace.MapPoint(511570,220980);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/luton/\"><strong>Luton Airport</strong></a><p><a href=\"/operators/aircharterscotland/\">Air Charter Scotland</a><br /><a href=\"/operators/bookajet/\">Bookajet</a><br /><a href=\"/operators/blink/\">Blink</a><br /><a href=\"/operators/centrelineair/\">Centreline Air Charter</a><br /><a href=\"/operators/lea/\">London Executive Aviation</a><br /><a href=\"/operators/oceansky/\">Ocean Sky</a><br /><a href=\"/operators/penavia/\">Pen-Avia</a><br /><a href=\"/operators/twinjet/\">Twin Jet Aircraft</a><br /><a href=\"/operators/wingsworldwide/\">Wings Worldwide Charter</a></p>';
popUpSize = new OpenLayers.Size(215,230);
osMap.createMarker(pos, icon, content, popUpSize);

// Manchester
pos = new OpenSpace.MapPoint(381480,384600);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/manchester/\"><strong>Manchester Airport</strong></a><p><a href=\"/operators/oceansky/\">Ocean Sky</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Norwich
pos = new OpenSpace.MapPoint(623355,312950);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/norwich/\"><strong>Norwich Airport</strong></a><p><a href=\"/operators/saxonair/\">SaxonAir Charter</a><br /><a href=\"/operators/skydrift/\">Skydrift Air Charter</a></p>';
popUpSize = new OpenLayers.Size(190,125);
osMap.createMarker(pos, icon, content, popUpSize);

// Oxford
pos = new OpenSpace.MapPoint(447180,215650);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/oxford/\"><strong>Oxford Airport</strong></a><p><a href=\"/operators/finesse/\">Finesse Executive</a><br /><a href=\"/operators/flairjet/\">FlairJet</a><br /><a href=\"/operators/hangar8/\">Hangar8</a><br /><a href=\"/operators/lea/\">London Executive Aviation</a></p>';
popUpSize = new OpenLayers.Size(215,155);111
osMap.createMarker(pos, icon, content, popUpSize);

// Southampton
pos = new OpenSpace.MapPoint(444800,116690);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/southampton/\"><strong>Southampton Airport</strong></a><p><a href=\"/operators/xclusivejet/\">Xclusive Jet Charter</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Southend
pos = new OpenSpace.MapPoint(588355,188950);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/southend/\"><strong>Southend Airport</strong></a><p><a href=\"/operators/247jet/\">247Jet</a></p>';
popUpSize = new OpenLayers.Size(190,110);
osMap.createMarker(pos, icon, content, popUpSize);

// Stansted
pos = new OpenSpace.MapPoint(555690,223610);
icon = new OpenSpace.Icon('/images/icons/airport24.png', size, offset, null, infoWindowAnchor);
content = '<a href=\"/airports/stansted/\"><strong>Stansted Airport</strong></a><p><a href=\"/operators/lea/\">London Executive Aviation</a><br /><a href=\"/operators/eurojet/\">Eurojet</a></p>';
popUpSize = new OpenLayers.Size(215,125);
osMap.createMarker(pos, icon, content, popUpSize);

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

