var zoomTime = 30;
var zoomSteps = 10;
var minBorder= 90;
var minBorder = 90;
var zoomStatus = 0;
var loadImg = new Image();
var linkObj, zoomImgObj;


	// 初期処理
	function setupZoom() {
		if (! document.getElementsByTagName) {
			return;
		}

		zoomImgObj = document.getElementById("zoomImg");
		zoomAreaObj = document.getElementById("zoomArea");

		var linArray = document.getElementsByTagName("a");
		for (i = 0; i < linArray.length; i++) {
			if (linArray[i].getAttribute("href") && linArray[i].getAttribute("type") == "zoom") {
				this.img_src = linArray[i].getAttribute("href");
				linArray[i].onclick = function (event) { clickImage(this); return false; };
			}
		}
	}


	// 画像を拡大する処理
	function clickImage(linkObject) {
		if(zoomStatus == 0) {
			// ズーム開始
			zoomStatus = 1;

			zoomImgObj.src = linkObject.getAttribute("href");
			zoomLoadImg = new Image();

			// 読み込み終了を待つ
			zoomLoadImg.onload = function() {
				imgObj = linkObject;
				zoomStartTimer = setInterval("zoomIn()", 100);
			}

			// 拡大画像を読み込む
			zoomLoadImg.src = zoomImgObj.src;
		}
	}


	// 拡大処理
	function zoomIn() {
		clearInterval(zoomStartTimer);

		//　拡大後の画像サイズ //ダミー画像オブジェクトに読み込んでサイズを取得
		var dummyImg = document.getElementById("dummy");
		dummyImg.src = zoomImgObj.src;
		endWidth = dummyImg.width;
		endHeight = dummyImg.height;


		// ウィンドウサイズ取得
		if (document.all) {
			if(document.documentElement.clientWidth) {
				winWidth   = document.documentElement.clientWidth;
				winHeight  = document.documentElement.clientHeight;
				winScroll  = document.documentElement.scrollTop;
			}
			else {
				winWidth  = document.body.clientWidth;
				winHeight = document.body.clientHeight;
				winScroll = document.body.scrollTop;
			}
		}
		else {
			winWidth  = window.innerWidth;
			winHeight = window.innerHeight;
			winScroll = window.pageYOffset;
		}

		var imgX = 0;
		var imgY = 0;
		if (imgObj.childNodes[0].width) {
			startWidth = imgObj.childNodes[0].width;
			startHeight = imgObj.childNodes[0].height;

			// 画像の左上座標（拡大開始座標）
			elemFind = imgObj.childNodes[0];
			do {
				imgX += elemFind.offsetLeft;
				imgY += elemFind.offsetTop;
			} while ( elemFind = elemFind.offsetParent )
		}
		//　スクロールバーがある場合、その分X座標を調整
		if (document.getElementById('scroller')) {
			imgX = imgX - document.getElementById('scroller').scrollLeft;
		}

		//　拡大後の画像サイズ
//		endWidth = zoomImgObj.width;
//		endHeight = zoomImgObj.height;

		// 拡大画像のサイズ、位置、表示を設定
		zoomImgObj.style.width = startWidth + 'px';
		zoomImgObj.style.height = startHeight + 'px';
		zoomAreaObj.style.left = imgX + 'px';
		zoomAreaObj.style.top = imgY + 'px';
		zoomAreaObj.style.visibility = "visible";

		// 縦横比率
		sizeRatio = endWidth / endHeight;
		if (endWidth > winWidth - minBorder) {
			endWidth = winWidth - minBorder;
			endHeight = endWidth / sizeRatio;
		}
		if (endHeight > winHeight - minBorder) {
			endHeight = winHeight - minBorder;
			endWidth = endHeight * sizeRatio;
		}

		// 
		dX = ((winWidth / 2) - (endWidth / 2) - imgX);
		dY = (((winHeight / 2) - (endHeight / 2) - imgY) + winScroll);
		// 
		dWidth = (endWidth - startWidth);
		dHeight = (endHeight - startHeight);

		tempSteps = 15;

		zoomIndex = 0;

		zoomImgTimer = setInterval("zoomElement("+zoomIndex+", "+startWidth+", "+dWidth+", "+startHeight+", "+dHeight+", "+imgX+", "+dX+", "+imgY+", "+dY+", "+tempSteps+")", zoomTime);
	}


	// ズームアウト
	function zoomOut(imgObj, evt) {
		if(zoomStatus == 2) {
			zoomStatus = 3;

			zoomIndex = 0;
			zoomImgTimer = setInterval("zoomOpacity("+zoomIndex+")", zoomTime);
		}
	}


	// 透過処理
	function zoomOpacity(zoomIndex) {
		var object = document.getElementById("zoomArea").style;
		if (zoomIndex > zoomSteps) {
			clearInterval(zoomImgTimer);

			object.visibility = "hidden";

			object.filter = "alpha(opacity=100)"; // IE/Win
			object.opacity = 1;       // Safari 1.2, Firefox+Mozilla
			
			zoomStatus = 0;
		}
		else {

			object.filter = "alpha(opacity=" + ((zoomSteps - zoomIndex) / zoomSteps)*100 + ")"; // IE/Win
			object.opacity = ((zoomSteps - zoomIndex) / zoomSteps);       // Safari 1.2, Firefox+Mozilla

			zoomIndex++;
			
			clearInterval(zoomImgTimer);
			zoomImgTimer = setInterval("zoomOpacity("+zoomIndex+")", zoomTime);
		}
	}


	function zoomElement(zoomIndex, zoomStartW, zoomChangeW, zoomStartH, zoomChangeH, zoomStartX, zoomChangeX, zoomStartY, zoomChangeY, zoomSteps) {
		if (zoomIndex > zoomSteps) {
			zoomStatus = 2;
			clearInterval(zoomImgTimer);
		}
		else {
			// 次に表示する画像のサイズと位置計算
			moveW = cubicInOut(zoomIndex, zoomStartW, zoomChangeW, zoomSteps);
			moveH = cubicInOut(zoomIndex, zoomStartH, zoomChangeH, zoomSteps);
			moveX = cubicInOut(zoomIndex, zoomStartX, zoomChangeX, zoomSteps);
			moveY = cubicInOut(zoomIndex, zoomStartY, zoomChangeY, zoomSteps);
		
			document.getElementById("zoomArea").style.left = moveX + 'px';
			document.getElementById("zoomArea").style.top = moveY + 'px';
			zoomImgObj.style.width = moveW + 'px';
			zoomImgObj.style.height = moveH + 'px';

			zoomIndex++;
			
			clearInterval(zoomImgTimer);
			zoomImgTimer = setInterval("zoomElement("+zoomIndex+", "+zoomStartW+", "+zoomChangeW+", "+zoomStartH+", "+zoomChangeH+", "+zoomStartX+", "+zoomChangeX+", "+zoomStartY+", "+zoomChangeY+", "+zoomSteps+")", zoomTime);
		}
	}

	function cubicInOut(t, b, c, d){
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	}

