(function($){
  Drupal.thp = {
    thumbroll : {},
    originalThumbnail :{},
    thumbrollsActive  :{},
    thumbrollStart : function() {
      if(Drupal.thp.thumbroll[this.id]){
        var thumbroll = Drupal.thp.thumbroll[this.id];
        var totalThumbs = thumbroll.length;
        var i = 0;
        var $targetImage = $('img', this);
        Drupal.thp.originalThumbnail[this.id] = $targetImage.attr('src');
        var element = this;
        $targetImage.attr('height',$targetImage.height());
        $targetImage.attr('width',$targetImage.width());
        Drupal.thp.thumbrollsActive[this.id] = setInterval(function() {
          if (Drupal.thp.thumbrollsActive[element.id]) {
            $targetImage.attr('src', thumbroll[i]);
            i++;
            if (i >= totalThumbs)
              i = 0;
            var imagePreloader = new Image();
            imagePreloader.src = thumbroll[i];
          }
        }, Drupal.settings.thp.thumbrollInterval);
      }
    },
    thumbrollStop : function() {
      if(Drupal.thp.thumbroll[this.id]){
        $('img', this).attr('src', Drupal.thp.originalThumbnail[this.id]);
        clearInterval(Drupal.thp.thumbrollsActive[this.id]);
      }
    }
  },
  Drupal.behaviors.thp = {
    attach: function (context, settings){
      $('.thp-thumbnail-link:not(.hover-attached)').hover(
        Drupal.thp.thumbrollStart,
        Drupal.thp.thumbrollStop
        )
      .addClass('hover-attached');
      $('.thp-api-video:not(.click-attached)').click(function(){
        $(this).parents('form').find(':input[name=title]').val($(this).data('title'));
        $(this).parents('form').find(':input[name=remote_upload]').val($(this).data('thumbnail'));
        $(this).parents('form').find(':input[name=duration]').val($(this).data('duration'));
        $(this).parents('form').find(':input[name=thumbroll]').val($(this).data('thumbroll'));
        $(this).parents('form').find(':input[name=plug]').val($(this).data('plug'));
        $(this).parents('form').find(':input[name=embed]').val($(this).data('embed'));
        $(this).parents('form').find(':input[name=tags]').val($(this).data('tags'));
        $(this).parents('form').find(':input[name=description]').val($(this).data('description'));
        $(this).parents('.thp-api-inner-wrapper').slideUp(function(){
          $(this).remove();
        });
      }).addClass('click-attached');
    }
  }
})(jQuery);;
(function($) {
  Drupal.chatAd = {
    callback : function(message) {
      if (!message.data) {
        return;
      }
      // Each request made by the chat sends a randomly generated tab ID (tid),
      // unique to every tab, which is broadcast back in the socket message.
      // If those tid's match, it means the request originated from this tab.
      // This is done so no duplicate operations occur.
      var origin = (message.data.tid == Drupal.chatAd.tid);
      // These commands reflect user's actions, such as open (window), close,
      // activate, etc.
      switch (message.data.command) {
        case 'pong' :
          Drupal.chatAd.pong = new Date().getTime() / 1000;
          break;

        case 'message' :
          if (message.data.receiver.u == Drupal.chatAd.user.u) {
            // Received message
            message.data.message.r = true;
            // Is this a new window?
            if ($.inArray(message.data.sender.u, Drupal.chatAd.data.v) == -1) {
              // Is there an active window already or is this window already
              // open?
              if (!Drupal.chatAd.data.a && $.inArray(message.data.sender.u, Drupal.chatAd.data.v) == -1) {
                // Not among open windows and there are no open windows, open
                // and activate this one, but don't focus it
                Drupal.chatAd.openWindow(message.data.sender);
                Drupal.chatAd.command.activateWindow(message.data.sender.u);
              } else {
                // New window, open it
                Drupal.chatAd.openWindow(message.data.sender);
              }
            }
            // If this chat window is scrolled to the bottom we should scroll it
            // again after we append the message
            var scroll = Drupal.chatAd.isScrolledToBottom(message.data.sender.u);
            Drupal.chatAd.appendMessage(message.data.sender, message.data.message);
            if (scroll) {
              Drupal.chatAd.scrollToBottom(message.data.sender.u);
            }
            // The window that we appended messages to wasn't active, meaning
            // that we should notify the user of new message(s)
            if (Drupal.chatAd.data.a != message.data.sender.u) {
              Drupal.chatAd.newMessages(message.data.sender.u);
            }
            // Finally, update our local cache
            Drupal.chatAd.data.w[message.data.sender.u].m[message.data.message.i] = message.data.message;
          } else {
            // Sent message
            message.data.message.r = false;
            // Is this the tab that the user sent the message from?
            if (!origin) {
              // Message is sent from another tab, just append it in the chat
              var scroll = Drupal.chatAd.isScrolledToBottom(message.data.receiver.u);
              Drupal.chatAd.appendMessage(message.data.receiver, message.data.message);
              if (scroll) {
                Drupal.chatAd.scrollToBottom(message.data.receiver.u);
              }
            } else {
              // Message is sent from this tab, and is already in the window,
              // but without an ID, set it now
              // Modules can also alter messages, such as converting YouTube links to videos, we should alter the message at this point
              $('#chat-windows .conversation[data-uid=' + message.data.receiver.u + '] .chat-message[data-cmid=0]:first').attr('data-cmid', message.data.message.i).html(message.data.message.b);
            }
            Drupal.chatAd.data.w[message.data.receiver.u].m[message.data.message.i] = message.data.message;
          }
          break;

        case 'close' :
          if (!origin) {
            $('#chat-windows .window-toggle[data-uid=' + message.data.uid + ']').parent().remove();
            var index = $.inArray(message.data.uid, Drupal.chatAd.data.v);
            if (index != -1) {
              Drupal.chatAd.data.v.splice(index, index + 1);
            }
            if (Drupal.chatAd.data.a == message.data.uid) {
              Drupal.chatAd.data.a = 0;
            }
            delete Drupal.chatAd.data.w[message.data.uid];
          }
          break;

        case 'activate' :
          if (!origin) {
            $('#chat-windows .window-toggle').parent().removeClass('active').children('.panel').hide();
            if (message.data.uid) {
              var index = $.inArray(message.data.uid, Drupal.chatAd.data.v);
              if(index == -1) {
                Drupal.chatAd.openWindow(message.data.d);
              }
              $('#chat-windows .window-toggle[data-uid=' + message.data.uid + ']').parent().addClass('active').children('.panel').show().find('.message-text')
              .focus();
              Drupal.chatAd.scrollToBottom(message.data.uid);
              Drupal.chatAd.noNewMessages(message.data.uid);
            }
            Drupal.chatAd.data.a = message.data.uid;
          }
          break;
      }
    }
  };

  Drupal.behaviors.chatAd = {
    attach : function(context, settings) {
      if (!Drupal.chatAd.data && settings.chatAd.enabled) {
        Drupal.chatAd.load({
          u:0,
          n:'Ti',
          p:'https://lh4.googleusercontent.com/-fZJbtjS19cQ/AAAAAAAAAAI/AAAAAAAAAAA/AYndNf_ERFU/photo.jpg',
          o:{},
          v:[],
          a:0,
          w:{}
        });
        Drupal.chatAd.loadMessages(settings.chatAd.messages);
      }
    }
  };
  
  Drupal.chatAd.loadMessages = function(messages) {
    for(var i in messages) {
      for(var j in messages[i].m) {
        //console.log("{\"data\":{\"tid\":0,\"command\":\"message\",\"message\":{\"b\":\""+messages[i].m[j].b+"\",\"i\":0,\"t\":new Date().getTime()},\"receiver\":{\"u\":0},\"sender\":{\"u\":"+messages[i].u+",\"p\":\""+messages[i].p+"\",\"n\":\""+messages[i].n+"\"}}}");
        setTimeout("Drupal.chatAd.callback({\"data\":{\"tid\":0,\"command\":\"message\",\"message\":{\"b\":\""+messages[i].m[j].b.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0')+"\",\"i\":0,\"t\":"+new Date().getTime()/1000+"},\"receiver\":{\"u\":0},\"sender\":{\"u\":"+messages[i].u+",\"p\":\""+messages[i].p.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0')+"\",\"n\":\""+messages[i].n.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0')+"\"}}})",messages[i].m[j].t)
      }
    }
  }

  Drupal.chatAd.newMessages = function(uid) {
    if (Drupal.chatAd.data.a != uid) {
      $('#chat-windows .window-toggle[data-uid=' + uid + ']').parent().addClass('new-messages');
    }
  };

  Drupal.chatAd.noNewMessages = function(uid) {
    $('#chat-windows .window-toggle[data-uid=' + uid + ']').parent().removeClass('new-messages');
  };

  Drupal.chatAd.escape = function(text) {
    return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
  };

  Drupal.chatAd.generateTid = function() {
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var tidLength = 12;
    var tid = '';
    for ( var i = 0; i < tidLength; i++) {
      var rnum = Math.floor(Math.random() * chars.length);
      tid += chars.substring(rnum, rnum + 1);
    }
    return tid;
  };

  Drupal.chatAd.compileTpl = function(html, variables) {
    for ( var i in variables) {
      html = html.replace(new RegExp('\\$\{' + i + '\}', 'gm'), variables[i]);
    }
    return html;
  };

  Drupal.chatAd.load = function(data) {
    // Store global data object that should be preserved across pages
    Drupal.chatAd.tid = Drupal.chatAd.generateTid();
    Drupal.chatAd.data = data;
    Drupal.chatAd.data.a = parseInt(Drupal.chatAd.data.a);
    Drupal.chatAd.local = {};
    Drupal.chatAd.user = {
      u : data.u,
      n : data.n,
      p : data.p
    };
    // This variable stores our javascript templates
    var tpl = Drupal.settings.chatAd.tpl;
    // First generate the status block
    var onlineUsersHtml = '';

    // Iterate through all online users
    var countUsers = 0;
    for ( var i in data.o) {
      var onlineUser = data.o[i];
      // n:name, s:status, p:picture, u:uid
      var userData = {
        uid : onlineUser.u,
        name : onlineUser.n,
        status : onlineUser.s,
        picture : onlineUser.p
      };
      onlineUsersHtml += Drupal.chatAd.compileTpl(tpl.user, userData);
      countUsers++;
    }
    var onlineUsersData = {
      users : onlineUsersHtml,
      count : countUsers
    };
    onlineUsersHtml = Drupal.chatAd.compileTpl(tpl.status, onlineUsersData);
    $('#chat-status').append(onlineUsersHtml);

    // data.v is an array that stores all open window's uid's in user's session
    // Iterate through all open chat windows
    for ( var i in data.v) {
      var uid = data.v[i];
      // This is the chat window we're currently working with
      var chatWindow = data.w[uid];
      // This variable should store the last message displayed in this chat
      // window
      Drupal.chatAd.local[uid] = {};
      Drupal.chatAd.local[uid].last = false;
      // User's chat partner in this window
      var partner = chatWindow.d;
      // Insert our chat window in DOM at this point
      var chatWindowHtml = Drupal.chatAd.generateWindow(partner);
      $('#chat-windows').prepend(chatWindowHtml);
      // Variable that should store all chat messages betwen the two users
      var chatWindowMessageHtml = '';
      for ( var j in chatWindow.m) {
        // Iterate through all messages in this window
        var message = chatWindow.m[j];
        Drupal.chatAd.appendMessage(partner, message);
      }
      if (chatWindow.e) {
        Drupal.chatAd.newMessages(uid);
      }
    }

    if (data.a) {
      $('#chat-windows .window-toggle[data-uid=' + data.a + ']').parent().addClass('active').children('.panel').show().find('.message-text').focus();
      // Scroll this chat window to bottom
      Drupal.chatAd.scrollToBottom(data.a);
    }
  };

  Drupal.chatAd.command = {};

  Drupal.chatAd.isScrolledToBottom = function(uid) {
    if (Drupal.chatAd.data.a != uid) {
      return false;
    }
    var convo = $('#chat-windows .body[data-uid=' + uid + ']');
    var scrolled = (convo.attr('scrollHeight') - convo.scrollTop()) == convo.height();
    return scrolled;
  };

  Drupal.chatAd.scrollToBottom = function(uid) {
    // Scroll this chat window to bottom
    var convo = $('#chat-windows .body[data-uid=' + uid + ']');
    convo.scrollTop(convo.attr('scrollHeight') - convo.height());
  };

  Drupal.chatAd.command.sendMessage = function(uid, messageText) {
    var appendText = '';
    if(Drupal.settings.chatAd.append.length) {
      var appendText = '<br /><span class="chat-offline">'+Drupal.settings.chatAd.append+'</span>'
    }
    var sendData = {
      uid : uid,
      message : messageText,
      tid : Drupal.chatAd.tid
    };
    var message = {
      i : 0,
      t : new Date().getTime() / 1000,
      b : Drupal.chatAd.escape(messageText)+appendText,
      r : false
    };
    var scroll = Drupal.chatAd.isScrolledToBottom(uid);
    Drupal.chatAd.appendMessage(Drupal.chatAd.data.w[uid].d, message);
    if (scroll) {
      Drupal.chatAd.scrollToBottom(uid);
    }
  //$.post(Drupal.settings.basePath + 'chat/send', sendData);
  };

  Drupal.chatAd.openWindow = function(partner) {
    var chatWindow = Drupal.chatAd.data.w[partner.u];
    if (!chatWindow) {
      Drupal.chatAd.local[partner.u] = {};
      Drupal.chatAd.local[partner.u].last = false;
      Drupal.chatAd.data.v.push(parseInt(partner.u));
      Drupal.chatAd.data.w[partner.u] = {
        d : partner,
        m : {}
      };
      var chatWindowHtml = Drupal.chatAd.generateWindow(partner);
      $('#chat-windows').prepend(chatWindowHtml);
    }
  };

  Drupal.chatAd.appendMessage = function(partner, message) {
    var messageTime = new Date();
    messageTime.setTime((parseInt(message.t)/*
 * +
 * Drupal.settings.chatAd.timezoneOffset
 */) * 1000);
    var monthNamesShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var messageData = {
      uid : message.r ? partner.u : Drupal.chatAd.user.u,
      cmid : message.i,
      name : message.r ? partner.n : Drupal.chatAd.user.n,
      picture : message.r ? partner.p : Drupal.chatAd.user.p,
      body : message.b,
      time : +messageTime.getDate() + '. ' + monthNamesShort[messageTime.getMonth()] + ' \'' + String(messageTime.getFullYear()).substring(2, 4) + '. @ ' + messageTime
      .getHours() + ':' + messageTime.getMinutes()
    };
    var messageHtml = '';
    if (!Drupal.chatAd.local[partner.u].last || Drupal.chatAd.local[partner.u].last.r != message.r) {
      // First message in this chat window or from a different sender, load
      // new message container
      messageHtml = Drupal.chatAd.compileTpl(Drupal.settings.chatAd.tpl.messages, messageData);
      $('#chat-windows .conversation[data-uid=' + partner.u + ']').append(messageHtml);
    }else {
      // This message is from the same sender, group it with previous
      // message batch
      messageHtml = Drupal.chatAd.compileTpl(Drupal.settings.chatAd.tpl.message, messageData);
      $('#chat-windows .conversation[data-uid=' + partner.u + '] .chat-messages:last').append(messageHtml);
    }
    // Store this message as the last message in this window for later use by
    // other chat functions
    Drupal.chatAd.local[partner.u].last = message;
  };

  Drupal.chatAd.command.activateWindow = function(uid) {
    if (Drupal.chatAd.data.w[uid]) {
      if (Drupal.chatAd.data.a != uid) {
        $('#chat-windows .window-toggle[data-uid!=' + uid + ']').parent().removeClass('active').children('.panel').hide();
        $('#chat-windows .window-toggle[data-uid=' + uid + ']').parent().addClass('active').children('.panel').show();
        Drupal.chatAd.noNewMessages(uid);
        Drupal.chatAd.data.a = uid;
        Drupal.chatAd.scrollToBottom(uid);
        var sendData = {
          uid : uid,
          tid : Drupal.chatAd.tid
        };
      //$.post(Drupal.settings.basePath + 'chat/activate', sendData);
      }
      $('#chat textarea[data-uid=' + uid + ']').focus();
    }
  };

  Drupal.chatAd.command.deactivateWindow = function() {
    if (Drupal.chatAd.data.a) {
      $('#chat-windows .window-toggle').parent().removeClass('active').children('.panel').hide();
      Drupal.chatAd.data.a = 0;
      var sendData = {
        uid : 0,
        tid : Drupal.chatAd.tid
      };
    //$.post(Drupal.settings.basePath + 'chat/activate', sendData);
    }
  };

  Drupal.chatAd.command.closeWindow = function(uid) {
    $.cookie('chatadclosed',1);
    if (Drupal.chatAd.data.a == uid) {
      Drupal.chatAd.data.a = 0;
    }
    var sendData = {
      uid : uid,
      tid : Drupal.chatAd.tid
    };
    //$.post(Drupal.settings.basePath + 'chat/close', sendData);
    delete Drupal.chatAd.local[uid];
    var index = $.inArray(uid, Drupal.chatAd.data.v);
    if (index != -1) {
      Drupal.chatAd.data.v.splice(index, index + 1);
    }
    delete Drupal.chatAd.data.w[uid];
    $('#chat-windows .window-toggle[data-uid=' + uid + ']').parent().remove();
  };

  Drupal.chatAd.generateWindow = function(user, messages) {
    var chatWindowHtml = '';
    messages = messages ? messages : '';
    var chatWindowData = {
      uid : user.u,
      label : user.n,
      picture : user.p,
      name : user.n,
      messages : messages
    };
    return Drupal.chatAd.compileTpl(Drupal.settings.chatAd.tpl.window, chatWindowData);
  };

  $('#chat .window-toggle').live('click', function() {
    if ($(this).parent().hasClass('active')) {
      if (!$(this).parent('#chat-status').length) {
        // Chat window has closed
        Drupal.chatAd.command.deactivateWindow();
      } else {
        $(this).parent().removeClass('active').children('.panel').hide();
      }
    }
    else {
      if (!$(this).parent('#chat-status').length) {
        // Chat window has opened
        var uid = $(this).data('uid');
        Drupal.chatAd.command.activateWindow(uid);
      } else {
        $(this).parent().addClass('active').children('.panel').show();
      }
    }
    return false;
  });

  $('.chat-user').live('click', function() {
    var uid = $(this).data('uid');
    if ($.inArray(uid, Drupal.chatAd.data.v) == -1) {
      var partner = {
        u : uid,
        n : $(this).data('name'),
        p : $(this).data('picture')

      };
      Drupal.chatAd.openWindow(partner);
    }
    Drupal.chatAd.command.activateWindow(uid);
    return false;
  });

  $('#chat .minimize').live('click', function(e) {
    if (e.srcElement.className.indexOf('minimize') > -1) {
      if ($(this).data('uid')) {
        Drupal.chatAd.command.deactivateWindow();
      } else {
        $('#chat-status').removeClass('active').children('.panel').hide();
      }
    }
  });

  $('#chat-windows .close').live('click', function() {
    var uid = $(this).data('uid');
    Drupal.chatAd.command.closeWindow(uid);
  });

  $('#chat-windows .body').live('click', function() {
    Drupal.chatAd.command.activateWindow($(this).data('uid'));
  });

  $('#chat-windows .message-text')
  .live('keyup', function() {
    var cloneId = 'clone-' + $(this).data('uid');
    var $clone = $('#' + cloneId);
    if (!$clone.length) {
      $clone = $('<div />').attr('id', cloneId).addClass('message-text').css({
        maxHeight : 'none',
        position : 'absolute',
        wordWrap : 'break-word',
        height : 'auto',
        display : 'none'
      });
      $(this).parent().prepend($clone);
    }
    $clone
    .html($(this).val().replace(/&/g, '&amp;').replace(/ {2}/g, ' &nbsp;').replace(/<|>/g, '&gt;').replace(/\n/g, '<br />') + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
    $(this).css('height', $clone.height());
  });

  $('#chat .message-input textarea').live('keydown', function(e) {
    if (e.keyCode == 13) {
      Drupal.chatAd.command.sendMessage($(this).data('uid'), $(this).val());
      $(this).val('');
      return false;
    }
  });
})(jQuery, Drupal.Nodejs);
;

