
/**
 * This class is the gui for the camchat page
 * (depends on prototype library)
 * @author Paul Thompson
 */
var camchatGui = Class.create();

//defining the rest of the class implmentation
camchatGui.prototype = {

  initialize: function() {
    var hashParts = window.location.hash.substring(1).split('/');

    var layout      = hashParts[0];
    var bigmedia    = (hashParts.length > 1 ? hashParts[1] : '');
    var littlemedia = (hashParts.length > 2 ? hashParts[2] : '');

    if (layout      == '') layout      = camchat_default_layout;
    if (bigmedia    == '') bigmedia    = camchat_default_bigmedia;
    if (littlemedia == '') littlemedia = camchat_default_littlemedia;

    this.setLayout(layout);
    this.setBigMedia(bigmedia);
    this.setLittleMedia(littlemedia);

    this.translateOldPageViews();
    this.setHash();
    this.setMenus();
  },

  translateOldPageViews: function() {
    switch (this.layout) {
      case 'Bear'  :
      case 'Bison' :
      case 'Elk'   :
      case 'Moose' : return;

      case 'StreamOnly' :
      case 'StaticOnly' :
      case 'StaticOnlyOsprey' :
        switch (this.layout) {
          case 'StreamOnly'       : this.setBigMedia('OldFaithfulStream'); break;
          case 'StaticOnly'       : this.setBigMedia('OldFaithfulVEC');    break;
          case 'StaticOnlyOsprey' : this.setBigMedia('GlacierOspreys');    break;
        }

        this.setLittleMedia('');
        this.setLayout('Elk');

        break;

      case 'LargeStreamSmallStatic' :
      case 'LargeStreamSmallStaticOsprey' :
      case 'LargeStaticSmallStaticOsprey' :
        this.setBigMedia( this.layout == 'LargeStaticSmallStaticOsprey' ? 'OldFaithfulVEC' : 'OldFaithfulStream' );
        this.setLittleMedia( this.layout == 'LargeStreamSmallStatic' ? 'OldFaithfulVEC' : 'GlacierOspreys' );
        this.setLayout('Bear');
        break;

      case 'LargeStreamMediumStatic' :
      case 'LargeStreamMediumStaticOsprey' :
      case 'LargeStaticMediumStaticOsprey' :
        this.setBigMedia( this.layout == 'LargeStaticMediumStaticOsprey' ? 'OldFaithfulVEC' : 'OldFaithfulStream' );
        this.setLittleMedia( this.layout == 'LargeStreamMediumStatic' ? 'OldFaithfulVEC' : 'GlacierOspreys' );
        this.setLayout('Bison');
        break;
    }
  },

  setHash: function() {
    var newHash = this.layout;
    if (this.bigmedia != '') newHash += '/' + this.bigmedia;
    if ((this.littlemedia != '') && (this.layout != 'Elk')) newHash += '/' + this.littlemedia;
    window.location.hash = newHash;
  },

  setMenus: function() {
    this.setSelectMenu('select-layout',       this.layout);
    this.setSelectMenu('select-big-media',    this.bigmedia);
    this.setSelectMenu('select-little-media', this.littlemedia);
  },

  setSelectMenu: function(select_id, selected_item_value) {
    var select = $(select_id);
    var i;

    for (i = 0; i < select.length; ++i) {
      select.options[i].selected = (select.options[i].value == selected_item_value);
    }
  },

  setLayout: function(layout) {
    this.layout = layout;

    switch (this.layout) {
      case 'Bear'  : this.littlemediasize = 'littlemedia-small';  break;
      case 'Bison' : this.littlemediasize = 'littlemedia-medium'; break;
      case 'Elk'   : this.littlemediasize = 'littlemedia-hidden'; break;
      case 'Moose' : this.littlemediasize = 'littlemedia-moose';  break;
    }
  },

  setLittleMedia: function(littlemedia) {
    this.littlemedia = littlemedia;
  },

  setBigMedia: function(bigmedia) {
    this.bigmedia = bigmedia;
  },

  changeLayout: function(layout) {
    this.setLayout(layout);
    this.applyLayout();
    this.setHash();
  },

  changeLittleMedia: function(littlemedia) {
    this.setLittleMedia(littlemedia);
    this.applyLittleMedia();
    this.setHash();
  },

  changeBigMedia: function(bigmedia) {
    this.setBigMedia(bigmedia);
    this.applyBigMedia();
    this.setHash();
  },

  applyLayout: function() {
    var div_chatcol = $('column-chat');
    var div_vidcol  = $('column-video');
    var div_pfcchat = $('pfc_container');
    var div_header_little_media = $('header-right-little-media');

    switch (this.layout) {
      case 'Bear'  :
      case 'Bison' :
      case 'Elk'   :
        div_chatcol.style.cssFloat    = 'left';
        div_chatcol.style.styleFloat  = 'left';
        div_chatcol.style.width       = camchat_littlemedia_width + 'px';
        div_pfcchat.style.width       = (camchat_littlemedia_width + camchat_pfcchat_width_adjustment) + 'px';

        div_vidcol.style.cssFloat     = 'right';
        div_vidcol.style.styleFloat   = 'right';
        div_vidcol.style.width        = camchat_bigmedia_width + 'px';

        break;

      case 'Moose' :
        div_chatcol.style.cssFloat    = 'right';
        div_chatcol.style.styleFloat  = 'right';
        div_chatcol.style.width       = camchat_bigmedia_width + 'px';
        div_pfcchat.style.width       = (camchat_bigmedia_width + camchat_pfcchat_width_adjustment) + 'px';

        div_vidcol.style.cssFloat     = 'left';
        div_vidcol.style.styleFloat   = 'left';
        div_vidcol.style.width        = camchat_littlemedia_width + 'px';

        break;
    }

    $('header-right-little-media').style.display = ( this.layout == 'Elk' ? 'none' : 'block' );

    this.updateChatHeight();
    this.applyBigMedia();
    this.applyLittleMedia();
  },

  applyBigMedia: function() {
    var div_bigMedia = $('big-media');
    var frm_bigMedia = $('big-media-frame');

    var div_bigMediaStreamLeft  = $('big-media-stream-left');
    var div_bigMediaStreamRight = $('big-media-stream-right');

    if (this.bigmedia == 'OldFaithfulStream') {

      this.activateStream( this.layout == 'Moose' ? 'left' : 'right' ); 
      div_bigMediaStreamLeft.style.display  = ( this.layout == 'Moose' ? 'block' : 'none'  );
      div_bigMediaStreamRight.style.display = ( this.layout == 'Moose' ? 'none'  : 'block' );

      div_bigMedia.style.display = 'none';

      frm_bigMedia.height = 0;
      frm_bigMedia.src    = '';

    } else {
      var staticcam_width = ( this.layout == 'Moose' ? camchat_littlemedia_width        : camchat_bigmedia_width );
      var bigmedia_height = ( this.layout == 'Moose' ? camchat_littlemedia_height_moose : camchat_bigmedia_height );

      this.activateStream('none'); 
      div_bigMediaStreamLeft.style.display  = 'none';
      div_bigMediaStreamRight.style.display = 'none';
      div_bigMedia.style.display            = 'block';

      frm_bigMedia.height = bigmedia_height;
      frm_bigMedia.src    = camchat_webroot
                          + '/staticcam.php?cam=' + this.bigmedia + '&width=' + staticcam_width;

    }
  },

  applyLittleMedia: function() {
    var div_littleMedia      = $('little-media');
    var frm_littleMedia      = $('little-media-frame');
    var div_littleMediaMoose = $('little-media-moose');
    var frm_littleMediaMoose = $('little-media-moose-frame');

    div_littleMedia.style.display = 'none';
    frm_littleMedia.height = 0;
    frm_littleMedia.src    = '';

    div_littleMediaMoose.style.display = 'none';
    frm_littleMediaMoose.height = 0;
    frm_littleMediaMoose.src    = '';

    if (this.littlemediasize != 'littlemedia-hidden') {

      if (this.layout == 'Moose') {

        div_littleMediaMoose.style.display = 'block';
        
        frm_littleMediaMoose.height = camchat_littlemedia_height[this.littlemediasize];
        frm_littleMediaMoose.src = camchat_webroot
                                 + '/staticcam.php?cam=' + this.littlemedia + '&height=' + camchat_littlemedia_height[this.littlemediasize];

      } else {

        div_littleMedia.style.display = 'block';
        frm_littleMedia.height = camchat_littlemedia_height[this.littlemediasize];
        frm_littleMedia.src = camchat_webroot
                            + '/staticcam.php?cam=' + this.littlemedia + '&height=' + camchat_littlemedia_height[this.littlemediasize];

      }
    }
  },

  activateStream: function(stream) {
    var obj_streamLeft  = $('big-media-stream-left-player-object');
    var emb_streamLeft  = $('big-media-stream-left-player-embed');
    var obj_streamRight = $('big-media-stream-right-player-object');
    var emb_streamRight = $('big-media-stream-right-player-embed');

    if (stream == 'left') {
      if ((obj_streamLeft != null) && (obj_streamLeft.controls != null)) obj_streamLeft.controls.play();
      if ((emb_streamLeft != null) && (emb_streamLeft.controls != null)) emb_streamLeft.controls.play();
    } else {
      if ((obj_streamLeft != null) && (obj_streamLeft.controls != null)) obj_streamLeft.controls.stop();
      if ((emb_streamLeft != null) && (emb_streamLeft.controls != null)) emb_streamLeft.controls.stop();
    }

    if (stream == 'right') {
      if ((obj_streamRight != null) && (obj_streamRight.controls != null)) obj_streamRight.controls.play();
      if ((emb_streamRight != null) && (emb_streamRight.controls != null)) emb_streamRight.controls.play();
    } else {
      if ((obj_streamRight != null) && (obj_streamRight.controls != null)) obj_streamRight.controls.stop();
      if ((emb_streamRight != null) && (emb_streamRight.controls != null)) emb_streamRight.controls.stop();
    }
  },

  updateChatHeight: function(littleMediaSize) {
    var heightpx = (camchat_chat_height[this.littlemediasize] - 65) + 'px';

    $('pfc_channels_content').style.height = heightpx;
    for (t = 0; t < pfc.gui.tabids.length; ++t) {
      $('pfc_chat_'   + pfc.gui.tabids[t]).style.height = heightpx;
      $('pfc_online_' + pfc.gui.tabids[t]).style.height = heightpx;
    }
  },

  openDisclaimer: function() {
    window.open(camchat_webroot + '/disclaimer.php', 'disclaimer', 'width=700, height=600, menubar=no, toolbar=no, status=no');
  },

  openLog: function(logtype) {
    if ((logtype == 'today') || (logtype == 'yesterday')) {
      var localDate = new Date();
      if (logtype == 'yesterday') localDate.setDate(localDate.getDate() - 1);

      var adjustedTimeMS = localDate.getTime()
           + (localDate.getTimezoneOffset() * 60000)
           + (liveclock_tz_offset * 3600000)
           + (liveclock_dst_active * 3600000);
      localDate = new Date(adjustedTimeMS);

      var year  = localDate.getFullYear();
      var month = localDate.getMonth() + 1;
      var day   = localDate.getDate();
      var localDateString = year
                    + '-' + (month < 10 ? '0' : '') + month
                    + '-' + (day   < 10 ? '0' : '') + day;

      window.open(camchat_webroot + '/log/?logdate=' + localDateString);
    } else {
      switch (logtype) {
        case 'meeboarc1' : window.open(camchat_meebo_archive1); break;
        case 'meeboarc2' : window.open(camchat_meebo_archive2); break;
      }
    }
  }

};


