addWinLoadEvent( setFilterProductPageList );

var prodNameDts, prodDescDds, descClass;

function setFilterProductPageList () {
	if (!document.getElementsByTagName ||
		!document.getElementById ||
		!document.getElementById( "prodlist" ) ) return false;

	var newProd, dl;
	var _genFilterMenu = function ( 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 );
	};
	var _genNewMarkImg = function () {
		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;
	};
	var _addNewProd = function ( dt, dd ) {
		dl.appendChild( dt );
		dl.appendChild( dd );
		newProd++;
	};
	var _showNewProd = function ( mode ) {
		var period = new Date();
		var prod = new Array();
		period.setMonth( period.getMonth() - 1 );	/* NEWマーク表示期間は1か月 */

		for ( var i=0; i<prodNameDts.length; i++ ) {
			var prodName;
			for ( var j=0; j<prodNameDts[i].childNodes.length; j++ ) {
				var nodeInDt = prodNameDts[i].childNodes[j];
				if ( 'A' == nodeInDt.nodeName ) {
					prodName = nodeInDt.childNodes[0].nodeValue;
					prod[prodName] = ( prod[prodName] ? 2 : 1 );
				}
				if ( 8 == nodeInDt.nodeType && nodeInDt.nodeValue.indexOf( "製品最終追加日", 0 ) >= 0 ) {
					var begin = nodeInDt.nodeValue.indexOf( "201", 0 );
					var end =   nodeInDt.nodeValue.indexOf( '"', begin );
					var dateAddStr = nodeInDt.nodeValue.substring( begin, end );
					var dateAdd = new Date( dateAddStr );
					if ( period.getTime() < dateAdd.getTime() ) {
						prodNameDts[i].appendChild( _genNewMarkImg() );
						if ( mode != 'mode1' && 1 == prod[ prodName ] ) {
							_addNewProd( prodNameDts[i].cloneNode( true ), prodDescDds[i].cloneNode( true) );
						}
					}
				}
			}
		}
	};

	var prodList = document.getElementById( "prodlist" );

	var mode = getClassAttr( prodList );
	// mode1: 説明を表示/非表示とNEWマーク
	// mode2: mode1に加え、最近追加された製品を冒頭に表示
	// mode3: mode2に加え、Mac OS Xフィルタ

	prodNameDts = prodList.getElementsByTagName( "dt" );
	prodDescDds = prodList.getElementsByTagName( "dd" );
	descClass = "show";

	var ul = document.createElement( "ul" );
	ul.setAttribute( "id", "filtermenu" );

	dl = document.createElement( "dl" );
	newProd = 0;
	_showNewProd( mode );

	if ( 'mode1' != mode ) {
		if ( 'mode3' == mode ) {
			_genFilterMenu( ul, "allos", "全製品を表示", 67, "showByOs" );
			_genFilterMenu( ul, "m", "Mac OS Xで使える製品を表示", 144, "showByOs" );
		}

		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 );
			prodList.insertBefore( recently, prodList.firstChild );
		}
	}
	_genFilterMenu( ul, "description", "説明を表示/非表示", 130, "toggleDescription" );

	prodList.parentNode.insertBefore( ul, prodList );
	return true;
}
function showByOs ( os ) {
	var _showProd = function ( i ) {
		setClassAttr( prodNameDts[i], "show" );
		if ( "show" == descClass ) {
			setClassAttr( prodDescDds[i], "show" );
		}
	};

	for ( var i=0; i<prodNameDts.length; i++ ) {
		setClassAttr( prodNameDts[i], "hidden" );
		setClassAttr( prodDescDds[i], "hidden" );

		var imgs = prodNameDts[i].getElementsByTagName( "img" );
		if ( "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 ( src.substring( src.indexOf( "os_" )+3, src.indexOf( ".gif" ) ) == os ) {
						_showProd( i );
					}
				}
			}
		}
	}
}
function toggleDescription () {
	descClass = ( "hidden" == descClass ? "show" : "hidden" );
	for ( var i=0; i<prodDescDds.length; i++ ) {
		if ( "hidden" == getClassAttr( prodNameDts[i] ) ) {
			continue;
		}
		setClassAttr( prodDescDds[i], descClass );
	}
}
