var map, baseIcon, faultIcon, MaintenanceIcon, isInfoWindowOpen;
var ShowFaults = false, IsAdmin = false, ShowMaintenance = false, counter = 0, ShowLabels = true;
var ActiveStreetLightId, AllMarkers; // The current street light that the user has popped up, or that we should auto focus on.

// The allowed region which the whole map must be within
var allowedBounds;

function SelectComment() { document.getElementById('PoppedComments').select(); selectItem(document.getElementById("PoppedType"), getQueryVariable("pFaultType"), FaultSelected); }
function FaultSelected() { document.getElementById('PoppedNext1').disabled = false; }
function Next1_Click() {
    var el = document.getElementById('PoppedType');
    if (AllowEmergencyFaultReports != true && getQueryVariable("pCallCentreMode") != 1 && EmergencyFaultTypes.indexOf("," + el.options[el.selectedIndex].value + ",") >= 0) {
        document.getElementById('Tab1Div').innerHTML = document.getElementById('EmergencyContact').innerHTML;
    } else {
        ShowReportPage(2);
        document.getElementById('PoppedName').focus();
    }
}

function MapResize() { var c = map.getCenter(); map.checkResize(); map.setCenter(c); }
function InitialiseMap() {
    if (IsBrowserCompatible() != true) return alert("This application requires a compatible browser."); //GBrowserIsCompatible()

    map = new google.maps.Map2(document.getElementById("map"));
    map.addControl(new GMapTypeControl());
    map.addControl(new GLargeMapControl());

    AllMarkers = {};
    ActiveStreetLightId = null;
    isInfoWindowOpen = false;

    // ====== Restricting the range of Zoom Levels =====
    // Get the list of map types      
    var mt = map.getMapTypes();

    // Overwrite the getMinimumResolution() and getMaximumResolution() methods
    for (var i = 0; i < mt.length; i++) {
        mt[i].getMinimumResolution = function() { return '12'; }
        mt[i].getMaximumResolution = function() { return 18; }
    }

    // Add a move listener to restrict the bounds range
    allowedBounds = new GLatLngBounds(new GLatLng('53.7055745', '-1.7596624'), new GLatLng('53.9427113', '-1.3086067'));
    GEvent.addListener(map, "move", function() {
        checkBounds();
    });

    GEvent.addListener(map, "zoomend", function() { ShowZoomHelp(map.getZoom() < 17); });
    GEvent.addListener(map, "moveend", UpdateMarkers);

    GEvent.addListener(map, "infowindowclose", function() {
        ActiveStreetLightId = null;
        isInfoWindowOpen = false;
    });

    // Focus on Leeds initially.
    map.setCenter(new GLatLng('53.799637', '-1.549072'), '12');

    // Create a base icon for all of our markers that specifies the shadow, icon dimensions, etc.
    baseIcon = new GIcon();
    baseIcon.iconSize = new GSize(10, 10);
    baseIcon.iconAnchor = new GPoint(5, 5);
    baseIcon.infoWindowAnchor = new GPoint(5, 5);
    baseIcon.infoShadowAnchor = new GPoint(5, 5);
    baseIcon.image = AppRoot + "/Images/TinyLamp.png";
    baseIcon.shadow = ''; // Speed optimisations.

    // and a fault icon for faulty lamps too.
    faultIcon = new GIcon();
    faultIcon.iconSize = new GSize(10, 10);
    faultIcon.iconAnchor = new GPoint(5, 5);
    faultIcon.infoWindowAnchor = new GPoint(5, 5);
    faultIcon.infoShadowAnchor = new GPoint(5, 5);
    faultIcon.image = AppRoot + "/Images/TinyLampFaulty.png";
    faultIcon.shadow = ''; // Speed optimisations.

    // Icon for scheduled maintenance.
    MaintenanceIcon = new GIcon();
    MaintenanceIcon.iconSize = new GSize(10, 10);
    MaintenanceIcon.iconAnchor = new GPoint(5, 5);
    MaintenanceIcon.infoWindowAnchor = new GPoint(5, 5);
    MaintenanceIcon.infoShadowAnchor = new GPoint(5, 5);
    MaintenanceIcon.image = AppRoot + "/Images/TinyLampMaintenance.png";
    MaintenanceIcon.shadow = ''; // Speed optimisations.

    var utils = document.createElement("script");
    utils.src = "../Scripts/GAPI.Utils.js";
    utils.type = "text/javascript";
    document.body.appendChild(utils);

    document.getElementById("divTogglelabels").style.display = getQueryVariable("pCallCentreMode") == "1" ? "" : "none";

    //process query string and cookies
    processStartUpParams(function(x, y, isEN) {
        if (isEN) {
            var coord = OSGridToLatLong(x, y);
            map.setCenter(new GLatLng(coord.lat, coord.lon), 17);
        } else map.setCenter(new GLatLng(x, y), 17);
    });
}

function UpdateMarkers() {
    if (map.getZoom() < 17) {
        map.clearOverlays();
        AllMarkers = {};
    }
    else {
        ShowLoadingBar();
        LoadLocationXML(map.getBounds());
    }
}

// If the map position is out of range, move it back
function checkBounds() {
    // Perform the check and return if OK
    if (allowedBounds.contains(map.getCenter())) {
        return;
    }
    // It`s not OK, so find the nearest allowed point and move there
    var C = map.getCenter();
    var X = C.lng();
    var Y = C.lat();

    var AmaxX = allowedBounds.getNorthEast().lng();
    var AmaxY = allowedBounds.getNorthEast().lat();
    var AminX = allowedBounds.getSouthWest().lng();
    var AminY = allowedBounds.getSouthWest().lat();

    if (X < AminX) { X = AminX; }
    if (X > AmaxX) { X = AmaxX; }
    if (Y < AminY) { Y = AminY; }
    if (Y > AmaxY) { Y = AmaxY; }
    map.setCenter(new GLatLng(Y, X));
}

function ClosePopup() { map.closeInfoWindow(); }
function OpenPopup(dontRedirect) {
    var infoTabs, ThisMarker;

    ClosePopup();

    if (ActiveStreetLightId) ThisMarker = AllMarkers[ActiveStreetLightId]
    else if (null != this) ThisMarker = this;
    else return;

    ActiveStreetLightId = ThisMarker.StreetLightId;

    redirectToForm(ActiveStreetLightId, dontRedirect);
    if (getQueryVariable("pCallCentreMode") == "1") { ActiveStreetLightId = null; return; }

    // Copy the fault template and rename the fields within it as we go, so they do not conflict.
    if (true == IsAdmin) {
        var MaintenanceForm = '<div id=Tab1Div>' + document.getElementById('Tab1DivTemplate').innerHTML.replace(/MaintenanceTemplate/g, 'Popped') + '</div>';
        infoTabs = [new GInfoWindowTab("Maintenance", MaintenanceForm)];
    } else {
        var GenericForm = '<div id=Tab1Div style=\'width: 280px\'>' + document.getElementById('Tab1DivTemplate').innerHTML.replace(/FaultTemplate/g, 'Popped') + '</div>';
        infoTabs = [new GInfoWindowTab("Report", GenericForm)];
    }

    ThisMarker.openInfoWindowTabsHtml(infoTabs);
    isInfoWindowOpen = true;

    HideReportPage(1);
    HideReportPage(2);
    ShowReportPage(0);

    GDownloadUrl(AppRoot + '/' + (IsAdmin ? 'Admin' : 'Public') + '/Services/LightDetail.ashx?StreetLightId=' + ThisMarker.StreetLightId, LoadLightInfo);
}

function LoadLightInfo(data, responseCode) {
    if (200 == responseCode) { // HTTP response for ALL OK.    
        var xml = GXml.parse(data);
        if (true == IsAdmin) {
            LoadAdminLightInfo(xml);
        }
        else {
            // sometimes the respose is recieved quicker then the html is loaded and displayed. we need to wait on such a case. Recursion
            if (document.getElementById('PoppedStreetName') == null) {
                if (counter >= 200) { counter = 0; return; }
                setTimeout(function() { LoadLightInfo(data, responseCode); }, 50);
                counter = counter + 1;
                return;
            }
            counter = 0;

            // Populate the template by the returned unit data.
            document.getElementById('PoppedStreetName').innerHTML = xml.documentElement.getAttribute("StreetName");
            document.getElementById('PoppedUnitType').innerHTML = xml.documentElement.getAttribute("UnitType");
            document.getElementById('PoppedLightDescr').innerHTML = xml.documentElement.getAttribute("Description");
            document.getElementById('PoppedUnitReference').innerHTML = xml.documentElement.getAttribute("UnitReference");

            //cookie remember me
            document.getElementById('PoppedPostCode').value = decodeURIComponent(getQueryVariable("pContactPostCode") || (readCookie('PostalCode') && readCookie('PostalCode').indexOf("anon") < 0 ? readCookie('PostalCode') : "") || '');
            if (readCookie('RememberMe') == 'true' && IsAdmin != true) {
                document.getElementById('PoppedRememberMe').checked = true;
                document.getElementById("PoppedName").value = readCookie('Name');
                document.getElementById("PoppedEmail").value = readCookie('Email');
                document.getElementById("PoppedTelephone").value = readCookie('Telephone');
                //document.getElementById("PoppedHouse").value = readCookie('HouseNumber');
            }

            //query string params
            if (getQueryVariable("pCallCentreMode") == "1") document.getElementById('PoppedRememberMeBox').style.display = "none";
            if (getQueryVariable("pContactName") || getQueryVariable("pContactEmail") || getQueryVariable("pContactTelephone") || getQueryVariable("pComments")) {
                document.getElementById('PoppedRememberMe').checked = false;
                document.getElementById("PoppedName").value = decodeURIComponent(getQueryVariable("pContactName") || '');
                document.getElementById("PoppedEmail").value = decodeURIComponent(getQueryVariable("pContactEmail") || '');
                document.getElementById("PoppedTelephone").value = decodeURIComponent(getQueryVariable("pContactTelephone") || '').replace(/ /g, "");
                document.getElementById('PoppedComments').value = decodeURIComponent(getQueryVariable("pComments") || '');
            }

            var IconType = IconImages[xml.documentElement.getAttribute("UnitTypeId")];
            if (IconType) {
                document.getElementById('PoppedUnitType').innerHTML += " <img style='vertical-align:text-top' src='" + IconType.n + "' />";
                document.getElementById('PoppedUnitIcon').src = IconType.l;
            }

            document.getElementById('PoppedViewHistory').style.display = xml.documentElement.getAttribute("FaultReports") == "0" ? "none" : "block";

        }
    }
    else if (responseCode == -1) alert("Data request timed out. Please try later.");
    else alert("Request resulted in error. Check XML file is retrievable.");
}

function changeMapSize() {
    if (parseInt(document.getElementById('map').style.height) == 300) {
        document.getElementById('map').style.height = "480px";
        document.getElementById('loading').style.height = "480px";
        document.getElementById('btnMapSize').innerText = "Smaller map...";
    }
    else {
        document.getElementById('map').style.height = "300px";
        document.getElementById('loading').style.height = "300px";
        document.getElementById('btnMapSize').innerText = "Larger map...";
    }
    var c = map.getCenter();
    map.checkResize();
    map.setCenter(c);
    UpdateMarkers();
}

function LoadLocationXML(bounds) {
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();

    //document.getElementById("debug").innerHTML = 'Requesting data for ' + 'Positions.ashx?s=' + southWest.lat() + '&w=' + southWest.lng() + '&n=' + northEast.lat() + '&e=' + northEast.lng();
    GDownloadUrl(AppRoot + '/Public/Services/Positions.ashx?s=' + southWest.lat() + '&w=' + southWest.lng() + '&n=' + northEast.lat() + '&e=' + northEast.lng(), LoadStreetLightMarkers);
}

function LoadStreetLightMarkers(data, responseCode) {
    // Remove all markers outside of the visible area.
    var bounds = map.getBounds();
    for (var MarkerItem in AllMarkers) {
        if (false == bounds.contains(AllMarkers[MarkerItem].getPoint())) {
            map.removeOverlay(AllMarkers[MarkerItem]);
            delete AllMarkers[MarkerItem];
        }
    }

    if (200 == responseCode) { // HTTP response for ALL OK.    
        var xml = GXml.parse(data);
        if (!xml || !xml.documentElement) return;
        var markers = xml.documentElement.getElementsByTagName("marker");
        var TotalFound = parseInt(xml.documentElement.getAttribute("Total"));
        var Returned = parseInt(xml.documentElement.getAttribute("Returned"));

        // obtain the attributes of each marker
        for (var i = 0; i < markers.length; i++) {
            var StreetLightId = parseInt(markers[i].getAttribute("id"));
            if (!AllMarkers[StreetLightId]) {
                var lat = parseFloat(markers[i].getAttribute("lat"));
                var lng = parseFloat(markers[i].getAttribute("lng"));
                var liveFaults = parseInt(markers[i].getAttribute("live"));
                var MaintenanceId = parseInt(markers[i].getAttribute("m"));
                var UnitTypeId = parseInt(markers[i].getAttribute("utid"));
                var UnitRef = markers[i].getAttribute("ur");
                var ToolTip = 'Street: ' + markers[i].getAttribute("sn") + ', \n';
                ToolTip += 'Location: ' + markers[i].getAttribute("d") + ', \n';
                ToolTip += 'Reference: ' + markers[i].getAttribute("ur") + ', \n';
                ToolTip += 'Type: ' + markers[i].getAttribute("ut");
                var point = new GLatLng(lat, lng);
                CreateLightMarker(point, StreetLightId, liveFaults, MaintenanceId, ToolTip, UnitTypeId, UnitRef);
            }
        }

        // If we have an active light it either means an infowindow is already open or this is a page load and we want to open this info window.
        if (null != ActiveStreetLightId && false == isInfoWindowOpen) {
            if (null != AllMarkers[ActiveStreetLightId]) {
                OpenPopup.call(AllMarkers[ActiveStreetLightId], true);
            }
        }
    } else document.getElementById("debug").innerHTML = '' + responseCode;

    HideLoadingBar();
}

function toggleLabels() {
    for (var MarkerItem in AllMarkers) {
        map.removeOverlay(AllMarkers[MarkerItem]);
        delete AllMarkers[MarkerItem];
    }
    ShowLabels = !ShowLabels;
    UpdateMarkers();
}

function getzIndexProcess() { return 10000; }
function CreateLightMarker(point, StreetLightId, liveFaults, MaintenanceId, tooltip, UnitTypeId, labelText) {
    var icon, marker;

    if (typeof tooltip == "undefined") tooltip = '';

    var IconType = IconImages[UnitTypeId] || IconImages[1];
    if (true == ShowMaintenance && false == isNaN(MaintenanceId)) {
        icon = new GIcon(MaintenanceIcon, IconType.m);
    }
    else if (true == ShowFaults && false == isNaN(liveFaults) && parseInt(liveFaults) > 0) {
        icon = new GIcon(faultIcon, IconType.f);
    }
    else {
        icon = new GIcon(baseIcon, IconType.n);
    }

    if (getQueryVariable("pCallCentreMode") == "1" && ShowLabels == true) {
        marker = new LabeledMarker(point, {
            icon: icon,
            title: tooltip,
            clickable: true,
            labelClass: "MapLabel",
            labelText: labelText,
            labelOffset: new GSize(-8, -9),
            zIndexProcess: getzIndexProcess
        });
    } else {
        marker = new GMarker(point, {
            icon: icon,
            title: tooltip
        });
    }

    marker.StreetLightId = StreetLightId;
    marker.UnitTypeId = UnitTypeId;

    GEvent.addListener(marker, "click", OpenPopup);

    map.addOverlay(marker);

    AllMarkers[StreetLightId] = marker;
}

var FaultType;
function SendFaultReport() {
    var Name = document.getElementById("PoppedName").value;
    FaultType = parseInt(document.getElementById("PoppedType").options[document.getElementById("PoppedType").selectedIndex].value);
    var Email = document.getElementById("PoppedEmail").value;
    var Comments = document.getElementById("PoppedComments").value;
    var PostalCode = document.getElementById("PoppedPostCode").value;
    var HouseNumber = document.getElementById("PoppedHouse").value;
    var Telephone = document.getElementById("PoppedTelephone").value;
    var Validation = '';

    // Validate the user input, ensuring all fields are filled in.
    if ('' == Name || null == Name) Validation = '  - Your Name\n';
    if ('' == PostalCode || null == PostalCode) Validation += '  - Your Postcode\n';
    if ('' == Email || null == Email) Validation += '  - Email Address\n';
    else if ('' == Email || null == Email || null == Email.match(/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/)) Validation += '  - Correct Email Address\n';
    if ('' == Telephone || null == Telephone) Validation += '  - Your Telephone\n';

    if ('' != Validation) {
        alert('Please enter the following;\n' + Validation);
    } else {
    
        if (true == document.getElementById('PoppedRememberMe').checked) {
            createCookie('RememberMe', true, 180);
            createCookie('Name', Name, 180);
            createCookie('Email', Email, 180);
            createCookie('Telephone', Telephone, 180);
            createCookie('HouseNumber', HouseNumber, 180);
        } else {
            eraseCookie('RememberMe');
            eraseCookie('Name');
            eraseCookie('Email');
            eraseCookie('Telephone');
            eraseCookie('HouseNumber');
        }

        // Display a please wait indicator.
        document.getElementById('Tab1Div').innerHTML = document.getElementById('WaitTemplate').innerHTML;
        HideReportPage(2);

        var url = AppRoot + '/Public/Services/ReportFault.ashx?'
                        + 'ft=' + FaultType
                        + '&n=' + EncodeForURL(Name)
                        + '&e=' + EncodeForURL(Email)
                        + '&c=' + EncodeForURL(Comments)
                        + '&id=' + ActiveStreetLightId
                        + "&p=" + EncodeForURL(PostalCode)
                        + "&h=" + EncodeForURL(HouseNumber)
                        + "&t=" + EncodeForURL(Telephone);
        GDownloadUrl(url, FaultReportSent);
    }
}

function FaultReportSent(data, responseCode) {
    if (200 == responseCode) { // HTTP response for ALL OK.
        var xml = GXml.parse(data);
        if (ActiveStreetLightId && ShowFaults) {
            var m = AllMarkers[ActiveStreetLightId];
            if (IconImages[m.UnitTypeId] && IconImages[m.UnitTypeId].f) {
                m.setImage(IconImages[m.UnitTypeId].f);  //m.getIcon().image.replace("/n-","/f-")
            }
        }
        document.getElementById('Tab1Div').innerHTML = document.getElementById('CompletedTemplate').innerHTML.replace(/FaultTemplate/g, "Popped");

        var FaultRef = document.getElementById('PoppedFaultRef');
        FaultRef.innerHTML = xml.documentElement.getAttribute("FaultReportId");
        FaultRef.href = "TrackFaultReport.aspx?FaultReportId=" + xml.documentElement.getAttribute("FaultReportId");

        document.getElementById('PoppedEmergencyContact').style.display = (EmergencyFaultTypes.indexOf("," + FaultType + ",") >= 0) ? "" : "none";
    }
    else document.getElementById('Tab1Div').innerHTML = document.getElementById('TryAgainTemplate').innerHTML;
}

function ValidateFaultDetails() {
    SendFaultReport(); return false;
    //    if ((document.getElementById('PoppedEmail').value.replace(/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/, '') == '') && (document.getElementById('PoppedEmail').value != '')) {
    //        SendFaultReport();
    //        return false;
    //    } else if (document.getElementById('PoppedEmail').value != '') {
    //        if (confirm('The email address you have entered does not appear to be valid. Do you wish to continue with this fault report anyway?')) {
    //            SendFaultReport();
    //            return false;
    //        }
    //    } else if ((document.getElementById('PoppedEmail').value == '') && (document.getElementById('PoppedTelephone').value != '')) {
    //        SendFaultReport();
    //        return false;
    //    } else {
    //        alert('Please fill in either your telephone or e-mail address in case we need to contact you about this fault.\n\nWe value your feedback, if you do not wish to supply this information please telephone our response centre on 0800 0325349 where our team will be happy to take details of the fault you wish to report.\n\nThank You.');
    //        return false;
    //    }
}

function ShowHistory() {
    HideReportPage(0); ShowReportPage(7);
    var url = AppRoot + '/Public/Services/LightHistory.ashx?i=' + ActiveStreetLightId;
    makeRequest(url, '', function(http_response, customData) {
        if (http_response.readyState == 4) {
            if (http_response.status == 200) {
                var d = http_response.responseXML.documentElement;
                document.getElementById("PoppedHistoryData").innerHTML = d.textContent ? d.textContent : d.text;
            }
        }
    });
}

function LookupDataReturned(data, responseCode) {
    if (!waitIndicator) waitIndicator = document.getElementById("LookupWait"); waitIndicator.style.display = "none";
    if (!RunLookup) RunLookup = document.getElementById('RunLookup'); RunLookup.disabled = false;

    StreetSearchResults = []; ResultsPage = 0;
    if (200 == responseCode) {

        var markerBounds, xml = GXml.parse(data);
        var streets = xml.documentElement.getElementsByTagName("street");
        var postcodes = xml.documentElement.getElementsByTagName("postcode");
        var units = xml.documentElement.getElementsByTagName("unit");
        var StreetList = document.getElementById("ResultsList");

        if (units.length > 0) {
            for (var i = 0; i < units.length; i++) {
                var lat = parseFloat(units[i].getAttribute("lat")), lng = parseFloat(units[i].getAttribute("lng"));
                if (!markerBounds) markerBounds = new GLatLngBounds(new GLatLng(lat, lng), new GLatLng(lat, lng)); else markerBounds.extend(new GLatLng(lat, lng));

                var SName = "<b>Unit " + units[i].getAttribute("UnitRef") + "</b>," + units[i].getAttribute("Desc") + ", " + units[i].getAttribute("StreetName") + ", " + units[i].getAttribute("AreaName");
                StreetSearchResults.push('<li><a href="javascript:" onclick="ClosePopup(); ActiveStreetLightId=' + units[i].getAttribute("StreetLightId") + '; map.setCenter(new GLatLng(' + lat + ',' + lng + '), 17); return false;">' + SName + '</a></li>');
            }
            if (units.length == 1) { ClosePopup(); ActiveStreetLightId = units[0].getAttribute("StreetLightId"); }
        } else if (streets.length > 0) {
            for (var i = 0; i < streets.length; i++) {
                var lat = parseFloat(streets[i].getAttribute("lat")), lng = parseFloat(streets[i].getAttribute("lng"));
                if (!markerBounds) markerBounds = new GLatLngBounds(new GLatLng(lat, lng), new GLatLng(lat, lng)); else markerBounds.extend(new GLatLng(lat, lng));

                var SName = streets[i].getAttribute("StreetName") + ", " + streets[i].getAttribute("AreaName");
                StreetSearchResults.push('<li><a href="javascript:" onclick="map.setCenter(new GLatLng(' + lat + ',' + lng + '), 17); return false;">' + SName + '</a></li>');
            }
        } else if (postcodes.length > 0) {
            for (var i = 0; i < postcodes.length; i++) {
                var lat = parseFloat(postcodes[i].getAttribute("lat")), lng = parseFloat(postcodes[i].getAttribute("lng"));
                if (!markerBounds) markerBounds = new GLatLngBounds(new GLatLng(lat, lng), new GLatLng(lat, lng)); else markerBounds.extend(new GLatLng(lat, lng));

                var SName = "<b>Postcode " + postcodes[i].getAttribute("postcode") + "</b>";
                StreetSearchResults.push('<li><a href="javascript:" onclick="map.setCenter(new GLatLng(' + lat + ',' + lng + '), 17); return false;">' + SName + '</a></li>');
            }
        } else if (getQueryVariable("pCallCentreMode") != "1") { //try live lookup
            StreetSearchResults.push('<li>No results found. Trying live lookup...</li>');
            waitIndicator.style.display = "";
            RunLookup.disabled = true;
            SearchLive(document.getElementById("tbSearch").value);
            return;
        } else {
            StreetSearchResults.push('<li>No results found.</li>');
            ShowSearchResults();
            return;
        }

        var markerZoom = map.getBoundsZoomLevel(markerBounds);
        map.setCenter(markerBounds.getCenter(), markerZoom);

    } else StreetSearchResults.push('<li>An error occured while searching</li>');

    ShowSearchResults();
}

function SearchLive(searchquery, doneListResults) {
    if (!searchquery) {
        if (!waitIndicator) waitIndicator = document.getElementById("LookupWait"); waitIndicator.style.display = "none";
        if (!RunLookup) RunLookup = document.getElementById('RunLookup'); RunLookup.disabled = false;
        return;
    }

    var searchhelper = new google.search.LocalSearch();
    searchhelper.setCenterPoint(SiteName + ", GB"); //init for Great Britain
    searchhelper.setResultSetSize(50);
    searchhelper.setSearchCompleteCallback(null, function() {
        if (!waitIndicator) waitIndicator = document.getElementById("LookupWait"); waitIndicator.style.display = "none";
        if (!RunLookup) RunLookup = document.getElementById('RunLookup'); RunLookup.disabled = false;

        StreetSearchResults = []; ResultsPage = 0;
        try {
            for (var i = 0; i < searchhelper.results.length; i++) {
                var result = searchhelper.results[i];
                var zoom = (11 + parseInt(parseInt(result.accuracy) * 0.8));
                var title = result.titleNoFormatting + ", " + result.addressLines.join(', ').replace(", United Kingdom", "");
                StreetSearchResults.push('<li><a href="javascript:" onclick="map.setCenter(new GLatLng(' + result.lat + ',' + result.lng + '), ' + zoom + '); return false;">' + title + '</a></li>');
            }
            if (searchhelper.results.length > 0) map.setCenter(new GLatLng(searchhelper.results[0].lat, searchhelper.results[0].lng), 11 + parseInt(parseInt(searchhelper.results[0].accuracy) * 0.8));
            else StreetSearchResults.push('<li>No live results found for that query</li>');
        } catch (e) {
            StreetSearchResults.push('<li>No live results found for that query</li>');
        }
        if (doneListResults != true) ShowSearchResults();
    });
    searchhelper.execute(searchquery);
}

function HideReportPage(pageNum) {
    HideElement('ReportPage' + pageNum);
}

function ShowReportPage(pageNum) {
    ShowElement('ReportPage' + pageNum);
}

//Empty, only employed in MicrosoftMapsTemplate.js, but required here to avoid exceptions
function div0_click(e) { }
function div1_click(e) { }
function div2_click(e) { }
function divComplete_click(e) { }
function divTryAgain_click(e) { }
function admin_div0_click(e) { }


//pink light stuff
function ValidatePinkLightDetails() {
    if (!((document.getElementById('PoppedEmail').value.replace(/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/, '') == '') && (document.getElementById('PoppedEmail').value != ''))) {
        alert('Please provide a valid email address.');
        return false;
    }

    if (document.getElementById('PoppedName').value == '') {
        alert('Please enter your name.');
        return false;
    }

    if (document.getElementById('PoppedAddress').value == '') {
        alert('You address is too short. Please provide a valid address to ensure a proper report.');
        return false;
    }

    SendPinkLightReport();
    return false;

}

function SendPinkLightReport() {
    var Name = document.getElementById("PoppedName").value;
    var Addr = document.getElementById("PoppedAddress").value;
    var Email = document.getElementById("PoppedEmail").value;
    var PostalCode = document.getElementById("PoppedPostCode").value;
    var Telephone = document.getElementById("PoppedTelephone").value;

    var Validation = '';

    HideReportPage(2);

    // Display a please wait indicator.
    document.getElementById('Tab1Div').innerHTML = document.getElementById('WaitTemplate').innerHTML;

    var url = AppRoot + '/Public/Services/PinkLightReport.ashx?'
                        + '&n=' + EncodeForURL(Name)
                        + '&a=' + EncodeForURL(Addr)
                        + '&e=' + EncodeForURL(Email)
                        + '&id=' + ActiveStreetLightId
                        + "&p=" + EncodeForURL(PostalCode)
                        + "&t=" + EncodeForURL(Telephone);

    GDownloadUrl(url, PinkLightReportSent);
}

function PinkLightReportSent(data, responseCode) {
    if (200 == responseCode) // HTTP response for ALL OK.
    {
        document.getElementById('Tab1Div').innerHTML = document.getElementById('CompletedTemplate').innerHTML;
    }
    else {
        document.getElementById('Tab1Div').innerHTML = document.getElementById('TryAgainTemplate').innerHTML;
    }
}
//end pink light stuff
