$ = jQuery;
$(document).ready(function(){
  // Variables
  var number_of_posts = $('#dachat_number_of_posts').val();
  var number_of_posts_minus_one = number_of_posts - 1;
  var displayedMessages = $('.dachat_message_container').size();
  var viewCounter = 0;
  var currentView = 0;
  var nothingMore = false;
  var dachat_messages_length = $('.dachat_messages').length -1;
  var messagesHeight = $('.dachat_messages').height();
  var setting_view_older_messages = $('#dachat_setting_view_older_messages').val();
  var setting_loading = $('#dachat_setting_loading').val();
  
  // Set viewport height
  $('#dachat_messages_viewport').height(messagesHeight);
  
  // Check if there are more messages to load
  if ($('#dachat_more').length) {
    $('#dachat_load_older_messages_button').addClass('button-disabled dachat_button-disabled');
  }
  
  // New message
  $('#dachat_new_message_send').click(function() {  
    // Get values
    var message = $('#dachat_new_message_text').val();
    var current_user = $('#dachat_new_message_user').val();
    var time = $('#dachat_new_message_time').val();
    
    // Prevent someone from posting an empty message
    if (message === ''){
      return false;
    }else {
      // Send to query
      $.ajax({
        type:  'POST',
        url:   '../wp-content/plugins/dachat/message_post.php',
        data:  ({
          message:       message,
          current_user:  current_user,
          time:          time
        }),
        success: function(){
          window.location = window.location.href;
        }
      });
      return false;
    }
  });
  
  $('#dachat_load_newer_messages_button').addClass('button-disabled dachat_button-disabled');
  
  // Load newer messages
  $('#dachat_load_newer_messages_button').click(function(){
    if(currentView === 0){
      return false;
    }else {
      $('#dachat_load_older_messages_button').removeClass('button-disabled dachat_button-disabled');
      currentView--;
      
      // Get height of current view
      var currentHeight = $('#dachat_messages_viewport').outerHeight();
      
      // Get height of previous bunch of messages that we want to display (remember that currentView already had its decrement)
      var olderMessagesHeight = $('.dachat_messages').eq(currentView).outerHeight();
      
      // Animate viewport to fit last bunch of messages height
      $('#dachat_messages_viewport').animate({
        height: olderMessagesHeight
      },'slow');
      
      // Current scrolltop
      var currentScrollTop = $('#dachat_messages_viewport').scrollTop();
      
      // Scroll viewport to show new messages
      $('#dachat_messages_viewport').animate({
        scrollTop: currentScrollTop-olderMessagesHeight
      }, 'slow');
      
      // Animate viewport to fit last bunch of messages height
      $('#dachat_messages_viewport').animate({
        height: olderMessagesHeight
      },'slow');
      if (currentView === 0){
        $('#dachat_load_newer_messages_button').addClass('button-disabled dachat_button-disabled');
      }else{
        $('#dachat_load_newer_messages_button').removeClass('button-disabled dachat_button-disabled');
      }
      return true;
    }
    return false;
  });
  
  // Load older messages
  $('#dachat_load_older_messages_button').click(function(){
    displayedMessages = $('.dachat_message_container').size();
    
    // Check if there is more to get
    if (!$('#dachat_more').length) {
      $('#dachat_load_newer_messages_button').removeClass('button-disabled dachat_button-disabled');
      
      //Last message id
      var lastMessageId = $('.dachat_message_container').eq(displayedMessages-1).attr('id');
      var substrlastMessageId = lastMessageId.substr(10);
      
      // Only query new messages if currentView is the last
      if( dachat_messages_length === currentView && nothingMore === false){
        viewCounter++;
        currentView++;        
        dachat_messages_length = $('.dachat_messages').length;
        
        // Show loader
        $('#dachat_load_older_messages_button').val(setting_loading);
        $.ajax({
          type: "POST",
          url: "../wp-content/plugins/dachat/more_messages.php",
          cache: false,
          data: ({
            substrlastMessageId:  substrlastMessageId,
            number_of_posts:      number_of_posts,
            viewCounter:          viewCounter
          }),
          success: function(html){
            // Hide loader
            $('#dachat_flash').hide();
            
            // Append queried messages
            $('#dachat_messages_wrapper').append(html);
            
            // Get new height of total messages
            var messagesHeight = $('#dachat_messages_wrapper').outerHeight();
            
            // Get height of last bunch of messages
            var latestAppendedHeight = $('.dachat_messages').eq(viewCounter).outerHeight();
            // Previous messages
            var previousMessages = messagesHeight - latestAppendedHeight;
            
            // Animate viewport to fit last bunch of messages height
            $('#dachat_messages_viewport').animate({
              height: latestAppendedHeight
            },'slow');
            
            // Scroll viewport to show new messages
            $('#dachat_messages_viewport').animate({
              scrollTop: previousMessages
            }, 'slow');
            
            // Remove loading message and put the old one back
            $('#dachat_load_older_messages_button').val(setting_view_older_messages);
            
            // Check if there is something more in the database to show?
            if ($('#dachat_more').length !== 0) {
              nothingMore = true;
              $('#dachat_load_older_messages_button').addClass('button-disabled dachat_button-disabled');
            }
          }
        });
      }else if(dachat_messages_length === currentView && nothingMore === true){
        $('#dachat_load_older_messages_button').addClass('button-disabled dachat_button-disabled');
      }else {
        currentView++;
        
        // Current scrolltop
        var currentScrollTop = $('#dachat_messages_viewport').scrollTop();
        
        // Get height of current view
        var currentHeight = $('#dachat_messages_viewport').outerHeight();
        
        // Get height of next bunch of messages
        var nextMessagesHeight = $('.dachat_messages').eq(currentView).outerHeight();
        
        // Animate viewport to fit last bunch of messages height
        $('#dachat_messages_viewport').animate({
          height: nextMessagesHeight
        },'slow');
        
        // Scroll viewport to show new messages
        $('#dachat_messages_viewport').animate({
          scrollTop: currentHeight + currentScrollTop
        }, 'slow');
        
        // If there is nothing more and this is the final view. Disable the more button
        if(currentView == dachat_messages_length && nothingMore === true){
          $('#dachat_load_older_messages_button').addClass('button-disabled dachat_button-disabled');
        }
      }
      return false;
    }else if(dachat_messages_length != currentView && nothingMore === true){
      currentView++;
      
      // Current scrolltop
      currentScrollTop = $('#dachat_messages_viewport').scrollTop();
      
      // Get height of current view
      currentHeight = $('#dachat_messages_viewport').outerHeight();
      
      // Get height of next bunch of messages
      nextMessagesHeight = $('.dachat_messages').eq(currentView).outerHeight();
      
      // Animate viewport to fit last bunch of messages height
      $('#dachat_messages_viewport').animate({
        height: nextMessagesHeight
      },'slow');
      
      // Scroll viewport to show new messages
      $('#dachat_messages_viewport').animate({
        scrollTop: currentHeight + currentScrollTop
      }, 'slow');
      
      // If there is nothing more and this is the final view. Disable the more button
      if(currentView == dachat_messages_length){
        $('#dachat_load_older_messages_button').addClass('button-disabled dachat_button-disabled');
      }
      if (currentView === 0){
        $('#dachat_load_newer_messages_button').addClass('button-disabled dachat_button-disabled');
      }else{
        $('#dachat_load_newer_messages_button').removeClass('button-disabled dachat_button-disabled');
      }
    }else{
      return false;
    }
    return false;
  });
  
  // View time only on hover (sorry ie, this it not for you)
  if (!$.browser.msie){    
    $('.dachat_message_container').live('mouseover', function(){
      $(this).find('.dachat_message_time').show(); 
    }).live('mouseout', function(){
      $(this).find('.dachat_message_time').hide();
    });
  }
});