// jSnow, a jQuery Plugin v1.2.1
// Licensed under GPL licenses.
// Copyright (C) 2009 Nikos "DuMmWiaM" Kontis, dummwiam@gmail.com
// http://www.DuMmWiaM.com/jSnow
// bugfixed by Vitaliy Stepanenko, nayjest.ru, mail@vitaliy.in 
(function($) {
    $.fn.jSnow = function(h) {
        if (!navigator.userAgent.toLowerCase().match(/iPhone/)) {
            var j = $.extend({}, $.fn.jSnow.defaults, h);
            var k, WIN_HEIGHT;
            setWaH();
            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.swingMin;
            var t = j.swingMax;
            var u = j.interval;
            var v = j.zIndex;
            if ($.browser.msie && (parseFloat($.browser.version) < 8) && v == "auto") {
                v = 0
            }
            var w = $("<div \/>");
            w.css(
            {
                width: k + "px", height: 1, display: "block", overflow: "visible", position: "absolute",
                top: $("html").scrollTop() + 1 + "px", left: "1px"
            });
            $("html").css({
                "overflow-y": "scroll", "overflow-x": "hidden", height: "100%"
            });
            $("body").append(w);
            //$("body").prepend(w).css({
            //    "overflow" : "hidden"
            //});
            var x = Array();
            generateFlake(l, false);
            var u = setInterval(animateFlakes, u);
            window.onresize = setWaH
        }
        function setWaH() {
            k = $('body').width();
            WIN_HEIGHT = (window.innerHeight || document.documentElement.clientHeight) - (j.flakeMaxSize * 2 + j.fallingSpeedMax);
        };
        this.kill = function() {
            clearInterval(u);
            u = null;
            for (var i = 0; i < x.length; i++) {
                var f = x[i];
                jQuery.removeData(f);
                f.remove()
            }
            x = null;
            w.remove()
        };
        window.onscroll = function() {
            w.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 \/>");
                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();
                    f.src = e;
                    e = "<img src='" + e + "' alt=' '>"
                }
                c.html(e).css(
                {
                    color: n[Math.floor(Math.random() * n.length)], fontSize: d + "px", display: "block",
                    position: "absolute", cursor: "default", "z-index": v
                });
                $(w).append(c);
                f_left = Math.floor(Math.random() * (k - c.width() - 50)) + 25;
                f_top = (b) ? -1 * c.height() : Math.floor(Math.random() * (WIN_HEIGHT - 50));
                var g = Math.floor(Math.random() * (t - s)) + s;
                jQuery.data(c, "posData",
                {
                    top: f_top, left: f_left, rad: Math.random() * 50, i: Math.ceil(q + Math.random() * (r - q)),
                    swingRange: g
                });
                c.css({
                    top: f_top + "px", left: f_left + "px"
                });
                x.push(c)
            }
        };
        function animateFlakes() {
            var i = 0;
            for (i = x.length - 1; i >= 0; i--) {
                var f = x[i];
                var a = jQuery.data(f, "posData");
                a.top += a.i;
                var b = Number();
                b = Math.cos((a.rad / 180) * Math.PI);
                a.rad += 2;
                var X = a.left - b * a.swingRange;
                f.css({
                    top: a.top + "px", left: X + "px"
                });

                if (a.top > WIN_HEIGHT) {
                    jQuery.removeData(f);
                    f.remove();
                    x.splice(i, 1);
                    generateFlake(1, true)
                }
            }
        };
        return this;
    };
    $.fn.jSnow.defaults =
    {
        flakes: 30, fallingSpeedMin: 1, fallingSpeedMax: 3, flakeMaxSize: 20, flakeMinSize: 10, flakeCode: ["&bull;"],
        flakeColor: ["#fff"], zIndex: "auto", interval: 50, swingMin: 0, swingMax: 200
    }
})(jQuery);

