﻿//Electorate Overlay
var electorateNames = new Array();
var polygonIds = new Array();
var electorateMapEventListener;
var electorateMarkers = false;

//Display electorate overlays using the supplied Json Data Block and
// insert into the electorateOverlayPolygons array.
function displayElectorateOverlay(electorateJson) {
    if (electorateJson != null) {
        for (var i = 0; i < electorateJson.results.Electorates.Electorate.length; i++) {
            var electorateData = electorateJson.results.Electorates.Electorate[i];
            var electorateName = electorateData.Electorate_Name;
            //var electorateLineColour = electorateData.Electorate_Line_Color;
            var electorateLineColour = "#404040";   //Grey 75% (as requested by the business)
            //var electorateFillColour = electorateData.Electorate_Fill_Color;
            var electorateFillColour = "#808080";   //Gray Color (as requested by the business)
            var polygonId = electorateData.Polygon_ID;
            // Get electorate lat and long used for electorate search.
            electorateLat = electorateData.GIS_Loc_Latitude;
            electorateLng = electorateData.GIS_Loc_Longitude;
            if ((isElectorateSelected == true || forceElectorateSearchCheck == true) &&
                    electorateLat != undefined && electorateLng != undefined)
            {
                selectedUserPoint = new GLatLng(parseFloat(electorateLat), parseFloat(electorateLng));
            }

            //Insert into the array.
            electorateNames[i] = electorateName;
            polygonIds[i] = polygonId;

            var coordinates = electorateData.Coordinates;

            var latLongPoly = new Array();
            var indexLatLongPoly = 0;

            for (var p = 0; p < coordinates.length; p++) {
                latLongPoly[indexLatLongPoly] = GLatLng.fromUrlValue(coordinates[p])
                indexLatLongPoly++;
            }
            
            //Set the fillOpacity = 0.175 (the business requires the translucent grey 15-20%)
            var electorateOverlayPolygon = new GPolygon(latLongPoly, electorateLineColour, 2, 1, electorateFillColour, 0.4, { clickable: false });
            electorateOverlayPolygons[electorateOverlayPolygons.length] = electorateOverlayPolygon;
        }

//        $('#electorateButton').show(); // 2010-03-12 IK0043: Commented out so that electorate buttons do not show.

        //2010-03-15 LD2558. Commented out, no longer required regarding not showing Electorate buttons request
        
        // A method for testing if a point is inside a polygon
        // Returns true if poly contains point
//        GPolygon.prototype.Contains = function(point) {
//            var j = 0;
//            var oddNodes = false;
//            var x = point.lng();
//            var y = point.lat();
//            for (var i = 0; i < this.getVertexCount(); i++) {
//                j++;
//                if (j == this.getVertexCount()) { j = 0; }
//                if (((this.getVertex(i).lat() < y) && (this.getVertex(j).lat() >= y))
//          || ((this.getVertex(j).lat() < y) && (this.getVertex(i).lat() >= y))) {
//                    if (this.getVertex(i).lng() + (y - this.getVertex(i).lat())
//            / (this.getVertex(j).lat() - this.getVertex(i).lat())
//            * (this.getVertex(j).lng() - this.getVertex(i).lng()) < x) {
//                        oddNodes = !oddNodes
//                    }
//                }
//            }
//            return oddNodes;
//        }
    }
}



//2010-03-15 LD2558. Commented out, no longer required regarding not showing Electorate buttons request

//// A electorateOverlayControl is a GControl that displays textual "Display Electorate"
//// and "Hide Electorate" buttons (as opposed to the iconic buttons used in
//// Google Maps).
//function electorateOverlayControl() {
//}
//electorateOverlayControl.prototype = new GControl();

//// Creates a one DIV for each of the buttons and places them in a container
//// DIV which is returned as our control element. We add the control to
//// to the map container and return the element for the map class to
//// position properly.
//electorateOverlayControl.prototype.initialize = function(map) {
//    var container = document.createElement("div");

//    displayDiv = document.createElement("div");
//    displayDiv.setAttribute('id', 'electorateButton');
//    container.appendChild(displayDiv);

//    GEvent.addDomListener(displayDiv, "click", function() {
//        if ($('#electorateButton').html() == "Display Electorates") {
//            //Add overlays to the map
//            if (!forceElectorateSearchCheck) {
//                addOverlayToMap();
//            }

//            //Add the electorate map event listener
//            addMapClickCount += 1;
//            electorateMapEventListener = GEvent.addListener(map, "click", function(overlay, point) {
//                $('#overlay').show();
//                if (!overlay) {
//                    var electorateFound = false;
//                    for (var i = 0; i < electorateOverlayPolygons.length; i++) {
//                        if (electorateOverlayPolygons[i].Contains(point)) {
//                            if (currentElectorate == i) {
//                                $('#overlay').hide();
//                                break;
//                            }
//                            currentElectorate = i;

//                            // Set a new map center point to where the user clicked.
//                            selectedUserPoint = point;

//                            // Overlaying the data will be for electorates now.
//                            electorateMarkers = true;

//                            //Reset electorate and postcode boolean values.
//                            isPostcodeSelected = false;
//                            isSuburbOrTownSelected = false;
//                            forceAddressSearchCheck = false;
//                            forcePostcodeSearchCheck = false;
//                            forceSuburbOrTownSearchCheck = false;

//                            //Set isElectorateSelected variable to 'true'
//                            isElectorateSelected = true;

//                            //Retrieve xml data and display results
//                            $.get("/data/GetElectorateResultSet.aspx", { electoratename: electorateNames[i], responsetype: 'xml' }, projectsReturned, 'xml');

//                            //Set electorateFound to 'true'
//                            electorateFound = true;
//                            break;
//                        }
//                    }
//                }
//                if (!electorateFound) {
//                    $('#overlay').hide();
//                }
//            });

//            $('#electorateButton').css({ 'background-color': '#C0C0C0', 'font-weight': 'bold', 'border-width': '1px' });
//            $('#electorateButton').html("Hide Electorates");
//            if (!forceElectorateSearchCheck) {
//                $('#electorateMessage').show();
//            }
//        } else {
//            //Remove all overlays from the map
//            if (electorateOverlayPolygons.length != 0) {
//                var numPolygons = electorateOverlayPolygons.length
//                for (var index = 0; index < numPolygons; index++) {
//                    map.removeOverlay(electorateOverlayPolygons[index]);
//                }
//            }

//            //Remove the electorate map event listener
//            if (addMapClickCount > 0) {
//                GEvent.clearInstanceListeners(map);
//                addMapClickCount = 0;   //Reset the addMapClickCount
//            }

//            //Remove the electorate message from the map
//            $('#electorateMessage').hide();
//            $('#electorateButton').css({ 'background-color': '#FFFFFF', 'font-weight': 'normal', 'border-width': '1px' });
//            $('#electorateButton').html("Display Electorates");

//            //Reset the isElectorateSelected variable to 'false'
//            isElectorateSelected = false;

//            //Reset the forceElectorateSearchCheck
//            forceElectorateSearchCheck = false;

//            retreiveUserLocation();
//        }
//    });

//    map.getContainer().appendChild(container);

//    $('#electorateButton').html("Display Electorates");
//    $('div#electorateButton').addClass("mapDisplayElectorate");
//    $('#electorateButton').hide();

//    return container;
//}

//// By default, the control will appear in the top right corner of the
//// map with 100 pixels of padding.
//electorateOverlayControl.prototype.getDefaultPosition = function() {
//    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(100, 7));
//}

//2010-03-15 LD2558. Commented out, no longer required regarding not showing Electorate buttons request

//// A electorateMessageControl is a GControl that displays textual
////"Click in an electorate to display the electorate summary."
//// This message will appear when user click on the "Electorate ON" button.
//function electorateMessageControl() {
//}
//electorateMessageControl.prototype = new GControl();

//// Creates a one DIV for each of the buttons and places them in a container
//// DIV which is returned as our control element. We add the control to
//// to the map container and return the element for the map class to
//// position properly.
//electorateMessageControl.prototype.initialize = function(map) {
//    var container = document.createElement("div");

//    var messageDiv = document.createElement("div");
//    messageDiv.setAttribute('id', 'electorateMessage');
//    messageDiv.appendChild(document.createTextNode("Click in an electorate to display the electorate summary."));

//    container.appendChild(messageDiv);

//    map.getContainer().appendChild(container);
//    $('div#electorateMessage').addClass("mapDisplayElectorateMessage");
//    $('#electorateMessage').hide();
//    return container;
//}

//// By default, the control will appear in the top right corner of the
//// map with 100 pixels of padding.
//electorateMessageControl.prototype.getDefaultPosition = function() {
//    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(100, 35));
//}

//Add overlays to the map 
function addOverlayToMap() {
    if (electorateOverlayPolygons.length != 0) {
        var numPolygons = electorateOverlayPolygons.length
        for (var index = 0; index < numPolygons; index++) {
            map.addOverlay(electorateOverlayPolygons[index]);
        }
    }

}
