﻿/*
 *Author:sohighthesky
 *From:http://blog.csdn.net/sohighthesky  
 *Date:2009-11-9
 */
/*
 *box 指定要显示消息框或者其id
 *options:参见代码中setOptions中的注释
 */
var sheyMsg=function(box,options) {
	this.box=this.g(box);
	this.setOptions(options);
	this.init();
}
sheyMsg.prototype={
    ae:function(e,call) {
        if(window.addEventListener)window.addEventListener(e,call,false);
        else window.attachEvent("on"+e,call);
    },
    g:function(id) {return typeof(id)=="string"?document.getElementById(id):id; },
    isFixed:!window.ActiveXObject || (navigator.userAgent.indexOf("MSIE 6")==-1 &&  document.compatMode=="CSS1Compat"),
    setOptions:function(options) {
		this.options={//默认配置
				showDelay:10,//显示延时
				autoHide:30,//自动隐藏时间，设置为0时，不自动隐藏
				onShow:function(){},//显示后调用
				onHide:function(){}//隐藏后调用
		};
		for(var o in options) {
			this.options[o]=options[o];
		}
    },
    hide:function() {//隐藏
		var _top=this.box.clientHeight;
		var o=this;
		if(/ing$/.test(o.status))return;
		o.status="hiding";
		clearTimeout(o.tt);
		o.t=setInterval(function() {
		    if(o.isFixed)
			    o.box.style.bottom=(-o.box.clientHeight+(--_top))+'px';
			else
			    o.box.style.top=o.de.scrollTop+o.de.clientHeight-5-(--_top) +"px";
			if(_top==-5) {
				clearInterval(o.t);
				o.status="hide";
				o.box.style.display="none";
				o.options.onHide();
			}
		},5);
    },
    show:function() {//显示
		var _top=0;
		var o=this;
		if(/ing$/.test(o.status))return;
		o.status="showing";
		clearTimeout(o.tt);
		o.box.style.display="block";
		o.t=setInterval(function() {
		    if(o.isFixed)
			    o.box.style.bottom=(-o.box.clientHeight+(++_top))+"px";
			else
			    o.box.style.top=(o.de.scrollTop+o.de.clientHeight-5-(++_top)) +"px";
			if(_top==o.box.clientHeight) {
				clearInterval(o.t);
				o.status="show";
				o.options.onShow();
				var h=o.options.autoHide-0;
				if(h) o.tt=setTimeout(function() {o.hide();},h*1000);
			}
		},1);
    },
    fixIE6:function() {//IE6 滚动定位
        this.box.style.left=this.de.scrollLeft+this.de.clientWidth-this.box.clientWidth-2+"px";
        if(this.status=="show") {            
            this.box.style.top=this.de.scrollTop+this.de.clientHeight-this.box.clientHeight-5+"px";
        } else if(this.status=="hide") {
		    this.box.style.top=this.de.scrollTop+this.de.clientHeight+5+"px";
        }
    },
    init:function() {
		with(this.box.style) {
			display="block";//显示之后才能取出宽度和高度
			if(this.isFixed) {
				position="fixed";
				right="2px";
				bottom=(-this.box.clientHeight-5)+"px";
			} else {
				position="absolute";
			}
		}
		this.status="hide";
		var o=this;
		if(!this.isFixed) {
		    o.de=document.compatMode=="CSS1Compat"?document.documentElement:document.body;
		    var timer;
		    this.ae("resize",function() { clearTimeout(timer);timer=setTimeout(function(){o.fixIE6.call(o)},30);});
		    this.ae("scroll",function() { clearTimeout(timer);timer=setTimeout(function(){o.fixIE6.call(o)},30);});
		    this.fixIE6();//加载时指定位置
		}
		o.box.style.display="none";
		o.tt=setTimeout(function() {o.show();},o.options.showDelay*1000);
	}
}
