var Site = {
	init: function() {
		Pushar.init();
		Tabs.init();
		Cover.init();
		Articles.init();
		Quizes.init();
		
		$$("div#main ol").each(function(el){
			new OrderedList(el);
		});
		
		$$("div#main ul").each(function(el){
			new UnorderedList(el);
		});
		
		$$("div.picture").each(function(el){
			if(el.getElement("img")){ el.style.width = el.getElement("img").getSize().x + "px"; }
		});
	}
};

var Pushar = {
	init: function(){
		var divs = $$("div.push");
		divs.each(function(el){
			if(el.getElement("a")) var puzh = new Push(el, "link");
		});
	}
}

var Tabs = {
	init: function(){
		var tabs = $$("div.tabs");
		tabs.each(function(el){
			new TabControl(el);
		});
	}
}

var Cover = {
	init: function(){
		var covers = $$("div.album-cover");
		covers.each(function(cover){
			new ToggleControl(cover);
		});
	}
}

var Articles = {
	init: function(){
		var articles = $$("div.articles");
		articles.each(function(article){
			new ToggleControl(article);
		});
	}
}

var Quizes = {
	init: function(){
		var quizes = $$("ol.quiz");
		quizes.each(function(el){
			var quiz = new Quiz(el);
		});
	}
}

var Push = new Class({
	initialize: function(el, cssClass){
		this.el = el;
		this.cords = this.el.getPosition();
		this.link = this.el.getElement("a");
		this.obj = this.el.getElement("object");
		this.el.addClass("link");
		this.el.addEvents({
			"click": this.click.bind(this),
			"mouseenter": this.over.bind(this),
			"mouseleave": this.out.bind(this)
		});
	},
	click: function(e){
		window.location = this.link;
	},
	over: function(e){
		this.el.addClass("over");
	},
	out: function(e){
		this.el.removeClass("over");
	}
});

var TabControl = new Class({
	initialize: function(el){
		this.active = el.getElement("ul.active");
		this.activeTab = el.getElement("li.sel");
		this.tabs = el.getElements("ul.tabs-menu li a span");
		this.tabs.each(function(tab){
			tab.addEvent("click", this.tabClick.bind(this));
		}.bind(this));
		
		this.lists = el.getElements("ul.articles li");
		this.lists.each(function(el){
			el.addEvents({
				"click": this.click,
				"mouseenter": this.over,
				"mouseleave": this.out
			});
		}.bind(this));
	},
	over: function(e){
		this.addClass("over");
	},
	out: function(e){
		this.removeClass("over");
	},
	click: function(e){
		window.location = this.getElement("a");
	},
	tabClick: function(e){
		e = new Event(e).stop();
		var link = $(e.target).getParent();
		this.active.removeClass("active");
		this.active = $(link.getProperty("href").replace("#",""));
		this.active.addClass("active");
		this.activeTab.removeClass("sel");
		this.activeTab = link.getParent();
		this.activeTab.addClass("sel");
	}
});

var ToggleControl = new Class({
	initialize: function(el){
		this.active = el.getElement("div.active");
		this.activeControl = el.getElement("li.sel");
		this.controls = el.getElements("ul.sort li a");
		this.controls.each(function(link){		
			link.addEvent("click", this.click.bind(this));
		}.bind(this));
	},
	click: function(e){
		var e = new Event(e).stop();
		var link = $(e.target);
		this.active.removeClass("active");
		this.active = $(link.getProperty("href").replace("#",""));
		this.active.addClass("active");	
		this.activeControl.removeClass("sel");
		this.activeControl = link.getParent();
		this.activeControl.addClass("sel");
	}
});

var Quiz = new Class({
	initialize: function(el){
		this.radios = el.getElements("input[type=radio]");
		this.radios.each(function(radio){
			if(radio.checked) this.select(radio);
			radio.addEvent("click", this.click.bind(this));
		}.bind(this));
	},
	click: function(e){
		this.select($(e.target))
	},
	select: function(el){
		var sel = el.getParent().getParent().getParent().getElement(".sel");
		if(sel) sel.removeClass("sel");
		var list = el.getParent().getParent();
		list.addClass("sel");
	}
});

var OrderedList = new Class({
	initialize: function(el){
		if(!el.className){
			el.addClass("colored");
			el.getElements("li").each(function(li){
				var span = new Element("span");
				span.set("html", li.get("html"));
				li.empty();
				span.inject(li);
			});
		}
	}
});

var UnorderedList = new Class({
	initialize: function(el){
		if( !el.className && (el.getParent() && (!el.getParent().get("class").contains("tags")) && (el.getParent().get("tag") == "div")) ){
			el.addClass("styled");
			el.getElements("li").each(function(li){
				var span = new Element("span");
				span.set("html", li.get("html"));
				li.empty();
				span.inject(li);
			});
		}
	}
});

window.addEvent("load", Site.init);