var mySchool;

var cpLib = Class.create({
  initialize: function(options) {
    this.options = {
      checkAge:             true,
      prefixCookies:        'BITRIX_SM_',
      ageCookieName:        'AGE',
      
      dirIMG:               '/img/',
      dirTPL:               '/_tpl/',
      
      tplFrmQuestionAge:    'frmQuestionAge',
      
      typeTPL:              '.tpl',

      imgNULL:              'null.gif',
      
      lang:                 lang + '/',
      phpInterfaceSchool:   '/' + lang + '/school/school.php',

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

});

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';

    this.elementList = {};

  },

  load: function() {
    if (this.IE6) this.updateIE6();    
    if (this.options.checkAge || this.pageID != 'mainPage') this.checkAge();

    if (this.pageID == 'pageSchool') {
      mySchool = new ajaxSchool();
    }
    
    if (this.pageID == 'pageGallery') {
      myVoting = new ajaxVoting();
    }

  },

  updateImagePNG: 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});
      }
    }
  },

  updateIE6: function() {
    this.updateImagePNG();
  },

  updateLinkList: function() {
    this.updateImageList = Prototype.emptyFunction;

    document.observe('click', (function(event){
      var target = event.findElement('a[rel^=cpLib]');

      if (target) {
        event.stop();
        this.linkAction(event.element());
      }

      return false;

    }).bind(this));
  },
  
  setShadowWindow: function(content) {
    this.eltDivOvoerlay.innerHTML = content;
    
    var id = 'div#frmQuestionAge' + ' ';
    elementList = {
      submitYes:  $$(id + 'input.submit01')[0],
      submitNo:   $$(id + 'input.submit00')[0]
    };

    Event.observe(elementList.submitYes, 'click', (function(event){
      document.cookie = this.options.prefixCookies + this.options.ageCookieName + '=1;path=/';
      
      this.checkAge();
      return true;
    }).bind(this), false);

    Event.observe(elementList.submitNo, 'click', (function(event){
      if ($('frmQuestionAge')) $('frmQuestionAge').remove();
      return false;
    }).bind(this), false);
  },

  shadowWindow: function(content) {
    this.page.setStyle({overflow: 'hidden'});

    var arrayPageSize = Lightbox.prototype.getPageSize();
    this.eltDivOvoerlay = new Element('div', {
        'class' : 'windowOverlay'
    });
    this.eltDivOvoerlay.setStyle({
        'width' : arrayPageSize[0] + 'px',
        'height': arrayPageSize[1] + 'px'
    });
    this.page.appendChild(this.eltDivOvoerlay);

    new Ajax.Request(this.options.dirTPL + this.options.lang + this.options.tplFrmQuestionAge + this.options.typeTPL, {
      method: 'get',
      onSuccess: (function(transport) {
        this.setShadowWindow(transport.responseText);
      }).bind(this),
      onFailure: (function() {
        alert(this.options.msgErrDefault);
      }).bind(this)
    })
  },

  checkAge: function() {
    if (this.getCookies(this.options.ageCookieName)) {
      if (this.getCookies(this.options.ageCookieName)[1] == 1) {
        if (this.eltDivOvoerlay) {
          this.page.setStyle({
            overflow: 'visible'
          });

          this.eltDivOvoerlay.remove();
          this.eltDivOvoerlay = null;
        }
      }
      else { this.shadowWindow(); }
    } else {
      this.shadowWindow();
    }
  },

  getCookies: function(name) {
    name = name || '';
    
    var arCookies = String(document.cookie).split(';');
    
    for (var i = 0; i < arCookies.length; i++) {
      var arCookie = String(arCookies[i]).split('=');
      if (String(arCookie[0]).strip() == String(this.options.prefixCookies + name).strip()) {
        return arCookie;
        break;
      }
    }
    
    return false;
    
  }
});

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

    options = {
      uriScript:             '/gallery/view/voting.php'

    }; Object.extend(this.options, options || { });

    this.setting();
  },

  setting: function() {
    var arForm = $$('form.voting');
    
    if(arForm.length != 0){
      for(var i = 0; i < arForm.length; i++){
        Event.observe(arForm[i], 'submit', (function(event){
          var form = $(event.element());
          
          new Ajax.Request(this.options.uriScript, {
            method: 'post',
            onSuccess: (function(transport) {
              this.voting(form, transport.responseText);
            }).bind(this),
            onFailure: (function() {
              alert(this.options.msgErrDefault);
            }).bind(this),
            parameters: form.serialize(true)
          });
          
          event.stop();
          return false;
        }).bind(this), true);
      }
    }
  },
  
  voting: function(element ,responseText) {
    element = $(element.parentNode);
    element.innerHTML = '<p class="voting">Оценка: '+ responseText +'</p>';
  }
  
});

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

    options = {
      flashVersion:         false,
      hrefExit:             '/'+ this.options.lang +'about/',
      hrefForum:            '/'+ this.options.lang +'forum/forum8/topic7/',

      dirSWF:               '/swf/',

      typeSWF:              '.swf',
      typeFLV:              '.flv',

      swfPlayer:            'videoPlayer',

      IdElementDiv:         'school',
      IdElementSWF:         'swfContent',

      imageWidth:           '480',
      imageHeight:          '380',
      
      exit:                 false

    }; Object.extend(this.options, options || { });

    this.flv = '';
    this.setOptions();
  },

  setOptions: function() {
    this.elementDiv = $(this.options.IdElementDiv);
    this.elementSWF = $(this.options.IdElementSWF);
    this.elementH2  = $$('h2')[0];
    this.elementBox = $$('div.swfBox')[0];

    this.elementBox.setStyle({display: 'none'});

    if (swfobject.hasFlashPlayerVersion("9.0.0")) {
      this.options.flashVersion = true;
    } else {
      this.options.flashVersion = false;
      this.elementBox.remove();
    }

    this.startSchool();
  },

  formDisabled: function(element) {
    element = element || this.elementList.frmSubmit;

    if (element) {
      element[element.disabled ? 'enable' : 'disable']();
      (element.disabled) ? element.setOpacity(1) : element.setOpacity(0.5);
      element.disabled = !element.disabled;
    }
  },

  setVideoPlayer: function() {
    swfobject.embedSWF(this.options.dirSWF + this.options.swfPlayer + this.options.typeSWF, this.options.IdElementSWF, "480", "380", "9.0.0");
  },

  startSchool: function(param) {
    param = param || '';
    
    // DEBUG
    param += (param == '')?'?':'' + String(location.hash).replace(/\#/, '');
    
    new Ajax.Request(this.options.phpInterfaceSchool + param, {
        method: 'get',
        onSuccess: (function(transport) {
          if (this.options.exit) document.location = this.options.hrefForum;
          else this.updateContent(transport.responseText);
        }).bind(this),
        onFailure: (function() {
          alert(this.options.msgErrDefault);
        }).bind(this)
    });
  },
  
  startRegister: function(param) {
    param = param || '';
      
    new Ajax.Request(this.options.phpInterfaceSchool + param, {
        method: 'get',
        onSuccess: (function(transport) {
          this.updateRegister(transport.responseText);
        }).bind(this),
        onFailure: (function() {
          alert(this.options.msgErrDefault);
        }).bind(this)
    });
  },

  updateEvensForm: function(content) {
    this.elementList = {
      frmSubmit:    $$('div#school form#submit')[0],
      frmRegister:  $$('div#school form#frmRegister')[0],
      submit:       $$('div#school form#submit input.submit01')[0],
      restart:      $$('div#school form#submit input.submit01')[1],
      exit:         $$('div#school form#submit input.submit00')[0],
      register:     $$('div#school form#frmRegister input.submit03')[0]
    };
    
    if(this.elementList.register) {
      Event.observe(this.elementList.register, 'click', (function(event){
        var param = '?';
        
        arInputTypeText   = $$('div#school form#frmRegister input[type^=text]');
        arInputTypeHidden = $$('div#school form#frmRegister input[type^=hidden]');
  
        var arInput = arInputTypeText;
        for (var i = 0; i < arInput.length; i++) {
          $elementInput = $(arInput[i]);
          param = param + $elementInput.name + '=' + $elementInput.value + '&';
        }
  
        var arInput = arInputTypeHidden;
        for (var i = 0; i < arInput.length; i++) {
          $elementInput = $(arInput[i]);
          param = param + $elementInput.name + '=' + $elementInput.value + '&';
        }
        
        this.startRegister(param);
                
        return true;
      }).bind(this), false);
    }

    if(this.elementList.submit) {
      Event.observe(this.elementList.submit, 'click', (function(event){
        var param = '?';
  
          arInputTypeText   = $$('div#school form#submit input[type^=text]');
          arInputTypeRadio  = $$('div#school form#submit input[type^=radio]');
          arInputTypeHidden = $$('div#school form#submit input[type^=hidden]');
  
          var arInput = arInputTypeText;
          for (var i = 0; i < arInput.length; i++) {
            $elementInput = $(arInput[i]);
            param = param + $elementInput.name + '=' + $elementInput.value + '&';
          }
  
          var arInput = arInputTypeRadio;
          for (var i = 0; i < arInput.length; i++) {
            $elementInput = $(arInput[i]);
            if ($elementInput.checked) {
              param = param + $elementInput.name + '=' + $elementInput.value + '&';
            }
          }
  
          var arInput = arInputTypeHidden;
          for (var i = 0; i < arInput.length; i++) {
            $elementInput = $(arInput[i]);
            param = param + $elementInput.name + '=' + $elementInput.value + '&';
            
            if ($elementInput.name == 'EXIT') this.options.exit = true;
          }

        this.startSchool(param);
  
        return true;
      }).bind(this), false);
    }
    
    if(this.elementList.restart) {    
      Event.observe(this.elementList.restart, 'click', (function(event){
        var param = '?';
        
        arInputTypeHidden = $$('div#school form#submit input[type^=hidden]');
        var arInput = arInputTypeHidden;
          for (var i = 0; i < arInput.length; i++) {
            $elementInput = $(arInput[i]);
            param = param + $elementInput.name + '=' + $elementInput.value + '&';
          }
        
        this.startSchool(param);
  
        return false;
      }).bind(this), false);
    }
  
    if(this.elementList.exit) {    
      Event.observe(this.elementList.exit, 'click', (function(event){
        document.location = this.options.hrefExit;
  
        return false;
      }).bind(this), false);
    }
    
    
  },
  
  updateRegister: function(content) {
    var elementDIV = $$('div#cntRegister')[0];
        elementDIV.innerHTML = content;

  },

  updateContent: function(content) {
    this.elementDiv.innerHTML = content;
    if ($('h2')) this.elementH2.innerHTML = $('h2').getValue();
    this.updateEvensForm();

    if ($('flv')) {
      this.flv = $('flv').getValue();
      
      if (this.flv != '') {
        this.elementBox.setStyle({display: 'block'});
        // this.formDisabled();
        this.setVideoPlayer();
      }
    } else {
        this.elementBox.setStyle({display: 'none'});    
    }
    
  }

});


function startLoadOk() {
  var obj = swfobject.getObjectById("swfContent");
  if (obj) {
    obj.startLoad(mySchool.flv);
  }
}

function endOfFile() {
  // mySchool.formDisabled();
}

function addCnetwork(){
      var elTable = $('tblCnetwork');
      var elTBody = elTable.getElementsByTagName('tbody')[0];       
      var elTr    = $('cnetwork');
      var elTd01  = elTr.getElementsByTagName('td')[0];
      var elTd02  = elTr.getElementsByTagName('td')[1];

      if (elTable && elTBody && elTr && elTd01 && elTd02) {            
        elNewTr = elTr.cloneNode(true);
        elNewTr.getElementsByTagName('input')[0].value = '';
        elNewTr.getElementsByTagName('option')[0].selected = true;
        elNewTr.getElementsByTagName('p')[1].className = 'delСnetwork';
        
        elTBody.appendChild(elNewTr);
      }
}

function delCnetwork(element){
  elTr = element.parentNode.parentNode.parentNode.remove();
}

document.observe('dom:loaded', function () { var myCPLib = new siteBase(); myCPLib.load(); });