//
// Weather Map script interface.
// Written By: David Martin
// 
// Interface and display layer for ExplorOz Weather Map system.
//
var PlaceMap, PopUpLayer, clickpos;
var MapPopUp = null;
var OLTimeout = 1;

function PopupClose(evt) {
    if (MapPopUp == null) return;
    PopUpLayer.map.removePopup(MapPopUp);
    MapPopUp.destroy();
    MapPopUp = null;
    if (evt) OpenLayers.Event.stop(evt);
}

function deserialize(responseText) {
    var popsize = new OpenLayers.Size(250, 100);
    var popstr = responseText;
    MapPopUp = new OpenLayers.Popup.FramedCloud("weather", clickpos, popsize, popstr, null, true, PopupClose);
    PopUpLayer.map.addPopup(MapPopUp);
}

function loadMaps() {
    if (typeof OpenLayers == 'undefined') { OlTimeout++; if (OlTimeout < 30) { setTimeout(function() { loadMaps() }, 1000); } else { alert("There has been an error loading the mapping system - please try refresh"); } return (false); }
    DispProj = new OpenLayers.Projection("EPSG:4326");

    OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
        defaultHandlerOptions: { 'single': true, 'double': false, 'pixelTolerance': 0, 'stopSingle': false, 'stopDouble': false },
        initialize: function(options) {
            this.handlerOptions = OpenLayers.Util.extend({}, this.defaultHandlerOptions);
            OpenLayers.Control.prototype.initialize.apply(this, arguments);
            this.handler = new OpenLayers.Handler.Click(this, { 'click': this.trigger }, this.handlerOptions);
        },
        trigger: function(e) {
            PopupClose(null);
            clickpos = PlaceMap.getLonLatFromViewPortPx(e.xy);
            url = BaseURL + '/Places/getWeatherClick.aspx?x=' + clickpos.lon + '&y=' + clickpos.lat;
            var responseObj = new OpenLayers.Ajax.Request(url, { method: 'post', onComplete: function(transport) { var response = transport.responseText || 'no response text'; deserialize(response) }, onFailure: function() { alert('Weather get result failed...'); } });
        }
    });
    FramedCloudSize = OpenLayers.Class(OpenLayers.Popup.FramedCloud, { 'autoSize': false });
    var options = {
        projection: DispProj,
//        maxExtent: new OpenLayers.Bounds(111, -45.5, 155, -7.9),
        controls: []
    };
    PlaceMap = new OpenLayers.Map('map_tag', options);
    
    var imgoptions = { numZoomLevels: 1 };
    var wmapimg = new OpenLayers.Layer.Image(
                                'Australian Weather',
                                'http://www.exploroz.com/Places/Weather_Map.aspx',
                                new OpenLayers.Bounds(109.818768, -44, 156.181232, -9.5),
                                new OpenLayers.Size(470, 350),
                                imgoptions);
    PopUpLayer = new OpenLayers.Layer.Markers("Markers", { displayInLayerSwitcher: false });

    PlaceMap.addLayers([wmapimg, PopUpLayer]);
    PlaceMap.addControl(new OpenLayers.Control.MousePosition());
//    PlaceMap.addControl(new OpenLayers.Control.ScaleLine());
//    PlaceMap.addControl(new OpenLayers.Control.Scale());
    PlaceMap.zoomToMaxExtent();
    
    if (PosLongitude > 0) {
        PlacePos = new OpenLayers.LonLat(PosLongitude, PosLatitude);
        var size = new OpenLayers.Size(30, 30);
        var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h / 2);
        var icon = new OpenLayers.Icon(BaseURL + '/images/iMapplot/EO_MM.gif', size, offset);
        marker = new OpenLayers.Marker(PlacePos, icon);
        PopUpLayer.addMarker(marker);
    }
    var click = new OpenLayers.Control.Click();
    PlaceMap.addControl(click);
    click.activate();
}
