function handleActions() {
	var rli = as.$$("div.actions li.enter");
	as.append("<span><b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></span>",rli);	
	as.$$("div.actions input").onfocus = function() {this.value = this.value == this.defaultValue ? "" : this.value;}
	as.$$("div.actions input").onblur = function() {this.value = this.value == "" ? this.defaultValue : this.value;}
	as.append("<span><b class='l'></b><b class='r'></b></span>",as.$$("div.header a.kids"));
	
	var userText = as.$$("div.user-search form input.text");
	if (!userText) return;
	userText.onfocus = function() {this.value = this.value == this.defaultValue ? "" : this.value;}
	userText.onblur = function() {this.value = this.value == "" ? this.defaultValue : this.value;}
	
}
function handleColumns() {
	/*as.map(as.$(".as-columns"),function(cc){
		var cn = Number(cc.className.match(/as-columns-\d+/)[0].replace(/as-columns-/,"")),
			cc2 = cc.cloneNode(true),
			itemsList = as.filter(cc2.childNodes,function(node){return node.nodeType == 1;}),
			addable = Math.ceil(itemsList.length/cn);
		cc.innerHTML = "";
		for (var i=0,l=Math.ceil(itemsList.length/cn);i<l;i++) {
			for (var j=0;j<cn;j++) {
				var iitem;
				itemsList[i+addable*j] && (iitem = as.append(itemsList[i+addable*j],cc));
				iitem && j == 0 && (iitem.className += " new-line");
			}
		}
	})*/	
}
function handleCorners() {
	function handle(element) {
		if (!element) return;
		as.append("<span><b class='c tl'></b><b class='c tr'></b><b class='c br'></b><b class='c bl'></b></span>",element);
	}
	handle(as.$$("div.cinema-club"));
}
function roundSpec() {
	as.map(as.$("li span.comments"),function(comment) {
		comment.innerHTML = "<i>"+comment.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		comment.className += " rounded-comments";
	});
	as.map(as.$("ul.iamacritic-track li span.rating"),function(comment) {
		comment.innerHTML = "<i>"+comment.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		comment.className += " rounded-rating";
	});
	as.map(as.$("div.myReview ul li span.rating-review"),function(comment) {
		comment.innerHTML = "<i>"+comment.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		comment.className += " rounded-rating";
	});
	as.map(as.$("span.rating-all-pages"),function(comment) {
		comment.innerHTML = "<i>"+comment.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		comment.className += " rounded-rating";
	});
	as.map(as.$("div.iamacritic h3 strong"),function(strong) {
		strong.innerHTML = "<i>"+strong.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		strong.className += " rounded";
	});	
	as.map(as.$("table.forum-preview td.rating span"),function(span) {
		span.innerHTML = "<i>"+span.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		span.className += " rounded";
	});
	as.map(as.$("table.cinema-rating-preview td.rating span"),function(span) {
		span.innerHTML = "<i>"+span.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i>";
	});
	as.map(as.$("div.paginator ul li.active"),function(li) {
		li.innerHTML += "<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i>";
	});
	as.map(as.$("table.blogs-archive td.comments span"),function(span) {
		span.innerHTML = "<i>"+span.innerHTML+"<b class='tl'></b><b class='tr'></b><b class='br'></b><b class='bl'></b></i><b class='bottom'></b>";
		span.className += " rounded";
	});
}


function MessageBox() {};
MessageBox.prototype = {
	init: function(params) {
		this.boxShown = false;
		this.relative = params.relative;
		this.box = this.create();
		this.htmlContainer = as.$$("div.as-message-box",this.box);
		this.update(params.html);
		this.modal || this.makeClosable();
		this.addEvents();
		params.show && this.show();
		params.customize && this.customize();
	},
	addEvents: function() {
		this.closer && (this.closer.onclick = as.bind(this.hide,this));
		this.closer && (document.onclick = as.bind(function(e) {
			if (!this.boxShown) return;
			e = e || window.event;
			var target = e.target || e.srcElement;
			if (!as.parent(target,"div.as-message-box-wrapper") && target != this.relative && this.boxShown) {
				this.hide();
			}
		},this));
	},
	makeClosable: function() {
		this.closer = as.append("<span class='close'>Закрыть</span>",this.box);
	},
	update: function(html) {
		this.htmlContainer.innerHTML = html;
		this.reposition();
	},
	reposition: function() {
		if (!this.relative) return;
		var rp = as.getElementPosition(this.relative);
		as.style(this.box,{
			top: rp.top + rp.height + 5 + "px",
			left: rp.left + rp.width/2 - this.box.offsetWidth/2 + "px"
		});
	},
	hide: function(e) {
		this.box.className += " as-hidden";
		this.boxShown = false;
		return false;
	},
	show: function() {
		this.box.className = this.box.className.replace(/\bas-hidden\b/,"");
		this.boxShown = true;
	},
	customize: function() {},
	create: function() {
		this.box = as.append("<div class='as-message-box-wrapper as-hidden'><div class='as-message-box'></div></div>",document.body);
	},
	remove: function() {
		as.remove(this.box);
	}
};
function ChooseCityBox() {};
ChooseCityBox.prototype = new MessageBox();
ChooseCityBox.prototype.hide = function() {
	this.boxShown = false;
	//as.fadeOut({element: this.box, speed: 30, callback: as.bind(function(){
		this.box.className += " as-hidden";
	//},this)});
	return false;
}
ChooseCityBox.prototype.show = function() {
	this.box.className = this.box.className.replace(/\bas-hidden\b/,"");
	//as.fadeIn({element: this.box, speed: 30});
	this.boxShown = true;	
}
ChooseCityBox.prototype.customize = function() {
	as.append("<div class='as-message-box-customize'></div>",this.box);
	as.append("<div class='choose-city-box-arrow'></div>",this.box);
}
ChooseCityBox.prototype.create = function() {
	return as.append("<div class='as-message-box-wrapper as-hidden choose-city-box'><div class='as-message-box'></div></div>",document.body);
}


function chooseCity() {
	as.$$("div.logo a.city").onclick = function() {
		var cityList = [ {url: 'http://www.kinoafisha.msk.ru/',name: 'Москва'},{url: 'http://www.kinoafisha.spb.ru/',name: 'Санкт-Петербург'},{url: 'http://www.nsk.kinoafisha.info/',name: 'Новосибирск'},{url: 'http://www.vl.kinoafisha.info/',name: 'Владивосток'},{url: 'http://www.vlg.kinoafisha.info/',name: 'Волгоград'},{url: 'http://www.ekat.kinoafisha.info/',name: 'Екатеринбург'},{url: 'http://www.irk.kinoafisha.info/',name: 'Иркутск'},{url: 'http://www.kazan.kinoafisha.info/',name: 'Казань'},{url: 'http://www.kr.kinoafisha.info/',name: 'Краснодар'},{url: 'http://www.nn.kinoafisha.info/',name: 'Нижний Новгород'},{url: 'http://www.perm.kinoafisha.info/',name: 'Пермь'},{url: 'http://www.rnd.kinoafisha.info/',name: 'Ростов-на-Дону'},{url: 'http://www.smr.kinoafisha.info/',name: 'Самара'},{url: 'http://www.srt.kinoafisha.info/',name: 'Саратов'},{url: 'http://www.tmn.kinoafisha.info/',name: 'Тюмень'},{url: 'http://www.ufa.kinoafisha.info/',name: 'Уфа'},{url: 'http://www.chel.kinoafisha.info/',name: 'Челябинск'},{url: 'http://www.krsk.kinoafisha.info/',name: 'Красноярск'},{url: 'http://www.sochi.kinoafisha.info/',name: 'Сочи'},{url: 'http://www.omsk.kinoafisha.info/',name: 'Омск'}];
		if (this.cityList) this.cityList.show();
		else {
			//new as.ajax().makeRequest('/ajax/city.php',as.bind(function(cityList){
				//cityList = eval("(" + cityList + ")");
				var html = "<h4>Киноафиша в других городах</h4><ul class='city-list'>";
				as.foreach(cityList,function(city){
					html += "<li><a href='" + city.url + "'>" + city.name + "</a></li>";
				});
				html += "</ul>";
				this.cityList = new ChooseCityBox();
				this.cityList.init({html: html, show: true, customize: true, relative: this});
		}
		return false;
	}
}

function SortableTable() {}
SortableTable.prototype = {
	init: function(params) {
		//if (!params || !params.table) throw new Error("no table specified!");
		this.table = as.$$("tbody",params.table);
		this.initVars();
		//this.parseDates();
		this.createQuickSortables();
		this.addEvents();
	},
	months: {
		"январ": 1, "феврал": 2, "март": 3, "апрел": 4, "мая": 5, "мая": 5, "июн": 6, "июл": 7, "август": 8, "сентябр": 9, "октябр": 10, "ноябр": 11, "декабр": 12
	},
	initVars: function() {
		this.sorters = as.$("th.sortable",this.table);
		this.sortedBy = null;
		this.sortedDirection = null;
		this.rowsToSort = as.filter(as.$("tr",this.table),function(row){
			return !row.className.match(/\bsorters\b/);
		});
	},
	createQuickSortables: function() {
		this.quickSortables = {};
		as.foreach(this.sorters, as.bind(function(sorter){
			var by = sorter.className.match(/\bby-[A-z]*\b/)[0].replace("by-","");
			var type = sorter.className.match(/\btype-[A-z]*\b/)[0].replace("type-","");
			
			this.quickSortables[by] = [];
			switch(type) {
				case "date":
				as.foreach(this.rowsToSort,as.bind(function(row){
					var td = as.$$("td."+by,row);
					this.quickSortables[by].push( {key: this.parseDate(td), row: row} );
				},this));
				break;
				
				case "numeric":
				as.foreach(this.rowsToSort,as.bind(function(row){
					var td = as.$$("td."+by,row);
					this.quickSortables[by].push( {key: Number(this.getText(td)), row: row} );
				},this));
				break;
				
				case "lexic":
				as.foreach(this.rowsToSort,as.bind(function(row){
					var td = as.$$("td."+by,row);
					this.quickSortables[by].push( {key: this.getText(td), row: row} );
				},this));
				break;
			}
		},this));
	},
	addEvents: function() {
		var _self_ = this;
		var actionLinks = as.$('table.blogs-authors th');
		as.foreach(this.sorters,function(sorter){
			sorter.onclick = function(e) {
				e = e || window.event;
				e.preventDefault ? e.preventDefault() : e.returnValue = false;
				for (var i=0;i<actionLinks.length;i++){
					actionLinks[i].className = actionLinks[i].className.replace(/\bactive\b/gi,'');
				}
				this.className += ' active';
				var by = this.className.match(/\bby-[A-z]*\b/)[0].replace("by-","");
				var type = this.className.match(/\btype-[A-z]*\b/)[0].replace("type-","");
				if (this == _self_.sortedBy) _self_.sortTable(by,type,_self_.sortedDirection == "up" ? "down" : "up",this);
				else _self_.sortTable(by,type,"down",this);
			}
		});
	},
	sortTable: function(by,type,direction,sorter) {
		var _self_ = this;
		//var innerRows = [];
		//for (var i=0,l=this.rowsToSort.length;i<l;i++) {
		//	switch (type) {
		//		case "date": innerRows.push({sortBy: as.$$("td."+by,this.rowsToSort[i]).date, realEl:this.rowsToSort[i]}); break;				
		//		case "numeric": innerRows.push({sortBy: Number(this.getText(as.$$("td."+by,this.rowsToSort[i]))), realEl: this.rowsToSort[i]}); break;				
		//		case "lexic": innerRows.push({sortBy: this.getText(as.$$("td."+by,this.rowsToSort[i])), realEl:this.rowsToSort[i]}); break;
		//	}	
		//}		
		this.quickSortables[by].sort(function(a,b) {
			a = a.key; b = b.key;
			var retValue = 0;
			(a > b) && (retValue = 1);
			(a < b) && (retValue = -1);
			(direction == "down") && (retValue = -retValue);
			return retValue;
		});
		for (var i=0,l=this.quickSortables[by].length;i<l;i++) {
			as.append(this.quickSortables[by][i].row,this.table);
		}
		this.sortedBy = sorter;
		this.sortedDirection = direction;
	},
	getText: function(element) {
		return element.innerHTML.replace(/<[^>]*?>/gi,"");
	},
	parseDate: function(td) {
		var text = this.getText(td).split(" ");
		var numericDate = text[2] + "/";
		for (var m in this.months) {
			if (text[1].match(m)) {
				numericDate += (this.months[m]+"/");
				break;
			}
		}
		numericDate += text[0];
		return new Date(numericDate);
	}
}

function sortTables() {
	as.foreach(as.$("table.sortable"),function(table){
		new SortableTable().init({table: table});									   
	});
}



function init() {
	handleActions();
	handleColumns();
	handleCorners();
	roundSpec();
	chooseCity();
	sortTables();
}

as.ready(init);