var OpenKH = {
  resizeBigImages: function() {
    $('#container img').each(function(i, img) {
      img = $(img);
      var p = img.parent();
      if (p != null) {
        var w = p.width();
        if (img.width() > w) {
          var ratio = w/img.width();
          var h = ratio*img.height();
          img.css('width', '' + w + 'px');
          img.css('height', '' + h + 'px');
        }
      }
    })
  },

  editor: function(id, name) {
    var ret = tinymce.EditorManager.editors[id];  
    if (ret == null) {
      ret = tinymce.EditorManager.editors[name];  
    }
    return ret;
  },

  showPage: function(id, url, scrollToId) {
    if (OpenKH.comments.id != null) {  
      alert('You are editing a comment');
    } else {
      $('#' + id).html('<img src="/images/loading.gif" />');
      $('#' + id).load(url);
    }
    return false;
  },

  nodesRevert: function(url, id) {
    $.ajax({
      url: url,
      type: 'POST',
      data: '_method=put',
      complete: function(request, settings) {
        if (request.status == 200) {
          $('#' + id).remove();
          alert('Version reverted');
        } else {
          eval(request.responseText);
        }
      }
    })
    return false;
  },

  comments: {
    id: null,  

    submit: function() {
      tinyMCE.triggerSave();

      var action = $('#comments_form').attr('action');
      var data = {
        _method: $('#comments_method').attr('value'),
        'comment[node_id]': $('#comments_node_id').attr('value'),
        'comment[message]': $('#comments_message').attr('value') || ''  
      }
      $.ajax({
        url: action,
        type: 'POST',
        data: $.param(data),
        complete: function(request, settings) {
          if (request.status == 200) {
            if (OpenKH.comments.id == null) {  
              $('#comments_list').append(request.responseText);
              OpenKH.editor('comments_message', 'comment[message]').setContent('');
            } else {  
              var comment = $('#comment_' + OpenKH.comments.id);
              comment.children('.comments_message').html($('#comments_message').attr('value'));
              OpenKH.comments.cancelEdit();
            }
          } else {
            eval(request.responseText);
          }
        }
      });

      return false;
    },

    edit: function(id) {
      if (this.id != null) {  
        alert('You are editing another comment');
        return false;
      }

      this.mode = 'edit';
      $('#comments_form').attr('action', '/comments/' + id);
      $('#comments_method').attr('value', 'put');

      var comment = $('#comment_' + id);
      var message = comment.children('.comments_message').html();

      tinyMCE.execCommand('mceRemoveControl', false, 'comments_message');
      comment.after($('#comments_form'));
      $('#comments_message').attr('value', message);
      tinyMCE.execCommand('mceAddControl', false, 'comments_message');

      $('#comments_cancel').show();
      comment.hide();

      this.id = id;  
      return false;
    },

    cancelEdit: function() {
      $('#comments_form').attr('action', '/comments');
      $('#comments_method').attr('value', 'post');

      tinyMCE.execCommand('mceRemoveControl', false, 'comments_message');
      $('#comments_message').attr('value', '');
      $('#comments_container').append($('#comments_form'));
      tinyMCE.execCommand('mceAddControl', false, 'comments_message');

      $('#comments_cancel').hide();
      $('#comment_' + this.id).show();

      this.id = null;
      return false;
    },

    del: function(id) {
      if (!confirm('Delete this comment?')) {
        return false;
      }
      $.ajax({
        url: '/comments/' + id,
        type: 'POST',
        data: '_method=delete',
        dataType: 'script',  
        complete: function(request, settings) {
          if (request.status == 200) {
            $('#comment_' + id).remove();
          } else {
            eval(request.responseText);
          }
        }
      });
      return false;
    }
  },

  chats: {
    userName: null,
    userNames: [],
    lastUserName: null,

    escapeHTML: function(s) {
      var div = document.createElement('div');
      var text = document.createTextNode(s);
      div.appendChild(text);
      return div.innerHTML;
    },

    embed: function(sessionId) {
      var flashvars = {
        host: 'cntt.tv',
        port: 443,
        sessionId: sessionId
      };
      var params = {allowScriptAccess: 'sameDomain'};
      var attributes = {id: 'chats_flash_object', name: 'chats_flash_object'};
      swfobject.embedSWF('/flashes/chat.swf', 'chats_flash', '1', '1', '9.0.0', '/flashes/swfobject.swf', flashvars, params, attributes);
    },

    addSystem: function(msg) {
      $('#chats_output').html($('#chats_output').html() + '<em>' + this.escapeHTML(msg) + '</em><br />');
      $('#chats_output')[0].scrollTop = $('#chats_output')[0].scrollHeight;
    },

    addBatch: function(userName, userNames, chats) {
      this.userName = userName;
      this.userNames = userNames;
      $('#chats_num_users').html(userNames.length);

      var s = '';
      for (var i = 0; i < chats.length; i++) {
        userName = chats[i][0];
        var msg = chats[i][1];
        if (msg == null) {
          msg = '';
        }

        if (this.lastUserName != userName) {
          this.lastUserName = userName;
          userName = '<b>' + this.escapeHTML(userName) + ':</b> ';
        } else {
          userName = '';
        }
        s += userName + this.escapeHTML(msg) + '<br />';
      }
      $('#chats_output').html($('#chats_output').html() + s);
      $('#chats_output')[0].scrollTop = $('#chats_output')[0].scrollHeight;
    },

    enter: function(userName) {
      $('#chats_num_users').html(parseInt($('#chats_num_users').html()) + 1);
      this.userNames.push(userName);
      this.refreshUsers();
    },

    leave: function(userName) {
      $('#chats_num_users').html(parseInt($('#chats_num_users').html()) - 1);

      for (var i = 0; i < this.userNames.length; i++) {
        if (this.userNames[i] == userName) {
          this.userNames.splice(i, 1);
          this.refreshUsers();
          break;
        }
      }
    },

    toggle: function() {
      this.refreshUsers();
      $('#chats_output').toggle();
      $('#chats_users').toggle();
      $('#chats_output')[0].scrollTop = $('#chats_output')[0].scrollHeight;
      $('#chats_users')[0].scrollTop = $('#chats_users')[0].scrollHeight;
    },

    refreshUsers: function() {
      var s = '';
      for (var i = 0; i < this.userNames.length; i++) {
        if (this.userNames[i] == this.userName) {
          s += '<b>' + this.escapeHTML(this.userNames[i]) + '</b><br />';
        } else {
          s += this.escapeHTML(this.userNames[i]) + '<br />';
        }
      }
      $('#chats_users').html(s);
    },

    add: function(userName, msg) {
      if (this.lastUserName != userName) {
        this.lastUserName = userName;
        userName = '<b>' + this.escapeHTML(userName) + ':</b> ';
      } else {
        userName = '';
      }
      $('#chats_output').html($('#chats_output').html() + userName + this.escapeHTML(msg) + '<br />');
      $('#chats_output')[0].scrollTop = $('#chats_output')[0].scrollHeight;
    },

    onKeyDown: function(evt) {
      if (evt.keyCode == 13) {
        var msg = $('#chats_input').attr('value');
        if (msg != '') {
          $('#chats_flash_object')[0].enqueueChat(msg);
          $('#chats_input').attr('value', '');
        }
      }
    }
  },

  uploads: {
    swfu: null,      
    file: null,      

    select: function(nodeId, sessionId) {
      this.swfu.selectFiles();
    },

    humanFileSize: function(size) {
      ret = '';
      if (size > 1024*1024) {
        ret += parseInt(size/(1024*1024)) + ' MB';
      } else if (size > 1024) {
        ret += parseInt(size/1024) + ' KB';
      } else {
        ret += size + ' Byte';
      }
      return ret;
    },

    onFileQueued: function(file) {
      var statusText = file.name;
      statusText += ' (' + OpenKH.uploads.humanFileSize(file.size) + ')';
      if (file.size > 10485760) {
        statusText += "\nFile is too big";
        alert(statusText);
      } else {
        OpenKH.uploads.file = file;
        $('#uploads_upload').attr('disabled', '');
        $('#uploads_status_text').html(statusText);
        $('#uploads_status_percent').html('');
      }
    },

    upload: function() {
      var stats = this.swfu.getStats();
      if (stats.in_progress == 0) {
        $('#uploads_select').attr('disabled', 'disabled');
        $('#uploads_upload').html('Cancel');
        this.swfu.startUpload(this.file.id);
      } else {
        this.swfu.cancelUpload(this.file.id);  
      }
    },

    onUploadProgress: function(file, completed, total) {
      var percent = parseInt(completed*100/total);
      $('#uploads_status_percent').html(percent + ' %');
    },

    onUploadError: function(file, error, message) {
      $('#uploads_select').attr('disabled', '');
      $('#uploads_upload').html('Upload');
      $('#uploads_upload').attr('disabled', 'disabled');
      alert('Could not upload');
    },

    onUploadSuccess: function(file, serverData) {
      $('#uploads_select').attr('disabled', '');
      $('#uploads_upload').html('Upload');
      $('#uploads_upload').attr('disabled', 'disabled');

      serverData = eval('(' + serverData + ')');
      if (serverData.failed) {
        $('#uploads_status_percent').html('0 %');
        alert(serverData.notice);
      } else {
        $('#uploads_status_percent').html('100 %');
        $('#uploads_list').html(serverData.notice);  
        alert('File uploaded');
      }
    },

    del: function(a) {
      if (!confirm('Delete this file?')) {
        return;
      }
      var href = a.parentNode.parentNode.getElementsByTagName('a')[0].href;
      href = decodeURIComponent(href);
      $.ajax({
        url: '/uploads/dummy',
        type: 'POST',
        data: '_method=delete&href=' + encodeURIComponent(href),
        complete: function(request, settings) {
          var notice = request.responseText;
          if (request.status == 200) {
            $('#uploads_list').html(notice);
          } else {
            eval(notice);
          }
        }
      });
    }
  }
}

$(document).ready(function() {
  setInterval(OpenKH.resizeBigImages, 3000);
})
