﻿/*幻灯片控件
接受参数:
无

返回类型:
无

应用技术：
javascript

制作人：
黄若儒 Roy.Huang

注意:
1、本控件在firefox\ie\Opera均可使用
2、addSlide方法用于添加幻灯片对象 对象.addSlide(id,图片,描述,网址);
3、changButton、changDescript、changPicture、changHref方法如有需要请自行重写;
4、goSlide(id)方法用于跳去特定幻灯片
*/
function slide(){
	this.init=init;//实例化
	this.start=start;//开始播放
	this.stop=stop;//停止播放
	this.addSlide=addSlide;//添加幻灯片
	this.goSlide=goSlide;//跳到某一幻灯片
	//变换事件（外部重写）
	this.changButton=changButton;
	this.changDescript=changDescript;
	this.changPicture=changPicture;
	this.changHref=changHref;
	this.speed=5000;//播放速度
	//装载容器
	this.buttonPanel=null;
	this.picturePanel=null;
	this.descriptPanel=null;
	this.hrefPanel=null;
	this.buttonListStyle='x';//按扭列表输出形式
	this.slide=null;//当前播放对象
	this.oldSlide=null;//旧播放对象
	this.slides=new Array();//幻灯片集合
	//CSS
	this.buttonOverStyle="height:15px;width:15px;text-align:center;background:#FC7044;cursor:pointer;cursor:hand;font-size:12px;font-family:Arial,Helvetica,sans-serif;color:#FFFFFF";
	this.buttonOutStyle="height:15px;width:15px;text-align:center;background:#333333;cursor:pointer;cursor:hand;font-size:12px;font-family:Arial,Helvetica,sans-serif;color:#FFFFFF";
	//内部
	var base=this;
	var fun=null;
	var createTime=(new Date()).getTime();
	
	//==============================================================内外部调用
	function init(){//程序实例化
		if(base.slides.length<=0) return;
		var t=$(base.buttonPanel);
		if(t!=null){
			t.innerHTML="";
			t.appendChild(createButtonList());
		}
		changSlide();
		base.start();
	}
	
	function addSlide(id,picture,descript,href){//添加幻灯片
		var i=0;
		if(base.slides.length>0)
			i=base.slides.length;
		base.slides.push({no:i,id:id,picture:picture,descript:descript,href:href});
		return true;
	}
	
	function start(){//开始运行
		clearInterval(fun);
		fun=setInterval(changSlide,base.speed);
	}
	
	function stop(){//停止运行
		clearInterval(fun);
	}
	
	function goSlide(id){//跳到某一幻灯片
		var slide=getSlide(id);
		if(slide==null || slide==base.slide) return
		base.stop();
		base.oldSlide=base.slide;
		base.slide=slide;
		base.changButton();
		base.changPicture();
		base.changDescript();
		base.changHref();
		base.start();
	}
	
	//变换事件
	function changButton(){
		var b=document.getElementById(createTime+"_button_"+base.slide.no);
		if(b!=null)
			setStyle(b,base.buttonOverStyle);
		if(base.oldSlide==null) return;
		b=document.getElementById(createTime+"_button_"+base.oldSlide.no);
		if(b!=null)
			setStyle(b,base.buttonOutStyle);
	}
	
	function changDescript(){
		var t=$(base.descriptPanel)
		if(t!=null)
			t.innerHTML=base.slide.descript;
	}
	
	function changPicture(){
		var t=$(base.picturePanel)
		if(t==null) return
		if(t.tagName.toUpperCase()=="IMG"){
			if(t.filters!=null && t.filters[0]!=null){
				t.filters[0].Transition=t.filters[0].Transition;
				t.filters[0].apply();
				t.src=base.slide.picture;
				t.filters[0].play();
			}
			else
				t.src=base.slide.picture;
		}
		else
			t.innerHTML="<img src='"+base.slide.picture+"'>";
	}
	
	function changHref(){
		var t=$(base.hrefPanel);
		if(t==null) return;
		if(t.tagName.toUpperCase()=="A")
			t.href=base.slide.href;
		else
			t.onclick=function(){window.open(base.slide.href)};
	}
	
	//===============================================================内部调用
	function $(o){
		if(typeof(o)!='object')
			o=document.getElementById(o);
		return o;
	}
	
	function changSlide(){
		var i=0;
		if(base.slide!=null && base.slide.no<base.slides.length-1)
			i=base.slide.no+1;
		base.oldSlide=base.slide;
		base.slide=base.slides[i];
		base.changButton();
		base.changPicture();
		base.changDescript();
		base.changHref();
	}
	
	function createButtonList(){
			if(base.buttonListStyle.toUpperCase()=="X"){
				var table=document.createElement("table");
				table.border=0;
				table.cellPadding=0;
				table.cellSpacing=0;
				var tbody=document.createElement("tbody");
				var tr=document.createElement("tr");
				for(var i=0;i<base.slides.length;i++){
					var td=document.createElement("td");
					var div=document.createElement("div");
					div.id=createTime+"_button_"+i;
					setStyle(div,base.buttonOutStyle);
					eval("div.onclick=function(){base.goSlide("+base.slides[i].id+")}");
					div.innerHTML=i+1;
					td.appendChild(div);
					tr.appendChild(td);
				}
				tbody.appendChild(tr);
				table.appendChild(tbody);
				return table;
			}
			else{
				var divP=document.createElement("div");
				for(var i=0;i<base.slides.length;i++){
					var div=document.createElement("div");
					div.id=createTime+"_button_"+i;
					setStyle(div,base.buttonOutStyle);
					eval("div.onclick=function(){base.goSlide("+base.slides[i].id+")}");
					div.innerHTML=i+1;
					divP.appendChild(div);
				}
				return divP;
			}
	}
	
	function getSlide(id){
		for(var i=0;i<base.slides.length;i++){
			if(base.slides[i].id==id)
				return base.slides[i];
		}
		return null;
	}
	
	function setStyle(target,styles){
		var styleArray=styles.split(";");
		for(var i=0;i<styleArray.length;i++){
			try{
				var style=styleArray[i].split(":");
				var nameG=style[0].split("-");
				var name=nameG[0];
				var value=style[1];
				for(var j=1;j<nameG.length;j++){
					name+=(nameG[j].substring(0,1).toUpperCase()+nameG[j].substring(1,nameG[j].length));
				}
				eval("target.style."+name+"='"+value+"';");
			}
			catch(e){
				continue;
			}
		}
	}
}