
function GetFlexApp(appName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        if (window[appName] != null)
            return window[appName];
        else
            return document[appName];
    }
    else {
        return document[appName];
    }
}

var VelirMap = new Object();

VelirMap.OnMapReady = function(mapId) { };
VelirMap.OnZoomChanged = function(oldLevel, newLevel, mapId) { };
VelirMap.OnMapMoveEnd = function(newCenterLat, newCenterLng, newZoomLevel, mapId) { };
VelirMap.OnMapMoveStep = function(newCenterLat, newCenterLng, newZoomLevel, mapId) { };
VelirMap.OnNewLegendInfo = function(legendInfo, mapId) { };
VelirMap.OnGeocodeSuccess = function(placemark, mapId) { };

/**********************************
*         Map Events             *
**********************************/

VelirMap.onMapReady = function(mapId) {
    VelirMap.OnMapReady(mapId);
};

VelirMap.onZoomChanged = function(oldLevel, newLevel, mapId) {
    VelirMap.OnZoomChanged(oldLevel, newLevel, mapId);
};

VelirMap.onMapMoveStep = function(newCenterLat, newCenterLng, newZoomLevel, mapId) {
    VelirMap.OnMapMoveStep(newCenterLat, newCenterLng, newZoomLevel, mapId);
};

VelirMap.onMapMoveEnd = function(newCenterLat, newCenterLng, newZoomLevel, mapId) {
    VelirMap.OnMapMoveEnd(newCenterLat, newCenterLng, newZoomLevel, mapId);
};

VelirMap.onNewLegendInfo = function(legendInfoArray, mapId) {
    VelirMap.OnNewLegendInfo(legendInfoArray, mapId);
};

VelirMap.onGeocodeSuccess = function(placemark, mapId) {
    VelirMap.OnGeocodeSuccess(placemark, mapId);
};

/**********************************
*      Map Initialization        *
**********************************/
VelirMap.SetMapId = function(mapId) {
    var map = GetFlexApp(mapId);
    map.SetMyId(mapId);
};

VelirMap.TestMapId = function(mapId) {
    console.log("Checking id of map " + mapId);
    var map = GetFlexApp(mapId);
    console.log("Map claims that its id is " + map.GetMyId());
};

/**********************************
*       Feature Overlays         *
**********************************/

VelirMap.AddFeatureOverlay = function(overlayName, minZoom, maxZoom, tileZoomLevel, refresh, mapId) {
    var map = GetFlexApp(mapId);
    map.AddFeatureOverlay(overlayName, minZoom, maxZoom, tileZoomLevel, refresh);
};

VelirMap.SetFeatureOverlayAttribute = function(overlayName, attribute, attributeDisplayName, attributeValueType, colorMin, colorMax, numRanges, mapId) {
    var map = GetFlexApp(mapId);
    map.SetFeatureOverlayAttribute(overlayName, attribute, attributeDisplayName, attributeValueType, colorMin, colorMax, numRanges);
};

VelirMap.SetAllFeatureOverlayAttribute = function(attribute, attributeDisplayName, attributeValueType, colorMin, colorMax, numRanges, mapId) {
    var map = GetFlexApp(mapId);
    map.SetAllFeatureOverlayAttribute(attribute, attributeDisplayName, attributeValueType, colorMin, colorMax, numRanges);
};

VelirMap.SetFeatureOverlayHatchAttribute = function(overlayName, hatchAttribute, hatchAttributeDisplayName, hatchAttributeValueType, mapId) {
    var map = GetFlexApp(mapId);
    map.SetFeatureOverlayHatchAttribute(overlayName, hatchAttribute, hatchAttributeDisplayName, hatchAttributeValueType);
};

VelirMap.SetAllFeatureOverlayHatchAttribute = function(hatchAttribute, hatchAttributeDisplayName, hatchAttributeValueType, mapId) {
    var map = GetFlexApp(mapId);
    map.SetAllFeatureOverlayHatchAttribute(hatchAttribute, hatchAttributeDisplayName, hatchAttributeValueType);
};

VelirMap.SetFeatureOverlayParams = function(overlayName, params, mapId) {
    var map = GetFlexApp(mapId);
    map.SetFeatureOverlayParams(overlayName, params);
};

VelirMap.SetAllFeatureOverlayParams = function(params, mapId) {
    var map = GetFlexApp(mapId);
    map.SetAllFeatureOverlayParams(params);
};

VelirMap.SetFeatureOnMouseOverDisabled = function(overlayName, disabled, mapId) {
    var map = GetFlexApp(mapId);
    map.SetFeatureOnMouseOverDisabled(overlayName, disabled);
};

VelirMap.SetAllFeatureOnMouseOverDisabled = function(disabled, mapId) {
    var map = GetFlexApp(mapId);
    map.SetAllFeatureOnMouseOverDisabled(disabled);
};

VelirMap.ActivateFeatureOverlay = function(overlayName, mapId) {
    var map = GetFlexApp(mapId);
    map.ActivateFeatureOverlay(overlayName);
};

VelirMap.DeactivateFeatureOverlay = function(overlayName, mapId) {
    var map = GetFlexApp(mapId);
    map.DeactivateFeatureOverlay(overlayName);
};

VelirMap.DeactivateAllFeatureOverlays = function(mapId) {
    var map = GetFlexApp(mapId);
    map.DeactivateAllFeatureOverlays();
};

VelirMap.RefreshFeatureOverlays = function(mapId) {
    var map = GetFlexApp(mapId);
    map.RefreshFeatureOverlays();
};


/**********************************
*        Marker Overlays         *
**********************************/

VelirMap.AddMarkerOverlay = function(overlayName, mapId) {
    var map = GetFlexApp(mapId);
    map.AddMarkerOverlay(overlayName);
};

VelirMap.SetMarkerOverlayParams = function(overlayName, paramsJson, mapId) {
    var map = GetFlexApp(mapId);
    map.SetMarkerOverlayParams(overlayName, paramsJson);
};

VelirMap.ActivateMarkerOverlay = function(overlayName, mapId) {
    var map = GetFlexApp(mapId);
    map.ActivateMarkerOverlay(overlayName);
};

VelirMap.DeactivateMarkerOverlay = function(overlayName, mapId) {
    var map = GetFlexApp(mapId);
    map.DeactivateMarkerOverlay(overlayName);
};

VelirMap.DeactivateAllMarkerOverlays = function(mapId) {
    var map = GetFlexApp(mapId);
    map.DeactivateAllMarkerOverlays();
};

VelirMap.RefreshMarkerOverlays = function(mapId) {
    var map = GetFlexApp(mapId);
    map.RefreshMarkerOverlays();
};

/**********************************
*      Various Map Functions     *
**********************************/

VelirMap.SetCenterAndZoom = function(lat, lng, zoomLevel, mapId) {
    var map = GetFlexApp(mapId);
    map.SetCenterAndZoom(lat, lng, zoomLevel);
};

VelirMap.SetMinAndMaxResolution = function(minZoom, maxZoom, mapId) {
    var map = GetFlexApp(mapId);
    map.SetMinAndMaxResolution(minZoom, maxZoom);
};

VelirMap.GetZoom = function(mapId) {
    var map = GetFlexApp(mapId);
    return map.GetZoom();
};

VelirMap.SetZoom = function(newLevel, mapId) {
    var map = GetFlexApp(mapId);
    map.SetZoom(newLevel);
};

VelirMap.SetCopyright = function(copyright, mapId) {
    var map = GetFlexApp(mapId);
    map.SetCopyright(copyright);
};

VelirMap.IsBusy = function(mapId) {
    var map = GetFlexApp(mapId);
    return map.IsBusy();
};

VelirMap.GetBoundsZoomLevel = function(bboxString, mapId) {
    var map = GetFlexApp(mapId);
    return map.GetBoundsZoomLevel(bboxString);
};

VelirMap.GetMapInfo = function(mapId) {
    var map = GetFlexApp(mapId);
    return map.GetMapInfo();
};

VelirMap.GeocodeAddress = function(address, callback, mapId) {
    VelirMap.OnGeocodeSuccess = callback;

    var map = GetFlexApp(mapId);
    return map.GeocodeAddress(address);
};

function OpenInfoWindow(id, timeFrame) //called from Flash client to prevent popup blocker
{
    var url = 'PopupInformation.aspx?location=' + id + '&timeframe=' + timeFrame;

    window.open(url, 'markerPopup', 'width=400,height=840,scrollbars=yes');
    return;
}

///////////////////////////////////////////////////////////////////
// Legend
///////////////////////////////////////////////////////////////////

function FormatLegendRange(legendRange, isLast) {
    if (isLast) {
        return legendRange[0] + "+";
    }
    else if (legendRange[0] == legendRange[1]) {
        return legendRange[0];
    }
    else {
        return legendRange[0] + " - " + legendRange[1];
    }
}

function DetermineAsymetricDistribution(range1, range2) {
    if ((range1[0] + " - " + range1[1]) == "0 - 5" && (range2[0] + " - " + range2[1]) == "5 - 37") return true;
    if ((range1[0] + " - " + range1[1]) == "0 - 10" && (range2[0] + " - " + range2[1]) == "10 - 40") return true;
    return false;
}

function DetermineBooleanDistribution(range1, range2) {
    if (range1 == "0,0.99" && range2 == "0.99,2") return true;
    return false;
}


///////////////////////////////////////////////////////////////////
// Zoom To
///////////////////////////////////////////////////////////////////

function ClearZoomTo(zoomTextValue) {
    if (zoomTextValue == "Enter an address") {
        var zoomTextbox = document.getElementById('mapZoomTo');
        zoomTextbox.value = "";
    }
}

function ClearZoomBox() {
    var zoomTextbox = document.getElementById('mapZoomTo');
    zoomTextbox.value = "";
}

function ZoomToRegion(regionId, mapId) {
    switch (regionId) {
        //Northeast Region 
        case "1":
            VelirMap.SetCenterAndZoom(41.91862886518302, -74.4873046875, 5, mapId);
            break;
        //Southeast Region 
        case "2":
            VelirMap.SetCenterAndZoom(34.415973384481866, -82.705078125, 5, mapId);
            break;
        //Northwest Region 
        case "3":
            VelirMap.SetCenterAndZoom(45.413876460821086, -115.13671875, 5, mapId);
            break;
        //Southwest Region 
        case "4":
            VelirMap.SetCenterAndZoom(36.932330061503144, -113.1591796875, 5, mapId);
            break;
        //Upper Midwest Region 
        case "5":
            VelirMap.SetCenterAndZoom(43.34116005412307, -93.9990234375, 5, mapId);
            break;
        //Lower Midwest Region 
        case "6":
            VelirMap.SetCenterAndZoom(35.764343479667176, -94.306640625, 5, mapId);
            break;
        //Hawaii 
        case "7":
            VelirMap.SetCenterAndZoom(20.509355, -157.730713, 7, mapId);
            break;
    }
}

function ZoomTo(address, mapId) {
    if (address == "Enter an address")
        return;

    VelirMap.GeocodeAddress(address, ZoomTo_Callback, mapId);
}

function ZoomTo_Callback(placemark, mapId) {
    if (placemark == null) {
        alert('Address Unknown');
        return;
    }

    document.getElementById('mapZoomTo').value = placemark.address;
    var accuracy = placemark.AddressDetails.Accuracy;
    var lat = placemark.Point.coordinates[1];
    var lng = placemark.Point.coordinates[0];

    var zoomLevel = 4;
    var dataLevel = "states";
    if (accuracy >= 2) {
        zoomLevel = 6;
        dataLevel = "states";
    }
    if (accuracy >= 3) {
        zoomLevel = 9;
        dataLevel = "counties";
    }
    if (accuracy >= 4) {
        zoomLevel = 13;
        dataLevel = "zctas";
    }
    if (accuracy >= 6) {
        zoomLevel = 15;
        dataLevel = "zctas";
    }

    VelirMap.SetCenterAndZoom(lat, lng, zoomLevel, mapId);
}
		
