/* =====================================================================
*
*    gateway.js
*
* =================================================================== */

/**
 * gateway.js
 * 
 * @author	: gd incorporated.
 * @version	: 2.1.07
 */
var gd = function()
{
	var client;
	var h;
	var handleMouseFlg = true;
	var AS_SCROLLEVENT_METHOD_NAME = 'handleScrollEvent';
	var AS_SETHEIGHT_METHOD_NAME = 'setFlashHeight';
	var swfElementId, swfName, swfElementHeight;
	var addedCallbackMethod;
	var browserMajorVersion;
	var scrollEventElements, scrollEventElementsY, chosenScrollEventElement;
	var init = function()
	{
		client = gd_client;
		browserMajorVersion = client.getBrowserVersion().major;
	}();
	function moveWheel(e)
	{
		if(! handleMouseFlg) return;
		var delta = 0;
		if(! e) e = window.event;
		if(e.wheelDelta)
		{
			var d = e.wheelDelta;
			delta = d / Math.abs(d);
			if(client.isOpera && browserMajorVersion <= 8)
			{
				delta = -delta;
			}
		}else if(e.detail)
		{
			var d = e.detail; 
			delta = -d / Math.abs(d);
		}
		if(delta != 0)
		{	
			var element = document.getElementById(swfName);
			if(element[AS_SCROLLEVENT_METHOD_NAME]) element[AS_SCROLLEVENT_METHOD_NAME](delta);
		}
	}
	function addedSWF(e)
	{
		if(addedCallbackMethod) addedCallbackMethod.apply(this, arguments);
	}
	function resizeHandler(e)
	{
		// setFlashHeight しないと無効
		if(! swfElementHeight) return;
		
		var element = document.getElementById(swfElementId);
		if(typeof(swfElementHeight) == "number")
		{
			var innerH = client.getInnerHeight();
			if(innerH > swfElementHeight)
			{
				element.style.height = '100%';
			}else{
				element.style.height = this.setFlashHeight(this.flashcontentHeight);
			}
		}
	}
	function onScroll(e)
	{
		var currentY = document.documentElement.scrollTop || document.body.scrollTop;
		var plus = client.getInnerHeight() * 0.3;
		currentY += plus;
		
		for(var i in scrollEventElementsY)
		{
			var min = scrollEventElementsY[i];
			var max = scrollEventElementsY[Number(i) + 1] || 9999999999;
			
			if(currentY >= min && currentY < max)
			{
				if(client.isMSIE)
				{
					window[swfName].changeScrollContent(scrollEventElements[i]);
				}else{
					document[swfName].changeScrollContent(scrollEventElements[i]);
				}
				if(chosenScrollEventElement == scrollEventElements[i]) return;
				if(chosenScrollEventElement) document.getElementById(chosenScrollEventElement).className = 'content-block-blur';
				chosenScrollEventElement = scrollEventElements[i];
				for(var ii in scrollEventElements)
				{
					if(scrollEventElements[ii] == chosenScrollEventElement)
					{
						document.getElementById(scrollEventElements[ii]).className = 'content-block';
						break;
					}
				}
				break;
			}
		}
	}
	return{
		client: client,
		embedSWF: function(swfPath, elementId, width, height, version, exInstallSwfPath, flashvarsObj, paramsObj, attributesObj, callbackMethod)
		{
			swfName = attributesObj.id;
			swfElementId = elementId;
			addedCallbackMethod = callbackMethod;
			swfobject.embedSWF(swfPath, elementId, width, height, version, exInstallSwfPath, flashvarsObj, paramsObj, attributesObj, addedSWF);
		},
		cleanSWF: function()
		{
			swfobject.cleanup();
		},
		addSWFMouseWheel: function()
		{
			if(client.isEventListener && client.isGecko)
			{
				window.addEventListener('DOMMouseScroll', moveWheel, false);
			}else
			{
				window.onmousewheel = document.onmousewheel = moveWheel;
			}
		},
		removeSWFMouseWheel: function()
		{
			if(client.isEventListener && client.isGecko)
			{
				window.removeEventListener('DOMMouseScroll', moveWheel, false);
			}else
			{
				window.onmousewheel = document.onmousewheel = null;
			}
			handleMouseFlg = false;
		},
		addResizeHandler: function()
		{
			if(client.isEventListener)
			{
				window.addEventListener('resize', resizeHandler, false);
			}else
			{
				window.onresize = resizeHandler;
			}
		},
		addResizeEventListener: function(handler)
		{
			if(client.isEventListener)
			{
				window.addEventListener('resize', handler, false);
			}else
			{
				window.attachEvent('onresize', handler);
			}
		},
		removedResizeEventListener: function(handler)
		{
			if(client.isEventListener)
			{
				window.removeEventListener('resize', handler, false);
			}else
			{
				window.detachEvent('onresize', handler);
			}
		},
		removeResizeHandler: function()
		{
			if(client.isEventListener)
			{
				window.removeEventListener('resize', resizeHandler, false);
			}else
			{
				window.onresize = null;
			}
		},
		setFlashHeight: function(lh)
		{
			var element = document.getElementById(swfElementId);
			var lwh = (lh < client.getInnerHeight()) ? 0 : lh;
			if(lwh <= 0)
			{
				swfElementHeight = '100%';
				element.style.height = '100%';
			}else
			{
				swfElementHeight = lwh;
				element.style.height = lwh;
			}
		},
		setStatus: function( str )
		{
			window.status = str;
			return true;
		},
		getInnerWidth: function()
		{
			return client.getInnerWidth();
		},
		getInnerHeight: function()
		{
			return client.getInnerHeight();
		},
		getScreenSize: function()
		{
			return client.getScreenSize();
		},
		/**
		 * Flashへスクロールイベントを送出
		 * @param {Array} elements
		 */
		addScrollEvent: function( elements )
		{
			scrollEventElements = elements;
			scrollEventElementsY = new Array();
			for(var i=0; i< scrollEventElements.length; i++)
			{
				scrollEventElementsY[i] = client.getOffsetTop(scrollEventElements[i]);
			}
			if(client.isEventListener)
			{
				window.addEventListener('scroll', onScroll, false);
			}else{
				window.onscroll = onScroll;
			}
		}
	}
}();

