/**
 * 依赖 jquery.helper.js
 * 
 */

(function(/*jQuery*/$){
	$.extend($.fn,{
		dialog:function(){
			var param=arguments[0],
			container,
			opt=this.data('opt',opt)||{
				width:300,
				height:200,
				draggable:true,
		        modal:true,
		        hasCloser:true,
		        autoOpen:false,
		        buttons:{},
		        zIndex:this.css('z-Index')==='auto'?300:parseInt(this.css('z-Index'))
		    };
			function open(){
				if(opt.modal){
					createMask.bind(this)();
				}
				this.show();
				this.data('box').css({
					top:($(window).height()-opt.height)/2+$(document).scrollTop(),
					left:($(window).width()-opt.width)/2+$(document).scrollLeft(),
					zIndex:opt.zIndex
				});
				this.data('box').show();
			};
			function close(){
				if(opt.modal){
					removeMask.bind(this)();
				}
				this.hide();
				this.data('box').hide();
				if(this.data('opt').autoOpen){
					this.data('opt',null);
					this.data('box',null);
				}
			};

			/**
			 * 防止拖动时文字被选中
			 */
			function blockSelect(){
				if (document.selection) {//IE ,Opera
					if (document.selection.clear){
//						document.selection.clear(); //IE
					}else{ //Opera
						document.selection = null;
					}
			    }
			    else if (window.getSelection){//FF,Safari
			        window.getSelection().removeAllRanges();
			    }
			}
			function createMask(){
				if(!$.browser.mozilla){
					$('html').css({'overflow-x':'hidden','overflow-y':'auto'});
				}
				var mask=$('<div>');
				mask.addClass('box_mask');
				mask.css({
					width:$(document).width(),
					height:$(document).height(),
					zIndex:opt.zIndex-1
				});
				
				$(document.body).append(mask);
				if ( $.browser.msie && $.browser.version.startWith('6')){
					$('select').attr('bug','ie6').hide();
				}
				this.data('mask',mask);
			}
			
			function removeMask(){
				if(!$.browser.mozilla){
					$('html').css('overflow','');
				}
				if ( $.browser.msie && $.browser.version.startWith('6')){
					$('select[bug="ie6"]').show();
				}
				this.data('mask').remove();
			}

			if(typeof param === 'undefined' || typeof param == 'object'){
				$.extend(opt,param);
				
				if(!this.data('box')){
					container=$(
							'<div class="box_container">'+
								'<div class="main">'+
									'<div class="head">'+
										'<a class="closeIcon"></a>'+
										'<div class="titleIcon"></div>'+
										'<div class="title"></div>'+
									'</div>'+
									'<div class="body"></div>'+
									'<div class="foot"></div>'+
								'</div>'+
							'</div>'
						);
					
					container.find('.body').append(this);
					
					for(var p in opt.buttons){
						if(typeof opt.buttons == 'object'){
							var btn=$('<input>',{type:'button',value:p});
							btn.click(opt.buttons[p].bind(this.get()));
							container.find('.foot').append(btn);
						}
			        }
					
					this.hide();
					container.hide();
					
					$(document.body).append(container);

					container.find('.closeIcon').click(close.bind(this));
					
					//拖拽
					if(opt.draggable){
						var moveData=null;
						container.find('.title').mousedown(function(e){
							var position = container.eq(0).position();
							moveData={
									oxy:{
										x:position.left,
										y:position.top
									},
									mxy:{
										x:e.clientX+$(document).scrollLeft(),
										y:e.clientY+$(document).scrollTop()
									},
									kuang:{
										x1:$(document).scrollLeft(),
										y1:$(document).scrollTop(),
										x2:$(document).scrollLeft()+$(window).width()-opt.width,
										y2:$(document).scrollTop()+$(window).height()-opt.height
									}
							};
						});
						
						$(document).mouseup(function(e){
							moveData=null;
						});
						
						$(document).mousemove(function(e){
							if(!moveData)return;
							
							var dx=e.clientX-moveData.mxy.x+$(document).scrollLeft();//横向偏移距离
							var dy=e.clientY-moveData.mxy.y+$(document).scrollTop();//纵向偏移距离
							
							var x=moveData.oxy.x+dx,y=moveData.oxy.y+dy;
							
							if(x<moveData.kuang.x1){
								container.css({left:moveData.kuang.x1});
								if(y<moveData.kuang.y1){
									container.css({top:moveData.kuang.y1});
								}else if(y>moveData.kuang.y2){
									container.css({top:moveData.kuang.y2});
								}else{
									container.css({top:y});
								}
							}else if(x>moveData.kuang.x2){
								container.css({left:moveData.kuang.x2});
								if(y<moveData.kuang.y1){
									container.css({top:moveData.kuang.y1});
								}else if(y>moveData.kuang.y2){
									container.css({top:moveData.kuang.y2});
								}else{
									container.css({top:y});
								}
							}else{
								container.css({left:x});
								if(y<moveData.kuang.y1){
									container.css({top:moveData.kuang.y1});
								}else if(y>moveData.kuang.y2){
									container.css({top:moveData.kuang.y2});
								}else{
									container.css({top:y});
								}
							}
							blockSelect();
						});
					}
				}else{
					container=this.data('box');
				}
				
				container.width(opt.width).height(opt.height);
				
				container.find('.title').html(opt.title);

				container.find('.body').width(opt.width-3).height(opt.height-30-40-3);
				
				if(!opt.hasCloser){
					container.find('.head .closeIcon').hide();
				}
				
				
				this.data('box',container);
				this.data('opt',opt);
				
				
				if(opt.autoOpen){
					open.bind(this)();
				}
				
			}else if(typeof param == 'string'){
				switch (param){
					case 'open':
						open.bind(this)();
						break;
					case 'close':
						close.bind(this)();
						break;
				}
			}
		}
	});
})(jQuery);
