var z_Step = 50;

var z_ua = navigator.userAgent.toLowerCase();
var z_isIE = (z_ua.indexOf('msie 6')>-1 || z_ua.indexOf('msie 7')>-1 || z_ua.indexOf('msie 8')>-1) ? true : false;
var z_a, z_i, z_img = new Array();

if (window.addEventListener) {
	window.addEventListener("load", z_loadIndicatorImage, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", z_loadIndicatorImage);
}

function z_loadIndicatorImage() {
	z_i = new Image();
	z_i.src = 'image/Indicator.gif';
	z_box();
}

function z_box() {
	z_a = document.getElementsByTagName('a');
	for (var i=0, len=z_a.length; i<len; i++) {
		if (typeof z_a[i]=='object') if (z_a[i].getAttribute('rel')=='zoombox') {
			z_getProperty(z_a[i]);
			var img = z_a[i].firstChild;
			if (typeof img.tagName !== 'undefined') {
				z_getProperty(img);
				z_a[i].px = img.px; z_a[i].py = img.py; z_a[i].w = img.w; z_a[i].h = img.h;
			}
			z_a[i].src=z_a[i].href;
			z_a[i].href='javascript:zoom('+i+')';
		}
	}
	setInterval('z_compute()',5);
}

function zoom(i) {
	var opened = false;
	for (var j=0, len=z_img.length; j<len; j++) {
		var img = z_img[j];
		if (img.no == i) {
			if (img.pace==0) { img.pace = -1; } else { img.pace *= -1; }
			opened = true; break;
		}
  }

	if (opened) {} else {
		var scrollTop  = document.body.scrollTop  || document.documentElement.scrollTop;
		var clientWidth = document.body.clientWidth;
		var clientHeight = window.innerHeight || document.documentElement.clientHeight;
		var loading = document.createElement('div');
		loading.style.backgroundImage = 'url(image/Indicator.gif)'; 
		loading.style.backgroundRepeat = 'no-repeat'; 
		loading.style.backgroundPosition = 'center center'; 
		loading.style.position = 'absolute';
		loading.style.width = z_a[i].w + 'px';
		loading.style.height = z_a[i].h + 'px';
		loading.style.left = z_a[i].px + 'px';
		loading.style.top = z_a[i].py + 'px';
		document.body.appendChild(loading);
		var originalImage = new Image();
		originalImage.src = z_a[i].src + '?session=' + Math.round(100000*Math.random());
		originalImage.onload = function() {
			document.body.removeChild(loading);
			var originalWidth = originalImage.width;
			var originalHeight = originalImage.height;
			while (originalWidth>clientWidth-100 || originalHeight>clientHeight-100) {
				originalHeight = 0.99*originalHeight;
				originalWidth = 0.99*originalWidth;
			}
			var newImage = document.createElement('img');
			z_img[z_img.length] = newImage;
			newImage.src = originalImage.src;
			newImage.style.display = 'block';
			newImage.style.visibility = 'hidden';
			newImage.style.position = 'absolute';
			newImage.style.left = 0;
			newImage.style.top = 0;
			newImage.style.cursor = 'pointer';
			newImage.no = i;
			newImage.sx = z_a[i].px;
			newImage.sy = z_a[i].py;
			newImage.sw = z_a[i].w;
			newImage.sh = z_a[i].h;
			newImage.gx = Math.round((clientWidth-originalWidth)/2);
			newImage.gy = Math.round(scrollTop+(clientHeight-originalHeight)/2);
			newImage.gw = originalWidth;
			newImage.gh = originalHeight;
			newImage.dx = (newImage.gx-newImage.sx)/z_Step;
			newImage.dy = (newImage.gy-newImage.sy)/z_Step;
			newImage.dw = (newImage.gw-newImage.sw)/z_Step;
			newImage.dh = (newImage.gh-newImage.sh)/z_Step;
			newImage.step = 0;
			newImage.pace = 1;
			document.body.appendChild(newImage);
			newImage.onclick = function() {
				if (newImage.pace==0) { newImage.pace = -1; } else { newImage.pace *= -1; }
			}
		}
	}
}

function z_compute() {
	for (var i=0, len=z_img.length; i<len; i++) {
		var img = z_img[i];
		img.style.visibility = 'visible';
		if (img.pace==0) {
		} else if (img.step>z_Step) {
			img.step = z_Step;
			img.pace = 0;
		} else if (img.step<0) {
			z_img.splice(i,1);
			document.body.removeChild(img);
			break;
		} else {
			var iw = Math.round(img.step*img.dw+img.sw);
			var ih = Math.round(img.step*img.dh+img.sh);
			var rotate = img.step*Math.PI*2/z_Step;
			var cos = Math.cos(rotate);
			var sin = Math.sin(rotate);
			var foX = 0;
			var foY = 0;
			if (img.step==z_Step) {
				var transformPropaty = '';
				var transformPropatyIE = '';
				var boxshadowPropaty = '0px 2px 10px #000000';
			} else {
				var M11=cos, M12=sin, M21=-1*sin, M22=cos;
				var transformPropaty = 'matrix('+M11+', '+M21+', '+M12+', '+M22+', 0, 0)';
				var transformPropatyIE = 'progid:DXImageTransform.Microsoft.Matrix(M11='+M11+',M12='+M12+',M21='+M21+',M22='+M22+',Dx=0, Dy=0, FilterType="bilinear",sizingMethod="auto expand")';
				var boxshadowPropaty = '';
				if (z_isIE) {
					var foArrayX = new Array(-0.5*(iw*cos-ih*sin), 0.5*(iw*cos+ih*sin), -0.5*(iw*cos+ih*sin), 0.5*(iw*cos-ih*sin));
					var foArrayY = new Array( -0.5*(iw*sin+ih*cos), 0.5*(iw*sin-ih*cos), -0.5*(iw*sin-ih*cos), 0.5*(iw*sin+ih*cos));
					foArrayX.sort( function(a,b) { return a-b } );
					foArrayY.sort( function(a,b) { return a-b } );
					foX = foArrayX[0]+0.5*iw;
					foY = foArrayY[0]+0.5*ih;
				}
			}
			img.style.WebkitBoxShadow = boxshadowPropaty;
			img.style.MozBoxShadow = boxshadowPropaty;
			img.style.boxShadow = boxshadowPropaty;
			img.style.left = Math.round(img.step*img.dx+img.sx+foX) + 'px';
			img.style.top = Math.round(img.step*img.dy+img.sy+foY) + 'px';
			img.style.width = iw + 'px';
			img.style.height = ih + 'px';
			img.style.transform = transformPropaty;
			img.style.MozTransform = transformPropaty;
			img.style.webkitTransform = transformPropaty;
			img.style.OTransform = transformPropaty;
			img.style.filter = transformPropatyIE;
		}
		img.step += img.pace;
	}
}

function z_getProperty(obj) {
	obj.h = obj.offsetHeight;
	obj.w = obj.offsetWidth;
	var x=0;
	var y=0;
	getPosition(obj);
	function getPosition(obj) {
		obj.c++;
		x += obj.offsetLeft; y += obj.offsetTop;
		if (obj.offsetParent == document.body) {} else {
			getPosition(obj.offsetParent);
		}
	}
	obj.px = x;
	obj.py = y;
}

