﻿function LoopImage()
{
	this.imageId = null;		
	this.imageWidth = null;		
	this.imageHeight = null;	
	this.titleId = null;	
	this.linkId = null;		
	this.contentId = null;	
	this.interval = 5000;		// time
	this.transTime = 2;			// change time
	this.transType = null;		// 
	this.transParam = null;	
	this.loopImageTimer = null;
	this.image = Array();	
	this.title = Array();	
	this.link = Array();	
	this.content = Array();	
}
LoopImage.prototype.Add = function(src, titleText, href, contentText)
{
	var args = arguments.length;
	if (args == 0) return false;
	if (args < 2) var title = "";
	if (args < 3) var href = "";
	if (args < 4) var content = "";
	with(this)
	{
		image[image.length] = src;
		title[title.length] = titleText;
		link[link.length] = href;
		content[content.length] = contentText;
	}
}
LoopImage.prototype.Random = function(v1, v2)
{
	var ok = true;
	if (arguments.length == 1)
		if (typeof(v1) != "number" || v1 < 0) ok = false;
	else if (arguments.length == 2)
		if (typeof(v1) != "number" || v1 < 0 || typeof(v2) != "number" || v2 < 0) ok = false;
	else
		ok = false
	if (!ok)
	{
		alert("Random ?");
		return false;
	}
	if (arguments.length == 1)
	{
		var v2 = v1;
		v1 = 0;
	}
	else
	{
		var temp = Math.max(v1, v2);
		v1 = Math.min(v1, v2);
		v2 = temp;
	}
	return Math.floor(Math.random() * (Math.floor(v2 - v1) + 1)) + v1;
}
LoopImage.prototype.NextImage = function(index)
{
	with(this)
	{
		if (imageId == null)
		{
			alert("No LoopImage id");
			return;
		}

		var eImage = document.getElementById(imageId);
		var eTitle = document.getElementById(titleId);
		var eContent = document.getElementById(contentId);
		var eLink = document.getElementsByName(linkId);
		if (!eLink) eLink[0] = document.getElementById(linkId);
		if (eImage)
		{
			if (imageWidth != null) eImage.style.width = imageWidth;
			if (imageHeight != null) eImage.style.height = imageHeight;
			if (document.all)
			{
				if (index != undefined && image.length <= 1) return;
				if (index == undefined || ++index == image.length) var index = 0;

				var filterStr = "Barn|BlendTrans|Blinds|CheckerBoard|Fade|GradientWipe|Inset|Iris|" + 
								"Pixelate|RadialWipe|RandomBars|RandomDissolve|RevealTrans|" +
								"Slide|Spiral|Stretch|Strips|Wheel|Zigzag";	
				var type = transType;
				var params = transParam;
				if (filterStr.indexOf(type) == -1)
				{
					var filters = filterStr.split("|");
					type = new Array();
					for (var i = 0; i < filters.length; i++) type[type.length] = filters[i];
					type = type[this.Random(type.length - 1)];
				}
				else
				{
					if (typeof(transParam) == "string")
					{
						params = {};
						var temp = transParam.split(",");
						for (var i = 0; i < temp.length; i++)
						{
							var tmp = temp[i].split("=");
							if (tmp.length != 2)
							{
								alert("转换滤镜的参数不正确");
								return false;
							}
							params[tmp[0].substr(0, 1).toUpperCase() + tmp[0].substr(1).toLowerCase()] = isNaN(parseInt(tmp[1])) ? tmp[1] : parseInt(tmp[1]);
						}
					}
					transParam = params;
				}
				var enabled = type != "Pixelate" ? "true" : "false";	
				var typeName = type != "BlendTrans" && type != "RevealTrans" ? "DXImageTransform.Microsoft." + type : type;
				if (!eImage.filters[typeName])
					eImage.style.filter += (type != "BlendTrans" && type != "RevealTrans" ? " progid:" : " ") + typeName + "(enabled=" + enabled + ")";
				eImage.filters[typeName].duration = transTime;
				if (params == null)
				{
					params = {};
					switch (type)
					{
						case "Barn" :
							params.Motion = this.Random(1) == 0 ? "in" : "out";
							params.Orientation = this.Random(1) == 0 ? "vertical" : "horizontal";	
							break;
						case "Blinds" :
							params.Bands = this.Random(1, 20);	
							var direction = ["down", "up", "right", "left"];
							params.Direction = direction[this.Random(direction.length - 1)];	
							break;
						case "CheckerBoard" :
							params.SquaresX = this.Random(2, 24);	
							params.SquaresY = this.Random(2, 20);	
							var direction = ["down", "up", "right", "left"];
							params.Direction = direction[this.Random(direction.length - 1)];	
							break;
						case "Fade" :
							params.Overlap = this.Random(10) / 10;	
							break;
						case "GradientWipe" :
							params.GradientSize = this.Random(10) / 10;	
							params.Motion = this.Random(1) ? "forward" : "reverse";	
							params.WipeStyle = this.Random(1);	
							break;
						case "Iris" :
							var style = ["PLUS", "DIAMOND", "CIRCLE", "CROSS", "SQUARE", "STAR"];
							params.IrisStyle = style[this.Random(style.length - 1)];	
							params.Motion = this.Random(1) == 0 ? "in" : "out";
							break;
						case "Pixelate" :
							params.MaxSquare = this.Random(2, 50);	
							break;
						case "RadialWipe" :
							var style = ["CLOCK", "WEDGE", "RADIAL"];
							params.WipeStyle = style[this.Random(style.length - 1)];	
							break;
						case "RandomBars" :
							params.Orientation = this.Random(1) == 0 ? "vertical" : "horizontal";	
							break;
						case "RevealTrans" :
							params.Transition = 23;	
							break;
						case "Slide" :
							params.Bands = this.Random(1, 100);	
							var style = ["HIDE", "PUSH", "SWAP"];
							params.SlideStyle = style[this.Random(style.length - 1)];	
							break;
						case "Spiral" :
							params.GridSizeX = this.Random(1, 32);	
							params.GridSizeY = this.Random(1, 32);	
							break;
						case "Stretch" :
							var style = ["SPIN", "HIDE", "PUSH"];
							params.StretchStyle = style[this.Random(style.length - 1)];	
							break;
						case "Strips" :
							var motion = ["leftdown", "leftup", "rightdown", "rightup"];
							params.Motion = motion[this.Random(motion.length - 1)];	
							break;
						case "Wheel" :
							params.Spokes = this.Random(2, 20);	
							break;
						case "Zigzag" :
							params.GridSizeX = this.Random(1, 32);	
							params.GridSizeY = this.Random(1, 32);	
							break;
					}
				}
				for (param in params) eval("eImage.filters[typeName]." + param + " = params[param];");
				eImage.filters[typeName].apply();
			}
			eImage.src = image[index];
			if (eTitle)
				eTitle.innerHTML = title[index];
			if (eLink)
			{
				for (var i = 0; i < eLink.length; i++)
				{
					if (link[index])
					{
						eLink[i].onclick = function(){};
						eLink[i].href = link[index];
					}
					else
					{
						eLink[i].onclick = function(){return false;};
						eLink[i].href = "#";
					}
				}
			}
			if (eContent)
				eContent.innerHTML = content[index];
			if (document.all) eImage.filters[typeName].play();
		}
		var temp = this;
		loopImageTimer = setTimeout(function(){temp.NextImage(index); temp = null;}, interval);
	}
}