/* <![CDATA[ */
var map, minzoom=13, myPoly=[], count=0;

var staicon = new GIcon();
staicon.image = "/deployments/anza/images/station_icon_ok.gif";
staicon.iconSize = new GSize(26, 26);
staicon.iconAnchor = new GPoint(8, 8);
staicon.infoWindowAnchor = new GPoint(8, 17);

var evicon = new GIcon();
evicon.iconAnchor = new GPoint(15, 15);
evicon.infoWindowAnchor = new GPoint(15, 15);

function iconTypeSize(mag) {
    var iconInfo = [] ;
    var roundedMag = Math.ceil(mag);
    if( mag >= 5 ) {
        iconInfo[0] = "/images/spevents/google_map_icons_evstars/evstar_red_"+roundedMag+".png" ;
        iconInfo[1] = 60;
        iconInfo[2] = 58;
    } else if( mag >= 4 ) {
        iconInfo[0] = "/images/spevents/google_map_icons_evstars/evstar_red_"+roundedMag+".png" ;
        iconInfo[1] = 52 ;
        iconInfo[2] = 50;
    } else if( mag >= 3 ) {
        iconInfo[0] = "/images/spevents/google_map_icons_evstars/evstar_red_"+roundedMag+".png" ;
        iconInfo[1] = 42;
        iconInfo[2] = 41;
    } else if( mag >= 2 ) {
        iconInfo[0] = "/images/spevents/google_map_icons_evstars/evstar_orange_"+roundedMag+".png" ;
        iconInfo[1] = 30;
        iconInfo[2] = 28;
    } else if( mag >= 1 ) {
        iconInfo[0] = "/images/spevents/google_map_icons_evstars/evstar_orange_"+roundedMag+".png" ;
        iconInfo[1] = 20 ;
        iconInfo[2] = 20;
    } else {
        iconInfo[0] = "/images/spevents/google_map_icons_evstars/evstar_orange_"+roundedMag+".png" ;
        iconInfo[1] = 20 ;
        iconInfo[2] = 20;
    }
    return iconInfo ;
}

function createMarker( evpoint, evmag, evcontent ) {
    eviconInfo = iconTypeSize( evmag ) ;
    var markerIcon = new GIcon(evicon);
    markerIcon.image = eviconInfo[0] ;
    markerIcon.iconSize = new GSize(eviconInfo[1],eviconInfo[2]);
    markerOptions = { icon:markerIcon } ;
    var marker = new GMarker( evpoint, markerOptions ) ;
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml( evcontent ) ;
    }) ;
    return marker ;
}

function createStaMarker( stapoint, stacontent ) {
    var stamarkerIcon = new GIcon(staicon);
    var stamarkerOptions = { icon:stamarkerIcon } ;
    var stamarker = new GMarker( stapoint, stamarkerOptions ) ;
    GEvent.addListener(stamarker, 'click', function() {
        stamarker.openInfoWindowHtml( stacontent ) ;
    }) ;
    return stamarker ;
}

function loadFault( name, fault, filename ) {
    $.ajax({
        type: "GET",
        url: "/xml/"+filename,
        dataType: "xml",
        success: function(faultdata) {
            var faultPoly = [] ;
            $(faultdata).find("marker").each(function() {
                var fltmarkers = $(this);
                var point = new GLatLng( parseFloat( fltmarkers.attr("lat"), 10 ), parseFloat( fltmarkers.attr("lng"), 10 ) ) ;
                faultPoly.push(point) ; 
            }) ;
            myPoly[name] = new GPolyline( faultPoly, "#990000", 4, 0.8, { clickable:true } ) ;
            GEvent.addListener( myPoly[name], "click", function(faultPoly) {
                map.openInfoWindow(faultPoly, "<p><strong>"+fault+"</strong></p>" ) ;
            });
            map.addOverlay( myPoly[name] ) ;
        },
        error: function() {
             alert( "Could not load fault "+name ) ;
        }
    });
}

function loadEvs() {
    $.ajax({
        type: "GET",
        url: "evs.xml",
        dataType: "xml",
        success: function(data) {
            $(data).find("event").each(function() {
                // Create Google markers
                var markers = $(this);
                var point = new GLatLng(markers.attr("lat"), markers.attr("lon") );
                var mag = markers.attr("mag") ;
                var content = "<div class='infoBox'><table>" ;
                content += "<tr><th>Latitude:</th><td>"+markers.attr("lat")+"</td></tr>" ;
                content += "<tr><th>Longitude:</th><td>"+markers.attr("lon")+"</td></tr>" ;
                content += "<tr><th>Depth (km):</th><td>"+markers.attr("depth")+"</td></tr>" ;
                content += "<tr><th>Magnitude:</th><td>"+mag+"</td></tr>" ;
                content += "<tr><th>UTC Time:</th><td>"+markers.attr("utctime")+"</td></tr>" ;
                content += "</table></div>" ;
                var marker = createMarker( point, mag, content ) ;
                map.addOverlay( marker ) ;

                // Add to table
                var cssclass ;
                if( mag >= 3 ) {
                    cssclass = 'style="background-color:#F00;"' ;
                } else {
                    cssclass = 'style="background-color:#F2BA00;"' ;
                }
                var tblcontent = "<tr>";
                tblcontent += "<td "+cssclass+">"+markers.attr("lat")+"</td>";
                tblcontent += "<td "+cssclass+">"+markers.attr("lon")+"</td>";
                tblcontent += "<td "+cssclass+">"+markers.attr("utctime")+"</td>";
                tblcontent += "<td "+cssclass+">"+markers.attr("depth")+"</td>";
                tblcontent += "<td "+cssclass+">"+markers.attr("mag")+"</td>";
                tblcontent += "</tr>";
                $("table#swarmtbl tbody").append(tblcontent);
                // How many events?
                count++;
            });
            // Tablesorter
            $("table#swarmtbl").tablesorter({ sortList: [[2,1]], widthFixed:true }).tablesorterPager({container: $("#pager"), positionFixed: false, size:20});
            $("#count").text(count);
            $("#tablecount").text(count);
        },
        error: function() {
            alert("Could not load earthquake placemarkers") ;
        }
    }) ;
}

function loadStas() {
    $.ajax({
        type: "GET",
        url: "stas.xml",
        dataType: "xml",
        success: function(stas) {
            $(stas).find("station").each(function() {
                var stamark = $(this);
                var stapoint = new GLatLng( stamark.find("lat").text(), stamark.find("lon").text() ) ;
                var stacontent = "<p><strong>"+stamark.attr('name')+"</strong><br/>"+stamark.find("staname").text()+"</p>" ;
                var stamarker = createStaMarker( stapoint, stacontent ) ;
                map.addOverlay( stamarker ) ;
            });
        },
        error: function() {
            alert("Could not load Anza station locations");
        }
    }) ;
}

function loadFaults() {
    loadFault( 'sa', 'San Andreas Fault Zone', 'san_andreas.xml' ) ;
    loadFault( 'sjcc', 'San Jacinto Fault Zone (Coyote Creek)', 'san_jacinto_coyote_creek.xml' ) ;
    loadFault( 'sjhs', 'San Jacinto Fault Zone (Hot Springs)', 'san_jacinto_hot_springs.xml' ) ;
    loadFault( 'sjt', 'San Jacinto Fault Zone (Main Trace)', 'san_jacinto_main_branch.xml' ) ;
    loadFault( 'sjbr', 'San Jacinto Fault Zone (Buck Ridge)', 'san_jacinto_buck_ridge.xml' ) ;
}

function initialize() {
    map = new google.maps.Map2(document.getElementById("swarmap"));
    map.setCenter(new google.maps.LatLng(33.3, -115.8), 11);
    map.setUIToDefault();
    map.addMapType( G_PHYSICAL_MAP ) ;
    map.setMapType( G_PHYSICAL_MAP ) ;

    // Create container for legend
    function HtmlControl(html) {
        this.html=html;
    }

    HtmlControl.prototype=new GControl(true, false);
    HtmlControl.prototype.initialize=function(map) {
        var container=document.createElement('div');
        var extra=document.createElement('div');
        extra.innerHTML=this.html;
        container.appendChild(extra);
        map.getContainer().appendChild(container);
        return container;
    };

    // hide/show div based on zoom level
    var securityContent = new HtmlControl('<div id="securityLabel">For security reasons the locations of the stations have been removed for this level of zoom</div>' );

    GEvent.addListener(map, "zoomend", function(oldzoom,zoom){ 
        if (zoom >= minzoom){ 
            map.addControl(securityContent, new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(20, 40)) );
        } else {
            map.removeControl(securityContent);
        } 
    }); 


    loadEvs();
    loadStas();
    loadFaults();
}
/* ]]> */
