/***** Article毎に表示を切り替える機能の実装。 *****/
var ArticlesSystem=function(key,hidden){
	this.key=key;
	this.hidden=hidden;
}
ArticlesSystem.prototype={
	articles:null,		//各項目群(主にdiv部)
	articlesList:null,	//各項目リンク群(主にa要素)
	hash:null,			//現在の項目名
	key:null,			//キー
	log:null,			//log出力用要素
	tArticle:null,		//list用の印
	hidden:null,		//隠匿用class名
	
	loadArticles:function(elem){
		if(this.log)this.log.innerHTML+="<p>loadArticles</p>";
		this.articles=this.elementsLister(elem);
	},
	elementsLister:function(elem)
	{
		if(this.log)this.log.innerHTML+="<p>elementLister</p>";
		var list=new Array();
		for (var i=0,j=0; i<elem.childNodes.length; i++) {
			var e=elem.childNodes[i];
			if(e.nodeType==1){
				list[j]=e;j++;
			}
		}
		return list;
	},
	changeArticlesList:function(anc)
	{
	
	},
	setHash:function(key)
	{
		if(this.log)this.log.innerHTML+="<p>setHash</p>";
		if(key==null){	key=location.hash.replace(/#/i,"");	}
		if(key==""){	this.hash=this.key;	}
		else{	this.hash=key	}
		return this.hash;
	},
	resetArticles:function()
	{
		if(this.log)this.log.innerHTML+="<p>resetArticles</p>";
		var article;
		var dde=document.documentElement;
		var bug= (dde.getAttribute("style") == dde.style);
		for(var i=0;i< this.articles.length;i++ )
		{
			article=this.articles[i];
			if(!bug){
				article.removeAttribute('class',this.hidden);
			}else{article.className="";}
		}
	},
	visibleArticles:function(_key)
	{
		if(this.log)this.log.innerHTML+="<p>visibleArticles</p>";
		var key = _key!=null ?_key : this.hash;
		if(this.log)this.log.innerHTML+="<p>hash is "+key+"</p>";
		if(key!="")
		{
			var article;
			var dde=document.documentElement;
			var bug= (dde.getAttribute("style") == dde.style);
			for(var i=0;i< this.articles.length;i++ )
			{
				article=this.articles[i];
				if(article.getAttribute('id')!=key)
				{
					if(!bug){
					article.setAttribute('class',this.hidden);
					}else{article.className=this.hidden;}
				}
			}
		}
	},
	reset:function(hash)
	{
		if(this.log)this.log.innerHTML+="<p>reset</p>";
		this.setHash(hash);
		this.resetArticles();
		this.visibleArticles();
	},
	toString:function(){return article.toString();}
}

/** 実働 **/
var article=new ArticlesSystem("",'hidden');article.setHash();
function classloader(e){
	window.scrollTo(0,0);
	article.loadArticles(document.getElementById('body'));
	article.tArticle="thisArticle";
//	article.log=document.getElementById("logger");
	var arry=new Array();
	var ul=article.elementsLister(document.getElementById('index').getElementsByTagName("ul")[0]);
	var ank;
	for(i=0;i<ul.length;i++)
	{
		ank=ul[i].getElementsByTagName("a")[0];
		arry[i]=ank;
		arry[i].onclick=
			function()
			{
				var reg=new RegExp("#([a-zA-Z0-9_-]*)","i");
				var m=this.href.match(reg);
				m =m!=null?m[1]:"";
				if(m)
				{
					for(i=0;i<article.articlesList.length;i++)
					{
						article.articlesList[i].parentNode.id="";
					}
					this.parentNode.id=article.tArticle;
					
					var reg=new RegExp("#([a-zA-Z0-9_-]*)","i");
					var h=location.href.match(reg);
					h =h!=null?h[1]:"";
					if(h!=m){
						var d=document.getElementById(m);
						d.id=null;
						//location.href=this.href;
						location.replace("#"+m);
						d.id=m;
						article.reset(m);
					}
				}
				return m!=""?false:true;
			}
		if(article.log)article.log.innerHTML+="<p>"+ank.href+"</p>";
	}
	article.articlesList=arry;
	article.reset();
}
if (window.addEventListener) {  
	window.addEventListener('load',classloader, false);
	window.addEventListener('pageshow',classloader,false);
}  
	else if (window.attachEvent) {  
	window.attachEvent('onload',classloader);  
}
