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

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

var protocol = window.location.protocol;

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

//Создание баги
var etersoft_create = 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);

    // Вешаем обработчик на сабмит формы
    document.querySelector('#changeform').addEventListener('submit', function (event) {
        // Не сабмитим форму
        event.preventDefault();
        mysubmit();
    });
}

// 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);
}

function update_remain() {
	if (changed_remain == 1) {
		var remaining_time = document.querySelector("#changeform #remaining_time").value;
		var realworktime = document.querySelector("#timeQuestionDiv #realworktime").value;
		var rrt = Math.round((remaining_time - Math.round(realworktime*10/60)/10)*10)/10;
		
		if (rrt < 0) {
			rrt = 0;
		}
		document.querySelector("#timeQuestionDiv #realremaintime").value = rrt;
	}
	
	if (document.querySelector("#timeQuestionDiv #realremaintime").value == 0 && isworker()) {
		document.getElementById('message_warning').className = "div_show";
	} else {
		document.getElementById('message_warning').className = "div_hide";
	}
	
}

function premysubmit(realworktime) {
	if (realworktime != -1) {
		document.querySelector("#timeQuestionDiv #realworktime").value = realworktime;
	}
	
	var wt = Math.round(document.querySelector("#timeQuestionDiv #realworktime").value*100/60)/100;

	if (etersoft_create == 1) {
		// Запрет ставить более 1 часа отработанного времени при создании баги
		if ( wt > 1) {
			alert('Вы указали время на создание баги более 1 часа.');
			return false;
		}
		document.querySelector("#Create #work_time").value = wt;
		mysubmitnew();
		timer.clear();
		return;
	}

	var comment = document.querySelector("#comment");

	// Запрет ставить более 8 часов отработанного времени
	if ( wt > 8) {
		alert('Вы указали отработанное время более 8 часов. Нужно обязательно разбивать комментирование своей работы за день на отдельные части.');
		return false;
	}

	// Предупреждение
	if ( wt > 3) {
        // FIXME: тут нет возможности отмены
		alert('Вы указали отработанное время более 3 часов. Правильным следованием рабочему процессу было бы выполнение работы по частям, о каждой из которых будет написано отдельно.');

		if (comment.value.length < (wt * 60)) {
			alert('Недопустимо коротко комментировать длительные работы.');
			return false;
		}
		//comment.value = comment.value + '\n\nДа, я подтверждаю, что намеренно наплевал на предупреждение о том, что для нормального рабочего процесса необходимо вести более короткие записи в багзилле.';
		//return false;
	}

	if (comment.value.length < 9) {
		alert('Комментарий слишком короткий.');
		return false;
	}
	
	if (changed_remain == 1) {
		document.querySelector("#changeform #work_time").value = wt;
		document.querySelector("#changeform #remaining_time").value =  document.querySelector("#timeQuestionDiv #realremaintime").value;
	}

	timer.clear();
	mysubmit();
}

function mysubmit() {
	if (document.querySelector("#Create")) {
		etersoft_create = 1;
	}
	if (document.querySelector("#changeform")) {
		changed_remain = 1;
	}
	
	if (changed_remain == 1 && (!isetersoft() || document.querySelector("#changeform #work_time").value > 0 || document.querySelector("#changeform #comment").value.length == 0)) {
		document.changeform.submit();
	} else {
		showDiv();
		setWorkTime();
		update_remain();
		if (changed_remain == 1 && isworker()) {
			document.querySelector("#timeQuestionDiv #id_remain_time").className = "div_show";
			document.querySelector("#timeQuestionDiv #message").className = "div_show";
		}
	}
}

function mysubmitnew() {
	if (!isetersoft()) {
		document.Create.submit();
		return;
	}
	if (document.querySelector("#Create #work_time").value > 0) {
		timer.clear();
		document.Create.submit();
		return;
	}
	etersoft_create = 1;
	showDiv();
	setWorkTime();
}

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

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);
}
