/********************************************
* Impact Cases Query Functions              *
*********************************************/
function queryHLCaseList_Imp(iCrntPage) {
  showLoader(true);
  
  _iHLTotalCaseCount_Imp = 0;
  _oioHLCaseList_Imp = {};
  _oHLCaseDetail_Imp = {};
  
  var svcURL = document.location.pathname;
  if (/\/$/.test(svcURL)) {
    svcURL += "map.aspx";
  }
  svcURL += "/queryImpactList";
  
  var oRequest = cloneObject(_oQueryReq_Common);
  
  oRequest.StartIndex = calcStartIdx(iCrntPage);
  oRequest.MaxNumCasesPerPage = _iMaxNumCasesPerPage;
  
  var jsonText = JSON.stringify(oRequest);

  $.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      url: svcURL,
      data: jsonText,
      error: function (err_msg) {
          alert('Error\n' + err_msg.status + '\n' + err_msg.statusText);
          showLoader(false);
      },
      success: function (data) {
          _iHLTotalCaseCount_Imp = data.d.TotalImpactCount;
          var oQueryCaseList = data.d.Impacts;
          if (oQueryCaseList != null) {
              for (var i = 0; i < oQueryCaseList.length; i++) {
                  var iCaseID = oQueryCaseList[i].ImpactId;
                  var sTitle = oQueryCaseList[i].Title;
                  var ifStatewide = oQueryCaseList[i].IsStateWide;
                  var ifPositive = oQueryCaseList[i].IsPositive;
                  var sStartDate = JSONtoShortDateString(oQueryCaseList[i].StartDate);
                  var sEndDate = JSONtoShortDateString(oQueryCaseList[i].EndDate);
                  var aiCtgryIDs = oQueryCaseList[i].CategoryIds;
                  /*
                  var aiCtgryIDs = [];
                  for (var iCat = 0; iCat < oQueryCaseList[i].CategoryIds.length; iCat++) {
                      aiCtgryIDs.push(oQueryCaseList[i].CategoryIds[iCat]);
                  }
                  */
                  _oioHLCaseList_Imp[iCaseID] = { Title: sTitle,
                      StartDate: sStartDate, EndDate: sEndDate,
                      IfStateWide: ifStatewide,
                      IfPositive: ifPositive,
                      CategoryIDs: aiCtgryIDs
                  };
              }
          }

          showLoader(false); // hide loading animation

          updateHLCaseList(_oQuerySubjects.Impacts, iCrntPage);
      }
  });
}

function queryCaseList_Imp(sFIPS, sPlaceName, iCrntPage) {
  showLoader(true); // show loading animation
  
  _iTotalCaseCount_Imp = 0;
  _oioCaseList_Imp = {};
  _oCaseDetail_Imp = {};
  
  var svcURL = document.location.pathname;
  if (/\/$/.test(svcURL)) {
    svcURL += "map.aspx";
  }
  svcURL += "/queryImpactList";
  
  var oRequest = cloneObject(_oQueryReq_Common);
  oRequest.FIPSs.length = 0;
  oRequest.FIPSs.push(sFIPS);
  oRequest.StartIndex = calcStartIdx(iCrntPage);
  oRequest.MaxNumCasesPerPage = _iMaxNumCasesPerPage;
  
  var iQueryLevel;
  if(sFIPS.length == 5) { // county view
    iQueryLevel = _oQueryLevels.ByCounty;
  }
  else if(sFIPS.length == 2){ // state view
    iQueryLevel = _oQueryLevels.ByState;
  }

  var jsonText = JSON.stringify(oRequest);
    
  $.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      url: svcURL,
      data: jsonText,
      error: function (err_msg) { 
        alert('Error\n' + err_msg.status + '\n' + err_msg.statusText); 
        showLoader(false);
      },
      success: function (data) {
        _iTotalCaseCount_Imp = data.d.TotalImpactCount;
        var oQueryCaseList = data.d.Impacts;
        if(oQueryCaseList != null) {
          for(var i = 0; i < oQueryCaseList.length; i++) {
            var iCaseID = oQueryCaseList[i].ImpactId;
            var sTitle = oQueryCaseList[i].Title;
            var ifStatewide = oQueryCaseList[i].IsStateWide;
            var ifPositive = oQueryCaseList[i].IsPositive;
            var sStartDate = JSONtoShortDateString(oQueryCaseList[i].StartDate);
            var sEndDate = JSONtoShortDateString(oQueryCaseList[i].EndDate);
            var aiCtgryIDs = oQueryCaseList[i].CategoryIds;
            _oioCaseList_Imp[iCaseID] = {Title:sTitle,
                                         StartDate:sStartDate, EndDate:sEndDate,
                                         IfStateWide:ifStatewide,
                                         IfPositive:ifPositive,
                                         CategoryIDs: aiCtgryIDs};
          }
        }
        
        showLoader(false); // hide loading animation

        popupCaseList(_oQuerySubjects.Impacts, sFIPS, sPlaceName, iCrntPage);
      }
  });
}

function queryHLCaseDetail_Imp(iCaseID) {
  var oCellCaseDetail = document.getElementById("cellHLImpDetail" + iCaseID);
  
  if(oCellCaseDetail.innerHTML == "") {
    showLoader(true); // show loading animation
    
    _oHLCaseDetail_Imp[iCaseID] = {};
    
    var svcURL = document.location.pathname;
    if (/\/$/.test(svcURL)) {
      svcURL += "map.aspx";
    }
    svcURL += "/queryImpactDetail";
    
    var oRequest = {ImpactID: iCaseID};
    
    var jsonText = JSON.stringify(oRequest);
    
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: svcURL,
        data: jsonText,
        error: function (err_msg) { 
          alert('Error\n' + err_msg.status + '\n' + err_msg.statusText); 
          showLoader(false);
        },
        success: function (data) {
          var sCaseDscrp = data.d.Description;
          var sAffectedAreas = "";
          for(var i in data.d.AffectedAreas) {
            sAffectedAreas += data.d.AffectedAreas[i].Name;
            if(i < data.d.AffectedAreas.length-1) {
              sAffectedAreas += "; ";
            }
          }

          var osoReports;
          if(data.d.Reports.length > 0) {
            osoReports = {};
            for(var i in data.d.Reports) {
              var iRepID = data.d.Reports[i].ReportId;
              var sRepTitle = data.d.Reports[i].Title;
              var sRepPubDate = JSONtoShortDateString(data.d.Reports[i].PublicationDate);
              var sRepSrcName = data.d.Reports[i].SourceName;
              var sRepURL = data.d.Reports[i].Url;
              osoReports[iRepID] = {Title: sRepTitle,
                                    PublicationDate: sRepPubDate,
                                    SrcName: sRepSrcName,
                                    URL: sRepURL};
            }
          }
          
          _oHLCaseDetail_Imp[iCaseID] = {Description: sCaseDscrp, 
                                         AffectedAreas: sAffectedAreas,
                                         AssociatedReps: osoReports};
          
          showLoader(false); // hide loading animation
  
          updateCaseDetail(true, true, _oQuerySubjects.Impacts, iCaseID);
        }
    });
  }
  else {
    updateCaseDetail(false, true, _oQuerySubjects.Impacts, iCaseID);
  }
}

function queryCaseDetail_Imp(iCaseID) {
  var oCellCaseDetail = document.getElementById("cellCaseDetail" + iCaseID);
  
  if(oCellCaseDetail.innerHTML == "") {
    showLoader(true); // show loading animation
    
    _oCaseDetail_Imp[iCaseID] = {};
    
    var svcURL = document.location.pathname;
    if (/\/$/.test(svcURL)) {
      svcURL += "map.aspx";
    }
    svcURL += "/queryImpactDetail";
    
    var oRequest = {ImpactID: iCaseID};
    
    var jsonText = JSON.stringify(oRequest);
    
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: svcURL,
        data: jsonText,
        error: function (err_msg) { 
          alert('Error\n' + err_msg.status + '\n' + err_msg.statusText); 
          showLoader(false);
        },
        success: function (data) {
          var sCaseDscrp = data.d.Description;
          var sAffectedAreas = "";
          for(var i in data.d.AffectedAreas) {
            sAffectedAreas += data.d.AffectedAreas[i].Name;
            if(i < data.d.AffectedAreas.length-1) {
              sAffectedAreas += "; ";
            }
          }

          var osoReports;
          if(data.d.Reports.length > 0) {
            osoReports = {};
            for(var i in data.d.Reports) {
              var iRepID = data.d.Reports[i].ReportId;
              var sRepTitle = data.d.Reports[i].Title;
              var sRepPubDate = JSONtoShortDateString(data.d.Reports[i].PublicationDate);
              var sRepSrcName = data.d.Reports[i].SourceName;
              var sRepURL = data.d.Reports[i].Url;
              osoReports[iRepID] = {Title: sRepTitle,
                                    PublicationDate: sRepPubDate,
                                    SrcName: sRepSrcName,
                                    URL: sRepURL};
            }
          }
          
          _oCaseDetail_Imp[iCaseID] = {Description: sCaseDscrp, 
                                       AffectedAreas: sAffectedAreas,
                                       AssociatedReps: osoReports};
          
          showLoader(false); // hide loading animation
  
          updateCaseDetail(true, false, _oQuerySubjects.Impacts, iCaseID);
        }
    });
  }
  else {
    updateCaseDetail(false, false, _oQuerySubjects.Impacts, iCaseID);
  }
}

/********************************************
* Report Cases Query Functions              *
*********************************************/
function queryHLCaseList_Rep(iCrntPage) {
  showLoader(true); // show loading animation
  
  _iHLTotalCaseCount_Rep = 0;
  _oioHLCaseList_Rep = {};
  _oHLCaseDetail_Rep = {};
  
  var svcURL = document.location.pathname;
  if (/\/$/.test(svcURL)) {
    svcURL += "map.aspx";
  }
  svcURL += "/queryReportList";
  
  var oRequest = cloneObject(_oQueryReq_Rep);
  oRequest.StartIndex = calcStartIdx(iCrntPage);
  oRequest.MaxNumCasesPerPage = _iMaxNumCasesPerPage;
  
  var iQuerySubject = oRequest.IfSourceLocation?_oQuerySubjects.Reports_SrcLoc:_oQuerySubjects.Reports;
  
  var jsonText = JSON.stringify(oRequest);

  $.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      url: svcURL,
      data: jsonText,
      error: function (err_msg) {
          alert('Error\n' + err_msg.status + '\n' + err_msg.statusText);
          showLoader(false);
      },
      success: function (data) {
          _iHLTotalCaseCount_Rep = data.d.TotalReportCount;
          var oQueryCaseList = data.d.Reports;
          if (oQueryCaseList != null) {
              for (var i = 0; i < oQueryCaseList.length; i++) {
                  var iCaseID = oQueryCaseList[i].ReportId;
                  var sTitle = oQueryCaseList[i].Title;
                  var ifPositive = oQueryCaseList[i].IsPositive;
                  var sPublicationDate = JSONtoShortDateString(oQueryCaseList[i].PublicationDate);
                  var aiCtgryIDs = oQueryCaseList[i].CategoryIds;
                  var ifPix = (oQueryCaseList[i].Pictures == null || oQueryCaseList[i].Pictures.length == 0) ? false : true;
                  _oioHLCaseList_Rep[iCaseID] = { Title: sTitle,
                      PublicationDate: sPublicationDate,
                      IfPositive: ifPositive,
                      CategoryIDs: aiCtgryIDs,
                      IfPictures: ifPix
                  };
              }
          }
          showLoader(false); // hide loading animation

          updateHLCaseList(iQuerySubject, iCrntPage);
      }
  });
}

function queryCaseList_Rep(sFIPS, sPlaceName, iCrntPage) {
  showLoader(true); // show loading animation
  
  _iTotalCaseCount_Rep = 0;
  _oioCaseList_Rep = {};
  _oCaseDetail_Rep = {};
  
  var svcURL = document.location.pathname;
  if (/\/$/.test(svcURL)) {
    svcURL += "map.aspx";
  }
  svcURL += "/queryReportList";
  
  var oRequest = cloneObject(_oQueryReq_Rep);
  oRequest.FIPSs.length = 0;
  oRequest.FIPSs.push(sFIPS);
  oRequest.StartIndex = calcStartIdx(iCrntPage);
  oRequest.MaxNumCasesPerPage = _iMaxNumCasesPerPage;
  
  var iQueryLevel;
  if(sFIPS.length > 2) { // county view (county or city)
    iQueryLevel = _oQueryLevels.ByCounty;
  }
  else if(sFIPS.length == 2){ // state view
    iQueryLevel = _oQueryLevels.ByState;
  }
  var iQuerySubject = oRequest.IfSourceLocation?_oQuerySubjects.Reports_SrcLoc:_oQuerySubjects.Reports;
  
  var jsonText = JSON.stringify(oRequest);

  $.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      url: svcURL,
      data: jsonText,
      error: function (err_msg) {
          alert('Error\n' + err_msg.status + '\n' + err_msg.statusText);
          showLoader(false);
      },
      success: function (data) {
          _iTotalCaseCount_Rep = data.d.TotalReportCount;
          var oQueryCaseList = data.d.Reports;
          if (oQueryCaseList != null) {
              for (var i = 0; i < oQueryCaseList.length; i++) {
                  var iCaseID = oQueryCaseList[i].ReportId;
                  var sTitle = oQueryCaseList[i].Title;
                  var ifPositive = oQueryCaseList[i].IsPositive;
                  var sPublicationDate = JSONtoShortDateString(oQueryCaseList[i].PublicationDate);
                  var aiCtgryIDs = oQueryCaseList[i].CategoryIds;
                  var ifPix = (oQueryCaseList[i].Pictures == null || oQueryCaseList[i].Pictures.length == 0) ? false : true;
                  _oioCaseList_Rep[iCaseID] = { Title: sTitle,
                      PublicationDate: sPublicationDate,
                      IfPositive: ifPositive,
                      CategoryIDs: aiCtgryIDs,
                      IfPictures: ifPix
                  };
              }
          }
          showLoader(false); // hide loading animation

          popupCaseList(iQuerySubject, sFIPS, sPlaceName, iCrntPage);
      }
  });
}

function queryHLCaseDetail_Rep(iCaseID) {
  var oCellCaseDetail = document.getElementById("cellHLRepDetail" + iCaseID);
  var oRequest = {ReportID: iCaseID};
  var iQuerySubject = oRequest.IfSourceLocation?_oQuerySubjects.Reports_SrcLoc:_oQuerySubjects.Reports;
    
  if(oCellCaseDetail.innerHTML == "") {
    showLoader(true); // show loading animation
    
    _oHLCaseDetail_Rep[iCaseID] = {};
    
    var svcURL = document.location.pathname;
    if (/\/$/.test(svcURL)) {
      svcURL += "map.aspx";
    }
    svcURL += "/queryReportDetail";
    
    var jsonText = JSON.stringify(oRequest);

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: svcURL,
        data: jsonText,
        error: function (err_msg) {
            alert('Error\n' + err_msg.status + '\n' + err_msg.statusText);
            showLoader(false);
        },
        success: function (data) {
            var sCaseDscrp = data.d.Summary;
            var sSrcName = data.d.SourceName;
            var sURL = data.d.Url;
            var sStartDate = JSONtoShortDateString(data.d.StartDate);
            var sEndDate = JSONtoShortDateString(data.d.EndDate);

            var sAffectedAreas = "";
            for (var i in data.d.AffectedAreas) {
                sAffectedAreas += data.d.AffectedAreas[i].Name;
                if (i < data.d.AffectedAreas.length - 1) {
                    sAffectedAreas += "; ";
                }
            }

            var aoPictures = [];
            if (data.d.Pictures.length > 0) {
                for (var i in data.d.Pictures) {
                    var sPhotographer = data.d.Pictures[i].Photographer;
                    var sDate = JSONtoShortDateString(data.d.Pictures[i].Date_Taken);
                    var sLocation = data.d.Pictures[i].Location;
                    var sCaption = data.d.Pictures[i].Caption;
                    var sURL = data.d.Pictures[i].URL;
                    aoPictures.push({Photographer: sPhotographer,
                                     Date: sDate,
                                     Location: sLocation,
                                     Caption: sCaption,
                                     URL: sURL});
                }
            }

            var osoImpacts;
            if (data.d.Impacts.length > 0) {
                osoImpacts = {};
                for (var i in data.d.Impacts) {
                    var iImpID = data.d.Impacts[i].ImpactId;
                    var sImpTitle = data.d.Impacts[i].Title;
                    var sImpDscrp = data.d.Impacts[i].Description;
                    var sImpStateDate = JSONtoShortDateString(data.d.Impacts[i].StartDate);
                    var sImpEndDate = JSONtoShortDateString(data.d.Impacts[i].EndDate);
                    var ifPositive = data.d.IsPositive;
                    osoImpacts[iImpID] = { Title: sImpTitle,
                        StartDate: sImpStateDate,
                        EndDate: sImpEndDate,
                        IfPositive: ifPositive,
                        Description: sImpDscrp
                    };
                }
            }

            _oHLCaseDetail_Rep[iCaseID] = { Description: sCaseDscrp,
                StartDate: sStartDate,
                EndDate: sEndDate,
                AffectedAreas: sAffectedAreas,
                SrcName: sSrcName,
                URL: sURL,
                Pictures: aoPictures,
                AssociatedImps: osoImpacts
            };

            showLoader(false); // hide loading animation

            updateCaseDetail(true, true, iQuerySubject, iCaseID);
        }
    });
  }
  else {
    updateCaseDetail(false, true, iQuerySubject, iCaseID);
  }
}

function queryCaseDetail_Rep(iCaseID) {
  var oCellCaseDetail = document.getElementById("cellCaseDetail" + iCaseID);
  var oRequest = {ReportID: iCaseID};
  var iQuerySubject = oRequest.IfSourceLocation?_oQuerySubjects.Reports_SrcLoc:_oQuerySubjects.Reports;
  
  if(oCellCaseDetail.innerHTML == "") {
    showLoader(true); // show loading animation
    
    _oCaseDetail_Rep[iCaseID] = {};
    
    var svcURL = document.location.pathname;
    if (/\/$/.test(svcURL)) {
      svcURL += "map.aspx";
    }
    svcURL += "/queryReportDetail";  
    
    var jsonText = JSON.stringify(oRequest);
    
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        url: svcURL,
        data: jsonText,
        error: function (err_msg) { 
          alert('Error\n' + err_msg.status + '\n' + err_msg.statusText); 
          showLoader(false);
        },
        success: function (data) {
          var sCaseDscrp = data.d.Summary;
          var sSrcName = data.d.SourceName;
          var sURL = data.d.Url;
          var sStartDate = JSONtoShortDateString(data.d.StartDate);
          var sEndDate = JSONtoShortDateString(data.d.EndDate);
          
          var sAffectedAreas = "";
          for(var i in data.d.AffectedAreas) {
            sAffectedAreas += data.d.AffectedAreas[i].Name;
            if(i < data.d.AffectedAreas.length-1) {
              sAffectedAreas += "; ";
            }
          }

          var aoPictures = [];
          if (data.d.Pictures.length > 0) {
              for (var i in data.d.Pictures) {
                  var sPhotographer = data.d.Pictures[i].Photographer;
                  var sDate = JSONtoShortDateString(data.d.Pictures[i].Date_Taken);
                  var sLocation = data.d.Pictures[i].Location;
                  var sCaption = data.d.Pictures[i].Caption;
                  var sURL = data.d.Pictures[i].URL;
                  aoPictures.push({ Photographer: sPhotographer,
                      Date: sDate,
                      Location: sLocation,
                      Caption: sCaption,
                      URL: sURL
                  });
              }
          }

          var osoImpacts;
          if(data.d.Impacts.length > 0) {
            osoImpacts = {};
            for(var i in data.d.Impacts) {
              var iImpID = data.d.Impacts[i].ImpactId;
              var sImpTitle = data.d.Impacts[i].Title;
              var sImpDscrp = data.d.Impacts[i].Description;
              var sImpStateDate = JSONtoShortDateString(data.d.Impacts[i].StartDate);
              var sImpEndDate = JSONtoShortDateString(data.d.Impacts[i].EndDate);
              var ifPositive = data.d.IsPositive;
              osoImpacts[iImpID] = {Title: sImpTitle,
                                    StartDate: sImpStateDate,
                                    EndDate: sImpEndDate,
                                    IfPositive: ifPositive,
                                    Description: sImpDscrp};
            }
          }
          
          _oCaseDetail_Rep[iCaseID] = {Description: sCaseDscrp,
                                       StartDate: sStartDate,
                                       EndDate: sEndDate,
                                       AffectedAreas: sAffectedAreas,
                                       SrcName: sSrcName,
                                       URL: sURL,
                                       Pictures: aoPictures,
                                       AssociatedImps: osoImpacts};
          
          showLoader(false); // hide loading animation
  
          updateCaseDetail(true, false, iQuerySubject, iCaseID);
        }
    });
  }
  else {
    updateCaseDetail(false, false, iQuerySubject, iCaseID);
  }
}

