﻿﻿/*
Author:霍文春
version:1.1 
遮罩+loading+弹出窗口(支持远程加载页面)
 $("#divid").showModel(config);
 $().closeModel();
config有:
type:"loading", //'loading' and 'model' loading和模式窗口
url:"", //远程加载一个页面进来
data:"",	//远程加载用的参数
opacity:"0.5",	//透明度
delay:0     //关闭延迟时间 0为不关闭
border:0;	//是否有边框
*/
(function($){
    $.fn.extend({
        showModel:function(config){
            //配置覆盖
            var cfg = $.extend({},$.md_model.defaults,config);
            var obj = $(this).get(0);
            $.md_model(obj,cfg);
        },
        closeModel:function(self){
        	if(self){
        		$.md_model.closeSelf($(this));
        	}else{
        		$.md_model.close($(this));
        	}
        }
    });
    $.md_model=function(obj,config){
            var md_model =new $.md_model.createModel(obj,config);
           md_model.show();
          $(window).scroll(function(event){
               md_model.display();
          });
         $(window).resize(function(){
            md_model.display();
        });
    }
   $.md_model.createModel=function(obj,config){
        var elementDiv,baseDiv,docHeight,docWidth,md_top,md_left,md_scrollTop,md_scrollLeft;
         
         /*
                 遮罩层
                 对象创建
         */
         if($("#md_baseDiv").length<=0){
                    baseDiv = $("<div/>");
                    baseDiv.attr("id","md_baseDiv")
                    .hide()
                 	.addClass("md_baseDiv")
                 	.css("position", "absolute")
					.css("z-index", "9998")
                    .appendTo(document.body);
                }else{
                    baseDiv=$("#md_baseDiv");
                }
        /*
                 窗口层
                 对象创建
         */

        if(config.type=="loading"){       //loading模式
            if($("div[xtype='md_loading']").length<=0){  //首次创建
                elementDiv=$("<div/>");
                elementDiv.addClass("md_loading");
                if(config.border==1){
                	elementDiv.addClass("md_loading_border");
                }
                elementDiv.append("<span><img align='middle' src='/images/loading.gif'>加载中。。。</span>");
                elementDiv.appendTo(document.body);
				elementDiv.attr("xtype","md_loading");
            }else{
                elementDiv=$("div[xtype='md_loading']");
            }
        }else if(config.type=="model"){         //遮罩模式
            if(config.url!=null&&config.url!=""){
                $(obj).load(config.url,config.data,config.callback);
            }
        	elementDiv=$(obj);
            elementDiv.addClass("md_model").attr("xtype","md_model");
            if(config.border==1){
            	elementDiv.addClass("md_model_border");
            }
        }
        elementDiv.hide()
         
          function  init(){
               /*
				     遮罩层
				     定位 
				*/
               
                baseDiv.height($(document).height())
                .width($(document).width())
				.css("left", "0px")
				.css("top", "0px");
				
				/*
				      窗口层
				      定位 
				*/
				
				 //计算文档可见大小
                docHeight=$(window).height();
                docWidth=$(window).width();
				 //计算Model位置
                md_top=docHeight/2-elementDiv.height()/2;
                md_left=docWidth/2-elementDiv.width()/2;
               //计算滚动条
               md_scrollTop=$(window).scrollTop();
               md_scrollLeft=$(window).scrollLeft();
                //设置样式
                elementDiv.css("position", "absolute")
		        .css("z-index", "9999")
		        .css("left", md_left+md_scrollLeft)
		        .css("top", md_top+md_scrollTop);
            }
        return {
            show:function(){
               init();
               $("#md_baseDiv").css("opacity","0");
               $("#md_baseDiv").show().animate({opacity:config.opacity},300);
               elementDiv.fadeIn(300);
               if(config.delay>0){
                    setTimeout("$.md_model.close()",config.delay);
               }
            },
            display:function(){
                  init();
            }
        }
   } 
    $.md_model.close=function(obj){
    	$("#md_baseDiv").fadeOut(300);
    	$("#md_baseDiv").remove();
    	$("div[xtype='md_loading']").fadeOut(300);
    	$("div[xtype='md_model']").fadeOut(300);
    }
    $.md_model.closeSelf=function(obj){
    	$("div[xtype='md_loading']").fadeOut(300);
    	$(obj).fadeOut(300);
    }
    $.md_model.defaults={
        type:"loading", //'loading' and 'model' loading和模式窗口
        url:"", //远程加载一个页面进来
        data:"",
        border:1,
        opacity:"0.5",
        delay:0,     //延迟
        callback:function(){}
    }
})(jQuery);
