
/***************************
REFLE SCHOOL SlideNavigation


_2 = down;
_3 = letft position;
_4 = top position;
_5 = width;
_6 = height;
_8 = cssの内容
_9 = 
_10 = ContainerName;
_11 = ContentName;



***************************/
refleSlideOutMenu.Registry=[];
refleSlideOutMenu.aniLen=250;
refleSlideOutMenu.hideDelay=1000;
refleSlideOutMenu.minCPUResolution=10;

function refleSlideOutMenu(id,_2,_3,_4,_5,_6){
	// DOMブラウザーの判別
	this.ie=document.all?1:0;  // IE
	this.ns4=document.layers?1:0; // NN4
	this.dom=document.getElementById?1:0; // Mozilla
	this.css="";
	if(this.ie||this.ns4||this.dom){
		this.id=id;
		this.dir=_2;
		this.orientation=_2=="left"||_2=="right"?"h":"v";
		this.dirType=_2=="right"||_2=="down"?"-":"+";
		this.dim=this.orientation=="h"?_5:_6;
		this.hideTimer=false;
		this.aniTimer=false;
		this.open=false;
		this.over=false;
		this.startTime=0;
		this.gRef="refleSlideOutMenu_"+id;
		eval(this.gRef+"=this");
		refleSlideOutMenu.Registry[id]=this;
		var d=document;
		var _8="";
		_8+="#"+this.id+"Container{visibility:hidden;";
		_8+="left:"+_3+"px;";
		_8+="top:"+_4+"px;";
		_8+="overflow:hidden;z-index:10000;}";
		_8+="#"+this.id+"Container,#"+this.id+"Content{position:absolute;";
		_8+="width:"+_5+"px;";
		_8+="height:"+_6+"px;";
		_8+="clip:rect(0 "+_5+" "+_6+" 0);";
		_8+="}";
		this.css=_8;
		this.load();
	}
}


refleSlideOutMenu.writeCSS=function(){
	document.writeln("<style type=\"text/css\">");
	for(var id in refleSlideOutMenu.Registry){ //refleSlideOutMenu.Registry内にvar idが含まれているかブルー値で取得。
		document.writeln(refleSlideOutMenu.Registry[id].css); // 各idに対応するcssを設定する。
	}
	document.writeln("</style>");
};

/*************************************************************************************
ここでスタイルシートを直接書き出す。

（例）
<style type="text/css">
#menu1Container {
	visibility: hidden;
	left: 90px;
	top: 31px;
	overflow:hidden;
	z-index:10000;
}
#menu1Container, #menu1Content {
	position:absolute;
	width: 140px;
	height: 136px;
	clip:rect(0 140 136 0);　
}
</style>

**************************************************************************************/

refleSlideOutMenu.prototype.load=function(){
	var d=document;
	var _10=this.id+"Container";
	var _11=this.id+"Content";
	var _12=this.dom?d.getElementById(_10):this.ie?d.all[_10]:d.layers[_10];
	if(_12){
		var _13=this.ns4?_12.layers[_11]:this.ie?d.all[_11]:d.getElementById(_11);
	}
	var _14;
	if(!_12||!_13){
		window.setTimeout(this.gRef+".load()",100);
	}
	else{
		this.container=_12;
		this.menu=_13;this.style=this.ns4?this.menu:this.menu.style;
		this.homePos=eval("0"+this.dirType+this.dim);
		this.outPos=0;
		this.accelConst=(this.outPos-this.homePos)/refleSlideOutMenu.aniLen/refleSlideOutMenu.aniLen;
		if(this.ns4){
			this.menu.captureEvents(Event.MOUSEOVER|Event.MOUSEOUT);
		}
		this.menu.onmouseover=new Function("refleSlideOutMenu.showMenu('"+this.id+"')");
		this.menu.onmouseout=new Function("refleSlideOutMenu.hideMenu('"+this.id+"')");
		this.endSlide();
	}
};

refleSlideOutMenu.showMenu=function(id){
	var reg=refleSlideOutMenu.Registry;
	var obj=refleSlideOutMenu.Registry[id];
	if(obj.container){
		obj.over=true;
		for(menu in reg){
			if(id!=menu){
				refleSlideOutMenu.hide(menu);
			}
		}
		if(obj.hideTimer){
			reg[id].hideTimer=window.clearTimeout(reg[id].hideTimer);
		}
		if(!obj.open&&!obj.aniTimer){
			reg[id].startSlide(true);
		}
	}
};

refleSlideOutMenu.hideMenu=function(id){
	var obj=refleSlideOutMenu.Registry[id];
	if(obj.container){
		if(obj.hideTimer){
			window.clearTimeout(obj.hideTimer);
		}
		obj.hideTimer=window.setTimeout("refleSlideOutMenu.hide('"+id+"')",refleSlideOutMenu.hideDelay);
	}
};

refleSlideOutMenu.hideAll=function(){
	var reg=refleSlideOutMenu.Registry;
	for(menu in reg){
		refleSlideOutMenu.hide(menu);
		if(menu.hideTimer){
			window.clearTimeout(menu.hideTimer);
		}
	}
};

refleSlideOutMenu.hide=function(id){
	var obj=refleSlideOutMenu.Registry[id];
	obj.over=false;if(obj.hideTimer){
		window.clearTimeout(obj.hideTimer);
	}
	obj.hideTimer=0;
	if(obj.open&&!obj.aniTimer){
		obj.startSlide(false);
	}
};

/****************************************************
*  prototypeでrefleSlideOutMenuに独自のメソッドを追加する
*  prototype.startSlide
*  prototype.slide
*  prototype.endSlide
*  setVisibility
*  prototype.moveTo
*  prototype.getPos
**************************************************/

refleSlideOutMenu.prototype.startSlide=function(_21){
	this[_21?"onactivate":"ondeactivate"]();
	this.open=_21;if(_21){
		this.setVisibility(true);
	}
	this.startTime=(new Date()).getTime();
	this.aniTimer=window.setInterval(this.gRef+".slide()",refleSlideOutMenu.minCPUResolution);
};

refleSlideOutMenu.prototype.slide=function(){
	var _22=(new Date()).getTime()-this.startTime;
	if(_22>refleSlideOutMenu.aniLen){
		this.endSlide();
	}
	else{
		var d=Math.round(Math.pow(refleSlideOutMenu.aniLen-_22,2)*this.accelConst);
		if(this.open&&this.dirType=="-"){
			d=-d;
		}
		else{
			if(this.open&&this.dirType=="+"){
				d=-d;
			}
			else{
				if(!this.open&&this.dirType=="-"){
					d=-this.dim+d;
				}
				else{
					d=this.dim+d;
				}
			}
		}
		this.moveTo(d);
	}
};

refleSlideOutMenu.prototype.endSlide=function(){
	this.aniTimer=window.clearTimeout(this.aniTimer);
	this.moveTo(this.open?this.outPos:this.homePos);
	if(!this.open){
		this.setVisibility(false);
	}
	if((this.open&&!this.over)||(!this.open&&this.over)){
		this.startSlide(this.over);
	}
};

refleSlideOutMenu.prototype.setVisibility=function(_24){
	var s=this.ns4?this.container:this.container.style;s.visibility=_24?"visible":"hidden";
};

refleSlideOutMenu.prototype.moveTo=function(p){
	this.style[this.orientation=="h"?"left":"top"]=this.ns4?p:p+"px";
};

refleSlideOutMenu.prototype.getPos=function(c){
	return parseInt(this.style[c]);
};

refleSlideOutMenu.prototype.onactivate=function(){};
refleSlideOutMenu.prototype.ondeactivate=function(){};
