///// 汎用 ////////////////////////////////////////////////////////////////////
var FAssist = {
	min : function(x,y)	{return (y < x) ? y : x;},
	max : function(x,y)	{return (x < y) ? y : x;}
}
///// ブラウザ情報 ////////////////////////////////////////////////////////////
var FBrowserInfo = {
	isOpera     : function()		{return window.opera;},
	isSafari    : function()		{return window.getMatchedCSSRules;},
	isFirefox   : function()		{return (/Firefox/.test(navigator.userAgent));},
	isGecko     : function()		{return (/Gecko\//.test(navigator.userAgent));},
	isIE        : function()		{return document.all && !this.isOpera() && !this.isSafari() && !this.isGecko();},
	isWinIE     : function()		{return this.isIE && (/Win/.test(navigator.userAgent));},
	isWinIE5    : function()		{return this.isWinIE() && (/MSIE (5\.5)/.test(navigator.userAgent));},
	isWinIE6    : function()		{return this.isWinIE() && (/MSIE (6\.)/.test(navigator.userAgent));},
	isMacIE     : function()		{return isIE && (/Mac/.test(navigator.userAgent));}
}
///// ウィンドウ情報 //////////////////////////////////////////////////////////
var FWindowInfo = {
	getWidth  : function()	{return (window.innerWidth ) ? window.innerWidth  : ((document.documentElement && document.documentElement.clientWidth ) ? document.documentElement.clientWidth  : document.body.clientWidth );},
	getHeight : function()	{return (window.innerHeight) ? window.innerHeight : ((document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.clientHeight);}
}
///// ページ情報 //////////////////////////////////////////////////////////////
var FPageInfo = {
	getWidth  : function()	{return FAssist.max( (window.innerWidth  && window.scrollMaxX) ? (window.innerWidth  + window.scrollMaxX) : ((document.body.scrollWidth  > document.body.offsetWidth ) ? document.body.scrollWidth  : document.body.offsetWidth ),FWindowInfo.getWidth()  );},
	getHeight : function()	{return FAssist.max( (window.innerHeight && window.scrollMaxY) ? (window.innerHeight + window.scrollMaxY) : ((document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollHeight : document.body.offsetHeight),FWindowInfo.getHeight() );},
	getPosX   : function()	{return (window.pageXOffset) ? window.pageXOffset : ((document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : ((document.body) ? document.body.scrollLeft : 0));},
	getPosY   : function()	{return (window.pageYOffset) ? window.pageYOffset : ((document.documentElement && document.documentElement.scrollTop ) ? document.documentElement.scrollTop  : ((document.body) ? document.body.scrollTop  : 0));}
}
///// 変換 ////////////////////////////////////////////////////////////////////
var FConvert = {
	getPixelFromCSSValue            : function( v )	{var i = v ? v.indexOf('px') : -1;return (i!=-1) ? parseInt( v.slice(0,i) ) : 0;},
	getPixelFromCSSBorderWidthLeft  : function( v )	{var vAry = v.split( " " ); return ( 1 < vAry.length ) ? this.getPixelFromCSSValue( vAry[1] ) : 0;},
	getPixelFromCSSBorderWidthRight : function( v )	{var vAry = v.split( " " ); return ( 3 < vAry.length ) ? this.getPixelFromCSSValue( vAry[3] ) : this.getPixelFromCSSBorderWidthLeft( v );}
}
///// スタイル補助 ////////////////////////////////////////////////////////////
var FStyleAssist = {
	getStyle   : function( vElement )	{return vElement ? (vElement.currentStyle || document.defaultView.getComputedStyle( vElement,'' )) : null;},
	getPadding : function( vElement )	{var vStyle=this.getStyle(vElement); return {top:(vStyle?vStyle.paddingTop:null), right:(vStyle?vStyle.paddingRight:null), bottom:(vStyle?vStyle.paddingBottom:null), left:(vStyle?vStyle.paddingLeft:null)};}
}

///// イベント ////////////////////////////////////////////////////////////////
var FEvent = {
	// 登録
	doRegist : function( vObj,vType,vHandler ){
		if( (vType == 'keypress') && vObj.attachEvent )			vType = 'keydown';
		if( (vType == 'mousewheel') && FBrowserInfo.isGecko() )	vType = 'DOMMouseScroll';
		if( vObj.addEventListener )	vObj.addEventListener( vType,vHandler,false );
		else if( vObj.attachEvent )	vObj.attachEvent( ['on',vType].join(''),vHandler );
	}
}

///// エフェクト //////////////////////////////////////////////////////////////
var FEffectObj = new Object();

FEffectObj.Base = function(){};
FEffectObj.Base.prototype = {
	hide: function(){
		this.vNow = 0;
		this.increase();
	},
	custom: function( vFrom,vTo ){
		if( this.vTimer != null )
			return;
/*
		this.vFrom = vFrom;
		this.vTo = vTo;
		this.vStartTime = (new Data).getTime();
//		this.vTimer = setInterval( this.step.bind(this),13 );
*/
	}
}

FEffectObj.Opacity = function(){FEffectObj.Base.apply(this,arguments);};
FEffectObj.Opacity.prototype ={
	doInit : function( vObj,vOptions ){
		this.vObj	= $(vObj);
		this.vNow	= 1;
		this.increase();
		this.setOpacity( vOptions );
	},
	increase: function(){
		if( (this.vNow == 1) && FBrowserInfo.isFirefox() )
			this.vNow = 0.9999;
		this.setOpacity( this.vNow );
	},
	setOpacity: function( vOpacity ){
		if( (vOpacity == 0) && (this.vObj.style.visibility != 'hidden') )
			this.vObj.style.visibility = 'hidden';
		else if( this.vObj.style.visibility != 'visible' )
			this.vObj.style.visibility = 'visible';
		if( window.ActiveXObject )
			this.vObj.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';
		this.vObj.style.opacity = vOpacity;
	}
}

/*--------------------------------------------------------------------------*/
var Class = {
	create: function() {
		return function() {
			this.initialize.apply(this, arguments);
		}
	}
}

Object.extend = function(destination, source) {
	for (property in source) destination[property] = source[property];
	return destination;
}

Function.prototype.bind = function(object) {
	var __method = this;
	return function() {
		return __method.apply(object, arguments);
	}
}

Function.prototype.bindAsEventListener = function(object) {
var __method = this;
	return function(event) {
		__method.call(object, event || window.event);
	}
}

function $() {
	if (arguments.length == 1) return get$(arguments[0]);
	var elements = [];
	$c(arguments).each(function(el){
		elements.push(get$(el));
	});
	return elements;

	function get$(el){
		if (typeof el == 'string') el = document.getElementById(el);
		return el;
	}
}

if (!window.Element) var Element = new Object();

Object.extend(Element, {
	remove: function(element) {
		element = $(element);
		element.parentNode.removeChild(element);
	},

	hasClassName: function(element, className) {
		element = $(element);
		if (!element) return;
		var hasClass = false;
		element.className.split(' ').each(function(cn){
			if (cn == className) hasClass = true;
		});
		return hasClass;
	},

	addClassName: function(element, className) {
		element = $(element);
		Element.removeClassName(element, className);
		element.className += ' ' + className;
	},
  
	removeClassName: function(element, className) {
		element = $(element);
		if (!element) return;
		var newClassName = '';
		element.className.split(' ').each(function(cn, i){
			if (cn != className){
				if (i > 0) newClassName += ' ';
				newClassName += cn;
			}
		});
		element.className = newClassName;
	},

	cleanWhitespace: function(element) {
		element = $(element);
		$c(element.childNodes).each(function(node){
			if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) Element.remove(node);
		});
	},

	find: function(element, what) {
		element = $(element)[what];
		while (element.nodeType != 1) element = element[what];
		return element;
	}
});

var Position = {
	cumulativeOffset: function(element) {
		var valueT = 0, valueL = 0;
		do {
			valueT += element.offsetTop  || 0;
			valueL += element.offsetLeft || 0;
			element = element.offsetParent;
		} while (element);
		return [valueL, valueT];
	}
};

document.getElementsByClassName = function(className) {
	var children = document.getElementsByTagName('*') || document.all;
	var elements = [];
	$c(children).each(function(child){
		if (Element.hasClassName(child, className)) elements.push(child);
	});  
	return elements;
}

//useful array functions
Array.prototype.iterate = function(func){
	for(var i=0;i<this.length;i++) func(this[i], i);
}
if (!Array.prototype.each) Array.prototype.each = Array.prototype.iterate;

function $c(array){
	var nArray = [];
	for (var i=0;i<array.length;i++) nArray.push(array[i]);
	return nArray;
}



var fx = new Object();
//base
fx.Base = function(){};
fx.Base.prototype = {
	setOptions: function(options) {
	this.options = {
		duration: 500,
		onComplete: '',
		transition: fx.sinoidal
	}
	Object.extend(this.options, options || {});
	},

	step: function() {
		var time  = (new Date).getTime();
		if (time >= this.options.duration+this.startTime) {
			this.now = this.to;
			clearInterval (this.timer);
			this.timer = null;
			if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10);
		}
		else {
			var Tpos = (time - this.startTime) / (this.options.duration);
			this.now = this.options.transition(Tpos) * (this.to-this.from) + this.from;
		}
		this.increase();
	},

	custom: function(from, to) {
		if (this.timer != null) return;
		this.from = from;
		this.to = to;
		this.startTime = (new Date).getTime();
		this.timer = setInterval (this.step.bind(this), 13);
	},

	hide: function() {
		this.now = 0;
		this.increase();
	},

	clearTimer: function() {
		clearInterval(this.timer);
		this.timer = null;
	}
}

//stretchers
fx.Layout = Class.create();
fx.Layout.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		this.el = $(el);
		this.el.style.overflow = "hidden";
		this.iniWidth = this.el.offsetWidth;
		this.iniHeight = this.el.offsetHeight;
		this.setOptions(options);
	}
});

fx.Height = Class.create();
Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), {	
	increase: function() {
		this.el.style.height = this.now + "px";
	},
	toggle: function() {
		if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0);
		else this.custom(0, this.el.scrollHeight);
	}
});

fx.Width = Class.create();
Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), {	
	increase: function() {
		this.el.style.width = this.now + "px";
	},

	toggle: function(){
		if (this.el.offsetWidth > 0) this.custom(this.el.offsetWidth, 0);
		else this.custom(0, this.iniWidth);
	}
});

//fader
fx.Opacity = Class.create();
fx.Opacity.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		this.el = $(el);
		this.now = 1;
		this.increase();
		this.setOptions(options);
	},

	increase: function() {
		if (this.now == 1 && (/Firefox/.test(navigator.userAgent))) this.now = 0.9999;
		this.setOpacity(this.now);
	},
	
	setOpacity: function(opacity) {
		if (opacity == 0 && this.el.style.visibility != "hidden")
			this.el.style.visibility = "hidden";
		else if (this.el.style.visibility != "visible")
			this.el.style.visibility = "visible";
		if (window.ActiveXObject)
			this.el.style.filter = "alpha(opacity=" + opacity*100 + ")";
		this.el.style.opacity = opacity;
	},

	toggle: function() {
		if (this.now > 0)
			this.custom(1, 0);
		else
			this.custom(0, 1);
	}
});

//transitions
fx.sinoidal = function(pos){
	return ((-Math.cos(pos*Math.PI)/2) + 0.5);
}
fx.linear = function(pos){
	return pos;
}
fx.cubic = function(pos){
	return Math.pow(pos, 3);
}
fx.circ = function(pos){
	return Math.sqrt(pos);
}

// -----------------------------------------------------------------------------------
//
//	Global Variables
//
var imageArray = new Array;

// -----------------------------------------------------------------------------------
Object.extend(Element, {
	hide: function() {
		for (var i = 0; i < arguments.length; i++) {
			var element = $(arguments[i]);
			element.style.display = 'none';
		}
	},
	show: function() {
		for (var i = 0; i < arguments.length; i++) {
			var element = $(arguments[i]);
			element.style.display = '';
		}
	},
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
	   	element = $(element);
		element.style.width = w +"px";
	},
	getHeight: function(element) {
		element = $(element);
		return element.offsetHeight;
	},
	setHeight: function(element,h) {
   		element = $(element);
		element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
		element.style.top = t +"px";
	},
	setSrc: function(element,src) {
		if( !element )
			return;
		element = $(element);
		element.src = src; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

// -----------------------------------------------------------------------------------

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//
function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){
	}
}

// -----------------------------------------------------------------------------------

//
// listenKey()
//
function listenKey () {	document.onkeypress = getKey; }

// ---------------------------------------------------

function showSelectBoxes(){
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideSelectBoxes(){
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

// ---------------------------------------------------

// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}
// ---------------------------------------------------


var g_vImgLiteBoxObj = null;
var vImgLiteBoxBackEffectObj = null;
var g_vImgLiteBoxActiveImage	= null;
var g_vAutoPlayID = -1;

function ImgLiteBox(){
	this.vIDMainArea			= 'imglightbox_main_area';		// メインボックス
	this.vIDMainContainer		= 'imglightbox_main_container';	// メインコンテナ
	this.vIDBack				= 'imglightbox_back';		// 全体の背景
	this.vIDCaption				= 'imglightbox_caption';
	this.vIDComment				= 'imglightbox_comment';
	this.vIDBottomNavi			= 'imglightbox_bottomnavi';
	this.vIDBottomNaviClose		= 'imglightbox_bottomnaviclose';
	this.vIDHoverNavi			= 'imglightbox_hovernavi';
	this.vIDImage				= 'imglightbox_image';
//	this.vIDImage				= 'lightboxImage';
	this.vIDImageContainer		= 'imglightbox_imagecontainer';
	this.vIDImageDataContainer	= 'imglightbox_imagedatacontainer';
	this.vIDImageData			= 'imglightbox_imagedata';
	this.vIDImageDetails		= 'imglightbox_imagedetails';
	this.vIDOuterImageContainer	= 'imglightbox_outerimagecontainer';
	this.vIDLightBox			= 'imglightbox';
	this.vIDLoading				= 'imglightbox_loading';
	this.vIDLoadingLink			= 'imglightbox_loadinglink';
	this.vIDNumberDisplay		= 'imglightbox_numberdisplay';
	this.vIDNextLink			= 'imglightbox_nextlink';
	this.vIDPrevLink			= 'imglightbox_prevlink';
	this.vClassClearFix			= 'imglightbox_clearfix';
	this.vIDHeaderArea			= 'imglightbox_header_area';
	this.vIDFooterArea			= 'imglightbox_footer_area';

	this.vResizeSpeed			= 6;	// 1=slowest and 10=fastest
	
	this.vInitBackColor			= null;
	this.vInitBackFilter		= null;
	this.vInitBackOpacity		= null;
	this.vInitBoxColor			= null;
	this.vInitPlaySpeed			= 5000;
	this.vCurBackOpacity		= 0.8;
	
	this.vLayoutType			= 1;
	
	this.initialize.apply( this,arguments );
}
ImgLiteBox.prototype = {
	// 初期化
	initialize: function(){
		if( !document.getElementsByTagName )
			return;

		// リンククリックイベント割り当て
		var vAnchors = document.getElementsByTagName( 'a' );
		for( var i=0; i<vAnchors.length; i++ ){
			var vAnchor = vAnchors[i];
			if( !vAnchor.getAttribute( 'href' ) )
				continue;
			var vRelAttribute = String( vAnchor.getAttribute( 'rel' ) );
			if( !vRelAttribute.toLowerCase().match( 'imglightbox' ) )
				continue;
			vAnchor.onclick = function(){g_vImgLiteBoxObj.start(this); return false;}
		}

		FEvent.doRegist( window,'resize',this.doResize );

		this.initLayout();
	},
	// リサイズ
	doResize: function(){
		var vIDBack = this.vIDBack ? this.vIDBack : g_vImgLiteBoxObj.vIDBack;
		var vIDBackObj = vIDBack ? document.getElementById( vIDBack ) : null;
		if( vIDBackObj ){
			var vPageSize = { cx:FPageInfo.getWidth(), cy:FPageInfo.getHeight() };
			if( vIDBackObj.scrollWidth && (vIDBackObj.scrollWidth < vPageSize.cx) )
				vIDBackObj.style.width = vPageSize.cx + 'px';
			if( vIDBackObj.scrollHeight && (vIDBackObj.scrollHeight < vPageSize.cy) )
				vIDBackObj.style.height = vPageSize.cy + 'px';
		}
	},
	getResizeDuration: function(){
		return (11 - (this.vResizeSpeed < 1 ? 1 : (this.vResizeSpeed > 10 ? 10 : this.vResizeSpeed))) * 100;
	},
	// メインボックスオブジェクトの作成
	makeMainAreaObj: function(){
		var vMainAreaObj = document.createElement( 'div' );
		vMainAreaObj.setAttribute( 'id',this.vIDMainArea );
		vMainAreaObj.style.display = 'none';
		return vMainAreaObj;
	},
	// 角丸ヘッダーオブジェクトの作成
	makeCornerRoundHeaderObj: function(){
		var vCornerRoundHeaderObj = document.createElement( 'div' );
		vCornerRoundHeaderObj.className = 'imglightbox_corner_round_cap';
		vCornerRoundHeaderObj.style.fontSize = '0px';
		var vCornerRoundLine1Obj = document.createElement( 'div' );
		vCornerRoundLine1Obj.className = 'imglightbox_corner_round_line1';
		vCornerRoundLine1Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundHeaderObj.appendChild( vCornerRoundLine1Obj );
		var vCornerRoundLine2Obj = document.createElement( 'div' );
		vCornerRoundLine2Obj.className = 'imglightbox_corner_round_line2';
		vCornerRoundLine2Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundHeaderObj.appendChild( vCornerRoundLine2Obj );
		var vCornerRoundLine3Obj = document.createElement( 'div' );
		vCornerRoundLine3Obj.className = 'imglightbox_corner_round_line3';
		vCornerRoundLine3Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundHeaderObj.appendChild( vCornerRoundLine3Obj );
		var vCornerRoundLine4Obj = document.createElement( 'div' );
		vCornerRoundLine4Obj.className = 'imglightbox_corner_round_line4';
		vCornerRoundLine4Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundHeaderObj.appendChild( vCornerRoundLine4Obj );
		return vCornerRoundHeaderObj;
	},
	// 角丸フッターオブジェクトの作成
	makeCornerRoundFooterObj: function(){
		var vCornerRoundFooterObj = document.createElement( 'div' );
		vCornerRoundFooterObj.className = 'imglightbox_corner_round_cap';
		vCornerRoundFooterObj.style.fontSize = '0px';
		var vCornerRoundLine4Obj = document.createElement( 'div' );
		vCornerRoundLine4Obj.className = 'imglightbox_corner_round_line4';
		vCornerRoundLine4Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundFooterObj.appendChild( vCornerRoundLine4Obj );
		var vCornerRoundLine3Obj = document.createElement( 'div' );
		vCornerRoundLine3Obj.className = 'imglightbox_corner_round_line3';
		vCornerRoundLine3Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundFooterObj.appendChild( vCornerRoundLine3Obj );
		var vCornerRoundLine2Obj = document.createElement( 'div' );
		vCornerRoundLine2Obj.className = 'imglightbox_corner_round_line2';
		vCornerRoundLine2Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundFooterObj.appendChild( vCornerRoundLine2Obj );
		var vCornerRoundLine1Obj = document.createElement( 'div' );
		vCornerRoundLine1Obj.className = 'imglightbox_corner_round_line1';
		vCornerRoundLine1Obj.appendChild( document.createElement( 'br' ) );
		vCornerRoundFooterObj.appendChild( vCornerRoundLine1Obj );
		return vCornerRoundFooterObj;
	},
	// 画像ナビゲータオブジェクトの作成(前へ、次へボタン)
	makeImageNavigatorObj: function(){
		var vImageNavigatorObj = document.createElement( 'div' );
		vImageNavigatorObj.setAttribute('id',this.vIDHoverNavi );
		// 前へ
		var vPrevLinkObj = document.createElement("a");
		vPrevLinkObj.setAttribute('id',this.vIDPrevLink );
		vPrevLinkObj.setAttribute('href','#');
		vPrevLinkObj.setAttribute( 'title','前へ' );
		vImageNavigatorObj.appendChild( vPrevLinkObj );
		// 次へ
		var vNextLinkObj = document.createElement("a");
		vNextLinkObj.setAttribute('id',this.vIDNextLink );
		vNextLinkObj.setAttribute('href','#');
		vNextLinkObj.setAttribute( 'title','次へ' );
		vImageNavigatorObj.appendChild( vNextLinkObj );
		
		return vImageNavigatorObj;
	},
	// 閉じるオブジェクト
	makeCloseObj: function( vIDValue ){
		var vCloseObj = document.createElement( "a" );
		vCloseObj.setAttribute( 'id',vIDValue );
		vCloseObj.setAttribute( 'href','#' );
		vCloseObj.setAttribute( 'title','閉じる' );
		vCloseObj.onclick = function() { g_vImgLiteBoxObj.end(); return false; }
		return vCloseObj;
	},
	initLayout: function(){
		// 画像ライトボックス背景と画像ライトボックスをドキュメントに追加
		var vBodyObj = document.getElementsByTagName( 'body' ).item( 0 );

		// 画像ライトボックスの全体背景作成
		var vDivImgLiteBackObj = document.createElement( 'div' );
		vDivImgLiteBackObj.setAttribute( 'id',this.vIDBack );
		if( !(FBrowserInfo.isWinIE5() || FBrowserInfo.isWinIE6()) && vDivImgLiteBackObj.style )
			vDivImgLiteBackObj.style.position = 'fixed';	// 画面スクロールに対して固定する。
		vDivImgLiteBackObj.onclick = function(){g_vImgLiteBoxObj.end(); return false;}	// 背景クリック時は閉じる
		vBodyObj.appendChild( vDivImgLiteBackObj );

		// 画像ライトボックス背景エフェクト作成
		vImgLiteBoxBackEffectObj = new fx.Opacity( vDivImgLiteBackObj,{duration:300} );
		vImgLiteBoxBackEffectObj.hide();

		// メインエリア作成
		var vMainAreaObj = this.makeMainAreaObj();
		vBodyObj.appendChild( vMainAreaObj );

		// メインコンテナ作成
		var vMainContainerObj = document.createElement( 'div' );
		vMainContainerObj.setAttribute( 'id',this.vIDMainContainer );
		vMainAreaObj.appendChild( vMainContainerObj );

		// 角丸ヘッダー作成
		var vCornerRoundHeaderObj = this.makeCornerRoundHeaderObj();
		vMainContainerObj.appendChild( vCornerRoundHeaderObj );

		// コンテンツエリア作成
		var vContentsAreaObj = document.createElement( 'div' );
		vContentsAreaObj.setAttribute( 'id','imglightbox_contents_area' );
		vMainContainerObj.appendChild( vContentsAreaObj );

		///// ヘッダー部 /////
		// ヘッダーエリア作成
		var vHeaderAreaObj = document.createElement("div");
		vHeaderAreaObj.setAttribute( 'id','imglightbox_header_area' );
		vContentsAreaObj.appendChild( vHeaderAreaObj );

		// ヘッダー閉じる作成
		vHeaderAreaObj.appendChild( this.makeCloseObj( 'imglightbox_header_close' ) );

		// ヘッダータイトル作成
		var vHeaderTitleObj = document.createElement("span");
		vHeaderTitleObj.setAttribute( 'id','imglightbox_header_title' );
		vHeaderAreaObj.appendChild( vHeaderTitleObj );

		// ヘッダー番号作成
		var vHeaderNumberObj = document.createElement("span");
		vHeaderNumberObj.setAttribute( 'id','imglightbox_header_number' );
		vHeaderAreaObj.appendChild( vHeaderNumberObj );

		// ヘッダー閉じる作成
		vHeaderAreaObj.appendChild( this.makeCloseObj( 'imglightbox_header_after_close' ) );


		// 画像ライトボックス作成
		var vDivImgLiteBoxObj = document.createElement( 'div' );
		vDivImgLiteBoxObj.setAttribute( 'id',this.vIDLightBox );
		vDivImgLiteBoxObj.style.clear = 'both';	// firefox3では、直前の右寄せオブジェクト(閉じるボタン)に重なるため寄せを解除する。
		vContentsAreaObj.appendChild( vDivImgLiteBoxObj );

		// 画像外枠作成
		var objOuterImageContainer = document.createElement( 'div' );
		objOuterImageContainer.setAttribute( 'id',this.vIDOuterImageContainer );
		vDivImgLiteBoxObj.appendChild( objOuterImageContainer);

		// 画像領域の背景
		var objImageContainer = document.createElement("div");
		objImageContainer.setAttribute('id',this.vIDImageContainer );
		objOuterImageContainer.appendChild(objImageContainer);

		// コメント領域
		var objImageDataContainer = document.createElement( 'div' );
		objImageDataContainer.setAttribute( 'id',this.vIDImageDataContainer );
		objImageDataContainer.className = this.vClassClearFix;
		vDivImgLiteBoxObj.appendChild(objImageDataContainer);

		// 画像
		var objLightboxImage = document.createElement("img");
		objLightboxImage.setAttribute( 'id',this.vIDImage );
		objImageContainer.appendChild(objLightboxImage);

		// 画像ナビゲーター作成
		objOuterImageContainer.appendChild( this.makeImageNavigatorObj() );
	
		// 読み込み中
		var objLoading = document.createElement("div");
		objLoading.setAttribute('id',this.vIDLoading );
		objOuterImageContainer.appendChild( objLoading );
	
		var objLoadingLink = document.createElement("a");
		objLoadingLink.setAttribute('id',this.vIDLoadingLink );
		objLoadingLink.setAttribute('href','#');
		objLoadingLink.onclick = function() { g_vImgLiteBoxObj.end(); return false; }
		objLoading.appendChild(objLoadingLink);

		var objImageData = document.createElement("div");
		objImageData.setAttribute('id',this.vIDImageData );
		objImageDataContainer.appendChild(objImageData);
	
		var objImageDetails = document.createElement("div");
		objImageDetails.setAttribute('id',this.vIDImageDetails );
		objImageData.appendChild(objImageDetails);
	
		var objCaption = document.createElement("span");
		objCaption.setAttribute('id',this.vIDCaption );
		objImageDetails.appendChild(objCaption);
	
		var objNumberDisplay = document.createElement("span");
		objNumberDisplay.setAttribute('id',this.vIDNumberDisplay );
		objImageDetails.appendChild(objNumberDisplay);
		
		var objComment = document.createElement("span");
		objComment.setAttribute('id',this.vIDComment );
		objImageDetails.appendChild(objComment ); 

		var objBottomNav = document.createElement("div");
		objBottomNav.setAttribute('id',this.vIDBottomNavi );
		objImageData.appendChild(objBottomNav);

		var objBottomNavCloseLink = document.createElement("a");
		objBottomNavCloseLink.setAttribute('id',this.vIDBottomNaviClose );
		objBottomNavCloseLink.setAttribute('href','#');
		objBottomNavCloseLink.onclick = function() { g_vImgLiteBoxObj.end(); return false; }
		objBottomNav.appendChild(objBottomNavCloseLink);

		// フッターエリア作成
		var vFooterAreaObj = document.createElement("div");
		vFooterAreaObj.setAttribute( 'id','imglightbox_footer_area' );
		vContentsAreaObj.appendChild( vFooterAreaObj );

		// フッター最初の閉じる
		vFooterAreaObj.appendChild( this.makeCloseObj( 'imglightbox_footer_before_close' ) );
		
		// フッター次へ
		var vFooterNextObj = document.createElement("a");
		vFooterNextObj.setAttribute( 'id','imglightbox_footer_next' );
		vFooterNextObj.setAttribute( 'href','#' );
		vFooterNextObj.setAttribute( 'title','次へ' );
		vFooterAreaObj.appendChild( vFooterNextObj );
		
		// フッター再生停止
		var vFooterStopObj = document.createElement( 'a' );
		vFooterStopObj.setAttribute( 'id','imglightbox_footer_stop' );
		vFooterStopObj.setAttribute( 'href','#' );
		vFooterStopObj.setAttribute( 'title','停止' );
		vFooterStopObj.onclick = function() { g_vImgLiteBoxObj.playStop(); return false; }
		vFooterAreaObj.appendChild( vFooterStopObj );
		Element.hide( 'imglightbox_footer_stop' );

		// フッター自動再生
		var vFooterPlayObj = document.createElement( 'a' );
		vFooterPlayObj.setAttribute( 'id','imglightbox_footer_play' );
		vFooterPlayObj.setAttribute( 'href','#' );
		vFooterPlayObj.setAttribute( 'title','再生' );
		vFooterPlayObj.onclick = function() { g_vImgLiteBoxObj.autoPlay(); return false; }
		vFooterAreaObj.appendChild( vFooterPlayObj );

		// フッター前へ
		var vFooterPrevObj = document.createElement("a");
		vFooterPrevObj.setAttribute( 'id','imglightbox_footer_prev' );
		vFooterPrevObj.setAttribute( 'href','#');
		vFooterPrevObj.setAttribute( 'title','前へ' );
		vFooterAreaObj.appendChild( vFooterPrevObj );

		// フッター番号作成
		var vFooterNumberObj = document.createElement("span");
		vFooterNumberObj.setAttribute( 'id','imglightbox_footer_number' );
		vFooterAreaObj.appendChild( vFooterNumberObj );

		// フッターコメント
		var vFooterComment = document.createElement( 'span' );
		vFooterComment.setAttribute( 'id','imglightbox_footer_comment' );
		vFooterComment.style.clear = 'both';	// firefox3では、直前の右寄せオブジェクト(前後再生ボタン)に重なるため寄せを解除する。
		vFooterAreaObj.appendChild( vFooterComment );

		// フッター最後の閉じる
		vFooterAreaObj.appendChild( this.makeCloseObj( 'imglightbox_footer_after_close' ) );

		// 角丸フッターオブジェクトの作成
		var vCornerRoundFooterObj = this.makeCornerRoundFooterObj();
		vMainContainerObj.appendChild( vCornerRoundFooterObj );

		imageEffect = new fx.Opacity(objLightboxImage, { duration: 350, onComplete: function() { imageDetailsEffect.custom(0,1); }});
		imageEffect.hide();
		
//		imageDetailsEffect = new fx.Opacity( this.vIDImageDataContainer, { duration: 400, onComplete: function() { navEffect.custom(0,1); }}); 
		imageDetailsEffect = new fx.Opacity( this.vIDImageDataContainer, { duration: 200, onComplete: function() { vFooterCommentEffect.custom(0,1); }}); 
		imageDetailsEffect.hide();

		// コメントのエフェクト
		vFooterCommentEffect = new fx.Opacity( 'imglightbox_footer_comment', { duration: 200, onComplete: function() { navEffect.custom(0,1); }}); 
		vFooterCommentEffect.hide();

		navEffect = new fx.Opacity( this.vIDHoverNavi, { duration: 100 });
		navEffect.hide();

	},
	autoPlay: function(){
		Element.hide( 'imglightbox_footer_play' );
		Element.show( 'imglightbox_footer_stop' );
		
		var vPlaySpeed = g_vImgLiteBoxObj.vInitPlaySpeed;
		var vCurImageNo = g_vImgLiteBoxActiveImage;
		if( imageArray && imageArray[vCurImageNo] && (6 < imageArray[vCurImageNo].length) ){
			vPlaySpeed = imageArray[vCurImageNo][6];
		}
		g_vAutoPlayID = setInterval( 'g_vImgLiteBoxObj.autoNext()',vPlaySpeed );
	},
	playStop: function(){
		Element.hide( 'imglightbox_footer_stop' );
		Element.show( 'imglightbox_footer_play' );
		if( g_vAutoPlayID != -1 )
			clearInterval( g_vAutoPlayID );
		g_vAutoPlayID = -1;
	},
	autoNext: function(){
		if( g_vImgLiteBoxActiveImage != (imageArray.length - 1) ){
			g_vImgLiteBoxObj.doChangeImage( g_vImgLiteBoxActiveImage + 1 );
		}
		g_vImgLiteBoxObj.playStop();
		if( g_vImgLiteBoxActiveImage != (imageArray.length - 1) ){
			g_vImgLiteBoxObj.autoPlay();
		}
	},
	//
	//	start()
	//	Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
	//
	start: function(imageLink) {	
		hideSelectBoxes();

		Element.setHeight( this.vIDBack,FPageInfo.getHeight() );

//		vImgLiteBoxBackEffectObj.custom( 0,0.8 );
		
		imageArray = [];
		imageNum = 0;

		if( !document.getElementsByTagName )
			return;

		// if image is NOT part of a set..
		if((imageLink.getAttribute('rel') == 'imglightbox')){
			var revParam = imageLink.getAttribute( 'rev' );
			var vLowerParam = revParam.toLowerCase();
			// 背景色の取得
			var vBkColor = '';
			var vFindIndex = vLowerParam.indexOf( 'bkcolor' );
			var vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
			var vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
			if( vFindSplit != -1 )
				vBkColor = revParam.slice( vFindEqual+1,vFindSplit );
			// 背景透明度の取得
			var vBkAlpha = 200;
			vFindIndex = vLowerParam.indexOf( 'bkalpha' );
			vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
			vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
			if( vFindSplit != -1 )
				vBkAlpha = revParam.slice( vFindEqual+1,vFindSplit );
			// 再生速度取得
			var vPlaySpeed = g_vImgLiteBoxObj.vInitPlaySpeed;
			vFindIndex = vLowerParam.indexOf( 'playspeed' );
			vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
			vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
			if( vFindSplit != -1 )
				vPlaySpeed = revParam.slice( vFindEqual+1,vFindSplit ) * 1000;
			// コメント取得
			var vComment = '';
			vFindIndex = vLowerParam.indexOf( 'comment' );
			vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
			vFindStart = (vFindEqual != -1) ? vLowerParam.indexOf( '\'',vFindEqual ) : -1;
			vFindEnd   = (vFindStart != -1) ? vLowerParam.indexOf( '\'',vFindStart + 1 ) : -1;
			if( vFindEnd != -1 )
				vComment = revParam.slice( vFindStart+1,vFindEnd );
			// 画像枠の取得
			var vBoxColor = '';
			var vFindIndex = vLowerParam.indexOf( 'boxcolor' );
			var vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
			var vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
			if( vFindSplit != -1 )
				vBoxColor = revParam.slice( vFindEqual+1,vFindSplit );

			imageArray.push( new Array( imageLink.getAttribute('href'),imageLink.getAttribute('title'),vComment,vBkColor,vBkAlpha,vBoxColor,vPlaySpeed ) );
		} else {
			var anchors = document.getElementsByTagName('a');
			for (var i=0; i<anchors.length; i++){
				var anchor = anchors[i];
				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
					if( anchor == imageLink )
						imageNum = imageArray.length;
				
					var revParam = anchor.getAttribute( 'rev' );
					var vLowerParam = revParam.toLowerCase();
					// 背景色の取得
					var vBkColor = '';
					var vFindIndex = vLowerParam.indexOf( 'bkcolor' );
					var vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
					var vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
					if( vFindSplit != -1 )
						vBkColor = revParam.slice( vFindEqual+1,vFindSplit );
					// 背景透明度の取得
					var vBkAlpha = 200;
					vFindIndex = vLowerParam.indexOf( 'bkalpha' );
					vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
					vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
					if( vFindSplit != -1 )
						vBkAlpha = revParam.slice( vFindEqual+1,vFindSplit );
					// 再生速度取得
					var vPlaySpeed = g_vImgLiteBoxObj.vInitPlaySpeed;
					vFindIndex = vLowerParam.indexOf( 'playspeed' );
					vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
					vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
					if( vFindSplit != -1 )
						vPlaySpeed = revParam.slice( vFindEqual+1,vFindSplit ) * 1000;
					// コメント取得
					var vComment = '';
					vFindIndex = vLowerParam.indexOf( 'comment' );
					vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
					vFindStart = (vFindEqual != -1) ? vLowerParam.indexOf( '\'',vFindEqual ) : -1;
					vFindEnd   = (vFindStart != -1) ? vLowerParam.indexOf( '\'',vFindStart + 1 ) : -1;
					if( vFindEnd != -1 )
						vComment = revParam.slice( vFindStart+1,vFindEnd );
					// 画像枠の取得
					var vBoxColor = '';
					var vFindIndex = vLowerParam.indexOf( 'boxcolor' );
					var vFindEqual = (vFindIndex != -1) ? vLowerParam.indexOf( '=',vFindIndex ) : -1;
					var vFindSplit = (vFindEqual != -1) ? vLowerParam.indexOf( ';',vFindEqual ) : -1;
					if( vFindSplit != -1 )
						vBoxColor = revParam.slice( vFindEqual+1,vFindSplit );
					
					imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'),vComment,vBkColor,vBkAlpha,vBoxColor,vPlaySpeed ) );
				}
			}

			if( imageNum == 0 ){
				for( var i=0; i<imageArray.length; i++ ){
					if( imageArray[i][0] != imageLink.getAttribute('href') )
						continue;
					if( (0 < i) && (imageNum == 0) )
						imageNum = i;
					if( imageArray[i][1] != imageLink.getAttribute('title') )
						continue;
					imageNum = i;
					break;
				}
			}
		}

		var vLightBoxTop = FPageInfo.getPosY() + (FWindowInfo.getHeight() / 15);
		Element.setTop( this.vIDMainArea,vLightBoxTop );
		Element.show( this.vIDMainArea );

		this.doChangeImage( imageNum );
		this.updateBackAlpha( imageNum );
	},
	getImageSrc : function( vImageIndex )	{return imageArray && (0 <= vImageIndex) && (vImageIndex < imageArray.length) && imageArray[vImageIndex] && imageArray[vImageIndex][0];},
	getCurImageSrc : function()				{return this.getImageSrc( g_vImgLiteBoxActiveImage );},
	// 画像の変更
	doChangeImage : function( vImageIndex ){
		g_vImgLiteBoxActiveImage = vImageIndex;
		
		// 読み込み中画像表示
		Element.show( this.vIDLoading );
		
		// hide elements during transition
		imageDetailsEffect.hide();
		imageEffect.hide();
		navEffect.hide();
		vFooterCommentEffect.hide();
		
		Element.hide( this.vIDPrevLink );
		Element.hide( this.vIDNextLink );
		Element.hide( this.vIDNumberDisplay );

		// 画像の読み込み
		imgPreloader = new Image();

		var vCurImageSrc = g_vImgLiteBoxObj.getCurImageSrc();
		if( vCurImageSrc ){
			imgPreloader.onload = function(){
				Element.setSrc( g_vImgLiteBoxObj.vIDImage, g_vImgLiteBoxObj.getCurImageSrc() );
				var vImageSize = { cx:imgPreloader.width, cy:imgPreloader.height };
				var vIDImageObj = document.getElementById( g_vImgLiteBoxObj.vIDImage );
				if( vIDImageObj ){
					// 画像をウィンドウサイズ(ページ)内に納める処理
					var vRatio = 1.0;
					var vMaxSize = { cx:FWindowInfo.getWidth(), cy:FWindowInfo.getHeight() };
					vMaxSize.cx -= (vMaxSize.cx / 15) * 2;
					vMaxSize.cy -= (vMaxSize.cx / 15) * 2;
					if( (vMaxSize.cx < vImageSize.cx) || (vMaxSize.cy < vImageSize.cy) )
						vRatio = ((vMaxSize.cx / vImageSize.cx) < (vMaxSize.cy / vImageSize.cy)) ? (vMaxSize.cx / vImageSize.cx) : (vMaxSize.cy / vImageSize.cy);
					if( vRatio < 1.0 ){
						vImageSize.cx = Math.floor( vImageSize.cx * vRatio );
						vImageSize.cy = Math.floor( vImageSize.cy * vRatio );
					}
					vIDImageObj.src = imageArray[g_vImgLiteBoxActiveImage][0];
					vIDImageObj.width  = vImageSize.cx;
					vIDImageObj.height = vImageSize.cy;
				}
	
				g_vImgLiteBoxObj.resizeImageContainer( vImageSize.cx,vImageSize.cy );
			}
			imgPreloader.src = vCurImageSrc;
		}

		// 背景色の更新
		if( imageNum ){
			this.updateBackColor( imageNum );
			this.updateBoxColor( imageNum );
		}else{
			g_vImgLiteBoxObj.updateBackColor( imageNum );
		}

		// 背景透明度が変わるなら、ここで背景透明度を更新
//		var vNewOpacity = 0.8;
		var vNewOpacity = g_vImgLiteBoxObj.vCurBackOpacity;
		if( imageArray && imageArray[imageNum] && imageArray[imageNum][4] && (1 < imageArray[imageNum][4].length) ){
			vNewOpacity = imageArray[imageNum][4] / 255.0;
		}
		if( this.vCurBackOpacity != vNewOpacity ){
			this.updateBackAlpha();
		}
	},
	resizeImageContainer: function( imgWidth, imgHeight) {
		// get current height and width
		this.wCur = Element.getWidth( this.vIDOuterImageContainer );
		this.hCur = Element.getHeight( this.vIDOuterImageContainer );

		var vContentsAreaObj = document.getElementById( 'imglightbox_contents_area' );
		var vContentsAreaStyle = FStyleAssist.getStyle( vContentsAreaObj );
		var vContentsAreaBorderLeft		= 0;
		var vContentsAreaBorderRight	= 0;
		if( vContentsAreaStyle ){
			vContentsAreaBorderLeft  = FConvert.getPixelFromCSSBorderWidthLeft(  vContentsAreaStyle.borderWidth );
			vContentsAreaBorderRight = FConvert.getPixelFromCSSBorderWidthRight( vContentsAreaStyle.borderWidth );
		}
		var vContentsAreaBorderWidth = vContentsAreaBorderLeft + vContentsAreaBorderRight;

		var el = document.getElementById( this.vIDImageContainer );
		var vImageContainerStylePadding = FStyleAssist.getPadding( el );
		var vPL = FConvert.getPixelFromCSSValue( vImageContainerStylePadding.left );
		var vPR = FConvert.getPixelFromCSSValue( vImageContainerStylePadding.right );
		var vPT = FConvert.getPixelFromCSSValue( vImageContainerStylePadding.top );
		var vPB = FConvert.getPixelFromCSSValue( vImageContainerStylePadding.bottom );

		var vPaddingWidth = (vPL + vPR);
		if( FBrowserInfo.isWinIE5() || FBrowserInfo.isWinIE6() )
			vPaddingWidth *= 2;

		wDiff = (this.wCur - vPL + vPR) - imgWidth;
		hDiff = (this.hCur - vPT + vPB) - imgHeight;
		
		// Resize the outerImageContainer very sexy like
		reHeight = new fx.Height( this.vIDOuterImageContainer, { duration: this.getResizeDuration() });
		reHeight.custom(Element.getHeight( this.vIDOuterImageContainer ),imgHeight + (vPT + vPB) ); 
		reWidth = new fx.Width( this.vIDOuterImageContainer, { duration: this.getResizeDuration(), onComplete: function() { imageEffect.custom(0,1); }});
		reWidth.custom(Element.getWidth( this.vIDOuterImageContainer ),imgWidth + (vPL + vPR) );

		g_vImgLiteBoxObj.updateDetails();
		vImageDataHeight = Element.getHeight( this.vIDImageDataContainer ? this.vIDImageDataContainer : g_vImgLiteBoxObj.vIDImageDataContainer );

		reMCWidth = new fx.Width( this.vIDMainContainer, { duration: this.getResizeDuration(), onComplete: function() { imageEffect.custom(0,1); }});
		reMCWidth.custom(Element.getWidth( this.vIDMainContainer ),imgWidth + (vPL + vPR) + vContentsAreaBorderLeft + vContentsAreaBorderRight);
		
		if( (hDiff == 0) && (wDiff == 0) ){
			pause( FBrowserInfo.isIE() ? 250 : 100 );
		}

		Element.setWidth( this.vIDImageDataContainer, imgWidth + vPaddingWidth );
		Element.setWidth( this.vIDHoverNavi, imgWidth + vPaddingWidth );
		if( FBrowserInfo.isWinIE5() || FBrowserInfo.isWinIE6() ){
			Element.setWidth( this.vIDHeaderArea, imgWidth );
			Element.setWidth( this.vIDFooterArea, imgWidth );
		}

		// 画像の表示
		this.showImage();
	},
	
	//
	//	showImage()
	//	Display image and begin preloading neighbors.
	//
	showImage: function(){
		Element.hide( this.vIDLoading );
		g_vImgLiteBoxObj.updateDetails(); 
		this.preloadNeighborImages();
	},
	updateBackColor: function(imageNum){
		if( !imageNum )
			imageNum = g_vImgLiteBoxActiveImage;
		// 背景色更新
		var el = document.getElementById( this.vIDBack );
		if( this.vInitBackColor == null )
			this.vInitBackColor = el.style.backgroundColor;
		if( imageArray && imageArray[imageNum] && imageArray[imageNum][3] && (4 < imageArray[imageNum][3].length) ){
			el.style.backgroundColor = imageArray[imageNum][3];
		}else{
			el.style.backgroundColor = this.vInitBackColor;
		}
	},
	updateBackAlpha: function(imageNum){
		if( !imageNum ){
			imageNum = g_vImgLiteBoxActiveImage;
		}
		// 透明度更新
		if( imageArray && imageArray[imageNum] && (4 < imageArray[imageNum].length) ){
			var vOpacity = (0.0 < imageArray[imageNum][4]) ? imageArray[imageNum][4] / 255.0 : 0.01;
			this.vCurBackOpacity = vOpacity;
			g_vImgLiteBoxObj.vCurBackOpacity = vOpacity;
		}else{
			if( imageArray ){
				this.vCurBackOpacity = 0.8;
			}
		}
		vImgLiteBoxBackEffectObj.custom( 0,this.vCurBackOpacity );
	},
	updateBoxColor: function(imageNum){
		if( !imageNum )
			imageNum = g_vImgLiteBoxActiveImage;
		// 箱色更新
/*
		var el = document.getElementById( this.vIDOuterImageContainer );
		if( this.vInitBoxColor == null )
			this.vInitBoxColor = el.style.backgroundColor;
		if( imageArray && imageArray[imageNum] && imageArray[imageNum][5] && (4 < imageArray[imageNum][5].length) ){
			el.style.backgroundColor = imageArray[imageNum][5];
		}else{
			el.style.backgroundColor = this.vInitBoxColor;
		}
*/
	},

	//
	//	updateDetails()
	//	Display caption, image number, and bottom nav.
	//
	updateDetails: function() {
		// ヘッダータイトルの表示
		Element.show( 'imglightbox_header_title' );
		Element.setInnerHTML( 'imglightbox_header_title',imageArray[g_vImgLiteBoxActiveImage][1] );
		
		// 番号の表示
		if(imageArray.length > 1){
			Element.show( 'imglightbox_header_number' );
			Element.setInnerHTML( 'imglightbox_header_number', "Image " + eval(g_vImgLiteBoxActiveImage + 1) + " of " + imageArray.length);
			Element.show( 'imglightbox_footer_number' );
			Element.setInnerHTML( 'imglightbox_footer_number', "Image " + eval(g_vImgLiteBoxActiveImage + 1) + " of " + imageArray.length);
		}else{
			Element.hide( 'imglightbox_header_number' );
			Element.hide( 'imglightbox_footer_number' );
		}
		
		// キャプションの表示
		Element.show( this.vIDCaption );
		Element.setInnerHTML( this.vIDCaption, imageArray[g_vImgLiteBoxActiveImage][1]);
		
		// 画像番号表示( Image x of x )
		if(imageArray.length > 1){
			Element.show( this.vIDNumberDisplay );
			Element.setInnerHTML( this.vIDNumberDisplay, "Image " + eval(g_vImgLiteBoxActiveImage + 1) + " of " + imageArray.length);
		}
		
		// コメントの表示
		if( imageArray[g_vImgLiteBoxActiveImage][2] ){
			Element.show( this.vIDComment );
			Element.setInnerHTML( this.vIDComment,imageArray[g_vImgLiteBoxActiveImage][2] );

			Element.show( 'imglightbox_footer_comment' );
			Element.setInnerHTML( 'imglightbox_footer_comment',imageArray[g_vImgLiteBoxActiveImage][2] );
		}else{
			// コメントが無ければ内容を削除
			Element.setInnerHTML( this.vIDComment,'' );
			Element.setInnerHTML( 'imglightbox_footer_comment','' );
		}

//		this.updateBoxColor();

		g_vImgLiteBoxObj.updateNav();
	},
	// ナビゲータの更新
	updateNav: function() {
		// 前へ
		var vFooterPrevObj = document.getElementById( 'imglightbox_footer_prev' );
		if( g_vImgLiteBoxActiveImage != 0){
			Element.show( this.vIDPrevLink );
			document.getElementById( this.vIDPrevLink ).onclick = function() {
				g_vImgLiteBoxObj.doChangeImage( g_vImgLiteBoxActiveImage - 1 );
				return false;
			}
			if( vFooterPrevObj ){
				vFooterPrevObj.onclick = function() {g_vImgLiteBoxObj.doChangeImage( g_vImgLiteBoxActiveImage - 1 ); return false;}
			}
		}else{
			if( vFooterPrevObj ){
				vFooterPrevObj.onclick = function() {return false;}
			}
		}

		// 次へ
		var vFooterNextObj = document.getElementById( 'imglightbox_footer_next' );
		if(g_vImgLiteBoxActiveImage != (imageArray.length - 1)){
			Element.show( this.vIDNextLink );
			document.getElementById( this.vIDNextLink ).onclick = function() {
				g_vImgLiteBoxObj.doChangeImage( g_vImgLiteBoxActiveImage + 1 );
				return false;
			}
			if( vFooterNextObj ){
				vFooterNextObj.onclick = function() {g_vImgLiteBoxObj.doChangeImage( g_vImgLiteBoxActiveImage + 1 ); return false;}
			}
		}else{
			if( vFooterNextObj ){
				vFooterNextObj.onclick = function() {return false;}
			}
		}
		
		this.enableKeyboardNav();
	},
	enableKeyboardNav: function() {
		document.onkeydown = this.keyboardAction; 
	},
	disableKeyboardNav: function() {
		document.onkeydown = '';
	},
	keyboardAction: function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
		} else { // mozilla
			keycode = e.which;
		}

		key = String.fromCharCode(keycode).toLowerCase();
		
		if((key == 'x') || (key == 'o') || (key == 'c')){	// close lightbox
			g_vImgLiteBoxObj.end();
		} else if(key == 'p'){	// display previous image
			if(g_vImgLiteBoxActiveImage != 0){
				g_vImgLiteBoxObj.disableKeyboardNav();
				g_vImgLiteBoxObj.doChangeImage(g_vImgLiteBoxActiveImage - 1);
			}
		} else if(key == 'n'){	// display next image
			if(g_vImgLiteBoxActiveImage != (imageArray.length - 1)){
				g_vImgLiteBoxObj.disableKeyboardNav();
				g_vImgLiteBoxObj.doChangeImage(g_vImgLiteBoxActiveImage + 1);
			}
		}
	},
	preloadNeighborImages: function(){
		if((imageArray.length - 1) > g_vImgLiteBoxActiveImage){
			preloadNextImage = new Image();
			preloadNextImage.src = imageArray[g_vImgLiteBoxActiveImage + 1][0];
		}
		if( g_vImgLiteBoxActiveImage > 0 ){
			preloadPrevImage = new Image();
			preloadPrevImage.src = imageArray[g_vImgLiteBoxActiveImage - 1][0];
		}
	
	},
	end: function() {
		this.playStop();
		this.disableKeyboardNav();
		Element.hide( this.vIDMainArea );
		imageEffect.toggle();
		vImgLiteBoxBackEffectObj.custom( this.vCurBackOpacity,0 );
		showSelectBoxes();
	}
}

// 画像ライトボックスの初期化
function initImgLightBox(){
	g_vImgLiteBoxObj = new ImgLiteBox();
}

FEvent.doRegist( window,'load',initImgLightBox );

