///////////////////////////////
//
// Библиотека
//
//////////////////////////////
var cpLib = Class.create({
  initialize: function(options) {
    this.options = {
      dirIMG:               '/img/',
      imgNULL:              'null.gif',

      dirSWF:               '/swf/',
      typeSWF:              '.swf',
      swfFile:              'main',

      preloaderImageList:   [
        'null.gif'
      ],

      msgErrDefault:        'Что-то не так!',
      msgErrGetXML:         'Ошибка загрузки XML-файла',
      msgErrGetTPL:         'Ошибка загрузки TPL-файла',
      msgErrFunction:       'Функция не найдена'
    };
    Object.extend(this.options, options || { });
  }
});

///////////////////////////////
//
// Предзагрузчик картинок
//
//////////////////////////////
var preloaderImages = Class.create(cpLib, {
  initialize: function($super, options) {
    $super(options);

    this.count = 0;
    this.updateImageList();
  },

  updateImageList: function() {
    this.updateImageList = Prototype.emptyFunction;
    this.fileList = this.options.preloaderImageList;

    this.preloaderImages();
  },

  preloaderImages: function() {
    var getImageNum = 0;
    var images = [];

    for (var i = 0; i < this.fileList.length; i++) {
      images[i] = new Image();
  
      images[i].onload = (function(){
        getImageNum++;
        if (getImageNum == this.fileList.length) this.onLoad();
      }).bind(this);

      images[i].src = this.options.dirIMG + this.fileList[i];
    }
  },

  onLoad: function() {
    this.siteBase = new siteBase();
    
    this.siteBase.load();
  }

});


var siteBase = Class.create(cpLib, {
  initialize: function($super, options) {
    $super(options);

    this.page   = $$('body')[0];   
    this.pageID = $$('body')[0].readAttribute('id');
    
    if (navigator) {
      this.IE6 = /MSIE (5\.5|6)/.test(navigator.userAgent) && navigator.platform == 'Win32';
    }
  },

  load: function() {    
    this.updateUserEvent();
    
    if(this.IE6) {
      this.fixPNG();
    }
    
    this.menuSelectorControl({
      className: 'menuMain, menuSub'
    });

    if ($$('div.content')[0].getHeight() < $$('ul.menuSub')[0].getHeight()) $$('div.content')[0].setStyle({height: $$('ul.menuSub')[0].getHeight() + 'px'})
  },

  fixPNG: function() {
    var elementsIMG = $$('img[src*=.png]');
    if (elementsIMG) {
      for (var i = 0; i < elementsIMG.length; i++) {
        var src = $(elementsIMG[i]).readAttribute('src');
        elementsIMG[i].writeAttribute('src', this.options.dirIMG + this.options.imgNULL);

        var tplFilter = new Template('progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'#{src}\', sizingMethod=\'scale\')');
        elementsIMG[i].runtimeStyle.filter = tplFilter.evaluate({src: src});
      }
    }
    
    var elementsDIV = $$('*');
    if (elementsDIV) {
      for (var i = 0; i < elementsDIV.length; i++) {
        var src = (String($(elementsDIV[i]).getStyle('background-image')).match(/url\("(.+)"\)/i));
        (src == null || src == 'null' || !src) ? src = '' : src = src[1];

        if (src.include('.png')) {
          elementsDIV[i].runtimeStyle.backgroundImage = 'none';

          var tplFilter = new Template('progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'#{src}\', sizingMethod=\'#{sizingMethod}\')');
          elementsDIV[i].runtimeStyle.filter = tplFilter.evaluate({src: src, sizingMethod: ($(elementsDIV[i]).getStyle('background-repeat') == 'no-repeat') ? 'crop' : 'scale'});
        }
      }
    }
  },

  callUserEvent: function(event, params) {
    var method = Function.methodExists(this, params.functionName);
    
    (method)? method(event) : alert(this.options.msgErrFunction);
  },

  updateUserEvent: function() {
    document.observe('click', (function(event){
      var tager = event.findElement('[rel^=cpLib]');
      if (tager) {
        event.stop();

        var params = $(event.element()).readAttribute('rel').match(/cpLib\[(.+)\]/i)[1].split(':');
        this.callUserEvent(event, {eventName: params[0], functionName: params[1]});
      }

      return false;
    }).bind(this));
  },
  
  srcReplace: function(element) {
    if (element) {
      var fileName  = String(element.src).match(/\/(\w+)\.gif/);
                                    
      if (fileName != null || fileName != 'null' || fileName) {
        fileName    = (String(fileName[1]).include('_')) ? String(fileName[1]).replace(/\_/g, '') : '_' + fileName[1];
        element.src = '/img/_menu/' + fileName + '.gif';
      }  
    }
  },
  
  menuSelectorControl: function(param) {
    var className = param.className || '';

    if (className != '') {
      className = String(className).split(',');
      
      for (var i = 0; i < className.length; i++) {
        var arrElementParent = $$('ul.' + String(className[i]).strip());
        
        if (arrElementParent) {
          for (var j = 0; j < arrElementParent.length; j++) {  
            var arrElementIMG = arrElementParent[j].getElementsByTagName('img');
            
            if (arrElementIMG) {
              for (var k = 0; k < arrElementIMG.length; k++) {
                Event.observe(arrElementIMG[k], 'mouseover', (function(event){
                  this.srcReplace($(event.element()));
                }).bind(this));
                
                Event.observe(arrElementIMG[k], 'mouseout', (function(event){
                  this.srcReplace($(event.element()));
                }).bind(this));
              }
            }
          }
        }
      }
    }
  }
});

document.observe('dom:loaded', function () { new preloaderImages(); });