(function($){
$.fn.snow=function(options){
var $flake=$('<div class="we-flake" />').css({'position': 'absolute', 'top': '0px', 'bottom':'0px', 'z-index':'999999'}),
documentHeight=$(document).height(),
documentWidth=$(document).width(),
defaults={
flakeChar:"&#10054;",
minSize:10,
maxSize:20,
newOn:500,
flakeColor:["#ffffff"],
durationMillis: null
},
options=$.extend({}, defaults, options),
flakeElements=[];
$flake.html(options.flakeChar);
var interval=setInterval(function(){
var startPositionLeft=Math.random() * documentWidth - 100,
startOpacity=0.5 + Math.random(),
sizeFlake=options.minSize + Math.random() * options.maxSize,
endPositionTop=documentHeight - defaults.maxSize - 40,
endPositionLeft=startPositionLeft - 100 + Math.random() * 200,
durationFall=documentHeight * 10 + Math.random() * 5000;
var flake=$flake
.clone()
.appendTo('body')
.css({
left: startPositionLeft,
opacity: startOpacity,
'font-size': sizeFlake,
color: options.flakeColor[Math.floor((Math.random() * options.flakeColor.length))]
})
.animate({
top: endPositionTop,
left: endPositionLeft,
opacity: 0.2
}, durationFall, 'linear', function(){
$(this).remove();
});
flakeElements.push(flake);
}, options.newOn);
if(options.durationMillis){
setTimeout(function(){
clearInterval(interval);
$.each(flakeElements, function(index, flake){
flake.stop(true, true).remove();
});
}, options.durationMillis);
}};})(jQuery);