﻿//<![CDATA[
if (GBrowserIsCompatible()) {
    var zoom = 3;
    var StateBorderColor = '#000000';
    var StateBorderWeight = 0.15;
    var StateBorderOpacity = 1.0;
    var StateFillColorOpacity = 0.25;
    var MapHeight = 235;
    var MapWidth = 300;
    document.getElementById("map").style.height = MapHeight + 'px';
    document.getElementById("map").style.width = MapWidth + 'px';
    var polys = []; var labels = []; var map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.setCenter(new GLatLng(38.5007, -98.3276), zoom);
    GEvent.addListener(map, "dragstart", function() { document.getElementById("InfoTest").style.display = 'none'; });
    GEvent.addListener(map, "zoomend", function() { document.getElementById("InfoTest").style.display = 'none'; });
    GEvent.addListener(map, "moveend", function() { MovePopup(); });
    GEvent.addListener(map, "click", function(overlay, point) {
        if (!overlay) {
            for (var i = 0; i < polys.length; i++) {
                if (polys[i].Contains(point)) {
                    ShowStateArticlesAtPoint(point, polys[i].Info);
                }
            }
        }
    });
    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;
    }
    requestCrossDomainXml("http://www.areadevelopment.com/xml/states.xml", function(results) {
        var xmlDoc = GXml.parse(results);
        var states = xmlDoc.documentElement.getElementsByTagName("state");
        for (var a = 0; a < states.length; a++) {
            var StateInfo = "Name|ID|RegionID|Colour";
            var label = states[a].getAttribute("Name");
            var colour = states[a].getAttribute("Colour");
            var ID = states[a].getAttribute("ID")
            var Regionid = states[a].getAttribute("RegionId")
            var points = states[a].getElementsByTagName("point");
            var pts = [];
            for (var i = 0; i < points.length; i++) {
                pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")),
                   parseFloat(points[i].getAttribute("lng")));
            }
            if (pts.length > 0) {
                var poly = new GPolygon(pts, StateBorderColor, StateBorderOpacity, StateBorderWeight, colour, StateFillColorOpacity, { clickable: false, mouseOutTolerance: 1 });
                StateInfo = label + '|' + ID + '|' + Regionid + '|' + colour;
                poly.Info = StateInfo;
                if (Regionid > 0) {
                    map.addOverlay(poly);
                }
                else {
                    polys.push(poly);
                }
                pts = null;
            }

        }
    });

} else { alert("Sorry, the Google Maps API is not compatible with this browser"); }
//]]>
var currentPopupPoint = null;
function ShowStateArticlesAtPoint(dpoint, StateInfo) {
    currentPopupPoint = dpoint;
    var StateName = StateInfo.split('|')[0];
    var StateID = StateInfo.split('|')[1];
    var StateRegion = StateInfo.split('|')[2];
    var stateData = "";
    var url = "http://www.areadevelopment.com/AsyncOperation.aspx?Task=GetStateArticles&StateID=" + StateID + "&State=" + StateName;
    var dLeft = 0;
    var dTop = 0;
    var dOffsetHeight = 0;
    document.getElementById("InfoTest").style.display = '';
    requestCrossDomain(url, function(results) {
        //alert(results);
        document.getElementById("dvContent").innerHTML = results;
    });
    var elementPositions = getPosition(document.getElementById("map"));
    dOffsetHeight = document.getElementById("InfoTest").offsetHeight;
    var pos = map.fromLatLngToContainerPixel(dpoint, zoom);
    dLeft = elementPositions.offsetLeft + pos.x;
    dTop = elementPositions.offsetTop + pos.y;
    if (dLeft < elementPositions.offsetLeft || dLeft > elementPositions.offsetLeft + MapWidth || dTop < elementPositions.offsetTop || dTop > elementPositions.offsetTop + MapHeight) {
        map.panTo(dpoint);
        pos = map.fromLatLngToContainerPixel(map.getCenter(), zoom);
        dLeft = elementPositions.offsetLeft + pos.x;
        dTop = elementPositions.offsetTop + pos.y;

    }
    dTop = dTop - (dOffsetHeight / 2);
    document.getElementById("InfoTest").style.top = dTop + 'px';
    document.getElementById("InfoTest").style.left = dLeft + 'px';

}
function fnClosePopup(obj) {
    document.getElementById("InfoTest").style.display = 'none';
}
function MovePopup() {

    if (currentPopupPoint != null) {
        var dLeft = 0;
        var dTop = 0;
        var dOffsetHeight = 0;
        var elementPositions = getPosition(document.getElementById("map"));
        dOffsetHeight = document.getElementById("InfoTest").offsetHeight;
        var pos = map.fromLatLngToContainerPixel(currentPopupPoint, zoom);
        dLeft = elementPositions.offsetLeft + pos.x;
        dTop = elementPositions.offsetTop + pos.y - (dOffsetHeight / 2);
        if (dLeft < elementPositions.offsetLeft || dLeft > elementPositions.offsetLeft + MapWidth || dTop < elementPositions.offsetTop || dTop > elementPositions.offsetTop + MapHeight) {
            document.getElementById("InfoTest").style.display = 'none';
        }
        else {

            document.getElementById("InfoTest").style.top = dTop + 'px';
            document.getElementById("InfoTest").style.left = dLeft + 'px';
        }

    }
}
function getPosition(element) {
    var left = 0;
    var top = 0;
    if (element.offsetParent) {
        while (element) {
            left += element.offsetLeft;
            top += element.offsetTop;
            element = element.offsetParent;
        }
    }
    return { offsetLeft: left, offsetTop: top };
}
