//Номер баги
var bugId = getIdFromUrl() || getBugIdFromField();

// Если id нет, то мы имеем дело с новой багой
if (!bugId) {
  // Присвоим текущее время, чтобы при создании следующей баги значения не сохранились
  bugId = "c" + new Date().getTime();
}

var protocol = window.location.protocol;

//Изменение баги
var changed_remain = 0;

//Создание баги
var etersoft_create = window.location.href.search("enter") !== -1 ? 1 : 0;

// Объект таймера, создается при инициализации
// Подробнее про таймер см. timer_common.js
var timer;

// Интервал обновления таймера в мс, на точность не влияет
var UPDATE_INTERVAL = 1000;

function initTimer() {
  // Показываем время только сотрудникам Etersoft
  if (!isetersoft()) return;

  document.getElementById("timerblock").style.display = "block";
  timer = new Timer("bug:" + protocol + bugId, updateTimer);
  timer.setAutoUpdate(UPDATE_INTERVAL);
}

// this при вызове - объект таймера
function updateTimer() {
  setPauseDisplay(this.isPaused());
  document.querySelector("#timespent").value = this.getFormattedString();
}

//Установка в поле отработанного времени в минутах
function setWorkTime(manualTime) {
  var minutes = Math.ceil(timer.getElapsedSeconds() / 60);

  document.querySelector("#realworktime").value = manualTime
    ? manualTime
    : minutes;
}

function setPauseDisplay(pause) {
  document.querySelector("#timespent").style.color = pause ? "gray" : "black";
  document.querySelector("#timer_pause").style.visibility = pause
    ? "hidden"
    : "visible";
  document.querySelector("#timer_play").style.visibility = pause
    ? "visible"
    : "hidden";
}

/////////////////////////////////////////////////////
function showDiv() {
  document.querySelector("#timeQuestionDiv").style.display = "block";
  document.querySelector("#realworktime").focus();
}

function closeDiv() {
  document.querySelector("#timeQuestionDiv").style.display = "none";
}

/* Получение номера баги из поля */
function getBugIdFromField() {
  var field = document.querySelector("#changeform input[name=id]");
  if (field) {
    return parseInt(field.value);
  }
  return false;
}

////////////////////////////////////////////

//Является ли пользователь сотрудником Etersoft
function isetersoft() {
  var email = document.getElementById("useremail").className;
  if (!email) return false;

  var domain = email.split("@")[1];

  return domain === "etersoft.ru";
}

//Является ли пользователь ответственным
function isworker() {
  var useremail = document.getElementById("useremail");
  var assigntoemail = document.getElementById("assigntoemail");
  var email = useremail.className;
  var assignemail = assigntoemail.className;

  return email == assignemail;
}

window.addEventListener("load", function() {
  function getTimespentValue() {
    let timespent = document.querySelector("#timespent").value;
    let timespentValue = timespent.split(":");

    // let's calc how many time is spent in minutes
    let hours = parseInt(timespentValue[0]) * 60;
    let minutes = parseInt(timespentValue[1]);
    let seconds = Math.round(parseInt(timespentValue[2]) / 60);

    timespentValue = hours + minutes + seconds;

    return timespentValue;
  }

  // add listener for comment commit
  //let commitBtn = document.querySelector("#commit");
  let openButton = document.querySelector("#commit");
  let closeButton = document.querySelector("#timeQuestionDiv .close");
  let dialog = document.querySelector("#timeQuestionDiv");

  openButton.addEventListener("click", function(event) {
    // cancel form submiting
    event.preventDefault();

    document.querySelector('html').style.overflow = "hidden";

    let timespentValue = getTimespentValue();

    dialog.style.display = "block";
    focusManager.capture(dialog);

    // write work time in input value
    document.querySelector("#realworktime").value =
      localStorage.time === undefined ? timespentValue : localStorage.time;
    document.querySelector("#saveTime").dataset["time"] = timespentValue;
  });

  closeButton.addEventListener("click", function () { document.querySelector('html').style.overflow = "auto"; })

  document
    .querySelector("#realworktime")
    .addEventListener("change", function() {
      document.querySelector("#saveTime").dataset["time"] = this.value;
      localStorage.time = this.value;
      console.log(
        "time changed:",
        document.querySelector("#saveTime").dataset["time"]
      );
    });

  document.querySelector("#realworktime").addEventListener("paste", function() {
    document.querySelector("#saveTime").dataset["time"] = this.value;
    localStorage.time = this.value;
    console.log(
      "time changed:",
      document.querySelector("#saveTime").dataset["time"]
    );
  });

  // add listener for time commit
  let btn = document.querySelector("#saveTime");

  btn.addEventListener("click", function(event) {
    // cancel form submiting
    event.preventDefault();

    // let's calc time for #work_time input
    let workTime = parseInt(document.querySelector("#realworktime").value);
    workTime =
      workTime === parseInt(btn.dataset["time"])
        ? parseInt(btn.dataset["time"])
        : workTime;
    workTime = workTime > 0 ? workTime : 0;

    let workTimeValue = Math.ceil((workTime / 60) * 100) / 100;

    let productiveTime = parseInt(document.querySelector("#ProductTime").value);
    productiveTime = productiveTime > 0 ? productiveTime : workTime;
    let productiveTimeValue = Math.ceil((productiveTime / 60) * 100) / 100;
    document.querySelector("#work_time").value = workTimeValue;
    document.querySelector("#productive_time").value = productiveTimeValue;

    // now we ready for submiting all forms
    let mainCommitBtn = document.querySelector("#commit_top");

    // check comment before submit
    let comment = document.querySelector("#comment").value;

    if (comment.length !== 0) {
      if (comment.length < 9) {
        alert("Слишком короткий комментарий");
      } else if (productiveTimeValue > 8 || workTimeValue > 8) {
        alert(
          "Недопустимо указывать отработанное/продуктивное время более восьми часов. Правильным следованием рабочему процессу было бы выполнение работы по частям, о каждой из которых будет написано отдельно."
        );
      } else if (
        productiveTimeValue > 2 &&
        comment.length < productiveTimeValue * 60
      ) {
        alert(
          "Недопустимо коротко комментировать длительные работы. Мы ожидаем не менее 60 символов на каждый указанный час."
        );
      } else if (productiveTimeValue > workTimeValue) {
        alert("Продуктивное время не может быть больше отработанного!");
      } else {
        let bugForm = etersoft_create === 1 ? "#Create" : "#changeform";
        document.querySelector(bugForm).submit();
        timer.clear();
        localStorage.removeItem("time");
      }
    } else {
      alert("Поле комментария не может быть пустым!");
    }
  });
});

// let's validate!
function validate(evt) {
  let theEvent = evt || window.event;
  let key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode(key);
  let regex = /[0-9\s]/;
  if (!regex.test(key)) {
    theEvent.returnValue = false;
    if (theEvent.preventDefault) theEvent.preventDefault();
  }
}

document.querySelector("#realworktime").onkeypress = function() {
  validate(event);
};

document.querySelector("#realworktime").onpaste = function() {
  validate(event);
};

document.querySelector("#ProductTime").onkeypress = function() {
  validate(event);
};

document.querySelector("#ProductTime").onpaste = function() {
  validate(event);
};

document.querySelector("#realworktime").addEventListener("keypress", function(event) {
  if (event.key === "Enter") {
    this.blur();
    document.querySelector("#ProductTime").focus();
  }
})

document.querySelector("#ProductTime").addEventListener("keypress", function(event) {
  if (event.key === "Enter") {
    this.blur();
    document.querySelector("#saveTime").click();
  }
})

//////////////////////////////////////////////////////////////

if (typeof window.addEventListener != "undefined") {
  //gecko, safari, konqueror and standard
  window.addEventListener("load", initTimer, false);
} else if (typeof document.addEventListener != "undefined") {
  //opera 7
  document.addEventListener("load", initTimer, false);
} else if (typeof window.attachEvent != "undefined") {
  //win/ie
  window.attachEvent("onload", initTimer);
}
