var isIE = (document.all) ? true : false;   
  
var isIE6 = isIE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6);   
  
var $ = function (id) {   
    return "string" == typeof id ? document.getElementById(id) : id;   
};   
  
var Class = {   
    create: function() {   
        return function() { this.initialize.apply(this, arguments); }   
    }   
}   
  
var Extend = function(destination, source) {   
    for (var property in source) {   
        destination[property] = source[property];   
    }   
}   
  
var Bind = function(object, fun) {   
    return function() {   
        return fun.apply(object, arguments);   
    }   
}   
  
var Each = function(list, fun){   
    for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }   
};   
  
var Contains = function(a, b){   
    return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(b) & 16);   
}   
  
  
var OverLay = Class.create();   
OverLay.prototype = {   
  initialize: function(options) {   
  
    this.SetOptions(options);   
       
    this.Lay = $(this.options.Lay) || document.body.insertBefore(document.createElement("div"), document.body.childNodes[0]);   
       
    this.Color = this.options.Color;   
    this.Opacity = parseInt(this.options.Opacity);   
    this.zIndex = parseInt(this.options.zIndex);   
       
    with(this.Lay.style){ display = "none"; zIndex = this.zIndex; left = top = 0; position = "fixed"; width = height = "100%"; }   
       
    if(isIE6){   
        this.Lay.style.position = "absolute";   
        //ie6设置覆盖层大小程序   
        this._resize = Bind(this, function(){  
		
            this.Lay.style.width = Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth) + "px";   
            this.Lay.style.height = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight)+200 + "px";   
        });   
        //遮盖select   
        this.Lay.innerHTML = '<iframe style="position:absolute;top:0;left:0;width:100%;height:100%;filter:alpha(opacity=0);"></iframe>'  
    }   
  },   
  //设置默认属性   
  SetOptions: function(options) {   
    this.options = {//默认值   
        Lay:        null,//覆盖层对象   
        Color:      "#fff",//背景色   
        Opacity:    50,//透明度(0-100)   
        zIndex:     1000//层叠顺序   
    };   
    Extend(this.options, options || {});   
  },   
  //显示   
  Show: function() {   
    //兼容ie6   
    if(isIE6){ this._resize(); window.attachEvent("onresize", this._resize); }   
    //设置样式   
    with(this.Lay.style){   
        //设置透明度   
        isIE ? filter = "alpha(opacity:" + this.Opacity + ")" : opacity = this.Opacity / 100;   
        backgroundColor = this.Color; display = "block";   
    }   
  },   
  //关闭   
  Close: function() {   
    this.Lay.style.display = "none";   
    if(isIE6){ window.detachEvent("onresize", this._resize); }   
  }   
};   
  
  
  
var LightBox = Class.create();   
LightBox.prototype = {   
  initialize: function(box, options) {   
       
    this.Box = $(box);//显示层   
       
    this.OverLay = new OverLay(options);//覆盖层   
       
    this.SetOptions(options);   
       
    this.Fixed = !!this.options.Fixed;   
    this.Over = !!this.options.Over;   
    this.Center = !!this.options.Center;   
    this.onShow = this.options.onShow;   
       
    this.Box.style.zIndex = this.OverLay.zIndex + 1;   
    this.Box.style.display = "none";   
       
    //兼容ie6用的属性   
    if(isIE6){   
        this._top = this._left = 0; this._select = [];   
        this._fixed = Bind(this, function(){ this.Center ? this.SetCenter() : this.SetFixed(); });   
    }   
  },   
  //设置默认属性   
  SetOptions: function(options) {   
    this.options = {//默认值   
        Over:   true,//是否显示覆盖层   
        Fixed:  false,//是否固定定位   
        Center: false,//是否居中   
        onShow: function(){}//显示时执行   
    };   
    Extend(this.options, options || {});   
  },   
  //兼容ie6的固定定位程序   
  SetFixed: function(){   
    this.Box.style.top = document.documentElement.scrollTop - this._top + this.Box.offsetTop + "px";   
    this.Box.style.left = document.documentElement.scrollLeft - this._left + this.Box.offsetLeft + "px";   
       
    this._top = document.documentElement.scrollTop; this._left = document.documentElement.scrollLeft;   
  },   
  //兼容ie6的居中定位程序   
  SetCenter: function(){   
    this.Box.style.marginTop = document.documentElement.scrollTop - this.Box.offsetHeight / 2 + "px";   
    this.Box.style.marginLeft = document.documentElement.scrollLeft - this.Box.offsetWidth / 2 + "px";   
  },   
  //显示   
  Show: function(options) {   
    //固定定位   
    this.Box.style.position = this.Fixed && !isIE6 ? "fixed" : "absolute";   
  
    //覆盖层   
    this.Over && this.OverLay.Show();   
       
    this.Box.style.display = "block";   
       
    //居中   
    if(this.Center){   
        this.Box.style.top = this.Box.style.left = "50%";   
        //设置margin   
        if(this.Fixed){   
            this.Box.style.marginTop = - this.Box.offsetHeight / 2 + "px";   
            this.Box.style.marginLeft = - this.Box.offsetWidth / 2 + "px";   
        }else{   
            this.SetCenter();   
        }   
    }   
       
    //兼容ie6   
    if(isIE6){   
        if(!this.Over){   
            //没有覆盖层ie6需要把不在Box上的select隐藏   
            this._select.length = 0;   
            Each(document.getElementsByTagName("select"), Bind(this, function(o){   
                if(!Contains(this.Box, o)){ o.style.visibility = "hidden"; this._select.push(o); }   
            }))   
        }   
        //设置显示位置   
        this.Center ? this.SetCenter() : this.Fixed && this.SetFixed();   
        //设置定位   
        this.Fixed && window.attachEvent("onscroll", this._fixed);   
    }   
       
    this.onShow();   
  },   
  //关闭   
  Close: function() {   
    this.Box.style.display = "none";   
    this.OverLay.Close();   
    if(isIE6){   
        window.detachEvent("onscroll", this._fixed);   
        Each(this._select, function(o){ o.style.visibility = "visible"; });   
    }   
  }   
};   
