/**
 * gd gateway v2.0 include SWFObject, SWFAddress
 *
 * @author		: gd incorporated.
 * @version	: 2.1.04
 */
function gdGateway(){
	this.client = new gdClient();
	
}
gdGateway.prototype = {
	setSwf : function(swfFile, swfName, swfWidth, swfHeight, swfVersion, backGround){
		this.swfName = swfName;
		this.swfVersion = swfVersion;
		so = new SWFObject(swfFile, this.swfName, swfWidth, swfHeight, swfVersion, backGround);
		//topflash
		if(swfFile == "project.swf"){
			so.useExpressInstall('/expressinstall.swf');
		}
		//product flash
		else{
			so.useExpressInstall('/works/expressinstall.swf');
		}
	},
	writeSWFObject : function(flashElement, defaultElement){
		this.flashElement = flashElement;
		this.defaultElement = defaultElement;
		if(this.client.isMSIE && this.client.isWin){
			var yourVer;
			document.write('<scr' + 'ipt language=\"VBScript"\ type=\"text/vbscript\"\> \n');
			document.write('on error resume next \n');
			document.write('yourVer = Left(Hex(Int(CreateObject("ShockwaveFlash.ShockwaveFlash").FlashVersion)),1)\n');
			document.write('</scr' + 'ipt\> \n');
			this.swfYourVer = yourVer;
			if(this.swfYourVer == undefined){
				
			}
		}
		//useExpressInstall [6,0,65 or later]
		if(so.installedVer.major < 7 || this.client.isOS9 ){
			document.getElementById(this.defaultElement).style.display = "block";
			document.getElementById(this.defaultElement).className = "noflash-container";
			document.getElementById(this.flashElement).style.display = "none";
			if(this.client.isOS9) document.getElementById("gateway-message").innerHTML = "<strong>Mac OS9にインストール出来るFlashPlayerは、7が最新となります。</strong>";
		}else{
			document.getElementById(this.defaultElement).style.display = "none";
			document.getElementById(this.flashElement).className = "flashcontent-auto";
			
			so.write(this.flashElement);
		}
		
	},
	easyFlash : function(elementName)
	{
		if( so.installedVer.major < 7 || this.client.isOS9 ){
			// no express
			
		}else{
			// express
			so.write(elementName);
		}
	},
	addSWFObjectParam : function(param, value){
		so.addParam(param, value);
	},
	addMouseWheelEvent : function(){
		this.handleMouseFlg = true;
		//if(this.client.isOSX){
			if(window.addEventListener){
				window.addEventListener('DOMMouseScroll', createDelegate(this, this.moveWheel), false);
			}
				window.onmousewheel = document.onmousewheel = createDelegate(this, this.moveWheel);
			
		//}
	},
	moveWheel : function(event){
		if(! this.handleMouseFlg) return;
		var delta = 0;
		if(! event) event = window.event;
		if(event.wheelDelta){
			delta = event.wheelDelta / 120; 
			if(window.opera) delta = -delta;
		}else if(event.detail){
			delta = -event.detail / 3;
		}
		if(delta != 0){
			document[this.swfName].handleScrollEvent(delta);
		}
	},
	removeMouseWheelEvent : function(){
		this.handleMouseFlg = false;
		window.removeEventListener('DOMMouseScroll',createDelegate(this, this.moveWheel), false);
		window.onmousewheel = document.onmousewheel = createDelegate(this, this.dummy);
	},
	addResizeHandler : function(){
		window.onresize = createDelegate(this, this.onResize);
	},
	removeResizeHandler : function(){
		window.onresize = null;
	},
	onResize : function(w){
		var le = document.getElementById(this.flashElement);
		if(typeof(this.flashcontentHeight) == "number"){
			if(this.getInnerHeight() > this.flashcontentHeight ){
				le.style.height = '100%';
			}else{
				le.style.height = this.setFlashHeight(this.flashcontentHeight);
			}
		}
	},
	// ブラウザのインナー幅を返す
	getInnerWidth : function(){
		return (this.client.isMSIE) ? (this.client.isCompatMode) ? document.documentElement.clientWidth : document.body.clientWidth : window.innerWidth;
	},
	// ブラウザのインナー高を返す
	getInnerHeight : function(){
		return (this.client.isMSIE) ? (this.client.isCompatMode) ? document.documentElement.clientHeight : document.body.clientHeight : window.innerHeight;
	},
	getScreenSize : function(){
		var S = new Object();
		if(screen.availWidth){
			S.w = screen.availWidth;
			S.h = screen.availHeight;
		}else{
			S.w = screen.width;
			S.h = screen.height;
		}
		return S;
	},
	setTracker : function(ptrack){
		//
	},
	setFlashHeight : function(lh){
		//arguments
		var le = document.getElementById(this.flashElement);
		var lwh = (lh < this.getInnerHeight()) ? 0 : lh;
		if(lwh <= 0){
			this.flashcontentHeight = '100%';
			le.style.height = '100%';
		}else{
			this.flashcontentHeight = lwh;
			le.style.height = lwh;
		}
		//document.body.className = "flashcontent-" + lscroll;
	},
	setStatus : function( str ){
		window.status = str;
		return true;
	},
	/**
	 * Flashへスクロールイベントを送出
	 */
	addScrollEvent : function( elements ){
		this.scrollEventElements = elements;
		this.scrollEventElementsY = new Array();
		for(var i in this.scrollEventElements){
			this.scrollEventElementsY[i] = getOffsetTop(this.scrollEventElements[i]);
		}
		/*		
		if(KL_NS4 || KL_NS6) return self.pageYOffset;
        if(KL_IE4 || KL_OP6) return kl_dbody().scrollTop;
        */
		if(window.addEventListener){
			window.addEventListener('scroll', createDelegate(this, this.onScroll), false);
		}else{
			window.onscroll = createDelegate(this, this.onScroll);
		}
	},
	onScroll : function(){
		var currentY = document.documentElement.scrollTop || document.body.scrollTop;
		var plus = this.getInnerHeight() * 0.3;
		currentY += plus;
		
		for(var i in this.scrollEventElementsY){
			var min = this.scrollEventElementsY[i];
			var max = this.scrollEventElementsY[Number(i) + 1] || 9999999999;
			
			if(currentY >= min && currentY < max){
				if(this.client.isMSIE){
					window[this.swfName].changeScrollContent( this.scrollEventElements[i] );
				}else{
					document[this.swfName].changeScrollContent( this.scrollEventElements[i] );
				}
				if(this.chosenScrollEventElement == this.scrollEventElements[i]) return;
				if( this.chosenScrollEventElement ) document.getElementById( this.chosenScrollEventElement ).className = 'content-block-blur';
				this.chosenScrollEventElement = this.scrollEventElements[i];
				for(var ii in this.scrollEventElements){
					if(this.scrollEventElements[ii] == this.chosenScrollEventElement){
						document.getElementById( this.scrollEventElements[ii] ).className = 'content-block';
						break;
					}
				}
				break;
			}
		}
	},
	doAnchorPlus : function( AnchorName ){
		var plus = this.getInnerHeight() * 0.25;
		var posY = document.getElementById(AnchorName).offsetTop - plus;
		posY = (posY <= 0) ? 0 : posY;
		if(posY != undefined){
			scrTar(0,posY);
		}else{
			location.href = "#" + AnchorName;
		}
	}
};

function createDelegate(pIns, phandler){
	var del = function(){ return phandler.apply(pIns, arguments); };
	del.phandler = phandler;
	del.pIns = pIns;
	return del;
}
function getOffsetTop(elementName){
	return document.getElementById(elementName).offsetTop;
}





