var Slideshow = Class.create(
{
	initialize:function(ele,options){
		this.ele = $(ele);
		var thisObj = this;
		
		this.items = [];
		this.items_arr = [];
		for (var i=0; i<8; i++) {
			if ($$('.div_slideshow_type'+i).length>0) {
				this.items[i] = $$('.div_slideshow_type'+i).first();
				this.items_arr[i] = [];
				this.items_arr[i] = this.items[i].select('dl');
				this.items_arr[i].each(
					function(e){
						e.hide();
						Event.observe(e, 'click', function() { thisObj.bannerurl(this); });
					}.bind(this)	
				);
			}
		}
		
		this.options = Object.extend({
			duration:Number(thisObj.ele.readAttribute("option:duration")||8),
			afterChange:Prototype.emptyFunction,
			beforeChange:Prototype.emptyFunction,
			delay:0
		},options);
		
		this.is_effecting=false;
		this._isPrevius=false;
		
		this.pos=0;
		this.lastpos=0;
		this.mainpos=0;
		this.showtype=0;
		this.menu_clicked = false;
		this.submenu = this.get()[this.pos].down('.div_slideshow_title');
		
		this.ele.makeClipping();
		this.change();
		this.start();
		
		//define menu btn
		//this.menus = $$('.div_menu_main_btn');
		this.menus = $$('.div_menu_main').first().select('dd');
		this.menus.invoke('setStyle', 'cursor:pointer');
		this.menus.each(
			function(e){
				e = e.down().down();
				Event.observe(e, 'mouseover', function() { thisObj.btnover(this); });
				Event.observe(e, 'mouseout', function() { thisObj.btnout(this); });
				Event.observe(e, 'click', function() { thisObj.btnclick(this); });
			}.bind(this)	
		);
		//this.submenus = $$('.div_menu_sub_list');
		this.submenus = $$('.div_menu_sub').first().select('dd');
		this.submenus.invoke('hide');
		this.submenus.invoke('setStyle', 'cursor:pointer');
		
			
	},
	get:function() {
		return this.items_arr[this.showtype];	
	},
	change:function(){
		
		this.is_effecting=true;
		
		var ele = this.get()[this.pos];
		var ele_txt = ele.down('.div_slideshow_text');
		var ele_last = this.get()[this.lastpos];
		
		if ($(ele_txt)) ele_txt.hide();
		if (this.menu_clicked==false) this.submenu = this.get()[this.pos].down('.div_slideshow_title');
		
		this.is_effecting=true;
		this.current_effect= new Effect.Appear(ele,{delay:1, afterFinish:function(){
			switch (parseInt($(ele).className.substr(22))) {
				case 1:
					var org_top = ele_txt.getStyle('margin-top').substr(0, ele_txt.getStyle('margin-top').length-2);
					ele_txt.setStyle('top: -20px');
					new Effect.Move(ele_txt, { y:20 });
					new Effect.Appear(ele_txt);
					break;
				case 2:
					ele_txt.setStyle('left: 20px');
					new Effect.Move(ele_txt, { x:-20 });
					new Effect.Appear(ele_txt);
					break;
				case 3:
					if(	$(ele).down('.div_slideshow_media') && 
						$(ele).down('.div_slideshow_media').down() && 
						$(ele).down('.div_slideshow_media').down().down()																
					){
						
						var flash = $(ele).down('.div_slideshow_media').down().down().readAttribute('id');
						
						playerController(flash, 'play');
						ele_txt.setStyle('left: 20px');
						new Effect.Move(ele_txt, { x:-20 });
						new Effect.Appear(ele_txt);
					}
					break;
				case 4:
					var flash = $(ele).down('.div_slideshow_media').down().down().readAttribute('id');
					playerController(flash, 'play');
					break;
				case 5:
					break;
			}
			this.get().invoke('hide');
			ele.show();
			this.is_effecting=false;
			this.options.afterChange(this.pos,ele);
		}.bind(this)});
		
		if (ele!=ele_last) this.current_effect= new Effect.Fade(ele_last,{delay:1, afterFinish:function(){
			switch (parseInt($(ele_last).className.substr(22))) {
				case 1:
					break;
				case 2:
					break;
				case 3:
					var flash = $(ele_last).down('.div_slideshow_media').down().down().readAttribute('id');
					playerController(flash, 'stop');
					break;
				case 4:
					var flash = $(ele_last).down('.div_slideshow_media').down().down().readAttribute('id');
					playerController(flash, 'stop');
					break;
				case 5:
					break;
			}
		}.bind(this)});
		
	},
	quickshow:function() {
		if (this.menu_clicked==false) this.submenu = this.get()[this.pos].down('.div_slideshow_title');
		this.items.invoke('hide');
		this.items[this.showtype].show();
		this.get().invoke('hide');
		this.get()[this.pos].show();
		this.start();
	},
	btnover:function(ele){
		ele = ele.up().up();
		ele.addClassName('menu_hover');
		var tmp_showtype = ele.readAttribute('showtype');
		if (!this.items_arr[tmp_showtype]) return;
		this.stop();
		this.showtype = tmp_showtype;
		this.mainpos = this.pos;
		this.lastpos=0;
		this.pos=0;
		this.quickshow();
	},
	btnout:function(ele){
		ele = ele.up().up();
		ele.removeClassName('menu_hover');
		this.stop();
		this.showtype = 0;
		this.lastpos=this.mainpos;
		this.pos=this.mainpos;
		this.quickshow();
	},
	btnclick:function(ele){
		ele = ele.up().up();
		if (this.is_submenu_effecting>0) return;
		if (this.menu_clicked==false) $$('.div_slideshow_title').invoke('hide');
		var thisObj = this;
		var new_submenu = this.submenus[ele.readAttribute('showtype')-1];
		var last_submenu = this.submenu;
		var tmp_y = this.menu_clicked==false ? -42 : 0;	
		if (new_submenu==last_submenu) return;
		this.menu_clicked = true;
		this.submenu = new_submenu;
		this.is_submenu_effecting = 2;
		if ($(new_submenu)) {
			new Effect.Appear(new_submenu, { duration:0.5, afterFinish:function(){
				thisObj.is_submenu_effecting--;
				new_submenu.show();
			}.bind(this)});
			/*
			new_submenu.show();
			new Effect.Move(new_submenu, { y:42, mode: 'absolute', transition:Effect.Transitions.easeOutQuint, afterFinish:function(){
				thisObj.is_submenu_effecting--;
				new_submenu.show();
			}.bind(this)});
			*/
		} else {
			thisObj.is_submenu_effecting--;
		}
		if ($(last_submenu)) {
			new Effect.Fade(last_submenu, { duration:0.3, afterFinish:function(){
				thisObj.is_submenu_effecting--;
				last_submenu.hide();
			}.bind(this)});
			/*
			last_submenu.show();
			new Effect.Move(last_submenu, { y:tmp_y, mode: 'absolute', duration:0.5, afterFinish:function(){
				thisObj.is_submenu_effecting--;
				last_submenu.hide();
			}.bind(this)});
			*/
		} else {
			thisObj.is_submenu_effecting--;
		}
	},
	bannerurl:function(ele){
		var url = ele.readAttribute('url');
		if (url=='') return;
		window.location = url;
	},
	stop:function(){
		if (this.current_effect) this.current_effect.cancel();
		this.pe.stop();
	},
	start:function(){
		if (this.get().length>1) {
			this.pe=new PeriodicalExecuter(
				function(){
					this.lastpos=this.pos;
					if((++this.pos)>=this.get().length) this.pos=0;
					this.change();
				}.bind(this),
				this.options.duration
			);
		}
	}
}
);
Component.init('.div_slideshow','Slideshow');
