logis = {};

$(document).ready(function() {
	if ($('#main').hasClass('requestList')) {
		logis.setupTabs();
		logis.setupFiltering();
	}
	logis.setupDateTime();
});

logis.setupDateTime = function () {
	var field = $('#step_2-meetingDateTime');
        if (field.length == 0) { field = $('#step_2-PZD_ZAC'); }
        if (field.length == 0) { field = $('#meetingDateTime'); }
	var field2 = $('#step_2-timezone');
        if (field2.length == 0) { field2 = $('#timezone'); }
	var logisText = $('<span id="localTime"/>').insertAfter(field);

	field.keyup(function () {
		var local = logis.strToDate(field.val());
		if (local) {
			$.get(logis.tzOffsetUrl, {stamp: local.valueOf() / 1000}, function (tzOffset) {
				tzOffset = Number(tzOffset);
				// getTimezoneOffset() returns (GMT - local) instead of (local - GMT)!
				var offset = tzOffset + local.getTimezoneOffset(); // in minutes
				var offset2 = local.getTimezoneOffset()/60;
				var logisTime = new Date(local.getTime() + offset * 60 * 1000);
                                if (offset2 == 0) { field2.val('GMT');}
                                else 
                                { if (offset2 > 0) { field2.val('GMT+' + offset2);}
                                  else { field2.val('GMT' + offset2);}
                                }
                                //field2.val(offset2);
				logisText.html(translate.logisDateTime + ': ' + logisTime.toLocaleDateString() + ' ' + logisTime.toLocaleTimeString());
			});
		}
		else {
			logisText.html(translate.dateTimeFormat);
		}
	});

	field.trigger('keyup');
};

logis.strToDate = function (s) {
	// Convert a string formatted like "dd. mm. yyyy hh:mm" to Date.
	// Convert a string formatted like "yyyy.mm.dd hh:mm" to Date.
	var parts = s.split(/[-. ,:\/]+/);
	if (parts.length != 5) {
		return false;
	}
	return new Date(parts[0], parts[1] - 1, parts[2], parts[3], parts[4]); // year, month (0..11), day, hour, minute
};

logis.setupTabs = function() {
	var tabs = $('.tab');
	var first = tabs.slice(0, 1);

	tabs.each(function() {
		var self = $(this);

		$(this).prev('h2').remove().clone().addClass('tabHeader').insertBefore(first).click(function() {
			tabs.hide();
			self.show();
			$(this).parent().find('h2.tabHeader').removeClass('active');
			$(this).addClass('active');
		});
	});

	$('h2.tabHeader:first').click();
};

logis.setupFiltering = function() {
	//logis.filters = {};

	$('table th.filterKey').each(function() {
		var cell = $(this);
		var cellIndex = this.cellIndex;
		var data = new Array();
		logis.getColumn(logis.getTable(cell), cellIndex).each(function() {
			data.push(this.innerHTML);
		});

		data = logis.arrayUnique(data);
		data.unshift('--' + translate.all + '--');

		var select = $('<select class="filter" />');
		$.each(data, function() {
			var option = $('<option>' + this + '</option>')

			if (this.substr(0, 2) == '--') {
				option.attr('showall', true);
			}
			select.append(option);
		});

		select.change(function() {
			logis.runFilters(logis.getTable(cell));
		});

		cell.append('<br />');
		cell.append(select);
	});
};

logis.runFilters = function(table) {
	table.find('tr').show();

	logis.getTableFilters(table).each(function() {
		var filter = $(this.options[this.selectedIndex]);
		logis.filterColumn(filter);
	});
}

logis.filterColumn = function(filter) {
	logis.getColumn(logis.getTable(filter), filter.parents('th').attr('cellIndex')).each(function() {
		var row = $(this).parents('tr');
		if (!filter.attr('showall') && this.innerHTML.indexOf(filter.html()) == -1) {
			row.hide();
		}
	});
};

logis.getTable = function(cell) {
	return cell.parents('table');
};

logis.getColumn = function(table, index) {
	return table.find('td:nth-child(' + Number(index + 1) + ')');
};

logis.getTableFilters = function(table) {
	return table.find('select.filter');
};


logis.arrayUnique = function(array) {
	var hash = new Object();
	for (j = 0; j < array.length; j++) {
		hash[array[j]] = true;
	}
	var result = new Array();
	for (value in hash) {
		result.push(value);
	}
	return result;
}
