// window.onloadイベントに追加
addWinLoadEvent( filteringTrialList );

var trialDts, trialDds, descriptionClass;

// フィルタメニューの生成、イベントの設定
function filteringTrialList () {
	if (!document.getElementsByTagName ||
		!document.getElementById ||
		!document.getElementById( 'filelist' ) ) return false;

	// フィルタメニュー生成
	function _genFilterMenu ( parentElm, btnId, btnLabel, btnWidth, eFunc ) {
		var item = document.createElement( 'li' );
		item.setAttribute( 'id', btnId );

		setEvent( item, 'onclick', eFunc + "('" + btnId + "');" );

		var img = document.createElement( 'img' );
		img.setAttribute( 'src', 'img/btn_' + btnId + '.gif' );
		img.setAttribute( 'alt', btnLabel );
		img.setAttribute( 'width', btnWidth );
		img.setAttribute( 'height', '21' );
		item.appendChild( img );

		parentElm.appendChild( item );
	}
	// 新しい体験版にNEWマークをつける
	function _showNewProd () {
		var period = new Date();
		var prod = new Array();
		period.setMonth( period.getMonth() - 1 );	/* NEWマーク表示期間は1か月 */

		for ( var i=0; i<trialDts.length; i++ ) {
			for ( var j=0; j<trialDts[i].childNodes.length; j++ ) {
				var nodeInDt = trialDts[i].childNodes[j];
				if ( 8 === nodeInDt.nodeType && nodeInDt.nodeValue.indexOf( '体験版最終更新日', 0 ) >= 0 ) {
					var begin = nodeInDt.nodeValue.indexOf( '200', 0 );
					var end =   nodeInDt.nodeValue.indexOf( '"', begin );
					var dateAddStr = nodeInDt.nodeValue.substring( begin, end );
					var dateAdd = new Date( dateAddStr );
					if ( period.getTime() < dateAdd.getTime() ) {
						trialDts[i].appendChild( _genNewMarkImg() );
						_addNewProd( trialDts[i].cloneNode( true ), trialDds[i].cloneNode( true) );
					}
				}
			}
		}
	}
	// NEWマーク画像を生成
	function _genNewMarkImg () {
		var img = document.createElement( 'img' );
		img.setAttribute( 'src', 'img/animnew.gif' );
		img.setAttribute( 'alt', '[new]' );
		img.setAttribute( 'width', 44 );
		img.setAttribute( 'height', 13 );
		setClassAttr( img, 'recently' );
		return img;
	}
	// 最近追加された体験版の一覧を生成
	function _addNewProd ( dt, dd ) {
		dl.appendChild( dt );
		dl.appendChild( dd );
		newProd++;
	}

	var fileList = document.getElementById( 'filelist' );

	trialDts = fileList.getElementsByTagName( 'dt' );
	trialDds = fileList.getElementsByTagName( 'dd' );
	descriptionClass = 'show';

	var ulFilterMenu = document.createElement( 'ul' );
	ulFilterMenu.setAttribute( 'id', 'filtermenu' );
	_genFilterMenu( ulFilterMenu, 'allos', '全製品を表示', 67, 'showByOs' );
	_genFilterMenu( ulFilterMenu, 'm', 'Mac OS X用体験版がある製品', 144, 'showByOs' );
	_genFilterMenu( ulFilterMenu, 'description', '説明を表示/非表示', 130, 'toggleDescription' );
	fileList.parentNode.insertBefore( ulFilterMenu, fileList );

	var dl = document.createElement( 'dl' );
	var newProd = 0;
	_showNewProd();
	if ( newProd > 0 ) {
		var recently = document.createElement( 'div' );
		recently.setAttribute( 'id', 'recently' );
		var h3 = document.createElement( 'h3' );
		var h3Str = document.createTextNode( '最近追加された体験版' );
		h3.appendChild( h3Str );
		recently.appendChild( h3 );
		recently.appendChild( dl );
		fileList.parentNode.insertBefore( recently, fileList );
	}


	return true;
}
// 動作OSによるフィルタリング
function showByOs ( os ) {
	function _showProd ( i ) {
		setClassAttr( trialDts[i], 'show' );
		if ( 'show' === descriptionClass ) {
			setClassAttr( trialDds[i], 'show' );
		}
		return true;
	}

	for ( var i=0; i<trialDts.length; i++ ) {
		setClassAttr( trialDts[i], 'hidden' );
		setClassAttr( trialDds[i], 'hidden' );

		var imgs = trialDts[i].getElementsByTagName( 'img' );
		if ( 0 === imgs.length && 'allos' === os ) {
			_showProd( i );
		}
		else {
			for ( var k=0; k<imgs.length; k++ ) {
				var src = imgs[k].getAttribute( 'src' );
				var imgClass = getClassAttr( imgs[k] );
				if ( 'os' === imgClass ) {
					if ( 'allos' === os || src.substring( src.indexOf( 'os_' )+3, src.indexOf( '.gif' ) ) === os ) {
						_showProd( i );
					}
				}
			}
		}
	}
	return true;
}
// 説明の表示・非表示を切り替え
function toggleDescription () {
	descriptionClass = ( 'hidden' === descriptionClass ? 'show' : 'hidden' );
	for ( var i=0; i<trialDds.length; i++ ) {
		if ( 'hidden' === getClassAttr( trialDts[i] ) ) {
			continue;
		}
		setClassAttr( trialDds[i], descriptionClass );
	}
	return true;
}

