/*
任意位置浮动固定层
说明：可以让指定的层浮动到网页上的任何位置，当滚动条滚动时它会保持在当前位置不变，不会产生闪动

/*调用：
1 无参数调用：默认浮动在右下角
$("#id").floatdiv();

2 内置固定位置浮动
//右下角
$("#id").floatdiv("rightbottom");
//左下角
$("#id").floatdiv("leftbottom");
//右下角
$("#id").floatdiv("rightbottom");
//左上角
$("#id").floatdiv("lefttop");
//右上角
$("#id").floatdiv("righttop");
//居中
$("#id").floatdiv("middle");

另外新添加了四个新的固定位置方法

middletop（居中置顶）、middlebottom（居中置底）、leftmiddle(左边居中)、rightmiddle(右边居中)

3 自定义位置浮动
$("#id").floatdiv({left:"10px",top:"10px"});
以上参数，设置浮动层在left 10个像素,top 10个像素的位置
*/
(function($){
	$.fn.floatdiv=function(options,value){
		var opts={
			location:"rightbottom",//默认显示位置
			float:true,//是否浮动
			floatcss:"",//浮动时的样式
			nofloatid:""//不浮动时将原浮动的内容放到此对象内
		}
		var isTyp=typeof(options);
		if(isTyp!=undefined){
			if(isTyp=="object"){
				$.extend(opts,options);
			}else{
				if(value!=""&&value!=undefined){
					opts[options]=value;
				}else{
					opts.location=options;
				}
			}
		}
		
		var obj=$(this);
		var wrap=null;//浮动div
		function _float(){
			if(!opts.float){return false;}
			var isIE6=($.browser.msie&&$.browser.version=="6.0")?true:false;
			var windowWidth=$(document).width();//窗口宽
			var windowHeight=$(document).height();//窗口宽
			if(opts.floatcss!=""){obj.addClass(opts.floatcss)}
				var loc;//层的绝对定位位置
				if(wrap==null){wrap=$("<div></div>");}
				var top=-1;
				if(opts.location==undefined || opts.location.constructor == String){
					switch(opts.location){
						case("rightbottom")://右下角
							loc={right:"0px",bottom:"0px"};
							break;
						case("leftbottom")://左下角
							loc={left:"0px",bottom:"0px"};
							break;
						case("lefttop")://左上角
							loc={left:"0px",top:"0px"};
							top=0;
							break;
						case("righttop")://右上角
							loc={right:"0px",top:"0px"};
							top=0;
							break;
						case("middletop")://居中置顶
							loc={left:windowWidth/2-obj.width()/2+"px",top:"0px"};
							top=0;
							break;
						case("middlebottom")://居中置底
							loc={left:windowWidth/2-obj.width()/2+"px",bottom:"0px"};
							break;
						case("leftmiddle")://左边居中
							loc={left:"0px",top:windowHeight/2-obj.height()/2+"px"};
							top=windowHeight/2-obj.height()/2;
							break;
						case("rightmiddle")://右边居中
							loc={right:"0px",top:windowHeight/2-obj.height()/2+"px"};
							top=windowHeight/2-obj.height()/2;
							break;
						case("middle")://居中
							var l=0;//居左
							var t=0;//居上
							l=windowWidth/2-obj.width()/2;
							t=windowHeight/2-obj.height()/2;
							top=t;
							loc={left:l+"px",top:t+"px"};
							break;
						default://默认为右下角
							loc={right:"0px",bottom:"0px"};
							break;
					}
				}else{
					loc=opts.location;
					//alert(loc.bottom);
					var str=loc.top;
					//09-11-5修改：加上top为空值时的判断
					if (typeof(str)!= 'undefined'){
						str=str.replace("px","");
						top=str;
					}
				}
				/*fied ie6 css hack*/
				if(isIE6){
					if (top>=0)
					{
						wrap=$("<div style=\"top:expression(documentElement.scrollTop+"+top+");\"></div>");
					}else{
						wrap=$("<div style=\"top:expression(documentElement.scrollTop+documentElement.clientHeight-this.offsetHeight);\"></div>");
					}
				}
				$("body").append(wrap);
				wrap.css(loc).css({"position":"fixed","z-index":"999"});
				if (isIE6)
				{
					wrap.css("position","absolute");
					//没有加这个的话，ie6使用表达式时就会发现跳动现象
					//至于为什么要加这个，还有为什么要加nothing.txt这个，偶也不知道，希望知道的同学可以告诉我
					$("body").css("background-attachment","fixed").css("background-image","url(n1othing.txt)");
				}
				//将要固定的层添加到固定层里
				obj.appendTo(wrap);
		}
		
		
		function _start(){
			if(!opts.float){opts.float=true;_float();}
		}
		
		function _stop(){
			opts.float=false;
			if(opts.floatcss!=""){obj.removeClass(opts.floatcss);}
			_float();
		}
		
		function _scroll(){
			var ff_h=obj.offset().top;
			$(window).scroll(function(){
				var win_h=$(this).scrollTop();
				if(win_h>ff_h){
					_start();
				}else{
					_stop();
					$("#"+opts.nofloatid).append(obj);
				}
			});
		}
		_float();
		if(!opts.float){_scroll();}
	}
})(jQuery)
