new function(){

	var animation = true;
	
	function init(){
		
		this.isMSIE = /*@cc_on!@*/false; 
		
		this.array = new Array();
		
		reg = new RegExp("absoluteLimit-([a-zA-Z0-9-_]+)", "i");
		var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
		for(var nam in objAll){
			if(objAll[nam].className){
				var classes = objAll[nam].className.split(/\s+/);
				for(var j = 0; j < classes.length; j++) {
					if(classes[j].match(reg)){
							var limit_id = classes[j].split("-")[1];
							var move = objAll[nam];
							var limit = document.getElementById(limit_id);
							if(move && limit){
								move.style.top = getOffsetTop(limit)+"px";
								move.style.position = "absolute";
								this.array.push({move:move, limit:limit});
							}
						break;
					}
				}
			}
		}
		
		if(animation){
			//アニメーションあり
			setInterval(moving, 50);
		}else{
			//アニメーションなし
			addEvent(window,"scroll", moving);
			
			if(fontSizeWatcher){
				fontSizeWatcher.addEventListener("change", moving);
			}else{
				//check font size
				var e = document.createElement("div");
				var s = document.createTextNode("S");
				e.appendChild(s);
				e.style.visibility="hidden"
				e.style.position="absolute"
				e.style.top="0"
				document.body.appendChild(e);
			
				var defHeight = e.offsetHeight;
				var checkBoxSize = function(){
				
					if(defHeight != e.offsetHeight){
						moving();
						defHeight= e.offsetHeight;
					}
				}
				setInterval(checkBoxSize,1000);
			}
		}

	}
	
	function getOffsetTop(element){
		
		if(this.isMSIE){
		
			var offset = 0;
			do {
				offset += element.offsetTop || 0;
				element = element.offsetParent;
			} while (element);
		}else{
			var offset = element.offsetTop;
		}
		return offset;
	}
	
	function moving(){
		
		if(!this.array){
			return false;
		}
		
		for(var i=0; i<this.array.length; i++){
			var limit = this.array[i].limit;
			var move = this.array[i].move;
			
			var offsetTop = getOffsetTop(limit);
			
			
			//alert(limit.offsetTop);
			var max = offsetTop + limit.offsetHeight - move.offsetHeight;
			var min = offsetTop;
			
			/*
			if ( document.compatMode == 'CSS1Compat'){
				var target = document.documentElement.scrollTop;
			}else{
				var target =document.body.scrollTop;
			}*/
			var target = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
			
			target = Math.min(Math.max(target, min), max);
			
			
			
			if(animation){
				var moveTop = parseFloat(move.style.top.replace("px", ""));
				move.style.top = (moveTop + (target - moveTop) / 3) +"px";
			}else{
				move.style.top = target+"px";
			}
			//alert(move.style.top);
		}
	}

	
	function addEvent(elm,listener,fn){
		try{
			elm.addEventListener(listener,fn,false);
		}catch(e){
			elm.attachEvent("on"+listener,fn);
		}
	}
	addEvent(window,"load",init);
	
}
