// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

Lingr = {};

// Dummy console logger for production use
if(typeof console === "undefined") {
  console = { log: function() {} };
}

function highlight(elem, options) {
  var target = $(elem);
  new Effect.Highlight(target, Object.extend({ duration: 0.5,
    afterFinish: function() { target.setStyle({backgroundColor:null, backgroundImage:null}); }}, options));
}

//+ Carlos R. L. Rodrigues
//@ http://jsfromhell.com/array/diff [rev. #1]

function arrayDiff(v, c, m){
    var d = [], e = -1, h, i, j, k;
    for(i = c.length, k = v.length; i--;){
        for(j = k; j && (h = c[i] !== v[--j]););
        h && (d[++e] = m ? i : c[i]);
    }
    return d;
}


// ID and Class

function idFor(id, prefix) { 
  return (prefix ? (prefix + '-') : '') + id;
}

function extractId(elem, prefix) {
  if (typeof(elem) == "string") {
    return elem.slice(elem.indexOf('-') + 1);
  } else {
    if (prefix) {
      var cn = $w(elem.className).detect(function(c) { return c.startsWith(prefix + '-'); });
      return cn ? extractId(cn) : null;
    } else {
      return elem.id.slice(elem.id.indexOf('-') + 1);
    }
  }
}


// Messages

function showMessageHighlight(event) {
  event.stop();
  Event.element(event).up('.message').addClassName('highlight');
}

function hideMessageHighlight(event) {
  event.stop();
  Event.element(event).up('.message').removeClassName('highlight');
}

function toggleMessageDetail(event) {
  event.stop();
  
  var message = Event.element(event).up('.message');
  message.addClassName('stickyHighlight');
  
  // Close if already expanded
  var e = $('message_detail');
  if (e) {
    new Effect.BlindUp(e, { duration: 0.2, afterFinish: function() { e.remove(); } });
    
    // Return if toggled
    if (e.up('.message') == message) {
      message.removeClassName('stickyHighlight');
      return false;
    } else {
      e.up('.message').removeClassName('stickyHighlight');
    }
  }
  
  var div = new Element('div', { id: 'message_detail' })
  div.hide();
  div.innerHTML = $('template_permalink').innerHTML.interpolate({
    permalink_url: message.down('.permalink a').href,
    message_id: extractId(message),
    room_id: extractId(message.up('.messages'), 'room') });
  message.appendChild(div);
  
  new Effect.BlindDown(div, { duration: 0.2, afterFinish: function() { Field.activate(div.down('input')); } });
}

function deleteMessage(msgId, roomId) {
  if (confirm('Do you really want to delete this message?')) {
    new Ajax.Request('/room/' + roomId + '/delete_message/' + msgId,
      { onSuccess: function() {
          var target = $('message-' + msgId);
          
          // Handle consecution
          var next = target.next();
          if (!target.hasClassName('consecutive') && next.hasClassName('consecutive')) {
            next.removeClassName('consecutive');
          }
          
          new Effect.BlindUp($('message-' + msgId), { duration: 0.2 });
        }
      }
    );
  }
}

function reportBrokenPicture(username) {
  new Ajax.Request('/user/report_broken_picture/' + username.replace(/\./,'%2E'), { asynchronous: false });
}
