
// Tab Click Handling

var tabHandlers          = {};  // Tab.Value -> handling function
var rightClickTabs       = {};  // Tab.Value -> true if can be target of right click over map.
var currentRightClickTab = "Query";

function handleTabClick( sender, eventArgs ) {
    var tabVal = eventArgs.Tab.Value;

    // Map targets just highlight tab, and change right drag effect
    if (rightClickTabs[tabVal] != null) {
        setRightDragEffect( tabVal );
        return true;
    }

    // Others tabs trigger target handler, but don't highlight tab
    if (tabVal in tabHandlers)
        tabHandlers[tabVal]();
    return false;
}

function setRightDragEffect( tabVal ) {
    currentRightClickTab              = tabVal;
    var buffering                     = (rightClickTabs[tabVal] == "buffer" && bufferLayerID.value != "")
    m_bufferSelector.style.visibility = (buffering) ? 'visible' : 'hidden';
}

function popExternalWindow( url, formatString ) {
    // Handle relative path
    if (!url.startsWith( "http"))
        url = "http://" + window.location.host + "/" + window.location.pathname.split("/")[1] + "/" + url;
    // Handle null formatString
    if (!formatString)
        formatString = "resizable=yes, scrollbars=yes";

    var poppedWindow = window.open( url, "AGI_Viewer_External_Window", formatString );
    if (poppedWindow)
        poppedWindow.focus();
    else
        alert( "Set your browser to accept popups to use this feature!" )
}


// Hook functions for Tabs

function defaultOnQueryTab() {
    // Clear any existing buffer
    if (bufferDrawParams != "") {
        bufferDrawParams = "";
        submitMainMap();
    }

    popExternalWindow( "Query.aspx?" + queryEnvelopeParam() + "&QueryLayers="+getActiveLayersParam(),
                       "resizable=yes, scrollbars=yes, toolbar=yes, location=yes" );
}

function defaultOnBufferTab() {
    // Update main map to show buffer
    setBufferParams();
    submitMainMap();

    popExternalWindow( "Query.aspx?" + queryEnvelopeParam() + "&QueryLayers="+getActiveLayersParam() +bufferQueryParams(),
                       "resizable=yes, scrollbars=yes, toolbar=yes, location=yes" );
}

function defaultOnKMZTab()  {
    params = agiMapViewer.getExtentParams() + kmzViewParams() + getTaskParams( agiSubmitter ) + bufferDrawParams;
    createMap( params, true, kmzCallback );
}

function defaultOnDataTab()  {
    url          = "AGIMapControls/GetData.aspx?" + viewEnvelopeParam() + "&"+imageUrlParam();
    formatString = "resizable=yes, scrollbars=yes, width=750, height=525";
    popExternalWindow( url, formatString );
}

function defaultOnPrintTab() {
    popExternalWindow( "AGIMapControls/Print.aspx?" + imageUrlParam() + "&activeLayer="+getActiveLayersParam()[0] );
}

function defaultOnHelpTab()  {
    popExternalWindow( helpUrl.value, helpFormat.value );
}

function getActiveLayersParam() {
    var queryLayers = "";
    for (layerID in queryLayerRows) {
        queryLayers += layerID + ",";
    }
    return queryLayers.slice( 0, -1 );
}


// KMZ functions

function kmzViewParams() {
    w = m_imgMapCanvas.width;
    h = m_imgMapCanvas.height;

    if (w >= h) {
        h = Math.round( MAX_KMZ_DIM * h/w );
        w = MAX_KMZ_DIM;
    }
    else {
        w = Math.round( MAX_KMZ_DIM * w/h );
        h = MAX_KMZ_DIM;
    }

    return "&WIDTH="  + w +
           "&HEIGHT=" + h +
           "&showScale=false";
}

function kmzCallback( returnObj ) {
    imageParam   = "&ImageUrl=" + returnObj.value;
    url          = "AGIMapControls/KMZ.aspx?" + viewEnvelopeParam() + imageParam;
    formatString = "resizable=yes, scrollbars=yes, width=300, height=100";
    popExternalWindow( url, formatString );
}


// Url param functions

function bufferQueryParams() {
    return "&BufferLayerID="+bufferLayerID.value +"&BufferUnits="+bufferUnits +"&BufferDist="+bufferDist;
}

function imageUrlParam() {
    return "ImageUrl=" + m_imgMapCanvas.src;
}

function viewEnvelopeParam() {
    extent = agiMapViewer.getExtent();
    return "SpatialEnvelope="       +
           extent.getLeft()   + "," +
           extent.getBottom() + "," +
           extent.getRight()  + "," +
           extent.getTop();
}

function queryEnvelopeParam() {
    extent = agiMapViewer.getQueryExtent();
    return "SpatialEnvelope="       +
           extent.getLeft()   + "," +
           extent.getBottom() + "," +
           extent.getRight()  + "," +
           extent.getTop();
}

function extractRequestUrl( isRaster ) {
    rect = agiMapViewer.getQueryExtent();
    return "AGIMapControls/ExtractReport.aspx"      +
           "?XMIN="          + rect.getLeft()       +
           "&YMIN="          + rect.getBottom()     +
           "&XMAX="          + rect.getRight()      +
           "&YMAX="          + rect.getTop()        +
           visibleLayersParam() +
           ((isRaster == true) ? "&isRaster=true" : "");
}


