/*==========================================================

 @sitename JPAP.JP
 @lastupdate 2008/10/20

==========================================================*/

/* Float Pagetop
----------------------------------------------------------*/
(function(){

	var user = new KEY.User.Environment();
	
	if(user.ua() == "firefox") {
		// firefox ===================================================
		
		var step = 0.25;
		var pagetopSpan = 31;
		var negativeMargin = -3;
		var pgtop;
		var nav_area;
		var default_y = 0;
		var default_style;
		
		
		KEY.Module.FloatPageTop = function() {
			
			KEY.User.Size.call(this);
			KEY.HTML.GetElement.call(this);
			
		}
				
				
		KEY.Module.FloatPageTop.prototype = {
		
			init : function() {
				
				default_style = this.$("#FloatPagetop").style;
				
				pgtop = this.$("#FloatPagetop");
				if(!pgtop) return;
				default_y = pgtop._y;
				
				var nav = this.$("#Aside");
				nav_area = nav._y + nav._h;
				
				if(nav_area < default_y) {
					if(this.documentY() + this.windowH() < default_y) this.start();
				}
			},
			
			start : function() {
				
				this.fix();
				
			},
			
			fix : function() {
				
				var pgtop = this.$("#FloatPagetop").style;
				pgtop.position = "fixed";
				pgtop.top = "auto";
				pgtop.marginTop = "0px";
				pgtop.bottom = "-7px";
				this.keep();
				
			},
			
			keep : function() {
				
				var pgtop = this.$("#FloatPagetop").style;
				var current = this.documentY() + this.windowH();
				
				if(default_y != 0) {
				
					if (current <= nav_area) {
						
						pgtop.position = "absolute";
						pgtop.top = "-"+ default_y +'px';
						pgtop.bottom = "auto";
						pgtop.marginTop = nav_area - 38 +'px';
						
					} else {
						
						pgtop.position = "fixed";
						pgtop.top = "auto";
						pgtop.marginTop = "0px";
						pgtop.bottom = "-7px";
						
						// setposition
						if (default_y <= current) {
							pgtop.position = "absolute";
							pgtop.marginTop = negativeMargin +"px";
							pgtop.bottom = "auto";
							
						}
						
					}
				}
				
			}
			
		}
		
		
		// handler
		
		var event = new KEY.HTML.Event();
		var menu = new KEY.Module.FloatPageTop();
		
		event.append(window, "load", function (){
			menu.init();
		});
		
		event.append(window, "scroll", function (){menu.keep();});
		event.append(window, "resize", function (){menu.keep();});
	
	
		// end firefox ===================================================
	} else {
		// bigin !firefox ===================================================
	
	
			var step = 0.2;
			
			var pagetopSpan = 31;
			var navigationSpan = 0;
			var negativeMargin = -3;
			
			var pgtop;
			var navArea;
			var default_y = 0;



		KEY.Module.FloatPageTop = function() {
			
			KEY.User.Size.call(this);
			KEY.HTML.GetElement.call(this);
			
		}
		
		
		KEY.Module.FloatPageTop.prototype = {
		
			init : function() {
				
				if(document.getElementById('nonFloatPgt') != null) return;

				pgtop = this.$("#FloatPagetop");
				if(!pgtop) return;
				default_y = pgtop._y;
				
				var nav = this.$("#Aside");
				navArea = nav._y + nav._h + navigationSpan;
				
				if(navArea < default_y) {
					if(this.documentY() + this.windowH() < default_y) this.correct();
				}

			},
			
			correct : function() {
				
				var self = this;
				clearInterval(self.timer);
				
				var navArea = this.$("#Aside")._y + this.$("#Aside")._h + navigationSpan;
				
				var arrive = this.documentY() + this.windowH() - pagetopSpan;
				
				if(default_y < arrive) arrive = default_y;
				if(navArea > arrive) arrive = navArea;
				
				self.timer = setInterval(function() {
					var m = 0;
					var a = arrive;
					var c = self.$("#FloatPagetop")._y;
					var o = self.$("#FloatPagetop").style;
					
					if(a==c) {
						clearInterval(self.timer);
						self.timer = null;
					} else {
						m = (a-c>0) ? Math.ceil((a-c)*step) : Math.floor((a-c)*step);
						o.top = "-"+ default_y +'px';
						o.marginTop = c+m+negativeMargin +'px';
					}
				}, 25);

			},
			
			follow : function() {
				if(!pgtop) return;
				this.correct();
			}
			
		}
		
		
		// handler
		
		var event = new KEY.HTML.Event();
		var menu = new KEY.Module.FloatPageTop();
		
		event.append(window, "load", function (){
			menu.init();
		});
		
		event.append(window, "scroll", function (){
			menu.follow();
		});
		
		event.append(window, "resize", function (){
			menu.follow();
		});
			
		// end !firefox ===================================================
	}
	
	
	
	
})();
