jQuery(document).ready(function() {jQuery().jSnow({vSize:'150', fadeAway:true});});

(function ($) {
    $.fn.jSnow = function (h) {
        var j = $.extend({}, $.fn.jSnow.defaults, h);
        var k, WIN_HEIGHT;
        var l = j.flakes;
        var m = j.flakeCode;
        var n = j.flakeColor;
        var o = j.flakeMinSize;
        var p = j.flakeMaxSize;
        var q = j.fallingSpeedMin;
        var r = j.fallingSpeedMax;
        var s = j.interval;
        var t = j.zIndex;
        var vs = j.vSize;
        var fa = j.fadeAway;
        var fs = j.followScroll;
        setWaH();
        var useGif = false;
        if ($.browser.msie && (parseFloat($.browser.version) < 8)) useGif = true;
        if ($.browser.msie && (parseFloat($.browser.version) < 8) && t == "auto") t = 0;
        var u = $("<div \/>");
        u.css({
            width: "580px",
            height: 0,
            display: "block",
            overflow: "visible",
            position: "relative",
            left: "550px",
            zIndex: t
        });
        if (fs) {
            u.css('top', $("html").scrollTop() + 1 + "px");
        } else {
            u.css = '1px';
        }
        $("#header").prepend(u).css({
            height: "100%"
        });
        $("html").css({
            "overflow-y": "scroll",
            "overflow-x": "hidden"
        });
        var v = Array();
        generateFlake(l, false);
        setInterval(animateFlakes, s);
        window.onresize = setWaH;

        function setWaH() {
            k = 580;
            if (!vs) {
                WIN_HEIGHT = window.innerHeight || document.documentElement.clientHeight
                WIN_HEIGHT -= 50;
            } else WIN_HEIGHT = vs;
        };
        if (fs) {
            window.onscroll = function () {
                u.css({
                    top: $("html").scrollTop() + "px"
                })
            };
        }
        function generateFlake(a, b) {
            a = a || 1;
            b = b || false;
            var i = 0;
            for (i = 0; i < a; i++) {
                var c = $("<span style='opacity:0;' '\/>");
                var d = o + Math.floor(Math.random() * p);
                var e = m[Math.floor(Math.random() * m.length)];
                if (e.indexOf(".gif") != -1 || e.indexOf(".png") != -1) {
                    var f = new Image();
                    if (useGif) e = e.replace("png", "gif");
                    f.src = e;
                    e = "<img src='" + e + "' alt='jSnowFlake'>"
                }
                c.html(e).css({
                    color: n[Math.floor(Math.random() * n.length)],
                    fontSize: d + "px",
                    display: "block",
                    position: "absolute",
                    cursor: "default",
                    "z-index": t
                });
				
				
                $(u).append(c);
                f_left = Math.floor(Math.random() * (k - c.width() - 50)) + 25;
                f_top = Math.floor(Math.random() * (100 - 50));
                var g = Math.floor(Math.random() * 110);
                jQuery.data(c, "posData", {
                    top: f_top,
                    left: f_left,
                    rad: Math.random() * (-300),
                    i: Math.ceil(q + Math.random() * (r - q)),
                    swingRange: g
                });
                c.css({
                    top: f_top + "px",
                    left: f_left + "px"
                });
                v.push(c)
            }
        };

        function animateFlakes() {
            var i = 0;
            for (i = v.length - 1; i >= 0; i--) {
                var f = v[i];
                var a = jQuery.data(f, "posData");
                a.top += a.i*Math.cos((a.rad-180)/(a.rad + 180))/1.8;
                var b = Number();
                b = Math.cos((a.rad / 180) * Math.PI);
                a.rad += 3;
                var X = (a.left - b * a.swingRange)*0.9 + Math.sin((a.rad / 180) * Math.PI)*8.9;
 
                    op = (WIN_HEIGHT - a.top < 100) ? ((WIN_HEIGHT - a.top) / 100) : 1;
                    f.css('opacity', a.top/100);
  
                f.css({
                    top: a.top + "px",
                    left: X + "px"
                });
                if (a.top > WIN_HEIGHT) {
                    jQuery.removeData(f);
                    f.remove();
                    v.splice(i, 1);
                    generateFlake(1, true)
                }
            }
        };
        return this
    };
    $.fn.jSnow.defaults = {
        flakes: 12,
        fallingSpeedMin: 1,
        fallingSpeedMax: 3,
        flakeMaxSize: 500,
        flakeMinSize: 1,
        flakeCode: ["&bull;"],
        flakeColor: ["#fff"],
        zIndex: "auto",
        interval: 30
    }
})(jQuery);
