//------------ Это служебные функции

var flash_progress = 0;

//Устанавливает прогресс флешки, вызывающей эту функцию
function set_flash_progress(progress)
{
  flash_progress = progress;
};




//------------ Эти функции отвечают за управление пердзагрузкой

// Выполняется, когда всё загружено
function on_all_load()
{
  load_preloader();
};

// Загружаем изображения прелоадера
function load_preloader()
{
  preloader_add_img_bg(base_url + 'images/main/preloader.gif', 15, 'img_color');
  preloader_add_img_bg(base_url + 'images/main/preloader_bw.gif', 15, 'img_bw');
  preloader_add_img_bg(base_url + 'images/main/preloader_bg.jpg', 58, 'preloader');
  preloader_go('load_content');
};

// Загружаем графический контент сайта
function load_content(progress)
{
  if (progress == 100)
  {
    document.getElementById('preloader').style.background =
      'url(' + base_url + 'images/main/preloader_bg.jpg' + ') center center no-repeat';
    document.getElementById('preloader').style.display = 'block';

    preloader_add_content();
    preloader_go('show_progress');
  }
};

// Отображаем прогресс загрузки, если готово, то отображаем страницу
function show_progress(progress)
{
  preloader_set_smooth_progress(progress);
  if (progress == 100)
  {
    preloader_set_progress(100);
    setTimeout('show_all()', 500);
  }
}

// Всё загружено, отображаем страницу
function show_all()
{
  var flashvars = {};
  var params =
  {
    wmode: "transparent"
  };
  swfobject.embedSWF(base_url + 'images/main/all2.swf',
                     'flash_1', '1680', '1200', '9.0.0',
                     base_url + expressInstall_src,
                     flashvars, params);

  if (sound)
  {
    sound_start();
  }
  else
  {
    sound_stop();
  }

  document.getElementById('preloader').style.display = 'none';
  document.getElementsByTagName('html')[0].style.height = '1200px';
  document.getElementsByTagName('body')[0].style.height = '1200px';
  document.getElementById('all').style.display = 'block';
};




//------------ Эти функции отвечают за отображение процесса предзагрузки

//Возвращаем значение без символа '%'
function get_procent(val)
{
  if (!val)
  {
    val = '100%';
  }
  return (parseInt(val.replace('%', '')));
};

// Текущее положение прелоадера
function preloader_get_progress()
{
  return (100 - get_procent(document.getElementById('img_bw').style.height));
};

// Устанавливаем текущий прогресс прелоадера, в процентах, моментально
function preloader_set_progress(procent_height)
{
  document.getElementById('img_bw').style.height = (100 - procent_height) + '%';
};

// Текущий необходимый прогресс прелоадера, в процентах
var preloader_progress = 0;

// Устанавливаем текущий прогресс прелоадера, в процентах, плавно
function preloader_set_smooth_progress(progress)
{
  preloader_progress = progress;
  preloader_set_smooth_progress_check(progress);
};

// Проверяем установили ли мы прогресс, если нет, то продолжаем
function preloader_set_smooth_progress_check(progress)
{
  // Проверяем, не изменился ли наш дорогой целевой процент
  // Если изменился, то ничего делать не будем
  if (preloader_progress == progress)
  {
    // Плавность движения
    var smooth = 45;
    // Частота обновления состояния
    var freq = 40;
    // Текущее положение
    var current = preloader_get_progress();
    // Разница между текущим и необходимым положением, плюс плавность
    var increment = (preloader_progress - current) / smooth;
    // Разница должна быть не меньше единицы по модулю
    if (increment > 0 && increment < 1)
    {
      increment = 1;
    }
    else if (increment < 0 && increment > -1)
    {
      increment = -1;
    }
    else
    {
      increment = parseInt(increment);
    }

    // Устанавливаем новое значение, с учетом разницы
    preloader_set_progress(current + increment);

    // Если целевой процент не достигнут, то будем продолжать
    if (current + increment != preloader_progress)
    {
      setTimeout('preloader_set_smooth_progress_check(' +
                   preloader_progress + ')',
                 freq);
    }
  }
};




// ------------ Эти функции отвечают за загрузку картинок и вставку их в DOM

// Загружать будем эти картинки
var preloader_images = new Array();

//Добавим картинку в список загружаемых
function preloader_add_img_bg(img_src, img_size, img_id)
{
  tmp_img = new Image();

  var key = preloader_images.length;
  preloader_images[key] =
  {
    image: tmp_img,
    src: img_src,
    size: img_size,
    id: img_id,
    key: key,
    complete: 0
  };

  preloader_images[key].check = function ()
                                {
                                  if (this.image.complete)
                                  {
                                    this.complete = 100;
                                  }
                                  else
                                  {
                                    setTimeout('preloader_images[' +
                                                 this.key + '].check()',
                                               100);
                                  }
                                };
  preloader_images[key].go = function ()
                             {
                               this.image.src = this.src;
                               this.check();
                             };
  preloader_images[key].insert = function ()
                                 {
                                   if (this.id)
                                   {
                                     document.getElementById(this.id).style.background =
                                       'url(' + this.src + ') center top no-repeat';
                                   }
                                 };
};

//Добавим картинку в список загружаемых
function preloader_add_img(img_src, img_size, img_id)
{
  preloader_add_img_bg(img_src, img_size, img_id);

  var key = preloader_images.length - 1;

  preloader_images[key].insert = function ()
                                 {
                                   if (this.id)
                                   {
                                     document.getElementById(this.id).src =
                                       this.src;
                                   }
                                 };
};

// Добавим флешку в список загружаемых, нужен временный элемент flash_id
function preloader_add_flash(flash_src, flash_size, flash_id)
{
  var tmp_img =
  {
    src: flash_src,
    complete: 0
  };

  var key = preloader_images.length;
  preloader_images[key] =
  {
    image: tmp_img,
    src: flash_src,
    size: flash_size,
    id: flash_id,
    key: key,
    complete: 0
  };

  preloader_images[key].check = function ()
                                {
                                  if (flash_progress == 100)
                                  {
                                    this.complete = 100;
                                  }
                                  else
                                  {
                                    this.complete = flash_progress;
                                    setTimeout('preloader_images[' +
                                                 this.key + '].check()',
                                               100);
                                  }
                                };
  preloader_images[key].go = function ()
                             {
                               swfobject.embedSWF(this.src, this.id, "1", "1",
                                                  "9.0.0", base_url + expressInstall_src);
                               this.check();
                             };
  preloader_images[key].insert = function ()
                                 {
                                   return (false);
                                 };
};

// Запускаем загрузку, получает имя функции контролирующей статус загрузки
function preloader_go(function_name)
{
  var f;
  for (f = 0; f < preloader_images.length; f++)
  {
    preloader_images[f].go();
  }
  preloader_check(function_name);
};

// Проверяем, закончена ли загрузка, функции function_name передается прогресс
function preloader_check(function_name)
{
  var f;
  var size_complete = 0;
  var all_size = 0;

  for (f = 0; f < preloader_images.length; f++)
  {
    size_complete += preloader_images[f].size / 100 * preloader_images[f].complete;
    all_size += preloader_images[f].size;
  }

  var preloader_complete = parseInt(size_complete * 100 / all_size);
  if (function_name)
  {
    setTimeout(function_name + '(' + preloader_complete + ')', 0);
  }
  if (preloader_complete < 100)
  {
    setTimeout('preloader_check("' + function_name + '")', 100);
  }
  else
  {
    for (f = 0; f < preloader_images.length; f++)
    {
      preloader_images[f].insert();
    }

    flash_progress = 0;
    preloader_images = new Array();
  }
};





/*LGPL*/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
