jQuery.cookie = function(name, value, options) {
	if (typeof value != 'undefined') { // name and value given, set cookie
		options = options || {};
		if (value === null) {
			value = '';
			options.expires = -1;
		}
		var expires = '';
		if (options.expires
				&& (typeof options.expires == 'number' || options.expires.toUTCString)) {
			var date;
			if (typeof options.expires == 'number') {
				date = new Date();
				date.setTime(date.getTime()
						+ (options.expires * 24 * 60 * 60 * 1000));
			} else {
				date = options.expires;
			}
			expires = '; expires=' + date.toUTCString();
			// use expires
			// attribute,
			// max-age is not
			// supported by IE
		}
		// CAUTION: Needed to parenthesize options.path and options.domain
		// in the following expressions, otherwise they evaluate to undefined
		// in the packed version for some reason...
		var path = options.path ? '; path=' + (options.path) : '';
		var domain = options.domain ? '; domain=' + (options.domain) : '';
		var secure = options.secure ? '; secure' : '';
		document.cookie = [ name, '=', encodeURIComponent(value), expires,
				path, domain, secure ].join('');
	} else { // only name given, get cookie
		var cookieValue = null;
		if (document.cookie && document.cookie != '') {
			var cookies = document.cookie.split(';');
			for ( var i = 0; i < cookies.length; i++) {
				var cookie = jQuery.trim(cookies[i]);
				// Does this cookie string begin with the name we want?
				if (cookie.substring(0, name.length + 1) == (name + '=')) {
					cookieValue = decodeURIComponent(cookie
							.substring(name.length + 1));
					break;
				}
			}
		}
		return cookieValue;
	}
};

jQuery.fn.initMenu = function() {
	var cookieOptions = {expires: 7, path: '/'};
	return this.each(function() {
		var theMenu = $(this).get(0);
		$('.sub-menu', this).hide();
		$('li.expand > .sub-menu', this).show();
		$('li.expand > .sub-menu', this).prev().addClass('active');

		// otwieram ostatnio rozwinięte menu
		$('.sub-menu').each(function(i) {
			if ($.cookie($(this).parent().attr('id')) != null) {
				$(this).show();
				$(this).addClass('active');
			}
		});

		$('li a', this).click(function(e) {
			e.stopImmediatePropagation();
			var theElement = $(this).next();
			var parent = this.parentNode.parentNode;
			if ($(parent).hasClass('noaccordion')) {
				if (theElement[0] === undefined) {
					window.location.href = this.href;
				}
				$(theElement).slideToggle('normal', function() {
					if ($(this).is(':visible')) {
						$(this).prev().addClass('active');
						// otwiera menu i zapisuję to co otwieram
						$.cookie($(this).parent().attr('id'), $(this).parent().attr('id'), cookieOptions);
					} else {
						$(this).prev().removeClass('active');
						// zamyka menu i kasuję cookie
						$.cookie($(this).parent().attr('id'), null, cookieOptions);
					}
				});
				return false;
			}
		});
	});
};

$(document).ready(function() {
	$('.menu').initMenu();
	// dodaję klasę selected dla aktywnych elementów menu
	$(function(){
		var path = location.pathname.substring(1);
		if (path) {
			$('.menu a[href$="' + path + '"]').attr('class', 'selected');
		}
	});
});
