var CAccordion = Class.create();
CAccordion.prototype = {

	initialize: function(options) {
		this.options = Object.extend({
			container: 'container',
			closeOnLoad: true,
			classNames: {
				toggleOpened: 'accordion_toggle_opened',
				toggleClosed: 'accordion_toggle_closed',
				closedOnLoad: 'accordion_closed_on_load'
			},
			useCookie: true,
			onEvent: 'click'
		}, options || {});
	},

	init: function() {
		Event.observe(window, 'load', function() {

			this.options.container = $(this.options.container);

			if (!this.options.container) {
				throw(this.cnt + " doesn't exist!");
				return false;
			}

			if (this.options.closeOnLoad)
			{
				this.options.container.select('.' + this.options.classNames.closedOnLoad + ' span').each(function(selected){
					this.run(selected);
				}.bind(this));
			}

			this.options.container.select('.' + this.options.classNames.toggleOpened + ' span').each(function(selected){
				Event.observe(selected, this.options.onEvent, this.run.bind(this, selected));
			}.bind(this));
			this.options.container.select('.' + this.options.classNames.toggleClosed + ' span').each(function(selected){
				Event.observe(selected, this.options.onEvent, this.run.bind(this, selected));
			}.bind(this));

			if (this.options.useCookie)
			{
				this.options.container.select('.' + this.options.classNames.toggleOpened + ' span').each(function(selected){
					this.runByCookie(selected);
				}.bind(this));
				this.options.container.select('.' + this.options.classNames.toggleClosed + ' span').each(function(selected){
					this.runByCookie(selected);
				}.bind(this));
			}

		}.bind(this));
	},

	run: function(selected) {
		if (this.options.classNames.toggleClosed == selected.up(0).className)
		{
			selected.up(0).removeClassName(this.options.classNames.toggleClosed);
			selected.up(0).addClassName(this.options.classNames.toggleOpened);
			selected.up(0).next(0).setStyle({
				display: 'block'
			});
			this.setAccCookie(selected.up(0).id, 1); //opened
		}
		else
		{
			selected.up(0).removeClassName(this.options.classNames.toggleOpened);
			selected.up(0).addClassName(this.options.classNames.toggleClosed);
			selected.up(0).next(0).setStyle({
				display:'none'
			});
			this.setAccCookie(selected.up(0).id, 2); //closed
		}
	},

	runByCookie: function(selected) {
		cookieValue = this.getAccCookie(selected.up(0).id);
		if (2 == cookieValue)
		{
			selected.up(0).removeClassName(this.options.classNames.toggleOpened);
			selected.up(0).addClassName(this.options.classNames.toggleClosed);
			selected.up(0).next(0).setStyle({
				display:'none'
			});
		}
		if (1 == cookieValue)
		{
			selected.up(0).removeClassName(this.options.classNames.toggleClosed);
			selected.up(0).addClassName(this.options.classNames.toggleOpened);
			selected.up(0).next(0).setStyle({
				display: 'block'
			});
		}
	},

	setAccCookie: function(item, value) {
		var date = new Date();
		date.setTime(date.getTime() + (24*60*60*14));
		var expires = "; expires=" + date.toGMTString();
		document.cookie = item + "=" + value + expires + "; path=/";
	},

	getAccCookie: function(name) {
		var start = document.cookie.indexOf(name + '=');
		var len = start + name.length + 1;
		if ((!start) && (name != document.cookie.substring(0, name.length)))
		{
			return null;
		}
		if (start == -1) return null;
		var end = document.cookie.indexOf(';', len);
		if (end == -1) end = document.cookie.length;
		return unescape(document.cookie.substring(len, end));
	}
}

