﻿/*
requests.js is responsible for formatting a REST request and processing the results.
*/

//Global Variables
  var _qtask = null; //ArcGIS Server QueryTask.  Initiated in map.js
  var _query = null; //ArcGIS Server query object.
  var _mapExtension = null; //ArcGIS Server Map Exension for overlays, etc...
  var _gOverlays = null; //A handle to the overlay added to map as result of REST Query.
  var _FootprintOpacity = null;


/// <summary>
/// Executes a REST Request using the ESRI GMaps extension
/// <param name="geometry">The Google geometry (point.getLatLng(), GPolygon, GPolyline, GLatLonBounds) </param>
/// <param name="whereClause">SQL Where clause to filter results</param>
/// <param name="returnGeometry">Boolean, do you want geometry back? </param>
/// <param name="outFields">Comma separated list of fields to return from query</param>
/// </summary>
/// <returns>null</returns>
function ExecuteRESTQuery(geometry, whereClause, returnGeometry, outFields) 
{
    try
    {
        // clear gOverlays overlays and event listeners
        _mapExtension.removeFromMap(_gOverlays);
        
        //reset the page start to 1 (first page)
        geoeye.webmaps.PageInfo.start = 1;

        // set query parameters
        _query.queryGeometry = geometry;
        _query.returnGeometry = returnGeometry;
        _query.where = whereClause;
        _query.outFields = outFields; //["FILENAME"]

        // execute query task
        _qtask.execute(_query, false, ProcessSearchResults);
    }
    catch(e)
    {
       ErrorAlert(CatalogSearchError, true);
    }
}

/// <summary>
/// Executes a REST Request using the ESRI GMaps extension
/// <param name="geometry">The Google geometry (point.getLatLng(), GPolygon, GPolyline, GLatLonBounds) </param>
/// <param name="whereClause">SQL Where clause to filter results</param>
/// <param name="returnGeometry">Boolean, do you want geometry back? </param>
/// <param name="outFields">Comma separated list of fields to return from query</param>
/// </summary>
/// <returns>null</returns>
function ExecuteFeaturedLocationsRESTQuery(returnGeometry, outFields, query, qtask) 
{
    try { 
        // set query parameters
        query.returnGeometry = returnGeometry;
        query.where = "1=1"; //To satisfy where clause
        query.outFields = outFields;

        // execute query task
        qtask.execute(query, false, ProcessFeaturedLocationsResults);
    }
    catch(e)
    {
        ErrorAlert(FeaturedLocationsError);
    }
}



//Default REST parameters
var _text = ""; //Default search text
var _inSR = ""; //Default Spatial Reference: 4326
var _geometry = ""; //Default geometry to search against using the spatial rel parameter
var _geometryType = "esriGeometryEnvelope"; //Default geometry query type: esriGeometryEnvelope
var _spatialRel = "esriSpatialRelIntersects"; //Default spatial relationship: esriSpatialRelIntersects
var _whereClause = ""; //Where clause
var _outSR = ""; //Ouput Spatial Reference: 4326
var _outFields = ""; //Comma separated list of columns you want back
var _returnGeometry = true; //bool - do you want any geometry back?
var _format = "json"; //Default output type

////Custom REST Request - in case ESRI Extension can't handle it
/// <summary>
/// generates a string representing the REST URL for a given request.
/// </summary>
/// <param name="geometry">comma separated list of lat/longs denoting geometry - {xmin: -104, ymin: 35.6, xmax: -94.32, ymax: 41} - can also remove the xmin, ymin strings.</param>
/// <param name="geometryType">ESRI geometry types</param>
/// <param name="whereClause">SQL Where clause to filter results</param>
/// <param name="returnGeometry">boolean - do you want geometry back?</param>
/// <param name="outFields">Which attributes should be returned in results.</param>
/// <returns>HTML formatted result string</returns>
function CreateRESTRequest(format, geometry, geomtype, whereClause) {
    
    var requestURL = GetArcGISServerRESTURL();
    requestURL += "query?";
    requestURL +="text=" + _text;
    requestURL +="&geometry=" + geometry;
    requestURL +="&geometryType=" + geomtype;
    requestURL +="&inSR=" + "4326";
    requestURL +="&spatialRel=" + _spatialRel;
    requestURL +="&where=" + whereClause;
    requestURL +="&returnGeometry=" + _returnGeometry;
    requestURL +="&outSR=" + "4326";
    requestURL +="&outfields=" + _outFields;
    requestURL +="&spatialRank=" + GetSpatialRankQueryValue( );
    requestURL +="&f=" + format;
    
    return requestURL;
}