(function($){
	//固定定位
	//top:($this.position().top-$(window).scrollTop())/$(window).height()*100+'%',//'50%',
//												   left:$this.position().left/$(window).width()*100+'%'
	$.fn.fixedCenter=function(){
		return this.each(function(){
								  var $this=$(this);
								  $this.css({
											   position:'fixed',
											   top:'50%',
											   left:'50%',
											   marginTop:-$this.outerHeight(true)/2,
											   marginLeft:-$this.outerWidth(true)/2
											   });
								  });
	};
})(jQuery);

(function($){
	$.diabox = function(settings){
		var cfg=$.extend({
								 overlay:true,	//是否显示遮罩背景
								 width:400,		//窗口宽高
								 height:300,		
								 fixed:true,		//在屏幕在固定
								 absStyle:{},
								 fixedStyle:{},
								 event:null,		//传入鼠标位置
								 speed:1000,		//动画速度
								 title:'Dialog',		//标题
								 initClass:'diabox',	//初始样式
								 diaboxClass:'',	//附加样式
								 reload:false,		//是否直接在.content区域载入新内容
								 bw:0,				//窗口边框宽度
								 content:'Register.aspx #formRegister',		//远程内容
								 ready:function(){},	//在内容载入后回调方法
								 focusTo:':text:first'	//载入后聚焦于
								 },settings || {} );

		//更新配置
		$.extend( $.diabox, {cfg:cfg} );

		//单一实例
		if( $('div.'+cfg.initClass).length>0 ){
			//$.p('existed: ' + cfg.height);
			$('div.'+cfg.initClass).trigger('open');
		} else {
			var $win=$.diabox.setup();
			$.diabox.bindEvents.apply($win);
			$win.trigger('open');
		}
		
	};
	
	$.extend($.diabox,{
			 setup:function(){//初始化 diabox 的 html 结构，仅执行一次
				var $win=$('<div>').addClass(this.cfg.initClass).appendTo('body');
				var $titleBar=$('<div class="titlebar">').appendTo($win)
					.after('<div class="content">');
				$('<div class="close" title="关闭">X</div>')
					.appendTo($titleBar)
					.click(function(){$win.trigger('close');})
					.after('<div class="title">'+this.cfg.title+'</div>');
				$('<div class="diabox-overlay">').appendTo('body').click(function(){$win.trigger('close');}).css('opacity',0);
				this.cfg.bw=parseInt( $win.css('borderLeftWidth') );
				return $win.hide();
			 },
			 bindEvents:function(){//在 div.diabox 上绑定打开和关闭事件
				 		this
						.bind('open close',function(e){
													//$(this).css($.diabox.cfg.absStyle);
													var $overlay=$('body>div.diabox-overlay');
													if( $overlay.is(':visible') | $.diabox.cfg.overlay ){
														if(e.type=='open'){
															$overlay.show().fadeTo(800,.5);
														} else {
															$overlay.fadeOut(1200);
														}
													}
													})
						.bind('open',function(){
											  var $win=$(this)
											  	.attr('class',$.diabox.cfg.initClass)
													.addClass($.diabox.cfg.diaboxClass)
													.addClass('diabox-loading');
											  var $cont=$('>.content',$win).empty();
											  $('>div.titlebar>div.title',$win).text($.diabox.cfg.title);
											  //重载弹窗 | 可视
											  if( !$.diabox.cfg.reload | $win.is(':hidden') ){
											  	$win.css($.diabox.getStyle('begin'));
											  }
											  $win.stop().animate($.diabox.getStyle('end'),$.diabox.cfg.speed,'easeOutBack',function(){
																										//$.ajaxSetup({cache:false})
																										$('>div.content',$win).load($.diabox.cfg.content, function(){
																																				  $($.diabox.cfg.focusTo,$win.removeClass('diabox-loading')).focus();
																																				  $.diabox.cfg.ready.call($win);
																																				  });
																										});
														})
						.bind('close',function(){
											   $(this).animate($.diabox.getStyle('begin'),$.diabox.cfg.speed,'easeInBack',function(){
																											$(this).hide();//继续可用
																											});
														});
			 },
			 fixedCenter:function(){
				  var $this=$(this);
				  $.diabox.cfg.absStyle={
					  position:'absolute',
					  top:$this.css('top'),
					  left:$this.css('left'),
					  marginTop:$this.css('marginTop'),
					  marginLeft:$this.css('marginLeft')
				  };
				  $this.css({
							   position:'fixed',
							   top:'50%',
							   left:'50%',
							   marginTop:-$this.outerHeight(true)/2,
							   marginLeft:-$this.outerWidth(true)/2
							   });				 
			 },
			 getStyle:function(when){//获取diablox样式，动画前和动画后
				if ( when == 'begin' ){
					var $tgt=$(this.cfg.event.target);
					return $tgt.is(':visible') //触发对象依然可见
						? { left: $tgt.offset().left, top: $tgt.offset().top, width: $tgt.outerWidth(), height: $tgt.outerHeight() }
						: { left: ($(window).width()-this.cfg.width-2*this.cfg.bw)/2,top:-this.cfg.height,width:this.cfg.width };
						//: { left: this.cfg.event.pageX,top: this.cfg.event.pageY,width:0,height:0 };
				} else if( when == 'end' ){
					return {
						left:($(window).width()-this.cfg.width-2*this.cfg.bw)/2,
						top:$(window).height() <= this.cfg.height ? 88+$(window).scrollTop() : ($(window).height()-this.cfg.height-2*this.cfg.bw)/2+$(window).scrollTop(),
						width:this.cfg.width,
						height:this.cfg.height
					};
				}
			 }
			 });
	
})(jQuery);
