	var httpObject;
	var timerId;
	var timerIdStatus;
	var timeoutSecondDefault = 10000;		// Timeout (ms)
	var timeoutSecond = timeoutSecondDefault;		// Timeout (ms)
	var timeInterval = 50;	// ms
	var urlTarget = "./module_list.php";
	var listUrl = new Array();
	listUrl[ 'ButtonSubmit1' ] = '../../library/rss/rss1.0.php';
	listUrl[ 'ButtonSubmit2' ] = '../../library/rss/';

function displayXmlElement( xml )
{
	var tagNodeBase;
	var nodeBase;
	var i;

	// ルート要素を特定する
	for( i = 0 ; i < xml.childNodes.length ; i++ )
	{
		if( xml.childNodes[ i ].tagName )
		{
			tagNameBase = xml.childNodes[ i ].tagName;
			nodeBase = xml.childNodes[ i ];
			break;
		}
	}
	// ルート要素のタグ名からRSSフォーマットを特定する
	if( tagNameBase == 'rdf:RDF' )
	{
		document.getElementById( 'Status' ).innerHTML += "［RSS1.0］";
	}
	else if( tagNameBase == 'rss' && nodeBase.getAttribute( 'version' ) == '2.0' )
	{
		document.getElementById( 'Status' ).innerHTML += "［RSS2.0］";
		nodeBase = xml.getElementsByTagName( 'channel' )[ 0 ];
	}
	else
	{
		document.getElementById( 'Status' ).innerHTML += '［未知のフォーマット］';
		return( false );
	}
	// 記事要素のリストを抽出する
	var listItem = nodeBase.getElementsByTagName( 'item' );
	// 記事要素の内容を解析する
	var frameDisplay = document.getElementById( 'FrameDisplay' );
	var frameItem = document.getElementById( 'FrameItem' );
	for( i = 0 ; i < listItem.length ; i++ )
	{
		var itemTitle;
		var itemLink;
		var itemDescription;
		var itemDate;
		var j = 0;
		for( j = 0 ; j < listItem[ i ].childNodes.length ; j++ )
		{
			var nodeChild = listItem[ i ].childNodes[ j ];
			var tagChild = nodeChild.tagName;
			// 記事タイトル
			if( tagChild == 'title' )
			{
				itemTitle = nodeChild.firstChild.nodeValue;
			}
			// 記事URL
			else if( tagChild == 'link' )
			{
				itemLink = nodeChild.firstChild.nodeValue;
			}
			// 記事概要
			else if( tagChild == 'description' )
			{
				itemDescription = nodeChild.firstChild.nodeValue;
			}
			// 発行日時（RSS1.0）
			else if( tagChild == 'dc:date' )
			{
				itemDate = nodeChild.firstChild.nodeValue;
			}
			// 発行日時（RSS2.0）
			else if( tagChild == 'pubDate' )
			{
				itemDate = nodeChild.firstChild.nodeValue;
			}
		}
		// テンプレートとなるタグ要素を複製
		var newFrameItem = frameItem.cloneNode( true );
		newFrameItem.removeAttribute( 'id' );
		newFrameItem.id = 'Item' + i;
		newFrameItem.className = "FrameItem";
		// 取り出した記事情報をタグに格納する
		var listObjectDiv = newFrameItem.getElementsByTagName( 'div' );
		listObjectDiv[ 0 ].innerHTML = '<a href = "' + itemLink + '" target = "_blank">' + itemTitle + '</a>';
		listObjectDiv[ 1 ].innerHTML = itemDescription;
		listObjectDiv[ 2 ].innerHTML = itemDate;
		// 生成したタグ要素をドキュメントに追加し表示する
		frameDisplay.appendChild( newFrameItem );
		newFrameItem.style.display = 'block';
	}
	// 読み込みボタンを有効にする
	activateButton( 1 );
}

// POSTデータ
function sendPostData( objectEvent, viewOffset, viewQuantity )
{
	// 読み込みボタンを無効にする
	activateButton( 0 );

	// フォームの値をGET
	var valueUrl = document.getElementById( 'Url' ).value;
	if( valueUrl == '' )
	{
		valueUrl  = 'http://cheltenham-software.com/library/rss/';
		document.getElementById( 'Url' ).value = valueUrl;
	}
	// 送信POSTデータ
	var postData = 'Url=' + encodeURIComponent( valueUrl );
	// HTTP通信を開始
	httpXmlRequest( urlTarget, postData, displayXmlElement );
}

// XMLファイルをロードする
function loadXml( e )
{
	// 読み込みボタンを無効にする
	activateButton( 0 );
	// 押されたボタンを特定しオブジェクトを参照
	var buttonTarget = cheltenhamDom_getTargetNode( e );
	// 現在表示されているRSS情報を削除する
	removeResult();
	// XMLをHTTP通信で取得
	httpXmlRequest( listUrl[ buttonTarget.id ], '', displayXmlElement );
	// バブリングとデフォルトイベントアクションの停止
	cheltenhamEvent_stopDefaultAndPropagation( e );
	return( false );
}

// 現在表示されている結果を削除する
function removeResult()
{
	var frameDisplay = document.getElementById( 'FrameDisplay' );
	while( frameDisplay.lastChild )
	{
		frameDisplay.removeChild( frameDisplay.lastChild );
	}
}

// サーバーへデータを送信する関数
function httpXmlRequest( urlTarget, dataSend, functionNext )
{
	// タイマーをリセット
	timeoutSecond = timeoutSecondDefault;

	// タイマーをストップ
	if( timerId != null )
	{
		clearInterval( timerId );
	}
	if( timerIdStatus != null )
	{
		clearInterval( timerIdStatus );
	}

	// XMLHttpリクエストオブジェクト生成
	httpObject = cheltenhamXmlHttpObject_createXmlHttpRequest()
	if( !httpObject )
	{
		cheltenhamXmlHttpObject_noticeFailureCreateXmlHttpRequest();
	}

	// タイマーをセット
	timerId = setInterval( 'checkTimeout()', timeInterval );
	httpObject.open( "post", urlTarget, true );
	httpObject.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
	timerIdStatus = cheltenhamText_displayTextGradually( "Status", 'Now Loading .............................................................', 2000, 20 );
	httpObject.onreadystatechange = function()
	{
		if( httpObject.readyState == 4 )
		{
			document.getElementById( 'Status' ).innerHTML = '　';

			// タイマーをストップ
			clearInterval( timerId );
			timerId = null;
			clearInterval( timerIdStatus );
			timerIdStatus = null;

			// 処理を実行
			functionReference = function()
			{
				// 結果を削除する
				removeResult();
				if(  httpObject.status == 200 )
				{
					// XML
					var dataXml = httpObject.responseXML;
					// ステータスを表示
					cheltenhamText_displayTextGradually( "Status", 'RSS情報が見つかりました。', 300, 20 );
					functionReference2 = function()
					{
						// XMLを元に結果を表示
						functionNext( dataXml );
					}
					setTimeout( functionReference2, 500 );
				}
				else
				{
					// ステータスを表示
					cheltenhamText_displayTextGradually( "Status", 'RSS情報が見つかりませんでした。', 300, 20 );
					// 読み込みボタンを無効にする
					activateButton( 1 );
			}
			}
			setTimeout( functionReference, 0 );
		}
	}
	httpObject.send( dataSend );
}

// タイムアウト処理
function checkTimeout()
{
	timeoutSecond -= timeInterval;
	if( timeoutSecond <= 0 )
	{
		// タイマーをストップ
		clearInterval( timerId );
		clearInterval( timerIdStatus );
		timerId = null;
		timerIdStatus = null;
		// HTTPリクエストを中断
		httpObject.abort();
		// エラーダイアログを表示
		timerIdStatus = cheltenhamText_displayTextGradually( "Status", 'ファイルの読み込みに失敗しました。', 500, 20 );

		// 検索ボタンを有効
		activateButton( true );

		return( false );
	}
}

// ボタンをアクティブにする関数
function activateButton( flagActive )
{
	if( flagActive == true )
	{
		document.getElementById( 'ButtonSubmit' ).disabled = false;
		document.getElementById( 'ButtonSubmit1' ).disabled = false;
		document.getElementById( 'ButtonSubmit2' ).disabled = false;
	}
	else
	{
		document.getElementById( 'ButtonSubmit' ).disabled = true;
		document.getElementById( 'ButtonSubmit1' ).disabled = true;
		document.getElementById( 'ButtonSubmit2' ).disabled = true;
	}
}

function copyUrlFromSelectSite()
{
	document.getElementById( 'Url' ).value = document.getElementById( 'Site' ).value;
}

// EventListener
function setListeners( e )
{
	var objectFormSite = document.getElementById( 'Site' );
	var objectFormButtonSubmit1 = document.getElementById( 'ButtonSubmit1' );
	var objectFormButtonSubmit2 = document.getElementById( 'ButtonSubmit2' );
	var objectFormButtonSubmit = document.getElementById( 'ButtonSubmit' );
	cheltenhamEvent_addListener( objectFormSite, 'click', copyUrlFromSelectSite, false );
	cheltenhamEvent_addListener( objectFormButtonSubmit1, 'click', loadXml, false );
	cheltenhamEvent_addListener( objectFormButtonSubmit2, 'click', loadXml, false );
	cheltenhamEvent_addListener( objectFormButtonSubmit, 'click', sendPostData, false );
}

// リスナー設定
cheltenhamEvent_addListener( window, 'load', setListeners, false );

// メッセージ表示後にボタンをアクティブに
setTimeout( function(){ activateButton( 0 ); }, 0 );
setTimeout( function(){ activateButton( 1 ); }, 1000 );

