﻿/*任意位置浮动固定层*/

/*调用：
1 无参数调用：默认浮动在右下角
$("div[settings]").fllowscolldiv();

2 内置固定位置浮动
<div settings='{"hidedelay":20000}'></div>

*/
(function ($) {
    $.fn.fllowscolldiv = function () {
        if ($(this).length > 1) {
            this.each(function () {
                fllowscoll($(arguments[1]))
            });
        }
        else {
            fllowscoll(this);
        }

        function fllowscoll(item) {
            var settings = {
                "halign": 'right',
                "valign": 'middle',
                "hidedelay": 0,
                "closeenable": true
            };
			if($(item).html().length > 1)
			{
				var options = $(item).attr('settings');
				if (options) {
					$.extend(settings, $.parseJSON(options));
				}
	
				function getlocation() {
					var top = 0;
					var left = 0;
					switch (settings.halign) {
						case 'left':
							left = $(document).scrollLeft();
							break;
						case 'middle':
							left = ($(window).width() - $(item).outerWidth()) / 2 + $(document).scrollLeft(); ;
							break;
						case 'right':
							left = ($(window).width() - $(item).outerWidth()) + $(document).scrollLeft(); ;
							break;
						default:
							left = parseInt(settings.halign, 10) + $(document).scrollLeft();
					}
					switch (settings.valign) {
						case 'top':
							top = $(document).scrollTop(); ;
							break;
						case 'middle':
							top = ($(window).height() - $(item).outerHeight()) / 2 + $(document).scrollTop(); ;
							break;
						case 'bottom':
							top = ($(window).height() - $(item).outerHeight()) + $(document).scrollTop(); ;
							break;
						default:
							top = parseInt(settings.valign, 10) + $(document).scrollTop();
					}
					return { "left": left + "px", "top": top + "px" };
				}
				var wrap = $("<div></div>").css({ "position": "absolute", "z_index": 9999 }).css(getlocation());
				$(item).appendTo(wrap);
				$(document.body).append(wrap);
	
				if (settings.hidedelay > 0) {
					setTimeout(closediv, settings.hidedelay);
				}
	
				if (settings.closeenable) {
					var closebutton = $("<div>×</div>").css({ "position": "absolute", "top": "1px", "right": "1px", "cursor": "pointer", "width": "15px", "height": "15px", "border-style": "groove", "border-color": "Gray", "border-width": "1px", "text-align": "center", "vertical-align": "middle", "line-height": "15px", "font-size": "18px", "font-weight": "bold" });
					$(wrap).append(closebutton);
					closebutton.one("click", function () {
						closediv();
					});
				}
	
				function closediv() {
					wrap.fadeOut('2000', function () {
						wrap.detach();
					});
				}
	
				function scrollwrap() {
					$(wrap).animate(getlocation(), { "duration": 1500, "queue": false });
				}
	
				$(window).scroll(scrollwrap);
				$(window).resize(scrollwrap);
				scrollwrap();
			}
        }
    }
})(jQuery);
