$(document).ready(function(){
	// привязать к заголовкам таблички обработчики нажатия
	loadCardTypes();
	showCardTypes();
	setHandlers();
	initCategoryFilter();
	initCardFilter();
	killFilter();
});

function killFilter () {
	var tableMetadata = $("table.offers-list").metadata();
	var isAll = tableMetadata.itsall == 'yes' ? true : false;
	if (!isAll) {
		$(".b-filter-inner hr, #category-filter").hide();
	}
}
function setHandlers () {
	$("table.offers-list tr th[colspan!=2]").click(function(){sortByColumn(this);});
	$("table.offers-list tr th[colspan=2] span.sort-by-name").click(function(){sortByColumn(this);});
	$("table.offers-list tr th[colspan=2] span.sort-by-date").click(function(){sortByColumn(this);});
	//$(".card-type-chooser .card-type-line input").click(function(){cardTypesClick();});
}
function loadCardTypes () {
	var cardTypes = getCookies("card_type_selected");
	if (cardTypes.length > 0) {
		var values = cardTypes.split(",");
		$.each($(".card-type-chooser .card-type-line input"), function(){
			var checkbox = $(this);
			if ($.inArray(prepareCardType(checkbox.val()), values) != -1) {
				checkbox.attr("checked", "checked");
			} else {
				checkbox.attr("checked", "");
			}
		});
	}
}
function saveCardTypes () {
	var values = [];
	$.each($(".card-type-chooser .card-type-line input"), function(){
		var checkbox = $(this);
		if (checkbox.attr("checked")) {
			values.push(prepareCardType(checkbox.val()));
		}
	});
	if (values.length > 0) {
		setCookies("card_type_selected", values.join(","), 30);
	} else {
		setCookies("card_type_selected", "", -1);
	}
}
function prepareCardType (cardType) {
	var r = /([a-zA-Z]{1})/; 
	var res = "";
	for (var i = 0; i < cardType.length; i++) {
		if (r.test(cardType.charAt(i))) {
			res += cardType.charAt(i);
		}
	}
	return res;
}
function cardTypesClick () {
	saveCardTypes();
	showCardTypes();
}
function showCardTypes () {
	var values = [];
	var i = 0;
	var is = [];
	$.each($(".card-type-chooser .card-type-line input"), function(){
		var checkbox = $(this);
		if (checkbox.attr("checked")) {
			values.push(i);
		}
		is.push(i);
		i++;
	});
	var colCount = values.length;
	if (colCount == 0) {
		colCount = is.length;
		values = is;
	}
	var j = 0;
	$.each($("table.offers-list tr"), function(){
		var row = $(this);
		if (row.find("td").attr("colspan") > 2) {
			row.find("td").attr("colspan", 3 + colCount);
		} else {
			if (row.find("th[colspan=2]").length > 0) {
				var i = 0;
				$.each(row.find("th[colspan!=2]"), function(){
					if ($.inArray(i, values) != -1) {
						$(this).show();
					} else {
						$(this).hide();
					}
					i++;
				});
			} else {
				var i = 0;
				$.each(row.find("td"), function(){
					if ($.inArray(i - 2, values) != -1 || i < 2) {
						$(this).show();
					} else {
						$(this).hide();
					}
					i++;
				});
			}
		}
	});
}
function setCookies (name, value, expdays) {
	var expDate = new Date();
	expDate.setDate(expDate.getDate() + expdays);
	document.cookie = name + "=" + escape(value) + ";path=/" +
		(typeof expdays != "undefined" && expdays != null ? ";expires=" + expDate.toGMTString() : "");
}
function getCookies (name) {
	var reg = new RegExp(name + "\=([^\;]+);");
	var cookies = document.cookie;
	var result = reg.exec(cookies);
	if (result != null) {
		return unescape(result);
	} else {
		return false;
	}
}
function sortByColumn (column) {
	var jColumn = $(column);
	var columnMetadata = jColumn.metadata();
	var sortOrder = jColumn.hasClass("sortUp") ? 'down' : 'up';
	
	var tableMetadata = $("table.offers-list").metadata();
	var isAll = tableMetadata.itsall == 'yes' ? true : false;
	
	// получить массив 
	var tables = [];
	if (!isAll) {
		// только одна группа и не нужно долго вытягивать
		var table = {tit:'', table:[], sp_name:''};
		
		$.each($("table.offers-list tr"), function(){
			var tr = $(this);
			if (!tr.find("th").length) { // не заголовок
				var rows_empt = {image: '', tit:'', pos:0, cell:[]}; // заготовка строки
				var row = rows_empt;
				var cols = tr.find("td");
				row.image = $(cols[0]).html();
				row.tit = $(cols[1]).html();
				var rowMetadata = $(cols[1]).metadata();
				row.pos = rowMetadata.pos;
				for (var i = 2; i < cols.length; i++) {
					var cell = $(cols[i]);
					var cellMetadata = cell.metadata();
					row.cell.push({html:cell.html(), val:typeof cellMetadata.val != 'undefined' ? cellMetadata.val : 0});
				}
				table.table.push(row);
				table.sp_name = tr.get(0).className;
			}
		});
		tables.push(table);
	} else {
		// тут все группы, вытянем в цикле
		var table = {tit:'', table:[], sp_name:''};
		
		$.each($("table.offers-list tr"), function(){
			var tr = $(this);
			if (!tr.find("th").length && !tr.find("td h2").length) { // не заголовок
				var rows_empt = {image: '', tit:'', pos:0, cell:[]}; // заготовка строки
				var row = rows_empt;
				var cols = tr.find("td");
				row.image = $(cols[0]).html();
				row.tit = $(cols[1]).html();
				var rowMetadata = $(cols[1]).metadata();
				row.pos = rowMetadata.pos;
				for (var i = 2; i < cols.length; i++) {
					var cell = $(cols[i]);
					var cellMetadata = cell.metadata();
					row.cell.push({html:cell.html(), val:typeof cellMetadata.val != 'undefined' ? cellMetadata.val : 0});
				}
				table.table.push(row);
				table.sp_name = tr.get(0).className;
			} else
			if (tr.find("td h2").length) {
				if (table.table.length) {
					tables.push(table);
				}
				table = {tit:tr.find("td h2").html(), table:[]};
			}
		});
		tables.push(table);
		
	}
	
	// отсортировать внутри
	var sortCol = function (a, b) {
		var column = typeof columnMetadata.pos != "undefined" ? columnMetadata.pos - 1 : -1;
		var sortBy = typeof columnMetadata.sortBy != "undefined" ? columnMetadata.sortBy : -1;
		ret = 0;
		if (sortBy == "name") {
			if (a.tit < b.tit) 
				ret = -1;
			if (a.tit > b.tit)
				ret = 1;
		} else {
			if (sortBy == "date") {
				if (a.pos < b.pos) 
					ret = -1;
				if (a.pos > b.pos)
					ret = 1;
			} else {
				if (a.cell[column].val < b.cell[column].val)
					ret = -1;
				if (a.cell[column].val > b.cell[column].val)
					ret = 1;
			}
		}
		return sortOrder == 'up' ? ret : -1 * ret;
	};

	var html = "";
	// перерисовать таблицу
	var header = '<tr class="%class%">' + $("table.offers-list tr th[colspan=2]").get(0).parentNode.innerHTML + "</tr>";
	var title = isAll ? $("<tr>" + $("table.offers-list tr td h2").get(0).parentNode.parentNode.innerHTML + "</tr>") : '';
	for (var i = 0; i < tables.length; i++) {
		tables[i].table.sort(sortCol);
		html += (isAll ? '<tr class="' + tables[i].sp_name + '">' + title.find("h2").html(tables[i].tit).get(0).parentNode.parentNode.innerHTML + "</tr>" : '') + header.replace(/%class%/, tables[i].sp_name);
		for (var j = 0; j < tables[i].table.length; j++) {
			html += '<tr class="' + tables[i].sp_name + '">' + '<td class="first txtCenter">' + tables[i].table[j].image + '</td><td class="{pos:'+tables[i].table[j].pos+'}">' + tables[i].table[j].tit + '</td>';
			for (var k = 0; k < tables[i].table[j].cell.length; k++) {
				html += '<td class="{val:' + tables[i].table[j].cell[k].val + '}">' + tables[i].table[j].cell[k].html + '</td>';
			}
			html += '</tr>';
		}
	}
	$("table.offers-list").html("<tbody>"+html+"</tbody>");
	
	// восстановить обработчикики кликов
	setHandlers();
	
	// сделать стили сортировки
	var img = sortOrder == 'down' ? 'sort-down-arr.gif' : 'sort-up-arr.gif';
	var sClass = sortOrder == 'up' ? "sortUp" : "sortDown";
	var imgSrc = ' <img src="/f/1/retail/cards/special_offers/category.html/'+img+'" alt=""/>';
	$.each($("table.offers-list tr th:first"), function(){
		//$("table.offers-list tr th").find("img").remove();
		var row = $(this.parentNode);
		row.find("th, th span").removeClass("sortUp sortDown").find("img").remove();
		if (typeof columnMetadata.sortBy != "undefined") {
			if (columnMetadata.sortBy == "name") {
				//console.log(row.get(0));
				row.find("th[colspan=2] span.sort-by-name").addClass(sClass).append(imgSrc);
			} else {
				$(this.parentNode).find("th span.sort-by-date").removeClass("sortUp sortDown").addClass(sortOrder == 'up' ? "sortUp" : "sortDown").append(' <img src="/f/1/retail/cards/special_offers/category.html/'+img+'" alt=""/>');
			}
		} else {
			$(row.find("th[colspan!=2]").get(columnMetadata.pos - 1)).addClass(sClass).append(imgSrc);
			//$($(this.parentNode).find("th[colspan!=2]").removeClass("sortUp sortDown").get(columnMetadata.pos - 1)).addClass(sortOrder == 'up' ? "sortUp" : "sortDown").append(' <img src="/f/1/retail/cards/special_offers/category.html/'+img+'" alt=""/>');
		}
	});
	showCardTypes();
	toggleCardGroups();
}

function initCategoryFilter () {
	initCardGroups();
	$('#category-filter label').click(function() {
		if($.browser.msie){
			if($(this).prev().attr('checked') == ''){
				$(this).prev().attr('checked', 'checked');
			}else{
				$(this).prev().attr('checked', '');
			}
		}
		
		if($(this).prev().attr('id') == 'chb-groupsall'){
			$('#category-filter input').attr('checked', '');
		}
		toggleCategoryFilters();
	});
	
	$('#category-filter input').click(function() {
		if($(this).attr('id') == 'chb-groupssall'){
			$('#category-filter input').attr('checked', '');
		}
		toggleCategoryFilters();
	});
	
	toggleCategoryFilters();
}
function toggleCategoryFilters () {
	var bShowHeaders = true;
	
	if($('#category-filter input:checked').length - $('#chb-groupsall:checked').length > 0){
		bShowHeaders = false;
	}
	
	if(bShowHeaders)
		$('#chb-groupsall').attr('checked', 'checked');
	else
		$('#chb-groupsall').attr('checked', '');
	
	$('#category-filter input').each(function(index) {
		if($(this).is(':checked'))
			$(this).parent().addClass('selected');
		else
			$(this).parent().removeClass('selected');
	});
	toggleCardGroups();
}
function initCardFilter () {
	$('#card-filter label').click(function() {
		//console.log($(this).prev().attr('checked'));
		if($.browser.msie){
			if($(this).prev().attr('checked') == ''){
				$(this).prev().attr('checked', 'checked');
			}else{
				$(this).prev().attr('checked', '');
			}
		} else {
			if(!$(this).prev().attr('checked')){
				$(this).prev().attr('checked', 'checked');
			}else{
				$(this).prev().attr('checked', '');
			}
		}
		
		if($(this).prev().attr('id') == 'ct-chkall'){
			$('#card-filter input').attr('checked', '');
		}
		//console.log($(this).prev().attr('checked'));
		toggleCardFilters();
	});
	
	$('#card-filter input').click(function() {
		if($(this).attr('id') == 'ct-chkall'){
			$('#card-filter input').attr('checked', '');
		}
		toggleCardFilters();
	});
	
	toggleCardFilters();
}
function toggleCardFilters () {
	var bShowHeaders = true;
	if($('#card-filter input:checked').length - $('#ct-chkall:checked').length > 0){
		bShowHeaders = false;
	}
	
	if(bShowHeaders)
		$('#ct-chkall').attr('checked', 'checked');
	else
		$('#ct-chkall').attr('checked', '');
	
	$('#card-filter input').each(function(index) {
		if($(this).is(':checked'))
			$(this).parent().addClass('selected');
		else
			$(this).parent().removeClass('selected');
	});
	cardTypesClick();
}
function initCardGroups () {
	var groups = [];
	$("table.offers-list td h2").each(function(){
		var className = this.parentNode.parentNode.className;
		var offersCnt = $("table.offers-list tr."+className).length - 2;
		groups.push({name:this.innerHTML, code:className, amount:offersCnt});
	});
	var groupsCnt = groups.length;
	if (groupsCnt > 0) {
		var middle = Math.floor(groupsCnt / 2);
		var html = '<table><tr><td>';
		for (var i = 0; i < groupsCnt; i++) {
			html += '<div class="b-filteritem"><input type="checkbox" name="chg-group-'+i+'" id="chb-group-'+i+'" value="'+groups[i].code+'"/>' +
				'<label for="chb-group-'+i+'"><span class="link">'+groups[i].name+'</span><span class="amount">('+groups[i].amount+')</span></label></div>';
			if (groupsCnt > 4 && i == middle) {
				html += '</td><td>';
			}
		}
		html += '</td></tr></table>';
		$("#category-filter").append(html);
	}
}
function toggleCardGroups () {
	if ($('#chb-groupsall').attr('checked')) {
		$("table.offers-list tr").show();
	} else {
		$("table.offers-list tr").hide();
		$("#category-filter input:checked").each(function(){
			var code = $(this).attr("value");
			$("table.offers-list ."+code).show();
		});
	}
}
