$(function(){

	$.ajaxSetup({timeout: 5000});
	
	statusRefresh();
	nightRefresh();
	planRefresh();
	
	$('.footer .status').click(function(e){
		e.preventDefault();
		
		$('.main-tabs li.status a').click();
	});
	
});

var refreshTimeout;
var ims = new Date();

function statusRefresh()
{
	var start = new Date().getTime();
	
	refreshTimeout = setTimeout(statusRefreshTimeout, 5000);
	
	$.get('/status?'+ dateFormatISO(ims), function(data){
		clearTimeout(refreshTimeout);

		$('#status .panel.common')
			.removeClass('panel-danger')
			.addClass('panel-success')
		;
		$('#status .panel.common .error').hide();
		$('#status .panel.common .no-error').show();
		
		//roundtrip
		$('#status .panel.common .roundtrip span').html( new Date().getTime() - start );
		$('.footer .status').css('color', 'green');
		
		if (data.files.refresh) {
			$('#status .panel.files .refresh').show();
		}
		else {
			$('#status .panel.files .refresh').hide();
		}

		
		// снято за сегодня
		if (typeof data.files.today != 'undefined') {
			$('#status .panel.files .today .files span').html(
				(typeof data.files.today.files == 'undefined')
					? '- нет данных -'
					: data.files.today.files
			);
			$('#status .panel.files .today .hours span').html(
				(typeof data.files.today.minutes == 'undefined')
					? '- нет данных -'
					: (data.files.today.minutes / 60).toFixed(1)
			);
			$('#status .panel.files .today .objects span').html(
				(typeof data.files.today.objects == 'undefined')
					? '- нет данных -'
					: data.files.today.objects
			);
		}
				
		// всего снято
		if (typeof data.files.total != 'undefined') {
			$('#status .panel.files .total .files span').html(
				(typeof data.files.total.files == 'undefined')
					? '- нет данных -'
					: data.files.total.files
			);
			$('#status .panel.files .total .hours span').html(
				(typeof data.files.total.minutes == 'undefined')
					? '- нет данных -'
					: (data.files.total.minutes / 60).toFixed(1)
			);
			$('#status .panel.files .total .objects span').html(
				(typeof data.files.total.objects == 'undefined')
					? '- нет данных -'
					: data.files.total.objects
			);
		}
		
		
		
		// планы на ночь
		
		
		// обработка запросов на обновление, корректировка текущего IMS
		if (data.refresh.length > 0) {
			for (var i in data.refresh) {
				switch (data.refresh[i]) {
					case 'alias':
						aliasGetList();
						break;
						
					case 'task':
						taskGetList();
						break;

					case 'night':
						nightRefresh();
						break;

					case 'plan':
						planRefresh();
						break;
				}
			}
			
			ims = new Date();
		}
		
	
		setTimeout(statusRefresh, 5000);
	}, 'json');
	
}

function statusRefreshTimeout()
{
	$('#status .panel.common')
		.removeClass('panel-success')
		.addClass('panel-danger')
	;
	$('#status .panel.common .error').show();
	$('#status .panel.common .no-error').hide();
	$('.footer .status').css('color', 'red');
	
	statusRefresh();
}

function dateFormatISO(date)
{
	var month = parseInt(date.getMonth()) + 1;
	var day   = parseInt(date.getDate());
	
	return (
		date.getFullYear() +'-'+
		((month < 10) ? ('0'+ month) : month) +'-'+
		((day < 10) ? ('0'+ day) : day) +'T'+
		((date.getHours() < 10) ? ('0'+ date.getHours()) : date.getHours()) +':'+
		((date.getMinutes() < 10) ? ('0'+ date.getMinutes()) : date.getMinutes()) +':'+
		((date.getSeconds() < 10) ? ('0'+ date.getSeconds()) : date.getSeconds())
	);
}


// @todo перенести в night.js?
function nightRefresh()
{
	$.get('/night', function(data){
		$('.row.night .progress.night').html(''); 

		var now = new Date();
		
		var left = (now < new Date(data.notSun.begin))
			? now
			: new Date(data.notSun.begin);
		
		var right = new Date(data.notSun.end);
		
		var range = right - left;
		
		if (now < new Date(data.notSun.begin)) {
			// добавить промежуток от now до notSun.begin
			
			$('#templateNightProgressItem').tmpl({
				color: 'info',
				percent: Math.round((new Date(data.notSun.begin) - now) / range * 1000) / 10,
				left: humanDateHM(now),
				title: 'День'
			}).appendTo('.row.night .progress.night');
		}
		
		// добавить eveningFlat
		$('#templateNightProgressItem').tmpl({
			color: 'danger',
			percent: (new Date(data.eveningFlat.end) - new Date(data.eveningFlat.begin)) / range * 100,
			left: humanDateHM(data.eveningFlat.begin),
			title: 'Вечерние гражданские сумерки (вечерние флеты)'
		}).appendTo('.row.night .progress.night');

		// добавить eveningTwilight
		$('#templateNightProgressItem').tmpl({
			color: 'warning',
			percent: (new Date(data.eveningTwilight.end) - new Date(data.eveningTwilight.begin)) / range * 100,
			left: humanDateHM(data.eveningTwilight.begin),
			title: 'Вечерние астрономические сумерки (вечерние узкополосники)'
		}).appendTo('.row.night .progress.night');

		// добавить night
		$('#templateNightProgressItem').tmpl({
			color: 'success',
			percent: (new Date(data.night.end) - new Date(data.night.begin)) / range * 100,
			left: humanDateHM(data.night.begin),
			right: humanDateHM(data.night.end),
			text: '('+ humanDateRangeHM(new Date(data.night.end) - new Date(data.night.begin)) +')',
			title: 'Астроночь'
		}).appendTo('.row.night .progress.night');
		
		// добавить morningTwilight
		$('#templateNightProgressItem').tmpl({
			color: 'warning',
			percent: (new Date(data.morningTwilight.end) - new Date(data.morningTwilight.begin)) / range * 100,
			right: humanDateHM(data.morningTwilight.end),
			title: 'Утренние астрономические сумерки (утренние узкополосники)'
		}).appendTo('.row.night .progress.night');

		// добавить morningFlat
		$('#templateNightProgressItem').tmpl({
			color: 'danger',
			percent: (new Date(data.morningFlat.end) - new Date(data.morningFlat.begin)) / range * 100 - 0.1,
			right: humanDateHM(data.morningFlat.end),
			title: 'Утренние гражданские сумерки (утренние флеты)'
		}).appendTo('.row.night .progress.night');
		

		$('.row.night .progress.moon').html('');

		var moon = left;
		
		for (var i in data.moon) {
			var moonBegin = (new Date(data.moon[i].begin) < moon)
				? moon
				: new Date(data.moon[i].begin);
				
			var moonEnd = (new Date(data.moon[i].end) > right)
				? right
				: new Date(data.moon[i].end);
			
			$('#templateMoonProgressBlankItem').tmpl({
				percent: (moonBegin - moon) / range * 99.99
			}).appendTo('.row.night .progress.moon');

			$('#templateMoonProgressItem').tmpl({
				percent: (moonEnd - moonBegin) / range * 99.99,
				left: humanDateHM(data.moon[i].begin),
				right: humanDateHM(data.moon[i].end) 
			}).appendTo('.row.night .progress.moon');

			moon = new Date(data.moon[i].end);
		}
		
		
		$('.row.night .progress.now').html('');

		if (now < left) {
			$('#templateNowProgressItem').tmpl({
				time: humanDateHM(now)
			}).appendTo('.row.night .progress.now');
		}
		else {
			$('#templateNowProgressBlankItem').tmpl({
				percent: (now - left) / range * 99.99
			}).appendTo('.row.night .progress.now');
						
			$('#templateNowProgressItem').tmpl({
				time: humanDateHM(now)
			}).appendTo('.row.night .progress.now');
		}
	});
}


function planRefresh()
{
	$.get('/plan', function(data){
		
		$('#status .panel.plan div.plan ul').html('');

		for (var i in data.plan) {
			$('<li>'+ i +': '+ humanDateHM(data.plan[i].begin) +' - '+ humanDateHM(data.plan[i].end) +'</li>').appendTo('#status .panel.plan div.plan ul');
		}
		
		if ($('#status .panel.plan div.plan ul li').length) {
			$('#status .panel.plan div.plan').show();
			$('#status .panel.plan div.empty').hide();
		}
		else {
			$('#status .panel.plan div.plan').hide();
			$('#status .panel.plan div.empty').show();
		}

	});
	
}