


var SlideShow=_Class({
	init:function(obj, elems, opt){
		var _this=this;
		opt=opt||{};
		this.root=_(obj);
		
		this.items=_(this.root, elems.items).repeat(function(i){this.i=i}).event({onclick:function(){clearInterval(_this.tm); return _this.go(this)}});
		this.link=_(this.root).insert("a", _(this.root, "div")).attr({href:this.items[0].href});
		this.img=_(this.link).insert("img").event({onload:function(){_this.onload()}}).attr({src:this.items[0].rel});
		this.transition=new Transition(this.img, {dyn:(opt.dyn||3), speed:(opt.speed||2), classname:"disapear"});
		this.transition.ondisapear=function(){_this.apear()};
		
		this.cur=0;
		this.items[0].act();
		this.tm=setInterval(function(){_this.play()}, (opt.delay||5)*1000);
	},
	go:function(obj){
		if(this.cur==obj.i) return false;
		obj.act();
		this.imgLoaded=this.waitLoading=false;
		this.transition.disappear();
		this.img.src=obj.rel;
		if(this.link) this.link.href=obj.href;
		this.cur=obj.i;
		return false;
	},
	onload:function(){
		if(this.waitLoading) this.transition.appear();
		else this.imgLoaded=true;
	},
	apear:function(){
		if(this.imgLoaded) this.transition.appear(); 
		else this.waitLoading=true;
	},
	play:function(){
		var num=this.cur+1;
		if(num>=this.items.length) num=0;
		this.go(this.items[num]);
	}
});



var _Slider=_Class({
	init:function(obj, elems, opt){
		var _this=this;
		obj.event({onmouseover:function(){_this.postinit(obj, elems, opt); obj.event({onmouseover:null}); }});
	},
	postinit:function(obj, elems, opt){
		var _this=this;
		opt=opt||{};
		this.root=_(obj);
		this.canvas=_(this.root, elems.canvas);
		this.scroll=_(this.canvas, elems.scroll);
		this.arr_l=_(this.root, elems.arr_l).event({onclick:function(){_this.go(-1)}});
		this.arr_r=_(this.root, elems.arr_r).event({onclick:function(){_this.go(1)}});
		
		this.visibleWidth=this.canvas.offsetWidth;
		this.canvas.css({width:20000});
		this.scroll.css({width:this.scroll.offsetWidth});
		this.canvas.css({width:"auto"});
		
		this.cur=0;
		this.stack=0;
		
		this.smooth=new Smooth({
			dyn:(opt.dyn||50), 
			speed:(opt.speed||-5),
			onstart:function(){},
			onplay:function(pos){_this.canvas.scrollLeft=pos},
			onend:function(){}
		});
		this.canvas.scrollLeft=0;//this.random_start_pos();
		//this.randomize();
	},
	go:function(d){
		if(this.smooth.tm){  this.smooth.end(); this.canvas.scrollLeft=this.oldPosEnd}
		this.loop_play_back(d);
		var posEnd=this.canvas.scrollLeft+(d*this.visibleWidth);
		if(posEnd<0) posEnd=0;
		if(posEnd>this.scroll.offsetWidth-this.visibleWidth) posEnd=this.scroll.offsetWidth-this.visibleWidth;
		this.oldPosEnd=posEnd;
		this.smooth.start(this.canvas.scrollLeft, posEnd);
	},
	getItems:function(){
		if(!this.items_tag){
			this.items_tag="a";
			if(!_(this.scroll, this.items_tag)) this.items_tag="img";
		}
		return this.scroll.getElementsByTagName(this.items_tag);//_(this.scroll, this.items_tag);
	},
	randomize_items:function(){
		var tmpNode=_.create("div");
		var items=this.getItems();
		for(var i=0, l=items.length; i<l; i++){
			items=this.getItems();
			var rand=Math.round(Math.random()*(3-i));
			tmpNode.insert(items[rand]);
		}
		this.scroll.innerHTML=tmpNode.innerHTML;
	},
	random_start_pos:function(){
		this.cur=Math.round(Math.random()*3);
		return this.visibleWidth*this.cur;
	},
	loop_play_back:function(d){
		var cur=this.cur+d;
		var items=this.getItems();
		if(cur<0){
			this.scroll.insert(items[items.length-1], items[0]);
			this.canvas.scrollLeft+=this.visibleWidth;
		}
		else if(cur>=items.length){
			this.scroll.insert(items[0]);
			this.canvas.scrollLeft-=this.visibleWidth;
		}
		else {
			this.cur=cur;
		}
	}
});
