var leskist = {};

var Leskist = {
	start: function() {
		Leskist.body = $(document.body);

		// Categories
		Leskist.categories();

		// Input labels
		Leskist.body.getElements("label.tiny").each(function(label) {
			new leskist.InputLabel(label);
		});

		// Tabs items
		Leskist.body.getElements(".tabs-items").each(function(element) {
			new leskist.TabbedPanel(element);
		});

		// Order form
		orderForm = $("order-form");

		if(orderForm) {
			orderForm.getElements("input.number").each(function(input) {
				input.addEvent("change", function() {
					orderForm.submit();
				});
			});
		}
	} ,

	categories: function() {
		Leskist.categories = $$("#categories .category");

		var data = JSON.decode(Cookie.read("categories")) || [];

		Leskist.categories.each(function(category, index) {
			var top = category.retrieve("top", category.getElement(".top"));
			var list = category.retrieve("list", category.getElement("ul"));

			var toggle = new Element("a", {
				"class": "toggle" ,
				"events": {
					"click": function() { Leskist.categoryToggle(category); }
				}
			}).inject(top);

			var closed = data[index];
			if(closed) {
				category.addClass("closed");

				var list = category.retrieve("list");
				if(list) {
					list.hide();
				}
			} else {
				category.removeClass("closed");
			}
		});

		Leskist.categoriesSave();
	} ,

	categoriesSave: function() {
		var data = new Array();

		Leskist.categories.each(function(category, index) {
			data[index] = category.hasClass("closed");
		});

		Cookie.write("categories", JSON.encode(data), {path: "/", days: 1});
	} ,

	categoryToggle: function(category) {
		category.toggleClass("closed");

		var list = category.retrieve("list");
		if(list) {
			list.toggle();
		}

		Leskist.categoriesSave();
	}
};

leskist.TabbedPanel = new Class({
	initialize: function(panel) {
		this.panel = $(panel);

		var activeTab = null;

		this.tabs = this.panel.getElements('.tabs a');
		this.tabs.each(function(tab) {
			var uri = tab.get("href").toURI();

			if(uri.get("fragment") == new URI().get("fragment")) {
				activeTab = tab;
			} else if(tab.hasClass("active")) {
				activeTab = tab;
			}

			var contentElement = $(uri.get("fragment"));
			if(contentElement) {
				contentElement.erase("id");

				tab.store("content", contentElement);
				tab.addEvent('click', this.activate.bind(this, tab));
			}
		}.bind(this));

		this.deactivate();

		if(activeTab) {
			this.activate(activeTab);
		}
	},

	deactivate: function() {
		this.tabs.each(function(tab) {
			tab.removeClass("active").retrieve("content").hide();
		});
	},

	activate: function(tab) {
		this.deactivate();

		tab.addClass("active").retrieve("content").show();
	}
});

leskist.InputLabel = new Class({
	Binds: ['focus', 'blur'],

	/**
	 * Initialize
	 */
	initialize: function(label) {
		this.label = $(label);
		this.field = $(label.get("for"));

		if(this.field) {
			this.wrap = new Element("span", {
				"class": "input-label" ,
				"styles": {
					display: "inline-block" ,
					position: "relative"
				}
			}).inject(this.field, "before").adopt(this.field);

			this.label.setStyles({
				cursor: "text" ,
				lineHeight: "normal" ,
				position: "absolute" ,
				left: 0 ,
				top: 0
			}).inject(this.wrap);

			this.field.addEvents({
				"focus": this.focus ,
				"blur": this.blur
			});

			this.blur();
		}
	},

	focus: function() {
		this.label.hide();
	},

	blur: function() {
		if(this.field.get("value").length > 0) {
			this.label.hide();
		} else {
			this.label.show();
		}
	}
});

window.addEvent("domready", function() {
	Leskist.start();
});