//
//  Configuration
//
var Gi_BannerOptions = {
  fileSpaceImage:     'img/sp.gif',
  fileLoadingImage:   'img/f/gi_fotobox/loading.gif',
  fileFlashOldImage:  'img/f/gi_fotobox/loading.gif',
  fileFlashNoneImage: 'img/f/gi_fotobox/loading.gif',
  urlFlashCodebase: 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
  urlFlashPluginpage: 'http://www.macromedia.com/go/getflashplayer',
  animate: true, // toggles resizing animations
  docready: false
};
var Gi_BannerCounter = 0;

// -----------------------------------------------------------------------------------

var Gi_Banners = new Class({
  banners: {}, // Array
  counter: 0, // Number
  
  initialize: function() { 
    this.banners = $$('a.banner_wrapper','div.banner_wrapper');
  },
  
  write: function() {
    this.banners.each(function(b) {
      var options = JSON.decode(b.get('options'));
      if (!$defined(options.url)) options.url = b.href;
      if (!$defined(options.width)) options.width = b.getStyle('width');
      if (!$defined(options.height)) options.height = b.getStyle('height');
      if (!$defined(options.bgcolor) && b.getStyle('background-color')) options.bgcolor = b.getStyle('background-color');
      if (!$defined(options.wrapper)) options.wrapper = b;
      if (!$defined(options.loader)) options.loader = b.getElement('.loader');
      var bb = new Gi_Banner(options).write();
      bb = null;
    });
  }
});

var Gi_Banner = new Class({
  Implements: Options,
  
  id: null, // String
  path: '', // String
  wrapper: null, // Element
  loader: null, // Element
  banner: null, // Element or Swiff
  type: 'auto', // 'image' or 'flash' or 'code'
  
  options: {
    'id': '',
    'path': '',
    'width': '',
    'height': '',
    'url': '',
    'load': '',
    'code': '',
    'delay': 0,
    'wrapper': null,
    'loader': null,
    'bgcolor': '#fff',
    // flash options
    'flash.wmode': 'opaque', 
    'flash.version': 8
  },
  
  initialize: function(options) {
    if ($defined(options)) this.setOptions(options);
    
    if (this.options.id) this.id = this.options.id;
    if (!this.id) { // auto set ID
      Gi_BannerCounter++;
      this.id = 'banner_' + Gi_BannerCounter;
    }
    this.id_wrapper = this.id + '_wrapper';
    if (this.options.wrapper) this.wrapper = this.options.wrapper;
    if (this.options.loader) this.loader = this.options.loader;
    
    if (this.options.code) this.type = 'code';
    else if (this.options.path.test('.swf$','ig')) this.type = 'flash';
    else if (this.options.path.test('.(jpg|jpeg|gif|bmp|png)$','ig')) this.type = 'image';
    else this.type = 'unknown';
  },
  
  write: function() {
    this.write_wrapper();
    this.write_loading();
    switch (this.options.load) {
      case 'docready':
        if (Gi_BannerOptions.docready) this.write_banner();
        else window.addEvent('load', (function(){ this.write_banner(); }).bind(this));
        break;
      default:
        this.write_banner();
    }
    return this;
  },
  
  write_wrapper: function() {
    if ($defined(this.wrapper)) return;
    if (this.options.url) {
      this.wrapper = new Element('a', {id: this.id_wrapper, href: this.options.url, 
        styles: {display:'block', width: this.options.width, height: this.options.height, 'text-align':'center', 'position': 'relative'}
      });
    } else {
      this.wrapper = new Element('div', {id: this.id_wrapper,
        styles: {display:'block', width: this.options.width, height: this.options.height, 'text-align':'center', 'position': 'relative'}
      });
    }
    this.wrapper.inject(document.body);
  },
  
  write_loading: function() {
    if ($defined(this.loader)) return;
    this.loader = new Element('div', {
      styles: {position: 'absolute', width: '100%', height: '25%', top: '30%', left: 0, 'text-align': 'center', 'line-height': 0}
    }).adopt(
      new Element('img', {src: Gi_BannerOptions.fileLoadingImage, border:0, align: 'absmiddle'})
    );
    this.wrapper.adopt(this.loader);
  },
  
  clear_loading: function() {
    if (!$defined(this.loader)) return;
    this.loader.destroy();
  },
  
  write_banner: function() {
    if (this.options.delay) {
      (function(){ this.write_banner_real(); }).bind(this).delay(this.options.delay);
    } else {
      this.write_banner_real();
    }
  },
  
  write_banner_real: function() {
    switch (this.type) {
      case 'flash':
        /*if (Browser.Plugins.Flash.version < this.options['flash.version']) {
          this.options.
        }*/
        this.banner = new Swiff(this.options.path, {'id': this.id, 'width': this.options.width, 'height': this.options.height, 
          'params': { 'wmode': this.options.wmode, 'bgcolor': this.options.bgcolor },
          'properties': { 'codebase': Gi_BannerOptions.urlFlashCodebase, 'pluginpage': Gi_BannerOptions.urlFlashPluginpage }
          //,container: this.wrapper
          //,events: {'onLoad': (function() { this.write_banner_loaded(); }).bind(this) }
        });
        this.banner_blank = new Element('img', {'class': 'banner_blank', 'src': Gi_BannerOptions.fileSpaceImage, 
          'width': this.options.width, 'height': this.options.height, 'border':0,
          'styles': {'width': this.options.width, 'height': this.options.height}
        });
        break;
      case 'image':
        this.banner = new Element('img', {'id': this.id, 'class': 'banner_image', 'src': this.options.path, 
          'width': this.options.width, 'height': this.options.height, 'border':0,
          'styles': {'width': this.options.width, 'height': this.options.height}
        });
        var imgPreloader = new Image();
        imgPreloader.onload = (function() { this.write_banner_loaded(); }).bind(this);
        imgPreloader.src = this.options.path;
        return;
        break;
      case 'code':
        this.banner = new Element('div', {'id': this.id, 'class': 'banner_code', 'html': this.options.code,
          'styles': {'display':'block', 'width': this.options.width, 'height': this.options.height}
        });
        break;
      case 'unknown':
      default:
        this.banner = new Element('div', {'id': this.id, 'class': 'banner_unknown', 'text': 'Тип банера не определен!'});
        this.banner.setStyles({
          'width': '100%', 'height': 'auto', 
          'padding-top': this.options.height/2-10
        });
        this.wrapper.setStyles({ 'color': 'red', 'border': '1px solid red' });
    }
    this.wrapper.setStyles({'background-color': this.options.bgcolor});
    this.write_banner_loaded();
  },
  
  write_banner_loaded: function() {
    this.clear_loading();
    if (this.type == 'flash' && Browser.Engine.trident4) { 
      // В IE6 наблюдается глюк! Браузер зависает, если вставлять флеш-объект как обычный элемент с помощью метода adopt!
      // this.banner.getHtml() - см. mootools-1.2-my.js
      this.wrapper.set('html', this.banner.getHtml() );
    } else {
      this.wrapper.adopt( this.banner );
    }
    if ($defined(this.banner_blank)) this.banner_blank.inject(this.wrapper, 'top');
  }

});

window.addEvent('domready', function() {
  //new Gi_Banners().write();
});
window.addEvent('load', function() {
  Gi_BannerOptions.docready = true;
  new Gi_Banners().write();
});

