var aslider = { // Namespace
	archive : {},
	get : function(id) {
		if (typeof this.archive[id] == 'undefined')
			this.archive[id] = new this.create(id);
		return this.archive[id];
	},
	create : function(id) { // Constructor
		this.id = id;
		this.data = [];
		this.cur = 0;
		this.length = 0;
		this.preloaded = {};
		this.timer = null;
		this.moveState = false;
		this.longer = false;
		this.mixData = false;
		this.items = 2;
		this.itemWidth = 100;
		this.showest = [];
		this.html = [];
		// DOM elements
		this.table = null;
		this.left  = null;
		this.right = null;
		this.headerPhoto = '#';
		this.headerVideo = '#';
	}
}
aslider.create.prototype = {// Prototype
	$ : function(id) {return document.getElementById(id);},
	addHandler : function(o, e, h) { 
		if (o.addEventListener) o.addEventListener(e, h, false); 
		else if (o.attachEvent) o.attachEvent('on' + e, h); 
	},
	init : function() {
		this.left  = this.$('aleft_'  + this.id);
		this.right = this.$('aright_' + this.id);
		this.table = this.$('acont_'  + this.id);
		this.ie6 = (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1) ? true : false;
		this.ie8 = (navigator.userAgent.toLowerCase().indexOf('msie 8') != -1) ? true : false;
		this.row = this.table.rows[0];
		if (!(this.left && this.right && this.table))
			return false;
		if (!(typeof this.data != 'undefined' && this.data.length))
			return false;

		if (this.id == 'video') {
			this.dataL = this.data.length;
			for (var i = 0; i < this.dataL; i++) {
				this.data[i][2].title = (this.data[i][2].title.length > 18) ? (this.data[i][2].title.substr(0,18) + '&hellip;') : this.data[i][2].title;
			}
		}

		this.left.style.display = this.right.style.display = '';
		this.length = this.data.length;
		this.mix();
		var _this = this;
		// Add handlers
		this.left.onmousedown = function(evt) {
			evt = evt || window.event;
			if (evt.preventDefault) evt.preventDefault();
			_this.longer = true;
			_this.goLeft();
			return false;
		}
		this.left.ondragstart = function() {return false;};
		this.left.onclick = function(evt) {return false;}
		this.right.onmousedown = function(evt) {
			evt = evt || window.event;
			if (evt.preventDefault) evt.preventDefault();
			_this.longer = true;
			_this.goRight();
			return false;
		}
		this.right.ondragstart = function() {return false;};
		this.right.onclick = function(evt) {return false;}
		this.addHandler(document, 'mouseup', function() {_this.longer = false;});
		this.addHandler(window, 'mouseout', function() {_this.longer = false;});
		this.addHandler(window, 'load', function() {
			_this.resize();
			_this.preload();
		});
		this.addHandler(window, 'resize', function() {
			_this.resize();
		});
		this.resize();
	},
	mix : function() {
		if (this.mixData) {
			this.data.sort(function() {
				return Math.random() > 0.5 ? 1 : -1;
			});
		}
	},
	resize : function() {
		if (this.moveState) {
			setTimeout('aslider.get("'+this.id+'").resize()', 100);
			return;
		}
		if (this.table.offsetWidth) {
			var _t = this;
			setTimeout(function() {
				if (typeof _t != 'undefined') {
					_t.items = Math.floor(_t.table.parentNode.offsetWidth / _t.itemWidth);
					_t.setShowest();
					_t.draw();
					if (_t.id != 'video') _t.freeze();
				}
			}, 1);
		}
	},
	setShowest : function() {
		this.showest = [];
		for (var i = 0; i < this.items; i++)
			this.showest[i] = this.cur + i >=  this.length ? this.cur + i - this.length : this.cur + i;
		this.getHTML();
	},
	draw : function() {
		if (this.moveState || this.longer) return;
		for (i = this.row.cells.length - 1; i >= 0; i--) {
			this.row.deleteCell(i);
		}
		for (i = 0; i < this.html.length; i++) {
			this.row.insertCell(-1).innerHTML = this.html[i];
		}
	},
	getHTML : function() {
		this.html = [];
		var index, i;
		if (this.id == 'video') {
			for (var i = 0; i < this.showest.length; i++) {
				index = this.showest[i];
				var but_play = !this.ie6 ? 'http://iday.net.ua/' : 'http://iday.net.ua/yesterday/';

				this.html[i] = '<div class="video"><table class="video"><tr>' +
					'<td style="width: 90px;"><a href="' + this.data[index][0] + '"><img src="' + but_play + '" style="background: url(' + this.data[index][1] + ') center center no-repeat; margin: 0;" width="90" height="50" alt="" /></a></td>' +
					'<td style="width: 5px;">&nbsp;</td>' +
					'<td class="text"><div class="text_box">' +
						'<div class="text_box_main">Видео: <a href="' + this.data[index][2].album_url + '">' + this.data[index][2].album_name + '</a><br />' +
						'<strong title="' + this.data[index][2].title + '">' + this.data[index][2].title + '</strong></div>' +
						'<div class="text_box_serv"><a href="' + this.data[index][2].album_url + '">Смотреть&nbsp;ещё</a></div>' +
					'</div></td>' +
					'<td style="width: 5px;">&nbsp;</td>' +
				'</tr></table></div>';
			}
		} else {
			for (var i = 0; i < this.showest.length; i++) {
				index = this.showest[i];
				this.html[i] = '<div class="item"><a rel="lightbox" href="' + this.data[index][0] + '" target="_new"><img src="' + this.data[index][1] + '" width="100" height="100" alt="" /></a></div>';
			}
		}
	},
	goLeft : function() {
		if (this.moveState) return;
		this.cur -= this.items;
		this.cur = this.cur < 0 ? this.cur + this.length : this.cur;
		this.setShowest();
		this.update(0)
	},
	goRight : function() {
		if (this.moveState) return;
		this.cur += this.items;
		this.cur = this.cur >= this.length ? this.cur - this.length : this.cur;
		this.setShowest();
		this.update(1);
	},
	update : function(r,i,w) {
		this.moveState = true;
		this.preload();
		var _this = this;
		w = this.table.offsetWidth;
		if (r)
			for (var i = 0; i < this.html.length; i++)
				this.row.insertCell(-1).innerHTML = this.html[i];
		else
			for (var i = this.html.length - 1; i >= 0; i--)
				this.row.insertCell(0).innerHTML = this.html[i];
		this.freeze(w);
		if (!r) this.table.style.marginLeft = (-1)*w + 'px';
		this.move((r?0:(-1)*w), (r?0:(-1)*w), (r?(-1)*w:0), r);
	},
	preload : function() {
		var div, s, i, radius = 6, html = '';
		if (!(div = this.$('preloader_'+this.id))) {
			div = document.createElement("div");
			div.id = 'preloader_'+this.id;
			s = div.style;
			s.position = "absolute"; s.top = s.left = 0; s.visibility = "hidden";
			document.body.appendChild(div);
		}
		div = this.$('preloader_'+this.id);
		for (i = this.cur - radius; i <= this.cur + radius; i++) {
			if (this.data[i] && typeof this.preloaded[i] == 'undefined') {
				html += '<img src="'+this.data[i][1]+'" />\n';
				this.preloaded[i] = true;
			}
		}
		if (html) div.innerHTML += html;
	},
	move : function(x, start, end, r) {
		var percent = x / (end - start) * (r ? 1 : -1);
		x = x + (r ? -1 : 1) * (5 + 20 * percent);
		clearTimeout(this.timer);
		this.timer = null;
		if ((r && x < end) || (!r && x > end)) {
			if (r) {
				for (var i = this.items - 1; i >= 0; i--) {
					this.row.deleteCell(i);
				}
			} else {
				for (var i = 2 * this.items - 1; i >= this.items; i--) {
					this.row.deleteCell(i);
				}
			}
			this.table.style.marginLeft = 0;
			this.freeze();
			this.moveState = false;
			if (this.longer) {
				if (r) this.goRight();
				else this.goLeft();
			}
		} else {
			this.table.style.marginLeft = x + 'px';
			this.timer = setTimeout('aslider.get("'+this.id+'").move('+x+', '+start+', '+end+', '+r+')', 5);
		}
	},
	freeze : function(w) {
		if (w) w = w / this.items;
		else w = this.table.parentNode.parentNode.parentNode.offsetWidth / this.items;
		for (var i = 0; i < this.row.cells.length; i++) {
			if (w) this.row.cells[i].firstChild.style.width = w + 'px';
			else this.row.cells[i].firstChild.style.width = 'auto';
		}
	}
}
