/* ------------------------------------------------------------------------------------------------

  Глобальные объекты данной библиотеки:
    opacityDiv

  Классы даной библиотеки:
    -> OpacityDiv

    require 'libs/prototype/prototype'
    require 'itools/utils/global'
    require 'itools/utils/dom'
    require 'itools/elements/xdom'

--------------------------------------------------------------------------------------------------- */

function fullscreenDiv( createdDiv ) {
  var fsDiv = createdDiv ? createdDiv : cr( 'DIV' );
    
  var styleHash = {
    position        : 'absolute',
    left            : '0',
    top             : '0',
    width           : '100%',
    height          : '100%'
  }

  if ( !createdDiv ) styleHash.zIndex = '9999';
  
  if ( Browser.msie6 || Body.hasScrolling() ) {
    styleHash.width  = Body.width() + 'px';
    styleHash.height = Body.height() + 'px';
  } // if
    
  Element.setStyle( fsDiv, styleHash );
  
  return fsDiv;
} // function fullscreenDiv


// Класс для добавления на страницу прозрачного DIV, который перекрывал бы все элементы страницы
//    !! инициализируется глобальный объект opacityDiv

//    opacityDiv.show() - показать DIV
//    opacityDiv.hide() - скрыть DIV

//    установить нужный процент прозрачности DIV:
//    -> opacityDiv.setOpacity( percent )  ИЛИ  opacityDiv.opacity = percent;

//    установить нужный цвет фона DIV:
//    -> opacityDiv.setBgColor( bgColorStr )  ИЛИ  opacityDiv.bgColor = bgColorStr;

OPACITY_DIV_BGCOLOR     = "#7E7E7E";
OPACITY_DEFAULT_PERCENT = 40;
OPACITY_DEFAULT_ZINDEX  = 9999;

OpacityDiv = Class.create({
  initialize: function( args ) {
    if ( !args ) args = {};
  
    this.createElement();
    this.content = null;
    this.isVisible = false;
  }, // initialize
  
  createElement: function() {
    this.element        = fullscreenDiv();
    this.contentElement = fullscreenDiv();
    
    this.element.style.display = 'none';
    this.contentElement.style.display = 'none';
    
    this.setBgColor( OPACITY_DIV_BGCOLOR );
    this.setZIndex( OPACITY_DEFAULT_ZINDEX );
    this.setOpacity( OPACITY_DEFAULT_PERCENT );
    
    Body.append( this.element );
    Body.append( this.contentElement );
  }, // createElement
  
  prepareElement: function() {
    fullscreenDiv( this.element );
    fullscreenDiv( this.contentElement );
  }, // prepareElement
  
  show: function() {
    if ( !this.isVisible ) {
      this.prepareElement();
      this.element.style.display = 'block';
      this.contentElement.style.display = 'block';
      this.isVisible = true;
    } // if
  }, // show

  hide: function() {
    if ( this.isVisible && this.element ) {
      this.element.style.display = 'none';
      this.contentElement.style.display = 'none';
      this.isVisible = false;
    } // if
  }, // hide
  
  setOpacity: function( opacityPercent ) {
    var styleHash = {};

    // установка процента прозрачности
    if ( Browser.msie ) {
      styleHash.filter = "alpha(opacity=" + opacityPercent + ")";
    } else {
      styleHash.opacity = ( parseInt( opacityPercent ) / 100 );
    } // if
    
    Element.setStyle( this.element, styleHash );
  }, // setOpacity
  
  setBgColor: function( bgColorStr ) {
    this.element.style.backgroundColor = bgColorStr;
  }, // setBgColor
  
  setZIndex: function( zIndex ) {
    this.zIndex = zIndex;
    this.element.style.zIndex = zIndex;
    this.contentElement.style.zIndex = zIndex + 1;
  } // setZIndex
}); // OpacityDiv

