var repeat = false; // Whether to redisplay submission form after submitting
var formMode;
var receiptEmail = null;
var usedTeamName = false;
var teamNameIsOK = false;
var test = 1;
var serverDate;
var rebateDate;
var rebateDays;

$(document).ready(function(){
  // Initialization of private registration table
  if ($("#divPrivateTable").html() != null) {
    // Adds click handler for rows
    $("#tablePrivateTable tbody").click(function(event) {
      $(oTable.fnSettings().aoData).each(function (){
        $(this.nTr).removeClass("row_selected");
      });
      $(event.target.parentNode).addClass("row_selected");
    });
    oTable = $("#tablePrivateTable").dataTable({
      "bProcessing": true,
      "sAjaxSource": base+"json_private.php?code="+orderCode+"&language="+language+randomizer(),
      "oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
      "aoColumns": [
        {"sClass": "cellMemberID"},
        {"sClass": "cellFirstName"},
        {"sClass": "cellLastName"},
        {"sClass": "cellGender"},
        {"sClass": "cellBirthDate"},
        {"sClass": "cellAge"},
        {"sClass": "cellCountry"},
        {"sClass": "cellAmount"},
        {"sClass": "cellDistance"}
      ]
    });
    refreshAmount();
  }
  // Initialization of public member table
  if ($("#divPublicTable").html() != null) {
    oTable = $('#tablePublicTable').dataTable( {
      "bProcessing": true,
      "sAjaxSource": base+"json_public.php?language="+language+randomizer(),
      "oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
      "aoColumns": [
        {"sClass": "cellFirstName"},
        {"sClass": "cellLastName"},
        {"sClass": "cellCity"},
        {"sClass": "cellCountry"},
        {"sClass": "cellTeamName"},
        {"sClass": "cellDistance"}
      ]
    });
  }
  // Initialization of archive table
  if ($("#divArchiveTable").html() != null) {
    oTable = $('#tableArchiveTable').dataTable( {
      "bProcessing": true,
      "sAjaxSource": base+"json_archive.php?language="+language+randomizer(),
      "oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
      "aoColumns": [
        {"sClass": "cellWalkYear"},
        {"sClass": "cellFirstName"},
        {"sClass": "cellLastName"},
        {"sClass": "cellCity"},
        {"sClass": "cellCountry"},
        {"sClass": "cellDistance"},
        {"sClass": "cellHVM"},
        {"sClass": "cellHVM20"},
        {"sClass": "cellCompleted"}
      ]
    });
  }
  // Initialization of private direct registration table
  if ($("#divDirectTable").html() != null) {
    $("#tableDirectTable tbody").click(function(event) {
      $(oTable.fnSettings().aoData).each(function (){
        $(this.nTr).removeClass("row_selected");
      });
      $(event.target.parentNode).addClass("row_selected");
    });
    oTable = $('#tableDirectTable').dataTable( {
      "bProcessing": true,
      // Probably need more flexibility here, or a statement whether the item has been paid
      "sAjaxSource": base+"json_direct.php?language="+language+randomizer(),
      "oLanguage": {"sUrl": base+"language/"+tableLanguage+".txt"},
      "aoColumns": [
        {"sClass": "cellOrderCode"},
        {"sClass": "cellMemberID"},
        {"sClass": "cellFirstName"},
        {"sClass": "cellLastName"},
        {"sClass": "cellCity"},
        {"sClass": "cellCountry"},
        {"sClass": "cellTeamName"},
        {"sClass": "cellDistance"},
        {"sClass": "cellAmount"},
        {"sClass": "cellMethod"}
      ]
    });
  }
  // Initialization of team name field
  if ($("#teamNameField").html() != null) {
    $.ajax({
      type: "POST",
      url: base+"get_value.php",
      data: "name=teamname&arg="+orderCode+randomizer(),
      success: function(response) {
        $("#teamNameField").val(response);
      }
    });
    // This should provide some kind of delayed response, otherwise we can tax the server pretty hard
    $("#teamNameField").blur(function () {
      // Store the team name with an ajax function
     //$("#teamNameNotice").html(lang["processing..."]);
     //$("#teamNameNotice").css({"color": "#666666", "font-weight": "normal"});
      $.ajax({
        type: "POST",
        url: base+"set_value.php",
        data: "name=teamname&arg="+orderCode+"&value="+$("#teamNameField").val()+randomizer(),
        success: function (response) {
//          if (response == "Already taken") {
//            usedTeamName = true;
//            $("#teamNameNotice").html(lang["nameexists"]);
//            $("#teamNameNotice").css({"color": "red", "font-weight": "bold"});
//          } else {
//            usedTeamName = false;
//            $("#teamNameNotice").html(lang["available"]);
//            $("#teamNameNotice").css({"color": "#666666", "font-weight": "normal"});
//          }
        }
      });
    });
//    $("#teamNameField").blur(function () {
//      if (usedTeamName == false) {
//        $("#teamNameNotice").html("&nbsp;");
//      }
//    });
  }
  // Initialize email field in registration
  if ($("#receiptEmailField").html() != null) {
    receiptEmail = $("#receiptEmailField").val();
    $("#receiptEmailField").blur(function () {
      receiptEmail = $("#receiptEmailField").val();
    });
  }
  // Initialize general OK and cancel buttons in blockUI forms
  if ($.blockUI) {
    $.blockUI.defaults.fadeOut = 0;
    $.blockUI.defaults.fadeIn = 0;
    $(".btnClose").click(function (){
      if (cancelAction) {
        cancelAction();
        cancelAction = null;
      }
      $.unblockUI();
      return false;
    });
    $("#confirmOkBtn").click(function (){
      if (confirmAction) {
        confirmAction();
        confirmAction = null;
      }
      $.unblockUI();
      return false;
    });
  }
  // Initialize buttons for member registration form
  if ($("#divMemberForm").html() != null) {
    $("#btnFormCancel").click(function (){
      // Cancel errors for form
      resetErrors();
      return false;
    });
    $("#btnSave").click(function (){
      validateFields();
      checkBirthDate();
      if (errors.length == 0 && unfilled.length == 0) {
        // Store data on server for this person, through form submission
        // Then close the window
        repeat = false;
        $.unblockUI();
        displayMessage(lang["updating"], 275, 150);
        // This fails in IE
        $("#IDMemberForm").submit();
      } else {
        // Else display field errors
        alert(listLanguageItems(errors)+" "+lang["arenotfilled"]);
        // Focus field here
        if(errors[0] != "birthdate") {
          var field = document.forms.memberForm[errors[0]]
          field.focus();
        }
      }
      return false;
    });
    $("#btnSaveAndNew").click(function (){
      validateFields();
      checkBirthDate();
      if (errors.length == 0 && unfilled.length == 0) {
        // If valid, store data on server for this person, through form submission
        // Then clear the form for a new person
        repeat = true;
        $.unblockUI();
        displayMessage(lang["updating"], 275, 150);
        $("#IDMemberForm").submit();
      } else {
        // Else display field errors
        alert(listLanguageItems(errors)+" "+lang["arenotfilled"]);
        // Focus field here
        if(errors[0] != "birthdate") {
          var field = document.forms.memberForm[errors[0]]
          field.focus();
        }
      }
      return false;
    });
    $('#IDMemberForm').ajaxForm(function (response){
      if(response == "OK") {
        refreshPrivateTable();
        $.unblockUI();
        if(repeat == true) {
          formMode = "new";
          displayMemberForm();
          resetForm();
        }
      } else {
        $.unblockUI();
        repeat = false;
        displayError(response);
      }
    });
  }
  // Initializebuttons for archive form
  if ($("#divArchiveForm").html() != null) {
  }
  // Initialize button for creating a new person
  $("#newPersonBtn").click(function (){
    formMode = "new";
    $.ajax({
      type: "POST",
      dataType: "json",
      url: "get_value.php",
      data: "name=serverRebate"+randomizer(),
      success: function(response) {
        serverDate = jsonDate(response["serverDate"]);
        rebateDate = jsonDate(response["rebateDate"]);
        rebateDays = response["rebateDays"];
        displayMemberForm();
        resetForm();
        // Set signup date to serverDate
        document.forms.memberForm.signupdate.value =
          serverDate.getFullYear()+"-"+
          (serverDate.getMonth()+1)+"-"+
          serverDate.getDate()+" "+
          serverDate.getHours()+":"+
          serverDate.getMinutes()+":"+
          serverDate.getSeconds();
      },
      error: function(response) {
        displayError(lang["couldnotdooperation"]);
      }
    });
  });
  // Initialize button for creating a new person from archive
  //$("#newPersonFromArchiveBtn").click(function (){
  //  formMode = "new";
  //  displayArchiveForm();
  //  resetForm();
  //});
  // Initialize button for editing a person
  $("#editPersonBtn").click(function (){
    var selectedMemberID = getSelectedMember(oTable);
    if (!selectedMemberID) {
      displayMessage(lang["nomemberselected"], 275, 150);
      return;
    }
    $.ajax({
      type: "POST",
      url: base+"get_value.php",
      dataType: "json",
      data: "name=person&arg="+selectedMemberID+"&arg2="+orderCode+randomizer(),
      success: function(response) {
        if (response) {
          formMode = "edit";
          $.ajax({
            type: "POST",
            dataType: "json",
            url: "get_value.php",
            data: "name=serverPersonRebate&arg="+selectedMemberID+"&arg2="+orderCode+randomizer(),
            success: function(rebateResponse) {
              serverDate = jsonDate(rebateResponse["serverDate"]);
              rebateDate = jsonDate(rebateResponse["rebateDate"]);
              rebateDays = rebateResponse["rebateDays"];
              // This order is critical for IE
              displayMemberForm();
              fillForm(response);
            },
            error: function(rebateResponse) {
              displayError(lang["couldnotdooperation"]);
            }
          });
        } else {
          displayError(lang["couldnotfindperson"]);
        }
      },
      error: function(response) {
        displayError(lang["couldnotdooperation"]);
      }
    });
  });
  // Initialize button for deleting a person
  $("#deletePersonBtn").click(function (){
    var selectedMemberID = getSelectedMember(oTable);
    if (!selectedMemberID) {
      displayMessage(lang["nomemberselected"], 275, 150);
      return;
    }
    confirmAction = function (){
      displayMessage(lang["updating"], 275, 150);
      $.ajax({
        url: base+"set_value.php",
        data: "name=deleteperson&arg="+selectedMemberID+"&value="+orderCode+randomizer(),
        success: function (response){
          refreshPrivateTable();
          $.unblockUI();
        },
        error: function (response){
          $.unblockUI();
          displayError(lang["couldnotdooperation"]);
        }
      });
    }
    displayConfirm(lang["suretodelete"]);
    return false;
  });
  // Same for direct and for read only private
  $("#showPersonBtn").click(function (){
    var row = getSelectedRow(oTable);
    if (!row) {
      displayMessage(lang["nomemberselected"], 275, 150);
      return;
    }
    $.ajax({
      type: "POST",
      url: base+"get_value.php",
      dataType: "json",
      data: "name=person&arg="+row[1]+"&arg2="+row[0]+randomizer(),
      success: function(response) {
        if (response) {
          displaySizedFloater("#divMemberDetails");
          fillDetails(response);
        } else {
          displayError(lang["couldnotfindperson"]);
        }
      },
      error: function(response) {
        displayError(lang["couldnotdooperation"]);
      }
    });
  });
  // Initialize button for showing groups in private
  $("#showGroupBtn").click(function (){
    var row = getSelectedRow(oTable);
    if (!row) {
      displayMessage(lang["nomemberselected"], 275, 150);
      return;
    }
    $.ajax({
      type: "POST",
      url: base+"get_value.php",
      dataType: "json",
      data: "name=person&arg="+row[1]+"&arg2="+row[0]+randomizer(),
      success: function(response) {
        if (response) {
          displaySizedFloater("#divReceiptDetails"); // Similar to the real receipt
          fillDetails(response);
        } else {
          displayError(lang["couldnotfindperson"]);
        }
      },
      error: function(response) {
        displayError(lang["couldnotdooperation"]);
      }
    });
  });
  // Initialize direct approval of registration button
  if (direct) {
    $("#directBtn").click(function (){
      // Need to find a better way to handle two dialogs after eachother. This is not working.
      // So we lose a message.
      //test = 31;
      //if (usedTeamName) {
      //  confirmAction = function() {
      //    teamNameIsOK = true;
      //  }
      //  cancelAction = function() {
      //    teamNameIsOK = false;
      //    $("#teamNameField").focus();
      //  }
      //  displayConfirm(lang["teamnamealreadyused"], 275, 150);
      //  test = 23;
      //}
      //test = teamNameIsOK;
      //if (teamNameIsOK == false) {
      //  return;
      //}
      //test = 43;
      if (oTable.fnSettings().aoData.length == 0) {
        displayMessage(lang["nomembersinlist"], 275, 150);
      } else {
        confirmAction = function() {
          window.location = "invoice_direct.php?language="+language+"&code="+orderCode+randomizer();
        }
        displayConfirm(lang["pleaseassurecorrectness"]);
      }
    });
  }
  // Initialize button for registration approval for displaying invoice
  $("#invoiceBtn").click(function (){
    //if (usedTeamName) {
    //  cancelAction = function() {
    //    $("#teamNameField").focus();
    //  }
    //  displayMessage(lang["teamnamealreadyused"], 275, 150);
    //  return;
    //}
    if (receiptEmail == null || receiptEmail == "") {
      cancelAction = function() {
        // Focus on the receipt email field
        $("#receiptEmailField").focus();
      }
      displayMessage(lang["receiptemailrequired"], 275, 150);
      return;
    }
    if (oTable.fnSettings().aoData.length == 0) {
      displayMessage(lang["nomembersinlist"], 275, 150);
      return;
    } else {
      confirmAction = function() {
        window.location = "invoice.php?language="+language+"&code="+orderCode+"&receiptemail="+receiptEmail+randomizer();
      }
      displayConfirm(lang["pleaseassurecorrectness"], 275, 300);
    }
  });
  // Initialization of various buttons
  $("#receiptDirectBtn").click(function (){
    window.location = "invoice_direct.php?language="+language+"&code="+orderCode+randomizer();
  });
  $("#receiptBtn").click(function (){
    window.location = "invoice.php?language="+language+"&code="+orderCode+randomizer();
  });
  $("#refreshBtn").click(function (){
    refreshPrivateTable();
  });
  $("#refreshDirectBtn").click(function (){
    refreshDirectTable();
  });
  $("#priceListBtn").click(function (){
    displaySizedFloater("#divPriceList");
  });
  $("#supportBtn").click(function (){
    if (window["orderCode"] == undefined) {
      var oc = "";
    } else {
      var oc = orderCode;
    }
    window.open("contact_"+language+".php?ordercode="+oc+randomizer());
    return false;
  });
  if (direct) {
    if ($("#divPrivateTable").html() != null) {
      $("#helpBtn").click(function (){
        displayMessage(lang["pleasefollowsignup"], 275, 450);
      });
    }
    if ($("#divDirectTable").html() != null) {
      $("#helpBtn").click(function (){
        displayMessage(lang["pleasefollowtable"], 275, 450);
      });
    }
  } else {
    // help images here, depending on language, so we would want to use a php inclusion
    $("#helpBtn").click(function (){
      window.open("help/howto_"+language+".gif");
      return false;
    });
  }
  // Other initializations happen here
});
