var areaSelect = {
	
	targetId : new String(),
	targetX  : new Number(),
	targetY  : new Number(),
	rangeX   : new Number(),
	rangeY   : new Number(),
	
	trigger : function(value){
		if(value!="heading"){
			
			var i, targetId = value, targetElement, targetY, tergetX;
			
			targetElement = document.getElementById(targetId);
			targetX  = areaSelect.getElementPosition(targetElement).left;
			targetY  = areaSelect.getElementPosition(targetElement).top;
			
			if(document.all&&!window.opera){ //IE
				if(targetElement.firstChild &&!targetElement.firstChild.nodeName.match(/#text|img/i)){
					targetElement = targetElement.firstChild;
				}
				
				targetX = areaSelect.getElementPosition(targetElement).left;
				targetY = areaSelect.getElementPosition(targetElement).top;
			}
			
			//if (targetY < 0) targetY = 0;
			var scrollMaxX = areaSelect.getPageSize().width  - areaSelect.getClientSize().width;
			var scrollMaxY = areaSelect.getPageSize().height - areaSelect.getClientSize().height;
			if (targetX > scrollMaxX) targetX = scrollMaxX;
			if (targetY > scrollMaxY) targetY = scrollMaxY;
			
			areaSelect.targetId = targetId;
			areaSelect.targetX  = targetX;
			areaSelect.targetY  = targetY;
			areaSelect.pageScroll();
		}
	},
		
	pageScroll : function(){
		var beforeOffsetY, beforeOffsetX, x = this.targetX, y = this.targetY;
		
		this.rangeX = Math.abs(areaSelect.getPageOffset().x - this.targetX);
		this.rangeY = Math.abs(areaSelect.getPageOffset().y - this.targetY);
		
		beforeOffsetY = areaSelect.getPageOffset().y;
		beforeOffsetX = areaSelect.getPageOffset().x;
		
		// get [x]
		if (this.rangeX > 10){
			if (this.targetX > areaSelect.getPageOffset().x){ // scroll left
				x = Math.floor( this.targetX - this.rangeX / 1.2 );
			}
			else if (this.targetX < areaSelect.getPageOffset().x){ // scroll right
				x = Math.floor( this.targetX + this.rangeX / 1.2 );
			}
		}
		else {
			if (this.targetX > areaSelect.getPageOffset().x){ // scroll left
				x = this.targetX - 1;
			}
			else if (this.targetY < areaSelect.getPageOffset().x){ // scroll right
				x = this.targetX + 1;
			}
		}
		
		// get [y]
		if (this.rangeY > 10){
			if (this.targetY > areaSelect.getPageOffset().y){ // scroll down
				y = Math.floor( this.targetY - this.rangeY / 1.2 );
			}
			else if (this.targetY < areaSelect.getPageOffset().y){ // scroll up
				y = Math.floor( this.targetY + this.rangeY / 1.2 );
			}
		}
		else {
			if (this.targetY > areaSelect.getPageOffset().y){ // scroll down
				y = this.targetY - 1;
			}
			else if (this.targetY < areaSelect.getPageOffset().y){ // scroll up
				y = this.targetY + 1;
			}
		}
		
		window.scrollTo( x, y );
		
		//if ( this.rangeX < 1 || this.rangeY < 1 || ( x == beforeOffsetX && y == beforeOffsetY) ) {
		if ( Math.abs(y - beforeOffsetY) > 1) {
			window.setTimeout("areaSelect.pageScroll()", 25);
		}
	},
	
	
	//--------------------------------------------------
	// functions
	//--------------------------------------------------
	getPageSize : function(){
		var stndardWidth, stndardHeight, QuirksWidth, QuirksHeight, width, height;
		
		stndardWidth  = document.documentElement.scrollWidth || 0;
		stndardHeight = document.documentElement.scrollHeight|| 0;
		
		QuirksWidth  = document.body.scrollWidth  || 0;
		QuirksHeight = document.body.scrollHeight || 0;
		
		width  = Math.max(stndardWidth,  QuirksWidth);
		height = Math.max(stndardHeight, QuirksHeight);
		
		return {width: width, height: height};
	},
	
	getPageOffset : function(){
		var x, y;
		x = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft)
		y = Math.max(document.documentElement.scrollTop,  document.body.scrollTop)
		return {x: x, y: y};
	},
	
	getClientSize : function (){
		var width = height = 0;
		if(window.innerWidth){// Mozilla, Opera, Safari
			width  = window.innerWidth;
			height = window.innerHeight;
		}
		else { // IE Standard || IE Quirks || 0
			width  = document.documentElement.clientWidth  || document.body.clientWidth  || 0;
			height = document.documentElement.clientHeight || document.body.clientHeight || 0;
		}
		return {width:width,height:height}
	},
	
	getElementPosition : function(element) {
		var posTop = posLeft = 0;
		do {
			posTop  += element.offsetTop  || 0;
			posLeft += element.offsetLeft || 0;
			element =  element.offsetParent;
		}
		while (element);
		return {top: posTop, left: posLeft};
	}
		
}