$(document).ready(function() {
	var inactiveAntetColor = '#000000',
		activeAntetColor = '#9b0005',
		containerWidth = '620px';
	
	$.fn.alternateRowColors = function() {
		$('tbody tr:odd', this).removeClass('even').addClass('odd');
		$('tbody tr:even', this).removeClass('odd').addClass('even');
		return this;
	};

	$('.sortable').each(function(i) {
		var tableId = 'sTable' + i,
			tHeight = $(this).height(),
			hNobr, sortUp, sortDown, arrDown, hAntet, defarrset = 0;
		
		$('th', this).each(function(i) {
			hNobr = document.createElement('nobr');
			
			if ($(this).hasClass('sort-alpha') || $(this).hasClass('sort-numeric')) {
				hAntet = $(document.createElement('span')).append($(this).text());
				$(hNobr).append(hAntet[0]);
				
				// up ico
				sortUp = document.createElement('img');
				if (!defarrset) {
					arrDown = '/i/arr_red_down.png';
				} else {
					arrDown = '/i/arr_black_down.png';
				}
				$(sortUp).attr('src', arrDown).attr('alt', '').addClass('down');
				$(hNobr).append(sortUp);
				
				// down ico
				sortDown = document.createElement('img');
				$(sortDown).attr('src', '/i/arr_black_up.png').attr('alt', '').addClass('up');
				$(hNobr).append(sortDown);
				
				$(this).html(hNobr);
				
				defarrset = 1;
				
				$('span, img', this).hover(function() {
					$(this).css('cursor', 'pointer');
				}, function() {
					$(this).css('cursor', 'arrow');
				});
			
			} else {
				$(hNobr).append($(this).html());
				$(this).html(hNobr);
			}
		});
		var tWidth = $(this).width();
		
		wHeight = 0;
		if (window.innerHeight) {
			wHeight = window.innerHeight;
		} else {
			wHeight = screen.Height;
		}
		
		if (tHeight > wHeight) {
			tHeight = wHeight - 90;
		}
		
		var closebutton = document.createElement('span');
		$(closebutton).html('<a href="javascript:void(0);" id="TB_closeWindowButton" title="Затваряне"><img src="/i/x.jpg" alt="Затваряне" /></a>');
		$('caption', this).prepend(closebutton);
		
		var info = '<p class="seemore"><a href="#TB_inline?t=1&height=' + tHeight + '&inlineId=' + tableId + '" onclick="javascript:showThickboxWindow(this)">Преглед на цялата таблица</a></p>';
		
		var container = document.createElement('div');
		$(container).attr('id', tableId).addClass('sTable');
		
		var outer = document.createElement('div');
		$(outer).addClass('spectable');
		
		var table = $(this).clone(true);
		$(container).append(table);
		$(outer).append(container);
		
		if (tWidth > parseInt(containerWidth)) {
			$(info).appendTo(outer);
			$(info).prependTo(outer);
		}
					
		$(this).replaceWith(outer);
	});

	$('table.sortable').each(function() {
		var $table = $(this),
			$headrows = $table.find('thead').children(),
			datarow = $('tbody tr', this)[0],
			datatd = $('td', datarow),
			sortType;
		
		$table.alternateRowColors();
		
		$($headrows[$headrows.length - 1]).find('th').each(function(column) {
			var findSortKey,
				td = datatd[column],
				checknumeric = /(^-?\d+$)|(^-?\d+\.\d+$)|(^-?(\d+,\d+)+$)/;
						
			if (checknumeric.test($(td).text().trim())) {
				$(this).removeClass('sort-alpha').addClass('sort-numeric');
			}
			

			if ($(this).is('.sort-alpha')) {
				sortType = 'sort-alpha';
				findSortKey = function($cell) {
					return $cell.find('.sort-key').text().toUpperCase() + ' ' + $cell.text().toUpperCase();
				};
		
			} else if ($(this).is('.sort-numeric')) {
				sortType = 'sort-numeric';
				findSortKey = function($cell) {
					var key = parseFloat($cell.text().replace(/,/g, '').replace(/^[^\d.,-]*/, ''));
					return isNaN(key) ? 0 : key;
				};
			
			} else if ($(this).is('.sort-date')) {
				sortType = 'sort-date';
				findSortKey = function($cell) {
					return Date.parse('1 ' + $cell.text());
				};
			}

			if (findSortKey) {
				$('span, img', this).addClass('clickable').hover(function() {
					$('span', this).addClass('hover');
	
				}, function() {
					$('span', this).removeClass('hover');
				
				}).click(function() {
					
					var newDirection = 1;
					
					if ($(this).is('img')) {
						if ($(this).hasClass('up')) {
							newDirection = -1;
						}
					
					} else {
						var th = ($(this).parents('th'))[0];
						if ($(th).is('.sorted-asc')) {
							newDirection = -1;
						}
					}

					var rows = $table.find('tbody > tr').get();

					jQuery.each(rows, function(index, row) {
						row.sortKey = findSortKey($(row).children('td').eq(column));
					});
					rows.sort(function(a, b) {
						if (a.sortKey < b.sortKey) return -newDirection;
						if (a.sortKey > b.sortKey) return newDirection;
						return 0;
					});
					jQuery.each(rows, function(index, row) {
						$table.children('tbody').append(row);
						row.sortKey = null;
					});

					$table.find('th').removeClass('sorted-asc').removeClass('sorted-desc');
					var $sortHead = $table.find('th').filter(':nth-child(' + (column + 1) + ')');
					if (newDirection == 1) {
						$sortHead.addClass('sorted-asc');
					} else {
						$sortHead.addClass('sorted-desc');
					}
					$table.find('td').removeClass('sorted').filter(':nth-child(' + (column + 1) + ')').addClass('sorted');

					$table.alternateRowColors();
				
					// icons:
					$(this).parents('tr').find('img.down').each(function() {
						$(this).attr('src', '/i/arr_black_down.png');
					});
					$(this).parents('tr').find('img.up').each(function() {
						$(this).attr('src', '/i/arr_black_up.png');
					});
					
					if ($(this).parents('th').hasClass('sorted-asc')) {
						$(this).parents('th').find('img.down').attr('src', '/i/arr_red_down.png');
						$(this).parents('th').find('img.up').attr('src', '/i/arr_black_up.png');
					
					} else if ($(this).parents('th').hasClass('sorted-desc')) {
						$(this).parents('th').find('img.down').attr('src', '/i/arr_black_down.png');
						$(this).parents('th').find('img.up').attr('src', '/i/arr_red_up.png');
					}
				});
			}
		});
		
		// antets:
		$(this).parents('tr').find('span').css('color', inactiveAntetColor);
		$(this).parents('th').find('span').css('color', activeAntetColor);
	});
	
	$('table.striped').each(function() {
		$(this).bind('stripe', function() {
			var rowIndex = 0;
			$('tbody tr:not(.filtered)', this).each(function(index) {
				if ($('th',this).length) {
					$(this).addClass('subhead');
					rowIndex = -1;
				} else {
					if (rowIndex % 6 < 3) {
						$(this).removeClass('odd').addClass('even');
					
					} else {
						$(this).removeClass('even').addClass('odd');
					}
				};
				rowIndex++;
			});
		});
		$(this).trigger('stripe');
	});
});

function showThickboxWindow(link) {
	var container = $(link).parents('.spectable'),
		table = $('table.sortable', container),
		tableWidth = $(table).width(),
		t = link.title || link.name || null,
		g = link.rel || false, a;
	
	if (tableWidth > $(document).width()) {
		a = link.href + '&width=' + $(document).width();
	} else {
		a = link.href + '&width=' + tableWidth;
	}
		
	tb_show(t,a,g);
	link.blur();
	return false;
}
