var results_hidden_elems_cookie_name = 'hidden_elems';

$(document).ready(function(){

	$('.hide-all-results-btn').live('click', toggleResultsVisibility);
	$('.table-hide-btn').live('click', toggleVisibility);
	$('.live-date').live('click', function(event){
		if (event.button == 0) {
			loadMatches($(this).attr("date"));
			return false;
		} 
	});

	if ($("#live-calendar").length != 0) {
		$.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['ru']));
		datePickerInit();
	}
});

function showLoadProcess(show) {

	var loadBarId = "datepicker-loading";
	var loadBar = $("#"+loadBarId);

	if (loadBar.length == 0) {
		loadBar = $('<div id="'+loadBarId+'"></div>');
		$(".ui-datepicker-title").append(loadBar);
	}

	if (show) {
		loadBar.css('display', 'block');
	} else {
		loadBar.css('display', 'none');
	}
}

function scrollMonth(direction){

	var increment;
	var month;
	var year;
	var cur_month = cur_date.getMonth();

	if (direction == 'next') {
		increment = 1;
	} else if (direction == 'prev') {
		increment = -1;
	}

	month = cur_date.getMonth() + increment;
	year = cur_date.getFullYear();

	if(cur_month == 11 && direction == 'next') {
		month = 0;
		year ++;
	} else if (cur_month == 0 && direction == 'prev') {
		month = 11;
		year --;
	}

	js_month = month-1;
	if (activeDatesList[year] == undefined) {
		addYear(year);
	}

	cur_date.setMonth(month, 1);
	cur_date.setFullYear(year);
	newDate = new Date(year, month, 1);

	if (activeDatesList[year][month].length == 0) {
		showLoadProcess(true);

		$.getJSON("/football_matches_results/?get_dates="+(month+1)+'.'+year, function(dates_obj){
		
			if (dates_obj[year] != undefined) {
				activeDatesList[year][month] = dates_obj[year][month];
				$("#live-calendar").datepicker("setDate", newDate);
			}
			
			showLoadProcess(false);
			replaceMonthScrollers();
		})

	} else {
		$("#live-calendar").datepicker("setDate", newDate);
		replaceMonthScrollers();
	}
}

function showDatepicker() {
	$("#live-calendar").datepicker("show");
}

function datePickerInit() {
	$("#live-calendar").datepicker({
		firstDay: 1,
	    onSelect: function(dateText, inst) {
	    	loadMatches(dateText);
		},
		defaultDate: cur_date,
		showOn: 'button',
		beforeShow: function(){
			window.setTimeout(replaceMonthScrollers, 300);
		},
		buttonImage: '/calendar/img/cal.gif',
		buttonImageOnly: true,
		beforeShowDay: function (date) {
			var my_date = new Date(date);
			var currDateTimestamp = Math.floor(Date.parse(date) / 1000);
			var year = my_date.getFullYear();
			var month = my_date.getMonth();
			var enabled = true;

			if (activeDatesList[year] == undefined) {
				addYear(year);
			}
		
			if($.inArray(currDateTimestamp, activeDatesList[year][month]) == -1){
				enabled = false;
			}
			return new Array(enabled, '', '');
		}
	});
}


function replaceMonthScrollers() {
	
	if ($('#ui-datepicker-div').length) {
		var newPrevScroll = $('<a class="ui-datepicker-prev ui-corner-all"><span class="ui-icon ui-icon-circle-triangle-w">&lt;Οπεδ</span></a>');
		var newNextScroll = $('<a class="ui-datepicker-next ui-corner-all"><span class="ui-icon ui-icon-circle-triangle-e">&gt;Ρλεδ</span></a>');
		
		newPrevScroll.mouseover(function(event){
			newPrevScroll.addClass("ui-state-hover");
			newPrevScroll.addClass("ui-datepicker-prev-hover");
		});
		newPrevScroll.mouseout(function(event){
			newPrevScroll.removeClass("ui-state-hover");
			newPrevScroll.removeClass("ui-datepicker-prev-hover");
		});
		newPrevScroll.click(function(event){
			scrollMonth('prev');
		});

		newNextScroll.mouseover(function(event){
			newNextScroll.addClass("ui-state-hover");
			newNextScroll.addClass("ui-datepicker-next-hover");
		});
		newNextScroll.mouseout(function(event){
			newNextScroll.removeClass("ui-state-hover");
			newNextScroll.removeClass("ui-datepicker-next-hover");
		});
		newNextScroll.click(function(event){
			scrollMonth('next');
		});

		$(".ui-datepicker-prev").replaceWith(newPrevScroll);
		$(".ui-datepicker-next").replaceWith(newNextScroll);
	} else {
		window.setTimeout(replaceMonthScrollers, 300);
	}
}

function loadMatches(dateText) {
	$.ajax({
		type: "GET",
		url: '/football_matches_results/',
		data: "matches_date=" + dateText,
		success: function(html){
			$("#live-matches-block").empty();
			$("#live-matches-block").append(html);
			datePickerInit();
		}
	})
}

// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    }
};

function toggleResultsVisibility(event) {

	var tables_block_id = "matches-list-block";
	var tables_block_elem = $("#" + tables_block_id);
	var display = tables_block_elem.css('display');
	var hidden_elems_obj = $.parseJSON($.readCookie(results_hidden_elems_cookie_name));

	if (display == 'none') { 
		tables_block_elem.show();
		$(this).removeClass('table-show-btn'); 
		delete hidden_elems_obj[tables_block_id];
	} else {
		tables_block_elem.hide();
		$(this).addClass('table-show-btn');
		hidden_elems_obj[tables_block_id] = true;
	}

	cookie_val = JSON.stringify(hidden_elems_obj);
	saveHiddenElemsState(cookie_val);
}

function toggleVisibility(event){

	var rows_to_hide = $(this).parents("table").find("tbody");
	var display = rows_to_hide.css('display');
	var hidden_elems_obj = $.parseJSON($.readCookie(results_hidden_elems_cookie_name));
	var results_table_id = $(this).parents("table").attr("id");

	if ( hidden_elems_obj == null) {
		hidden_elems_obj = new Object();
	}

	if (display == 'none') { 
		rows_to_hide.show();
		$(this).removeClass('table-show-btn'); 
		delete hidden_elems_obj[results_table_id];
	} else {
		rows_to_hide.hide();
		$(this).addClass('table-show-btn');
		hidden_elems_obj[results_table_id] = true;
	}

	cookie_val = JSON.stringify(hidden_elems_obj);
	saveHiddenElemsState(cookie_val);
}

function saveHiddenElemsState(cookie_str) {
	$.setCookie(
		results_hidden_elems_cookie_name, cookie_str, {
			duration: 100,
			path: '',
			domain: '.' + BASE_SITE_DOMAIN,
			secure: false
		}
	);	
}

function addYear(year){
	activeDatesList[year] = new Array();
	for ( var i = 0; i < 12; i ++){
		activeDatesList[year][i] = new Array();
	}
}
