require("/o2www/js/DOMUtil.js");
require("/o2www/js/date/getWeek.js");
require("/o2www/js/util/urlMod.js");

//Shows detailed catch report (expanded table)
function showCatchReportDetails(reportId) {
  toggleReportTable(reportId);
  changeRowClass(reportId);
  showTdBorder(reportId);
}
//Toggles display of report details
function toggleReportTable(reportId) {
  var reportTable = document.getElementById('reportDetails' + reportId);
  reportTable.style.display = reportTable.style.display.match('none') ? 'block' : 'none';
}
//Toggles 'active' class of the report row
function changeRowClass(reportId) { 
  var reportTable = document.getElementById('reportDetails' + reportId);
  var reportRow = document.getElementById ('row' + reportId);   
  var reportRowClassName = reportRow.getAttribute('class');
  reportRow.className = reportTable.style.display.match('block') ? reportRowClassName + ' active' : reportRow.className.replace(/active/,'');
}
//Hides/shows report details border
function showTdBorder(reportId) {
  var reportTable = document.getElementById('reportDetails' + reportId);
  var reportDetailsCell = document.getElementById ('reportCell' + reportId);
  reportDetailsCell.className = reportTable.style.display.match('none') ? '' : 'reportCell';
}

function showEntries() {
  var reportFormWrapper = document.getElementById("reportFormWrapper");
  var localeParam = "";
  if (o2UrlMod.getParam("forceLocale")) {
    localeParam = "&forceLocale=" + o2UrlMod.getParam("forceLocale");
  }
  if (reportFormWrapper.style.display !== "block") {
    reportFormWrapper.style.display = "block";
    ajaxCall({
      serverScript : "/o2/CatchReport-Register/showEntries",
      params       : "orderLineId=" + document.getElementById("orderLineId").value + localeParam,
      target       : "reports",
      where        : "replace",
      onSuccess    : "updateEntryNumbers()"
    });
  }
  reportFormWrapper.disabled = false;
}

function hideEntries() {
  var reportFormWrapper = document.getElementById("reportFormWrapper");
  reportFormWrapper.style.display = "none";
  reportFormWrapper.disabled = true;
}

function checkDates() {
  var startDateString = document.getElementById( "startdate" ).value;
  var endDateString   = document.getElementById( "enddate"   ).value;
  
  if (startDateString && endDateString) {
    var startDate = _getDateObject( startDateString );
    var endDate   = _getDateObject( endDateString   );
    var today     = new Date();
    
    if (startDate > endDate || endDate > today) {
      return false;
    }
    return true;
  }
  return false;
}

function checkWeek(weekNumber) {
  if (weekNumber != parseInt(weekNumber)) {
    return false;
  }
  var startDateString = document.getElementById( "startdate" ).value;
  var endDateString   = document.getElementById( "enddate"   ).value;
  if (!startDateString || !endDateString) { // checkDates handles this
    return true;
  }

  var startDate = _getDateObject( startDateString );
  var endDate   = _getDateObject( endDateString   );
  var startWeek = startDate.getWeek();
  var endWeek   = endDate.getWeek();

  if (startWeek <= endWeek) { // Presumeably the same year
    if (weekNumber < startWeek || weekNumber > endWeek) {
      return false;
    }
    return true;
  }
  else { // Different years
    if (weekNumber > endWeek || weekNumber < startWeek) {
      return false;
    }
    return true;
  }
}

function _getDateObject(dateString) {
  var matches = dateString.match(/^(\d\d\d\d)(\d\d)(\d\d)$/);
  var month = matches[2].replace(/^0/, "");
  return new Date( matches[1], month-1, matches[3] );
}

function toggleShowReports() {
  var reports = document.getElementById("reports");
  var wasVisible = reports.style.display === "block" || reports.style.display === "";
  var display = wasVisible ? "none" : "block";
  reports.style.display = display;
  document.getElementById("addEntryAjaxLink").parentNode.style.display = display;
  document.getElementById("reportFormWrapper").disabled = wasVisible ? true : false;
}

function updateEntryNumbers() {
  var entryNumberElms = getElementsByClassName("entryNumber");
  for (var i = 1; i <= entryNumberElms.length; i++) {
    entryNumberElms[i-1].innerHTML = i;
  }
}

function removeRow(elm) {
  elm = getClosestAncestorByTagName(elm, "a").parentNode;
  elm.parentNode.removeChild(elm);
}

