ISO.addModule('include',function()
{
	self.addEvent(_w,'load',init);
	
	function init()
	{
		var e = new self.DOM('flash');
		
		e.includeSWF('slideshow/gallery.swf',
		{
			width:600,
			height:320,
			scale:'noscale',
			quality:'best',
			bgcolor:'#000000',
			wmode:'transparent',
			allowFullScreen:'true',
			menu:'false'
		},'flash_includes',
		{
			xmlPath:'slideshow/data.xml'
		});
	}
});

ISO.addModule('popup',function()
{
	self.addEvent(_w,'load',init);
	self.addEvent(_w,'unload',finalize);
	
	var // vars
	current = -1,
	collection = [],
	
	container = _d.createElement('div'),
	background = null,
	popup = null,
	
	outer = null,
	right = null,
	left = null,
	
	image = null,
	
	loading = null,
	counter = null,
	
	btnClose = null,
	btnNext = null,
	btnPrev = null,
	
	stage = null,
	fx = null,
	
	state = 0,
	isFirst = true,
	isResize = false,
	isActive = false,
	isOpen = false,
	isPlay = false,
	isLoading = false,
	isIE = self.browser.isIE;
	isOpera = self.browser.isOpera;
	
	function init()
	{
		self.includeCSS('css/popup_slideshow.css');
		
		/* popup tag */
		container.innerHTML =	'<div id="popup_bg"></div>' +
								'<div id="popup"><table id="popup_outer"><tr><td id="popup_left"></td><td id="popup_right"></td></tr></table></div>' +
								'<div id="popup_loading"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="60" height="60" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="movie" value="img/popup/loading.swf" /><param name="quality" value="high" /><param name="scale" value="noscale" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#000000" /><embed src="img/popup/loading.swf" quality="high" bgcolor="#000000" width="60" height="60" name="loading" align="middle" wmode="transparent" scale="noscale" allowScriptAccess="always" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer_jp" /></object></div>' +
								'<p id="popup_counter" style="display:none;"></p><a href="javascript:void(0);" title="閉じる" id="popup_close"></a><a href="javascript:void(0);" title="次へ" id="popup_next"></a><a href="javascript:void(0);" title="前へ" id="popup_prev"></a>';
		
		container.style.cssText = 'display:none;position:absolute;left:0px;top:0px;overflow:hidden;z-index:100;';
		_d.body.appendChild(container);
		
		stage = $$('html')[0];
		background = $('popup_bg');
		popup = $('popup');
		
		outer = $('popup_outer');
		right = $('popup_right');
		left = $('popup_left');
		
		loading = $('popup_loading');
		counter = $('popup_counter');
		
		btnClose = $('popup_close');
		btnNext = $('popup_next');
		btnPrev = $('popup_prev');
		
		
		/* move */
		fx = new self.Effect(popup,40,4);
		
		/* event setting */
		btnClose.onclick = close;
		btnNext.onclick = function()
		{
			if(isOpen)
			{
				fx.move(-1300,'auto',next);	
				isOpen = false;
			}
		};
		btnPrev.onclick = function()
		{
			if(isOpen)
			{
				fx.move(self.window.offset()[0]+1300,'auto',prev);
				isOpen = false;
			}
		};
		
		self.addEvent(_w,'resize',resize);
		self.addEvent(_w,'scroll',resize);
		
		
		/* convert gallery tags */
		var e = $('gallery');
		var e2 = $$('div',e);
		
		var div = _d.createElement('div');
		div.className = 'gallery';
		
		for(var i=0,l=e2.length;i<l;i++)
		{
			var h = $$('h3',e2[i])[0];
			var a = $$('a',e2[i])[0];
			var img = $$('img',e2[i])[0];
			var p1 = $$('p',e2[i])[0];
			var p2 = $$('p',e2[i])[1];
			
			collection[collection.length] = 
			{
				title	:h.innerHTML,
				href	:a.href,
				src		:img.src,
				explan	:p1.innerHTML,
				contents:p2.innerHTML
			};
			
			var thumb = _d.createElement('a');
			thumb.className = 'thumb';
			thumb.href = 'javascript:void(0);';
			thumb.num = i;
			thumb.onclick = open;
			thumb.onmouseover = hover;
			
			thumb.innerHTML = '<img src="'+ img.src +'" alt="'+ h.innerHTML +'" />';
			div.appendChild(thumb);
		}
		
		e.innerHTML = '';
		e.appendChild(div);
	}
	
	function finalize()
	{
		background.onclick = null;
		
		btnClose.onclick = null;
		btnNext.onclick = null;
		btnPrev.onclick = null;
		
		container.innerHTML = '';
		container = null;
		
		self.removeEvent(_w,'resize',resize);
		self.removeEvent(_w,'scroll',resize);
	}
	
	
	// animation
	function open()
	{
		current = this.num;
		
		var param = collection[current];
		
		left.innerHTML = '';
		image = _d .createElement('img');
		image.src = param.href;
		image.title = param.title;
		left.appendChild(image);
	
		image.onload = ready;
		
		right.innerHTML = '<h3>'+ param.title +'</h3><p class="explan">'+ param.explan +'</p><p class="contents">'+ param.contents +'</p>';
		loading.style.display = 'block';
		
		container.style.display = 'block';
		loading.style.display = 'block';
		popup.style.cssText = 'left:-9999px;top:9999px;';
		
		
		state = 0;
		isLoading = true;
		isActive = true;
		
		if(isIE || isOpera) ready();
	}
	
	function next()
	{
		if(current+1 >= collection.length)
		{
			current = 0;
		}
		else
		{
			current++;
		}
		
		state = 1;
		isLoading = true;
		
		layout();
	}
	
	function prev()
	{
		if(current <= 0)
		{
			current = collection.length-1;
		}
		else
		{
			current--;
		}
		
		state = -1;
		isLoading = true;
		
		layout();
	}
	
	function layout()
	{
		var param = collection[current];
		
		left.innerHTML = '';
		image = _d .createElement('img');
		image.src = param.href;
		image.title = param.title;
		left.appendChild(image);
	
		image.onload = ready;
			
		right.innerHTML = '<h3>'+ param.title +'</h3><p class="explan">'+ param.explan +'</p><p class="contents">'+ param.contents +'</p>';
		loading.style.display = 'block';
		
		if(isOpera) ready();
	}
	
	function hover()
	{
		if(!isOpen)
		{
			var param = collection[this.num];
			
			left.innerHTML = '';
			image = _d .createElement('img');
			image.src = param.href;
			image.title = param.title;
			left.appendChild(image);
		}
	}
	
	function ready()
	{
		offset(image,'auto','auto');
		isLoading = false;
		
		stage.style.overflow = 'hidden';
		loading.style.display = 'none';
		
		var o = self.window.offset();
		var s = self.window.scroll();
		
		var w = image.offsetWidth;
		var h = image.offsetHeight;
		
		var def = 0;
		if(o[0] < 500 || o[1] < 350)
		{
			right.style.display = 'none';
			def = 0;
		}
		else
		{
			right.style.display = 'block';
			def = 450;
		}
		
		while(w > o[0] - def - 200 || h > o[1] - 170)
		{
			w /= 2;
			h /= 2;
			
			if(w < 10 || h < 10) break;
		}
		
		offset(container,o[0],o[1]);
		position(container,s[0],s[1]);
		
		offset(image,w,h);
		offset(left,w,h);
		
		offset(background,o[0],o[1]);
		
		offset(outer,w+def,h);
		offset(popup,w+def,h);
		
		if(!isPlay)
		{
			isPlay = true;
			if(state <= -1)
			{
				position(popup,-1300,(o[1] - h)/2-50);
				fx.move((o[0] - w - def)/2,'auto',complete);
			}
			else if(state >= 1)
			{
				position(popup,o[0]+1300,(o[1] - h)/2-50);
				fx.move((o[0] - w - def)/2,'auto',complete);
			}
			else
			{
				position(popup,(o[0] - w - def)/2,-500);
				fx.move('auto',(o[1] - h)/2-50,complete);
			}
		}
		
		/* counter */
		counter.innerHTML = current+1+'/'+collection.length;
	}
	
	function complete()
	{
		isOpen = true;
		isPlay = false;
		
		var o = self.window.offset();
		var w = image.offsetWidth;
		var h = image.offsetHeight;
		
		if(isFirst)
		{
			if(collection.length > 1)
			{
				position(btnNext,o[0],o[1]/2);
				btnNext.className = 'next';
				
				(new self.Effect(btnNext,40,4)).move(o[0]-100,'auto',function()
				{
					btnNext.style.cssText = '';
				});
				
				position(btnPrev,-100,o[1]/2);
				btnPrev.className = 'prev';
				
				(new self.Effect(btnPrev,40,4)).move(0,'auto',function()
				{
					btnPrev.style.cssText = '';
				});
			}
			
			position(btnClose,o[0]/2,o[1]+160);
			btnClose.className = 'close';
			
			(new self.Effect(btnClose,40,4)).move('auto',o[1]-70,function()
			{
				btnClose.style.cssText = '';
			});
			
			counter.style.display = 'block';
			
			isFirst = false;
		}
		
		if(isResize)
		{
			var def = 0;
			if(o[0] < 500 || o[1] < 350)
			{
				right.style.display = 'none';
				def = 0;
			}
			else
			{
				right.style.display = 'block';
				def = 450;
			}
			
			while(w > o[0] - def - 200 || h > o[1] - 170)
			{
				w /= 2;
				h /= 2;
				
				if(w < 10 || h < 10) break;
			}
			
			position(popup,(o[0] - w - def)/2, (o[1] - h)/2-50);
		}
		
		isResize = false;
	}
	
	function close()
	{
		if(isOpen)
		{
			stage.style.overflow = 'auto';
			container.style.display = 'none';
			image.onload = null;
			
			isOpen = false;
			isActive = false;
		}
		else if(isLoading)
		{
			stage.style.overflow = 'auto';
			container.style.display = 'none';
			image.onload = null;
			
			isOpen = false;
			isLoading = false;
			isActive = false;
		}
	}
	
	function resize()
	{
		if(isActive)
		{
			isResize = true;
			
			offset(image,'auto','auto');
			
			var o = self.window.offset();
			var s = self.window.scroll();
			var w = image.offsetWidth;
			var h = image.offsetHeight;
			
			var def = 0;
			if(o[0] < 500 || o[1] < 350)
			{
				right.style.display = 'none';
				def = 0;
			}
			else
			{
				right.style.display = 'block';
				def = 450;
			}
			
			while(w > o[0] - def - 200 || h > o[1] - 170)
			{
				w /= 2;
				h /= 2;
				
				if(w < 10 || h < 10) break;
			}
			
			offset(image,w,h);
			offset(left,w,h);
			
			offset(outer,w+def,h);
			offset(popup,w+def,h);
				
			offset(container,o[0],o[1]);
			position(container,s[0],s[1]);
					
			offset(background,o[0],o[1]);
			
			if(isOpen)
			{
				position(popup,(o[0] - w - def)/2, (o[1] - h)/2-50);
			}
		}
	}
	
	
	/* util */
	function offset(e,w,h)
	{
		if(w || h)
		{
			if(w == 'auto')
			{
				e.style.width = 'auto';
			}
			else if(w != 'default')
			{
				e.style.width = w + 'px';
			}
			
			if(h == 'auto')
			{
				e.style.height = 'auto';
			}
			else if(h != 'default')
			{
				e.style.height = h + 'px';
			}
		}
		else
		{
			return [parseInt(e.style.width),parseInt(e.style.height)];
		}
	}
	
	
	function position(e,x,y)
	{
		if(x || y)
		{
			if(x == 'auto')
			{
				e.style.left = 'auto';
			}
			else if(x != 'default')
			{
				e.style.left = x + 'px';
			}
			
			if(y == 'auto')
			{
				e.style.top = 'auto';
			}
			else if(y != 'default')
			{
				e.style.top = y + 'px';
			}
		}
		else
		{
			return [parseInt(e.style.left),parseInt(e.style.top)];
		}
	}
});

