/*
 * map functions.
 */
var map;
// === Default values to use if there is no cookie ===
var lat = 28.3;
var lng = -81.95526123046875;
var zoom = 8;
var maptype = 3;
var countyPoints = null;
var vectMarkers = [];
var timer = 0;
var geocoder;

// === Some cookie parameters ===
var cookiename = "mapinfo";  // name for this cookie
var expiredays = 7;          // number of days before cookie expiry

if (GBrowserIsCompatible() ){
    // reset_interval - Need to be finalized and included on marker's onclick event
    function reset_interval() {
        if(timer != 0) {
            window.clearInterval(timer);
        }
        timer = window.setInterval(function(){
            map.clearOverlays();
            manageMarkers();
            alert("Reseted!");
        },1800000);
    }
    function manageMarkers() {
        GDownloadUrl("getStations.php", function(data, responseCode) {
            var xml = GXml.parse(data);
            var markers = xml.documentElement.getElementsByTagName("station");
            vectMarkers = [];

            for (var i = 0; i < markers.length; i++) {
                var lat = parseFloat(markers[i].getAttribute("lat"));
                var lng = parseFloat(markers[i].getAttribute("lng"));
                var active = markers[i].getAttribute("active");
                var startDate = markers[i].getAttribute("start_date");
                var name = markers[i].getAttribute("display_name");
                var county = markers[i].getAttribute("county");
                var locID = markers[i].getAttribute("locID");
                var statusB = markers[i].getAttribute("statusB");
                var statusA = markers[i].getAttribute("statusA");

                var point =   new GLatLng(lat,lng);
                var title = "<font color='black' size='3'>"+name + " Station</font>";
                //marker = createMarker(point, title, icon, county, lat, lng, locID, startDate,0);
                marker = createMarker(point, title, icon, county, lat, lng, locID, startDate, statusB, statusA);
                vectMarkers[locID] = marker; //.push(marker);
                map.addOverlay(vectMarkers[locID]);
            }
        });
    }
    function createMarker(point, title, icon, county, lat, lng, locID, startDate, statusB, statusA) {
        icon.iconSize = new GSize(45, 45);
        icon.iconAnchor = new GPoint(32,64);
        icon.infoWindowAnchor = new GPoint(30, 8);
        var marker;
        var alert ="";
        var recommendation = "<br><br><b><a onclick=\"map.getInfoWindow().maximize();\">&raquo;&raquo; Click here to check the Recommendation &laquo;&laquo;</a></b>";
        var information = "";
        if(statusB.indexOf("High") >= 0 || statusA.indexOf("High") >= 0) {
            icon.image = "images/red-alert.png";
            marker = new PdMarker(point,icon);
        } else if(statusB.indexOf("Moderate") >= 0 || statusA.indexOf("Moderate") >= 0) { // 0 - No alert; 1 - Moderate alert; 2 - Hight alert;
            icon.image = "images/yellow-alert.png";
            marker = new PdMarker(point,icon);
        } else {
            icon.image = "images/green-alert.png";
            marker = new PdMarker(point,icon);
            alert += "<font color='green'>Low Risk</font><br>";
            //recommendation = "<br><br><b><a onclick=\"map.getInfoWindow().maximize();\">&raquo;&raquo; No recommendations available! &laquo;&laquo;</a></b>";
            recommendation = "";
            information = "<br><br><a onclick=\"map.getInfoWindow().maximize();\">Click <b>here</b> for more information!</a>";
        }
        if(statusB.indexOf("High") >= 0) {
            alert += "<font color='red'>"+statusB+"</font><br>";
        }
        if(statusA.indexOf("High") >= 0) {
            alert += "<font color='red'>"+statusA+"</font><br>";
        }
        if(statusB.indexOf("Moderate") >= 0) {
            alert += "<font color='orange'>"+statusB+"</font><br>";
        }
        if(statusA.indexOf("Moderate") >= 0) {
            alert += "<font color='orange'>"+statusA+"</font><br>";
        }
        marker.setId(locID);
        // Set the transparency of the tooltip (100 is opaque)
        marker.setOpacity(100);
        // Mouseover event for tooltip
        GEvent.addListener(marker, "mouseover", function() {
            marker.setTooltip("<b><h2>"+title+"<hr>"+alert+"</h2></b>");
        });

        // Click Event
        GEvent.addListener(marker, 'click', function() {
            markerClicked(marker);
            var maxContentDiv = document.createElement('div');
            maxContentDiv.innerHTML = 'Loading...';
            map.savePosition();
            locID = marker.getId();
            stationCredit = '';
            
            // Close the zipcode search window
            $('.tab').remove();
			$('.close').remove();
            
            if(locID < 500) // Credit to FAWN
                stationCredit = "<a href='http://fawn.ifas.ufl.edu/station.php?id="+locID+"' target='_blank'><img src='images/FAWN-Oficial.png' width='50' align='middle'></img></a>";
            marker.openInfoWindowHtml("<div style='padding:5px' id='divballoon'><table border=0 width='100%'><tr><td align='left'>"+stationCredit+
                "</td><td align='left'><b>"+title+"</b></td></table><hr><center><h2>"+alert+"</h2>"+recommendation + information+
                "</center></div>",
                {
                    maxContent: maxContentDiv,
                    maxTitle: title
                });

            var iw = map.getInfoWindow();
            GEvent.addListener(iw, "maximizeclick", function() {
                GDownloadUrl("fullData.php?locID="+locID+"&recommendation="+(recommendation!=""?"true":"false")+"&statusB="+statusB+"&statusA="+statusA, function(data) {
                    maxContentDiv.innerHTML = data;
                });
            });
            // Maximize the window immediately
            GEvent.trigger(map, "maximizeclick");
        //map.getInfoWindow().maximize();
        });

        /*/GEvent.addListener(marker, "click", function() {
                    createStationClick(locID, county, lat, lng);
                });*/

        return marker;
    }
    function searchByZipCode() {
        $('#loading').animate({ opacity: 1.0},0);
        var zipcode = document.getElementById('zipcodeInput').value;
	//alert(zipcode);
        geocoder.getLatLng(zipcode, function(latlng) {
            if (!latlng) {
                alert(zipcode + ' not found');
            } else {
                searchLocationsNear(latlng);
            }
            $('#loading').animate({ opacity: 0.0},0);
        });
    }

    function searchLocationsNear(center) {
        var searchUrl = 'geo_xml.php?lat=' + center.lat() + '&lng=' + center.lng();
	//alert(searchUrl);
        GDownloadUrl(searchUrl, function(id) {
            //var xml = GXml.parse(data);
            //var id = xml.documentElement.getElementsByName('LocID');
            //alert(id);
            stationChanged(id);
        });                
    }

    function lmap(){
        if(document.getElementById("map")){
            // === Display the map ===
	    //var container = document.createElement("div");
	    	
	    var newControlPosition = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,60)); // position
            map = new GMap2(document.getElementById("map"));
            map.setCenter(new GLatLng(lat,lng),zoom);
            map.addControl(new GLargeMapControl(), newControlPosition);
            map.addControl(new GMapTypeControl());

            geocoder = new GClientGeocoder();

            // === Set up the map types exactly like Google Maps ===
            // Add the Terrain Map Type
            map.addMapType(G_PHYSICAL_MAP);

            map.setMapType(map.getMapTypes()[maptype]);
            //alert(G_PHYSICAL_MAP);

            // Return the map to the saved position
            GEvent.addListener(map, "infowindowclose", function() {
                map.returnToSavedPosition();
            });

            // === Get the stations and create the markers
            icon = new GIcon();
            icon.iconAnchor = new GPoint(6, 9);

            timer = window.setInterval(function(){
                map.clearOverlays();
                manageMarkers();
            },1800000);

            manageMarkers();

        }
    }
    // === Set the cookie before exiting ===
    function setCookieMap() {
        //alert("cookie");
        maptype = 0;
        for (var i=0;i<map.getMapTypes().length;i++) {
            //alert(i);
            if (map.getCurrentMapType() == map.getMapTypes()[i]) {
                maptype = i;
            }
        }
        var cookietext = cookiename+"="+map.getCenter().lat()+"|"+map.getCenter().lng()+"|"+map.getZoom()+"|"+maptype;
        //alert(cookietext);
        if (expiredays) {
            var exdate=new Date();
            exdate.setDate(exdate.getDate()+expiredays);
            cookietext += ";expires="+exdate.toGMTString();
        }
        // == write the cookie ==
        document.cookie=cookietext;
        // == Call GUnload() on exit ==
        GUnload();
    }
    function drawCounty(station) {
        GDownloadUrl("getCountycoordinates.php?station="+station, function(data, responseCode) {
            var xml = GXml.parse(data);
            var points = xml.documentElement.getElementsByTagName("point");
            vPoints = [];
            for (var i = 0; i < points.length; i++) {
                var lat = parseFloat(points[i].getAttribute("lat"));
                var lng = parseFloat(points[i].getAttribute("lng"));
                var point = new GLatLng(lat,lng);
                vPoints.push(point);
            }
            countyPoints = new GPolygon(vPoints, "#ff0000", 3, 0.3, "#FFFF00", 0.3);
            map.addOverlay(countyPoints);
        });
    }
    function goCounty(station) {
        GDownloadUrl("getCountyCentroid.php?station="+station, function(data, responseCode) {
            var xml = GXml.parse(data);
            var points = xml.documentElement.getElementsByTagName("point");
            var lat = parseFloat(points[0].getAttribute("lat"));
            var lng = parseFloat(points[0].getAttribute("lng"));
            map.setCenter(new GLatLng(lat,lng));
        });
    }
    function removeLimits() {
        if(countyPoints != null) {
            map.removeOverlay(countyPoints);
            countyPoints = null;
        }
    }
    function drawOrClean() {
        //map.closeInfoWindow();
        removeLimits();
        if(document.getElementById('viewcounty').innerHTML.indexOf("Clean")>=0) {
            document.getElementById('viewcounty').innerHTML='Draw';
        //document.images['county_border'].src='images/button_display.png';
        } else {
            //goCounty(document.getElementById('station').value);
            drawCounty(document.getElementById('station').value);
            document.getElementById('viewcounty').innerHTML='Clean';
        //document.images['county_border'].src='images/button_clear.png';

        }
    }
    function stationChanged(station) {
        locID = station;
        removeLimits();
        document.getElementById('viewcounty').textContent='Draw';
        //document.images['county_border'].src='images/button_display.png';

        //goCounty(station);
        //vectMarkers[station].blink(true,20);
        GEvent.trigger(vectMarkers[station], "click");
    }
    function markerClicked(marker) {
        document.getElementById('OPT'+marker.getId()).selected = true;
    }
}


