﻿
// AdImagePlayer 类
// Author : Ankyo; Email : ankyo@126.com; QQ : 116361
// Date : 09.04.11

function AdImagePlayer()
{
	this.isChanging = false;	// 渐变状态
	this.isPlaying = false; // 播放状态
	this.changeTimer = 0; // 渐变定时器
	this.playTimer = 0; // 播放定时器
	this.currentOpacity = 0; // 图片当前透明度
	this.prevImage = null; // 上一张播放的图片
	this.currentImage = null; // 当前播放的图片
	this.playIndex = 0; // 索引
	
	// 配置
	this.config = {
		count : 0, // 图片数量
		maxOpacity : 100, // 最大透明度
		growingOpacity : 10, // 图片渐变递增透明度
		changeTimerInterval : 30, // 渐变定时器间隔播放时间
		playTimerInterval : 3000, // 播放定时器间隔播放时间
		showTextLinks : false
	};
	
	// 容器ID
	this.listPanel = {
		clone : null, // 复制图片容器 ID
		images : null, // 图片列表ID
		buttons : null, // 数字按钮列表ID
		links : null // 文本链接列表ID
	};
	
	this.classNames = {
		buttonOn : "on"	// 选中数字按钮样式名
	};
}

// 静态属性 : 指向当前运行的实例
AdImagePlayer.Instance = null;

// 添加事件
AdImagePlayer.AddEvent = function(obj, eType, func)
{
	if(document.all)
		obj.attachEvent("on" + eType, func);
	else
		obj.addEventListener(eType, func, false);
}

// 设置透明度
AdImagePlayer.ChangeOpacity = function(oImg, nOpacity)
{
	try
	{
		var style = oImg.style;
		style.opacity = (nOpacity / 100);
		style.MozOpacity = (nOpacity / 100);
		style.KhtmlOpacity = (nOpacity / 100);
		style.filter = "alpha(opacity=" + nOpacity + ")";
		style = null;
	}
	catch(e)
	{
	}
}

// 显示
AdImagePlayer.Show = function(obj)
{
	obj.style.display = "";
}

// 隐藏
AdImagePlayer.Hide = function(obj)
{
	obj.style.display = "none";
}

// 清除样式名
AdImagePlayer.ClearClassName = function(obj)
{
	obj.className = "";
}

// 开始运行
AdImagePlayer.prototype.start = function()
{
	AdImagePlayer.Instance = this;
	AdImagePlayer.AddEvent(window, "load", AdImagePlayer.Instance.play);
}

// 播放
AdImagePlayer.prototype.play = function()
{
	var _this = AdImagePlayer.Instance;
	_this.playTimer = setInterval("AdImagePlayer.Instance.autoPlay()", _this.config.playTimerInterval);
	_this = null;
}

// 暂停
AdImagePlayer.prototype.pause = function()
{
	clearInterval(this.playTimer);
}

// 自动播放
AdImagePlayer.prototype.autoPlay = function()
{
	if(this.isChanging)
		return;

	this.playIndex ++;
	if(this.playIndex > this.config.count - 1)
		this.playIndex = 0;
		
	this.gotoAndPlay(this.playIndex);	
}

// 跳转播放
AdImagePlayer.prototype.gotoAndPlay = function(n)
{
	if(this.isChanging)
		return;
		
	this.changeImage(n);
	this.changeNumericButton(n);
	if(this.config.showTextLinks)
		this.changeLinks(n);
}


// 更换数字按钮状态
AdImagePlayer.prototype.changeNumericButton = function(n)
{
	var btns = document.getElementById(this.listPanel.buttons);
	if(btns == null)
		return;
		
	var j = 0;
	for(var i = 0, len = btns.childNodes.length; i < len; i ++)
	{
		var node = btns.childNodes[i];
		if(node.tagName == "LI")
		{
			if(j == n)
				node.className = this.classNames.buttonOn;
			else
				node.className = "";
				
			j++;
		}
	}
}

// 更换显示文字链接
AdImagePlayer.prototype.changeLinks = function(n)
{
	var links = document.getElementById(this.listPanel.links);
	if(links == null)
		return;
	
	var j = 0;
	for(var i = 0, len = links.childNodes.length; i < len; i ++)
	{
		var node = links.childNodes[i];
		if(node.tagName == "LI")
		{
			if(j == n)
				AdImagePlayer.Show(node);
			else
				AdImagePlayer.Hide(node);
				
			j++;
		}
	}
}

// 更换显示图片
AdImagePlayer.prototype.changeImage = function(n)
{
	var images = document.getElementById(this.listPanel.images);
	
	if(images.innerHTML.toLowerCase().indexOf("img") < 0)
	    return;
	
	var clone = document.getElementById(this.listPanel.clone);
	var j = 0;
	
	for(var i = 0, len = images.childNodes.length; i < len; i ++)
	{
		var node = images.childNodes[i];
		
		if(node.tagName == "LI")
		{
			if(this.prevImage == null && j == 0)
				this.prevImage = node.firstChild.firstChild;
				
			if(j == n)
			{
				AdImagePlayer.Show(node);
				clone.innerHTML = "<img src=\"" + this.prevImage.src + "\" alt=\"\"/>";
				this.currentImage = node.firstChild.firstChild;
				AdImagePlayer.ChangeOpacity(this.currentImage, 0);
				this.isChanging = true;
				AdImagePlayer.Instance = this;
				this.changeTimer = setInterval("AdImagePlayer.Instance.changingImage()", this.config.changeTimerInterval);
			}
			else
			{
				AdImagePlayer.Hide(node);
			}
			j ++;
		}
	}
}

// 透明渐显
AdImagePlayer.prototype.changingImage = function()
{
	if(this.currentOpacity >= this.config.maxOpacity)
	{
		clearInterval(this.changeTimer);
		this.currentOpacity = 0;
		this.prevImage = this.currentImage;
		this.isChanging = false;
	}
	else
	{
		this.currentOpacity += this.config.growingOpacity;
		AdImagePlayer.ChangeOpacity(this.currentImage, this.currentOpacity);
	}
}

