var snow_script_dir = get_snow_script_dir();

$(function()
{
  start_snowfall();
});

function start_snowfall()
{
  var start_y = -20;
  var num_far_flakes = 30;
  var num_close_flakes = 6;
  var snow_height = 230;
  var snow_width = 900;
  var close_div = $('#snowfall_close_div');
  var far_div = $('#snowfall_far_div');

  var close_flakes = [];
  var far_flakes = [];

  create_far_flakes();
  create_close_flakes();
  
  update_flake_positions();
  
  setInterval(function()
  {
    move_flakes();
    update_flake_positions();
  }, 30);

  function move_flakes()
  {
    move_far_flakes();
    move_close_flakes();
  }
  
  function update_flake_positions()
  {
    update_close_flake_positions();
    update_far_flake_positions();
  }
  
  function create_close_flakes()
  {
    for (i = 0; i < num_close_flakes; i++)
    {
      var flake_div =
        $("<div style='position:absolute'>" +
          "<img src='" + snow_script_dir + "bilder/close_flake.png'/>" +
        "</div>"); 
      
      close_div.append(flake_div);
      
      var flake = 
      {
        y: snow_height * i / num_close_flakes,
        div: flake_div
      };
      
      randomize_flake(flake);
      
      far_flakes.push(flake);
    }
  }

  function create_far_flakes()
  {
    for (i = 0; i < num_far_flakes; i++)
    {
      var flake_div =
        $("<div style='position:absolute'>" +
          "<img src='" + snow_script_dir + "bilder/far_flake.png'/>" +
        "</div>"); 
      
      far_div.append(flake_div);
      
      var flake = 
      {
        y: snow_height * i / num_far_flakes,
        div: flake_div
      };
      
      randomize_flake(flake);
      
      far_flakes.push(flake);
    }
  }
  
  function move_close_flakes()
  {
    for (var i = 0; i < far_flakes.length; i++)
    {
      var flake = far_flakes[i];
      
      flake.y += 0.195;
      flake.phase += 0.07;
      
      if (flake.y >= snow_height)
      {
        flake.y = start_y;
        
        randomize_flake(flake);
      }
    }
  }

  function move_far_flakes()
  {
    for (var i = 0; i < far_flakes.length; i++)
    {
      var flake = far_flakes[i];
      
      flake.y += 0.3;
      flake.phase += 0.01;
      
      if (flake.y >= snow_height)
      {
        flake.y = 0;
        
        randomize_flake(flake);
      }
    }
  }
  
  function randomize_flake(flake)
  {
    flake.x = snow_width * Math.random();
    flake.phase = 400 * Math.random();
  }
  
  function update_close_flake_positions()
  {
    for (var i = 0; i < far_flakes.length; i++)
    {
      var flake = far_flakes[i];

      var x = Math.floor(flake.x + 20 * Math.sin(flake.phase));
      
      flake.div
        .css('left', x + 'px')
        .css('top', Math.floor(flake.y) + 'px');
    }
  }

  function update_far_flake_positions()
  {
    for (var i = 0; i < far_flakes.length; i++)
    {
      var flake = far_flakes[i];

      var x = Math.floor(flake.x + 10 * Math.sin(flake.phase));
      
      flake.div
        .css('left', x + 'px')
        .css('top', Math.floor(flake.y) + 'px');
    }
  }
}

function get_snow_script_dir()
{
  var currentscript = $('script:last');
  var url = currentscript.attr('src');

  return url.match(/^(.*?)[^\/]*$/)[1];
}

