/******************************
*                             
*   Name:   bannerShow         
*   Author: Aken li           
*   Date:   2008.07.28        
*   Blog:   www.kxbd.com      
*                             
******************************/
var bannerShow = Class.create();
bannerShow.prototype = {
	initialize:function(id,option){
		this.id = id;
		this.option = Object.extend({event:"click",dur:0.6,interval:8,hasNav:false,type:0}, option || {});
		this.event = this.option.event;//鼠标事件
		this.dur = this.option.dur; //动画变化时间
		this.type = this.option.type; //动画变化类型
		this.interval = this.option.interval;//间隔时间
		this.hasNav = this.option.hasNav;//是否有小图导航
		this.intervarID;
		this.isShowNum = 0;//当前显示图片
		this.obj = $(id);
		this.main = this.obj.down();//banner
		this.imgAllNum = this.main.childElements().length;
		this.bannerDims = this.main.getDimensions();//banner尺寸
		this.init();
	},

	init:function() {
		this.render();
		this.start();
		this.obj.observe('mouseover',this.stop.bind(this));
		this.obj.observe('mouseout',this.start.bind(this));
	},

	render:function() {
		
		this.main.childElements().each(function(o,i){
			if(i){
				switch (this.type){
					case 1:
						o.down().setStyle({width:"0px",height:"0px"});
					break;
					case 2:
						o.down().setStyle({
							width:"0px",height:"0px",
							left:this.bannerDims.width/2+"px",top:this.bannerDims.height/2+"px"
						});
					break;
					case 3:
						o.setStyle({left:this.bannerDims.width+"px"});
					break;
					case 4:
						o.setStyle({top:this.bannerDims.height+"px"});
					break;
					default:
						o.setStyle({display:"none"});
				}
			}
		}.bind(this));
	},

	start:function() {
		if(!this.intervarID) {
			this.intervarID = new PeriodicalExecuter(this.changeBanner.bind(this,this.isShowNum,true,true), this.interval);
		}
	},

	stop:function() {
		if(this.intervarID){
			this.intervarID.stop();
			this.intervarID = 0;
		}
	},

	toggle:function() {
		this.intervarID?this.stop():this.start();
	},

	next:function() {
		this.stop();
		this.changeBanner(this.isShowNum,true,true);
		//this.start();
	},

	prev:function() {
		this.stop();
		this.changeBanner(this.isShowNum,true,false);
		//this.start();
	},

	setInterval:function(interval) {
		this.interval = interval;
		this.stop();
		this.start();
	},

	changeBanner:function(i,isAuto,isNext) {
		this.hideImg(this.main.childElements()[this.isShowNum],this.type,this.dur,this.bannerDims);
		isAuto ? (isNext?this.isShowNum++:this.isShowNum--) : this.isShowNum = i;
		if (this.isShowNum == this.imgAllNum){
			this.isShowNum = 0;
		}
		if (this.isShowNum < 0){
			this.isShowNum = this.imgAllNum-1;
		}
		this.showImg(this.main.childElements()[this.isShowNum],this.type,this.dur,this.bannerDims);
	},

	showImg:function(element,type,dur,dims) {
		switch (type){
			case 1:
				new Effect.Morph(element.down(), { style:"width:"+dims.width+"px;height:"+dims.height+"px;",duration: dur });
			break;
			case 2:
				new Effect.Morph(element.down(), { 
					style:"width:"+dims.width+"px;height:"+dims.height+"px;left:0px;top:0px;",
					duration: dur
				});
			break;
			case 3:
				new Effect.Morph(element, { style:"left:0px",duration: dur });
			break;
			case 4:
				new Effect.Morph(element, { style:"top:0px",duration: dur });
			break;
			default:
				element.appear({duration: dur});
		}
	},

	hideImg:function(element,type,dur,dims) {
		switch (type){
			case 1:
				new Effect.Morph(element.down(), { style:"width:0px;height:0px;",duration: dur });
			break;
			case 2:
				new Effect.Morph(element.down(), {
					style:"width:0px;height:0px;left:"+dims.width/2+"px;top:"+dims.height/2+"px;",
					duration: dur
				});
			break;
			case 3:
				new Effect.Morph(element, {style:"left:-"+dims.width+"px",duration: dur,
					afterFinish:function(){element.setStyle({left:dims.width+"px"})}	
				});
			break;
			case 4:
				new Effect.Morph(element, {style:"top:-"+dims.height+"px",duration: dur,
					afterFinish:function(){element.setStyle({top:dims.height+"px"})}	
				});
			break;
			default:
				element.fade({duration: dur});
		}
	}
};
