Object.extend(Event, {

  addEvent : function (obj,eventName,eventFunc) {
		if(obj.attachEvent) {
      obj.attachEvent(eventName,eventFunc);
    }else if(obj.addEventListener){
     eventName = eventName.toString().replace(/on(.*)/i,'$1');
     obj.addEventListener(eventName,eventFunc, false);
    }
    return eventFunc;
  },

  delEvent : function (obj,eventName,eventFunc) {
   if(obj.detachEvent)
    obj.detachEvent(eventName,eventFunc)
   else if(obj.removeEventListener){
     eventName = eventName.toString().replace(/on(.*)/i,'$1');
     obj.removeEventListener(eventName,eventFunc, false);
   }
    return eventFunc;
  },

  getEvent : function () {
    //获取Event
    return window.event ? window.event : (function (o) {
    do {
      o = o.caller;
    } while (o && !/^\[object[ A-Za-z]*Event\]$/.test(o.arguments[0]));
        return o.arguments[0];
      })(this.getEvent);
    }
  }
);
var Marquee = Class.create();
Marquee.prototype={
	initialize : function(marqueeId){
    var mq = this;
		mq.body = $(marqueeId);
		if(mq.body == null) return;
		mq.direct = "top";
		mq.interVal = 100;
		mq.interValId = null;
		mq.timerId = null;
		mq.delayTime = 1000;
		mq.step = 1;
		mq.currScroll = 0;
		mq.clientScroll = 0;
		mq.scrollDistance = 0;
		mq.initialized = false;
		Event.addEvent(mq.body, "onmouseover", mq.mouseOver.bind(mq));
		Event.addEvent(mq.body, "onmouseout", mq.mouseOut.bind(mq));
	},

	start : function(){
		var mq = this;
		if(mq.body == null) return;
		var scrollFunc = mq.goon.bind(mq);
		mq.timerId = setTimeout(scrollFunc, mq.delayTime);
	},

	mouseOver : function(){
		var mq = this;
		if(mq.interValId != null){
			clearInterval(mq.interValId);
			mq.interValId = null;
		}
		if(mq.timerId != null){
			clearTimeout(mq.timerId);
			mq.timerId = null;
		}
	},

	mouseOut : function(){
		var mq = this;
		if(mq.currScroll == mq.clientScroll || mq.currScroll == 0){
			var scrollFunc = mq.goon.bind(mq);
			mq.timerId = setTimeout(scrollFunc, mq.delayTime);
		}else{
			var scrollFunc = mq.scroll.bind(mq);
			mq.interValId = setInterval(scrollFunc, mq.interVal);
		}
	},

	initMq: function(){
		var mq = this;
		if(mq.direct == "top" || mq.direct == "bottom"){
			if(mq.body.offsetHeight == 0) return;
			if(mq.clientScroll == 0){
				mq.clientScroll = mq.body.offsetHeight;
			}
			if(mq.body.scrollHeight <= mq.clientScroll) return;
			mq.body.innerHTML += mq.body.innerHTML;
			mq.scrollDistance = mq.body.scrollHeight;
			if(mq.direct == "bottom")
				mq.body.scrollTop = mq.scrollDistance/2;
		}else if(mq.direct == "left" || mq.direct == "right"){
			if(mq.body.scrollWidth == 0) return;
			if(mq.clientScroll == 0){
				mq.clientScroll = mq.body.offsetWidth;
			}
			if(mq.body.scrollWidth <= mq.clientScroll) return;
			mq.body.innerHTML += mq.body.innerHTML;
			mq.scrollDistance = mq.body.scrollWidth;
			mq.body.scrollLeft = 0;
			if(mq.direct == "right")
				mq.body.scrollLeft = mq.scrollDistance/2;
		}else{
			alert("不支持指定的滚动方向");
			return;
		}
		mq.initialized = true;
	},

	goon : function(){
		var mq = this;
		if(!mq.initialized){
			mq.initMq();
			if(!mq.initialized)
				return;
		}
		if(mq.timerId == null){
			clearTimeout(mq.timerId);
		}
		var scrollFunc = mq.scroll.bind(mq, mq);
		mq.interValId = setInterval(scrollFunc, mq.interVal);
	},

	scroll : function(){
		var mq = this;
		if(mq.direct == "top"){
			mq.scrollTop();
		}else if(mq.direct == "bottom"){
			mq.scrollBottom();
		}else if(mq.direct == "left"){
			mq.scrollLeft();
		}else if(mq.direct == "right"){
			mq.scrollRight();
		}
	},

	scrollTop : function(){
		var mq = this;
		if(mq.currScroll == mq.clientScroll){
			if(mq.scrollDistance - mq.clientScroll <= mq.body.scrollTop){
				mq.body.scrollTop = mq.scrollDistance/2 - mq.clientScroll;
			}
			mq.currScroll = 0;
			if(mq.interValId != null){
				clearInterval(mq.interValId);
				mq.interValId = null;
			}
			var scrollFunc = mq.goon.bind(mq);
			mq.timerId = setTimeout(scrollFunc, mq.delayTime);
		}else{
			mq.body.scrollTop += mq.step;
			mq.currScroll += mq.step;
		}
	},

	scrollBottom : function(){
		var mq = this;
		if(mq.currScroll == mq.clientScroll){
			if(mq.clientScroll >= mq.body.scrollTop){
				mq.body.scrollTop += mq.scrollDistance/2;
			}
			mq.currScroll = 0;
			if(mq.interValId != null){
				clearInterval(mq.interValId);
				mq.interValId = null;
			}
			var scrollFunc = mq.goon.bind(mq);
			mq.timerId = setTimeout(scrollFunc, mq.delayTime);
		}else{
			mq.body.scrollTop -= mq.step;
			mq.currScroll += mq.step;
		}
	},

	scrollLeft : function(){
		var mq = this;
		if(mq.currScroll == mq.clientScroll){
			if(mq.scrollDistance - mq.clientScroll <= mq.body.scrollLeft){
				mq.body.scrollLeft = mq.scrollDistance/2 - mq.clientScroll;
			}
			mq.currScroll = 0;
			if(mq.interValId != null){
				clearInterval(mq.interValId);
				mq.interValId = null;
			}
			var scrollFunc = mq.goon.bind(mq);
			mq.timerId = setTimeout(scrollFunc, mq.delayTime);
		}else{
			mq.body.scrollLeft += mq.step;
			mq.currScroll += mq.step;
		}
	},

	scrollRight : function(){
		var mq = this;
		if(mq.currScroll == mq.clientScroll){
			if(mq.clientScroll >= mq.body.scrollLeft){
				mq.body.scrollLeft += mq.scrollDistance/2;
			}
			mq.currScroll = 0;
			if(mq.interValId != null){
				clearInterval(mq.interValId);
				mq.interValId = null;
			}
			var scrollFunc = mq.goon.bind(mq);
			mq.timerId = setTimeout(scrollFunc, mq.delayTime);
		}else{
			mq.body.scrollLeft -= mq.step;
			mq.currScroll += mq.step;
		}
	}
}
