/**
 * Static banner
 *
 * @
 * @changelog
 *  2006. 11. 16 release
 */

if (typeof U2 == 'undefined')
{
	U2 = {};
	U2.VERSION = '0.7.2';
	U2.$=function(){var ret=[];for(var i=0;i<arguments.length;i++){if(typeof arguments[i]=='string')ret.push(document.getElementById(arguments[i]));else ret.push(arguments[i])};return ret[1]?ret:ret[0]};U2.$C=function(tag){return document.createElement(tag)};U2.$A=function(collection){var ret=[];for(var i=0;i<arguments.length;i++)ret.push(arguments[i]);return ret};U2.Func={bind:function(func,obj){var a=U2.Array.toArray(arguments);a.shift();a.shift();return function(){func.apply(obj,a)}},bindForEvent:function(func,obj){return function(e){return func.call(obj,e||window.event)}}};U2.Array={has:function(arr,needle){for(var i=0;i<arr.length;i++){if(arr[i]==needle)return true};return false},indexOf:function(arr,needle){if(arr.indexOf){return arr.indexOf(needle)}else{for(var i=0;i<arr.length;i++)if(arr[i]==needle)return i}},each:function(arr,iter){for(var i=0;i<arr.length;i++){arr[i]=iter(arr[i],i)};return arr},filter:function(arr,iter){var ret=[];for(var i=0;i<arr.length;i++){if(iter(arr[i],i))ret.push(arr[i])};return ret},toArray:function(collection){var arr=[];for(var i=0;i<collection.length;i++){arr.push(collection[i])};return arr}};U2.Class=function(){var obj=function(){if(this.__const)this.__const.apply(this,arguments)};obj.prototype.free=function(){if(this.__destruct)this.__destuct()};if(arguments[0])U2.Class.extend(obj.prototype,arguments[0]);return obj};U2.Class.extend=function(superCls){var obj=superCls;for(var i=0;i<arguments.length;i++){if(arguments[i]){for(var x in arguments[i])obj[x]=arguments[i][x]}};return obj};U2.Event={register:function(oEl,sEvent,pFunc){oEl=U2.$(oEl);if(oEl.addEventListener){oEl.addEventListener(sEvent,pFunc,false)}else if(oEl.attachEvent){oEl.attachEvent('on'+sEvent,pFunc)}},unregister:function(oEl,sEvent,pFunc){oEl=U2.$(oEl);if(oEl.removeEventListener){oEl.removeEventListener(sEvent,pFunc)}else if(oEl.detachEvent){oEl.detachEvent('on'+sEvent,pFunc)}},stop:function(e){if(e.stopPropagation&&e.preventDefault){e.stopPropagation();e.preventDefault()}else{e.returnValue=false;e.cancelBubble=true}}};
}
if (typeof U2.Effect == 'undefined')
{
	U2.Effect = new Object;
}

U2.Effect.Static = U2.Class({
	__const : function(id) {
		this.obj = U2.$(id);
		this.options = U2.Class.extend({
			enable   : true,
			slowDown : false,
			topTrack : false,
			division : 50,
			limitArea : null
		}, arguments[1] || {});

		var offset = this.getPos(this.obj)[0];

		if (this.obj.style.position == '') {
			this.obj.style.position = 'absolute';
			if (offset != this.getPos(this.obj)[0]) {
				this.obj.style.position = 'relative';
			}
		}

		if (this.obj.style.position == 'absolute') {
			this.obj.style.top = this.obj.offsetTop+'px';
		} else {
			if (offset == this.getPos(this.obj)[0]) this.obj.style.top = '0px';
			else this.obj.style.top = (this.getPos(this.obj)[0] - offset) + 'px';
		}

		this._scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
		this._startTop  = parseInt(this.obj.style.top);
		this._startPosY = this.getPos(this.obj)[0];

		// event binding
		this.onscroll = U2.Func.bindForEvent(this.onScroll, this);
		U2.Event.register(window, 'scroll',this.onscroll);
	},
	onScroll : function(e) {
		if (!this.options.enable) return;

		var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
		var diff = scrollTop - this._scrollTop;
		var diffChange = false;

		this._targetTop = this._startTop + diff;

		if (this.options.limitArea) {
			var objY = this.getPos(this.obj)[0];
			var area = U2.$(this.options.limitArea);
			var posY = this.getPos(area)[0];

			if (this._startPosY + this.obj.offsetHeight + diff > posY + area.offsetHeight) {
				diff = posY + area.offsetHeight - this._startPosY - this.obj.offsetHeight;
				this._targetTop = this._startTop + diff;
				diffChange = true;
			}
		}

		if (this.options.topTrack && !diffChange && scrollTop > this._startPosY) {
			this._targetTop -= this._startPosY;
		}

		if (this._timer) {
			clearTimeout(this._timer);
			this._timer = null;
		}

		this._timer = setTimeout(U2.Func.bind(this.animate, this), 1);
	},
	animate : function() {
		var currTop = parseInt(this.obj.style.top);
		var unit = (this._targetTop-currTop)<0?-1:1;
		var step = Math.ceil(this._targetTop - this._startTop / 100);

		if (this.options.slowDown) {
			step = parseInt((this._targetTop - currTop) / this.options.division);
			if (step == 0) step = unit;
		}
		if ((step > 0 && currTop + step > this._targetTop) || (step < 0 && currTop + step < this._targetTop)) {
			step = this._targetTop - currTop;
		}
		if (this._targetTop != currTop) {
			this.obj.style.top = (currTop+step)+'px';
			setTimeout(U2.Func.bind(this.animate, this), 10);
		}
	},
	getPos : function(obj) {
		var top=0, left=0;
		while(obj.offsetParent) {
			top += obj.offsetTop;
			left += obj.offsetLeft;
			obj = obj.offsetParent;
		}

		return [top, left];
	},
	setEnable : function(enable) {
		this.options.enable = enable;
	}
});
