/**
 * Раньше показ и сокрытие данных таблицы производились трюком с CSS-ными классами.
 * Теперь это делается javascript-ом.
 */

var archive = function(){
	this.init();
};



var shown_tickets = {};
var shows_ticket_combinations = false;

function get_ticket_element(ticket_id)
{
	return $(".archive_table tr[ticket=" + ticket_id + "]");
}

function hide_ticket_info(ticket)
{
	shown_tickets[ticket.id] = false;
	get_ticket_element(ticket.id).hide();
	hide_ticket_combinations(ticket.id);
}

function show_ticket_info(ticket)
{
	shown_tickets[ticket.id] = true;
	get_ticket_element(ticket.id).show();
	if (shows_ticket_combinations){
		show_ticket_combinations(ticket.id);
	};
}

function show_ticket_combinations(ticket_id)
{
	find_ticket_combinations(ticket_id).for_each(function(combination) { combination.show(); });
}

function hide_ticket_combinations(ticket_id)
{
	find_ticket_combinations(ticket_id).for_each(function(combination) { combination.hide(); });
}

function find_ticket_combinations(ticket_id)
{
	var combinations = [];
	var combination = get_ticket_element(ticket_id).next();
	while (combination.is('tr.combination') || combination.is('tr.win_combination') || combination.is('tr.new_combination'))
	{
		combinations.push(combination);
		combination = combination.next();
	}
	
	return combinations;
}

archive.prototype = {
	init: function(){
		this.archive_table = $('.archive_table');
		this.highlight_block = $('#highlight');
		this.highlight_form = this.highlight_block.find('form');
		this.highlight_field = this.highlight_form.find('input');
		this.items_list = this.archive_table.find('td.numbers ul');
		this.items = this.items_list.find('li');

		this.sorting_block = $('#sorting');
		this.sort_by_order = this.sorting_block.find('.sort_by_order');
		this.sort_by_asc = this.sorting_block.find('.sort_by_asc');

		this.items_amount = this.items.size();
		this.items_list_amount = this.items_list.size();
		
		if( this.archive_table[0].tagName === 'TABLE' ){
			for (var i = 0; i < this.items_list_amount; i++){
				new create_sorted_clone(this.items_list.eq(i));
			}
		}
		
		this.items_list = this.archive_table.find('td.numbers ul');
		this.items = this.items_list.find('li');
		this.items_values = [];
		this.items_amount = this.items.size();
		
		this.fill_values_array();
		
		this.toggle_combinations();
		this.toggle_bulletins();
	},
	
	update_corners: function(){
		rocon.update(this.sort_by_order[0]);
		rocon.update(this.sort_by_asc[0]);
	},

	fill_values_array: function(){
		for (var j = 0; j < this.items_amount; j++){
			this.items_values[j] = parseInt(this.items.eq(j).text(), 10);
		}
		
		var that = this;
		
		this.highlight_form.submit(function(){
			that.highlight();
			return false;
		});

		this.attach_events();
	},
	
	attach_events: function(){
		var that = this;
		
		this.sort_by_order.click(function(){
			that.sort_by_asc.removeClass('selected');
			that.sort_by_order.addClass('selected');
			that.archive_table.removeClass('show_cloned');
			that.update_corners();
		});
		
		this.sort_by_asc.click(function(){
			that.sort_by_order.removeClass('selected');
			that.sort_by_asc.addClass('selected');
			that.archive_table.addClass('show_cloned');
			that.update_corners();
		});
	},
	
	highlight: function(){
		var curr_val = parseInt(this.highlight_field.val(), 10);
		if(curr_val > -1){
			for (var i = 0; i < this.items_amount; i++){
				if( this.items_values[i] === curr_val ){
					this.items.eq(i).addClass('selected');
				} else {
					this.items.eq(i).removeClass('selected');
				}
			}
		} else if($.trim(this.highlight_field.val()) == '' ){
			this.items.removeClass('selected');
		}
	},
	
	toggle_combinations: function(){
		var
			current_item = this.archive_table.find('th.numbers .selected'),
			that = this;
		
		this.archive_table.find('.show_combinations').click(function()
		{
			/* теперь показ/сокрытие комбинаций произходит так */
			shows_ticket_combinations = true;
			for_each(shown_tickets, function(key, value)
			{
				if (value !== true)
					return;
				
				show_ticket_combinations(key);
			});
			
			/* а этот трюк с классом CSS для показа/сокрытия комбинаций уже устарел */ 
			var me = $(this);
			
			if( current_item[0] !== me[0] ){
				current_item.removeClass('selected');
				
				me.addClass('selected');
				that.archive_table.removeClass('hide');
				that.highlight_block.removeClass('hide');

				current_item = me;
			}
		});

		this.archive_table.find('.hide_combinations').click(function()
		{
			/* теперь показ/сокрытие комбинаций произходит так */
			shows_ticket_combinations = false;
			for_each(shown_tickets, function(key, value)
			{
				if (value !== true)
					return;
				
				hide_ticket_combinations(key);
			});
	
			/* а этот трюк с классом CSS для показа/сокрытия комбинаций уже устарел */
			var me = $(this);
			
			if( current_item[0] !== me[0] ){
				current_item.removeClass('selected');
				
				me.addClass('selected');
				that.archive_table.addClass('hide');
				that.highlight_block.addClass('hide');
				
				current_item = me;
			}
		});
	},
	
	toggle_bulletins: function(){
		this.current_item = this.sorting_block.find('.selected');
		
		var
			that = this,
			show_wins_links = $('.pseudo_link.show_wins'),
			show_new_links = $('.pseudo_link.show_new');
			show_all_links = $('.pseudo_link.show_all');
		
			
		show_wins_links.click(function(e)
		{
			that.hide_all_tickets();
			
			$.each(tickets, function(index, ticket)
			{
				if (ticket.has_winning_draws)
				{
					show_ticket_info(ticket);
					
					if (ticket.has_pending_draws)
						pending_tickets_header.show();
					else
						played_tickets_header.show();
				}
			});
			
			that.toggle_action(show_wins_links);
//			that.archive_table.addClass('show_wins');
		});

		show_new_links.click(function()
		{	
			that.hide_all_tickets();
			
			pending_tickets_header.show();
			
			$.each(tickets, function(index, ticket)
			{
				if (ticket.has_pending_draws)
					show_ticket_info(ticket);
			});
			
			that.toggle_action(show_new_links);
//			that.archive_table.addClass('show_new');
		});

		show_all_links.click(function()
		{
			$.each(tickets, function(index, ticket)
			{
				show_ticket_info(ticket);
			});
			
			pending_tickets_header.show();
			played_tickets_header.show();
			
			that.toggle_action(show_all_links);
//			that.archive_table.addClass('show_all');
		});
		
		this.show_all_tickets();
	},
	
	show_all_tickets: function()
	{
		$.each(tickets, function(index, ticket)
		{
			show_ticket_info(ticket);
		});
	},
	
	hide_all_tickets: function()
	{
		$.each(tickets, function(index, ticket)
		{
			hide_ticket_info(ticket);
		});

		pending_tickets_header.hide();
		played_tickets_header.hide();
	},
		
	/** 
	 * выделить справа отмеченный режим
	 * и убрать у таблицы все классы
	 */
	toggle_action: function(links)
	{
		this.current_item.removeClass('selected');
		links.addClass('selected');
		this.archive_table.removeClass("show_wins show_new show_all");
		this.current_item = links;
	}
};

$(function()
{
	window.pending_tickets_header = $("#pending_tickets_header");
	window.played_tickets_header = $("#played_tickets_header");	
});

var create_sorted_clone = function(list_block){
	this.list_block = list_block;
	this.list = this.list_block.find('li');
	this.list_values = [];
	
	this.init();
}

create_sorted_clone.prototype = {
	init: function()
	{
		for (var i = 0; i < this.list.size(); i++)
			this.list_values[i] = parseInt(this.list.eq(i).text(), 10);
		
		this.list_values.sort(function(a,b){return a - b});
		
		this.create_new_list();
	},
	
	create_new_list: function()
	{
		var
			new_ul = document.createElement('ul'),
			new_list,
			array_item;

		for (var i = 0; i < this.list_values.length; i++)
		{
			array_item = this.list_values[i].toString();
			
			if( array_item.length < 2 )
				array_item = '0' + array_item;
			
			if(!new_list)
				new_list = '<li>' + array_item + '</li>';
			else
				new_list += '<li>' + array_item + '</li>';
		}
		
		new_ul.innerHTML = new_list;
		
		this.list_block.after($(new_ul).addClass('clone'));
	}
}
$(function(){
	new archive();
});
