
/**
*   画面オブジェクトのID
*/
var characterObjId = "character";
var backgroundObjId = "background";
var textObjId = "maintext";
var nameObjId = "name";

var message_windowId = "message_window";


/**
	XMLHttpRequestのインスタンスを作って返します。
*/
function createXMLHttpRequest()
{
	if( window.XMLHttpRequest )
	{
		// IE以外の場合
		return new XMLHttpRequest();
		// alert( "window.XMLHttpRequest" );
	}
	else if( window.ActiveXObject )
	{
		// IE用
		try
		{
			return new ActiveXObject( "Msxml2.XMLHTTP" );
			// alert( "Msxml2.XMLHTTP" );
		}
		catch(e)
		{
			return new ActiveXObject( "Microsoft.XMLHTTP" );
			// alert( "Microsoft.XMLHTTP" );
		}
	}

	return null;
}

var isMessageScreenExist = true;

/**
	メッセージウィンドウの表示・非表示を切り替えます。
*/
function toggleMessageWindow()
{
	var windowObj = document.getElementById( message_windowId );

	if( isMessageScreenExist )
	{
		// 表示しているので非表示にします。
		windowObj.style.visibility = "hidden";
		isMessageScreenExist = false;
	}
	else
	{
		windowObj.style.visibility = "visible";
		isMessageScreenExist = true;
	}
}

/**
	XMLをオブジェクトに変換して返します。。
	@param ajax XML。
	@param index XML内の<page>タグのインデックスナンバー。
*/
function getPage( ajax, index )
{
	var page = new Object();
	
	// <page>を取得します。
	var pageElement
		= ajax.responseXML.documentElement.getElementsByTagName( "page" )[index];

	// <character>の中身を取得します。
	if( pageElement.getElementsByTagName( "character" ).length != 0 )
	{
		page.characterUrl
			= pageElement.getElementsByTagName( "character" )[0].childNodes[0].nodeValue;
	}
	else
	{
		page.characterUrl = null;
	}

	// <background>の中身を取得します。
	if( pageElement.getElementsByTagName( "background" ).length != 0 )
	{
		page.backgroundUrl
			= pageElement.getElementsByTagName( "background" )[0].childNodes[0].nodeValue;
	}
	else
	{
		page.backgroundUrl = null;
	}

	// <name>の中身を取得します。
	if( pageElement.getElementsByTagName( "name" ).length != 0 )
	{
		page.name
			= pageElement.getElementsByTagName( "name" )[0].childNodes[0].nodeValue;
	}
	else
	{
		page.name = null;
	}

	// <text>の中身を取得します。
	if( pageElement.getElementsByTagName( "text" ).length != 0 )
	{
		page.text 
			= pageElement.getElementsByTagName( "text" )[0].childNodes[0].nodeValue;
	}
	else
	{
		page.text = null;
	}

	// <next>の中身を取得します。
	if( pageElement.getElementsByTagName( "next" ).length != 0 )
	{
		page.nextXmlUrl
			= pageElement.getElementsByTagName( "next" )[0].childNodes[0].nodeValue;
	}
	else
	{
		page.nextXmlUrl = null;
	}

	// インデックスナンバーを進めます。
	page.nextIndex = index + 1;
	if( page.nextXmlUrl != null )
	{
		page.nextIndex = 0;
	}
	else if( page.nextIndex == ajax.responseXML.documentElement.getElementsByTagName( "page" ).length )
	{
		page.nextIndex = 0;
	}

	return page;
}

/**
*   キーが押された時に呼び出されるイベントハンドラです。
*/
function onKeyPressNext( e )
{
	var keyCode = null;
	if(document.all)
	{
		// IE6の場合。
        keyCode = event.keyCode;
    }
	else
	{
		// FireFoxの場合。
		keyCode = e.which;
	}

	// スペースキー、←、→の場合に次へとスキップします。
	if( ( keyCode == 32 ) ||
		( keyCode == 37 ) ||
		( keyCode == 39 ) )
	{
		next();
		return false;
	}
}

// イベントハンドラとしてセットします。
document.onkeypress = onKeyPressNext;

// 「読み込むXML」を格納するグローバル変数。
var nextXmlUrl = "00000000.xml";

// 「次に読み込むpage」を格納するグローバル変数。
var nextIndex = 0;

// デバッグ用。
var debugAjax = null;

/**
	次へ。
	@param characterObjId キャラ置き換え先ID。
	@param backgroundObjId 背景置き換え先ID。
	@param textObjId テキスト置き換え先ID。
*/
function next()
{
	// もしメッセージウィンドウが非表示なら、表示します。
	if( isMessageScreenExist == false )
	{
		toggleMessageWindow();
	}

	// XMLHttpRequestを取得します。
	var ajax = createXMLHttpRequest();
	// デバッグ用の方にセットします。
	debugAjax = ajax;

	// URL を指定して、そこから情報を取ってきます。
	ajax.open( "GET", nextXmlUrl );

	// 状態が変化したら呼ばれるイベントハンドラをセットします。
	ajax.onreadystatechange 
		= function()
		{
			if	(
				( ajax.readyState == 4 ) && 
				( ajax.status == 200 )
				)
			{
				// ちゃんと読み込めてたら<page>を取得。。
				var page = getPage( ajax, nextIndex );

				// キャラ。
				if( page.characterUrl != null )
				{
					// イメージ置き換え先の取得。
					var characterObj = document.getElementById( characterObjId );
					if( page.characterUrl.indexOf( "off" ) == 0 )
					{
						// offの時は非表示に。
						characterObj.src = "Opa.gif";
						characterObj.style.visibility = "hidden";
					}
					else
					{
						// イメージを置き換えます。
						characterObj.src = page.characterUrl;
						characterObj.style.visibility = "visible";
					}
				}

				// 背景。
				if( page.backgroundUrl != null )
				{
					// イメージ置き換え先の取得。
					var backgroundObj = document.getElementById( backgroundObjId );
					// イメージを置き換えます。
					backgroundObj.src = page.backgroundUrl;
				}

				// 名前。
				if( page.name != null )
				{
					// テキスト置き換え先の取得。
					var nameObj = document.getElementById( nameObjId );
					// テキストを置き換えます。
					nameObj.innerHTML = page.name;
				}

				// テキスト。
				if( page.text != null )
				{
					// テキスト置き換え先の取得。
					var textObj = document.getElementById( textObjId );
					// テキストを置き換えます。
					textObj.innerHTML = page.text;
				}

				// 次の読み込み先。
				if( page.nextXmlUrl != null )
				{
					nextXmlUrl = page.nextXmlUrl;
				}

				nextIndex = page.nextIndex;
			}
		}

	ajax.send( '' );
}


