function ElasticChanger()
{
	//設定
	this.moveTime = 0.8; //動作時間
	this.cut      = 20;  //動作コマ数

	this.ChangerList	=	new Array();
	this.SlideList		=	new Array();
	this.sortList		=	new Array();
	this.lock			=	0;
	this.activeW;
	this.activeH;
	this.activeX;
	this.activeY;
	this.saveActive;
	this.saveActiveW;
	this.saveActiveH;
	this.saveActiveX;
	this.saveActiveY;

	this.setup	=	function (active)
	{
		positionX	=	new Array();
		positionY	=	new Array();
		positionW	=	0;
		positionH	=	0;
		elementList	=	new Array();
		tmpList	=	document.getElementsByTagName("*");

		listObject		=	document.createElement("div");
		listObject.id	=	"ElasticSlideList";

		for(i=0;i<tmpList.length;i++)
		{
			if(tmpList[i].id.search(/^ElasticSlide(\d*)$/) != -1)
			{
				elementList.push(tmpList[i]);
				this.SlideList[RegExp.$1]	=	tmpList[i];

				element				=	document.createElement("a");
				element.setAttribute("href", "javascript:void(0);");
				element.setAttribute("id", "ElasticChanger"+elementList.length);
				element.onclick		=	function (){return ElasticChange(this);}
				element.className	=	'ElasticChangerClass';
				element.innerHTML	=	'<img src="'+tmpList[i].getElementsByTagName("img")[0].src+'" alt="" />';

				listObject.appendChild(element);

				this.ChangerList[RegExp.$1]	=	element;
			}
		}

		maskObject					=	document.createElement("div");
		maskObject.id				=	"ElasticSlideMask";
		elementList[0].parentNode.insertBefore(maskObject, elementList[0]);

		wrapperObject				=	document.createElement("div");
		wrapperObject.id			=	"ElasticSlideWrapper";
		maskObject.appendChild(wrapperObject);

		blockObject					=	document.createElement("div");
		blockObject.id				=	"ElasticSlideBlock";
		elementList[0].parentNode.insertBefore(blockObject, elementList[0]);
		elementList[0].parentNode.appendChild(listObject);

		for(i=0;i<elementList.length;i++)
		{
			elementList[i].id.search(/^ElasticSlide(\d*)$/);
			elementList[i].style.width		=	elementList[i].offsetWidth+"px";
			elementList[i].style.position	=	"absolute";
			elementList[i].style.left		=	positionW+"px";
			elementList[i].parentNode.removeChild(elementList[i]);
			wrapperObject.appendChild(elementList[i]);

			positionX[RegExp.$1]	=	positionW;
			positionY[RegExp.$1]	=	0;
			positionW				+=	elementList[i].offsetWidth;
			positionH				=	(elementList[i].offsetHeight > positionH)?	elementList[i].offsetHeight	:	positionH;

		}

		this.cleanup(active);
		this.active(active);
	}

	this.change	=	function (active)
	{
		if(this.lock == 0 && active != this.saveActive)
		{
			this.lock	=	1;
			time		=	this.moveTime/this.cut*1000;

			this.active(active);

			list	=	this.easing(positionX[active]-positionX[this.saveActive]);

			for(i=0;i<list.length;i++)
			{
				setTimeout('ElasticChanger.move('+list[i]+', '+(0-positionX[active])+')', time*i);
			}

			setTimeout('ElasticChanger.cleanup('+active+')', (this.moveTime*1000));
		}
	}

	this.active	=	function (active)
	{
		this.ChangerList[this.saveActive].className	=	"ElasticChangerClass";
		this.ChangerList[active].className			=	"ElasticChangerActiveClass";
	}

	this.cleanup	=	function (active)
	{
		activeElement	=	document.getElementById("ElasticSlide"+active);
		document.getElementById("ElasticSlideBlock").style.width		=	activeElement.offsetWidth+"px";
		document.getElementById("ElasticSlideBlock").style.height		=	activeElement.offsetHeight+"px";
		document.getElementById("ElasticSlideMask").style.position		=	"absolute";
		document.getElementById("ElasticSlideMask").style.width			=	positionW+"px";
		document.getElementById("ElasticSlideMask").style.height		=	positionH+"px";
		document.getElementById("ElasticSlideMask").style.clip			=	"rect(0px, "+activeElement.offsetWidth+"px, "+activeElement.offsetHeight+"px, 0px)";
		document.getElementById("ElasticSlideWrapper").style.position	=	"relative";
		document.getElementById("ElasticSlideWrapper").style.left		=	(0-positionX[active])+"px";

		this.lock		=	0;
		this.saveActive	=	active;
	}

	this.move	=	function (position, limit)
	{
		x	=	(document.getElementById("ElasticSlideWrapper").offsetLeft-position);

		if(position > 0 && limit > x)
		{
			x	=	limit;
		}
		else if(position < 0 && limit < x)
		{
			x	=	limit;
		}

		document.getElementById("ElasticSlideWrapper").style.left	=	x+"px";
	}

	this.easing	=	function (width)
	{
		total	=	0;
		total2	=	0;
		list	=	new Array();
		result	=	new Array();

		for(i=(this.cut/2*(-1));i<=(this.cut/2);i++)
		{
			if(i == 0){continue;}

			list[i]	=	Math.abs(this.cut/i);
			total	+=	list[i];
		}

		for(i=(this.cut/2*(-1));i<=(this.cut/2);i++)
		{
			if(i == 0){continue;}

			result.push((width)*(list[i]/total));
		}

		return result;
	}
}

function ElasticChange(object)
{
	if(object.id.search(/^ElasticChanger(\d*)$/) != -1)
	{
		ElasticChanger.change(RegExp.$1);
	}
	return false;
}

ElasticChanger	=	new ElasticChanger();

