function slugify(title) {
  slug = title.toLowerCase();
  slug = slug.replace(/\s+/g,'-');
  slug = slug.replace(/[^a-z0-9\-]/g,'')
  slug = slug.replace(/^-+/, '');
  slug = slug.replace(/-+$/, '');
  return slug;
}

function insert_word_count_container() {
  $('span.mceEditor').after('<div id="' + tinyMCE.activeEditor.id +
  '_wordcount" class="wordcount">0  words, 0 characters</div>');
  return true;
}

var wordcount = false;

function update_word_count(ed, e) {
  if (!wordcount) {
    wordcount = insert_word_count_container();
  }
  var text = ed.getContent().replace(/(<([^>]+)>)/g, "").replace(/s+/g, " ");
  text = $.trim(text);
  var active_ed = $('#' + tinyMCE.activeEditor.id + '_wordcount');
  var wc = text.split(' ').length;
  var cc = text.length;
  if (cc == 0) {wc = 0;}
  var w_text = (wc == 1) ? "word" : "words";
  var c_text = (cc == 1) ? "character" : "characters";
  var wc_class = (cc > 5000) ? " invalid_wc" : "";
  var wc_html = "<span class='wordcount-int'>" + wc + "</span> " + w_text + ", <span class='wordcount-int" + wc_class + "'>" + cc + "</span> " + c_text;
  active_ed.html(wc_html);
}

$(document).ready(function() {
  
  // Textarea for stories, comments, groups
  $('textarea.tinymce').tinymce({
    script_url: '/javascripts/tiny_mce/tiny_mce.js',
    theme: "advanced",
    theme_advanced_toolbar_align: "left",
    theme_advanced_toolbar_location: "top",
    mode: "exact",
    elements: "tinyman",
    skin: "default",
    preformatted: true,
    plugins: "safari,paste",
    theme_advanced_layout_manager: "SimpleLayout",
    theme_advanced_path: true,
    gecko_spellcheck: true,
    theme_advanced_buttons1: "bold,italic,underline,outdent,indent",
    theme_advanced_buttons2: "",
    theme_advanced_buttons3: "",
    paste_auto_cleanup_on_paste : true,
    cleanup: true,
    setup: function(ed) {
      ed.onKeyUp.add(update_word_count);
      ed.onPaste.add(update_word_count);
    }
  });
  
  // Twitter on news page
  if ($("#twitter-news")) {
    $(".tweet").tweet({
      username: "halfwrit",
      join_text: "auto",
      avatar_size: 0,
      count: 100,
      auto_join_text_default: "", 
      auto_join_text_ed: "we",
      auto_join_text_ing: "we were",
      auto_join_text_reply: "we replied to",
      auto_join_text_url: "we were checking out",
      loading_text: "Loading &hellip;"
    });
  }
  
  function update_chars_left(input, element, limit) {
    var chars = limit - input.val().length;
    element.html(chars);
    if (chars < 0) {
      validate(element);
    } else {
      invalidate(element);
    }
  }
  function validate(element) {
    element.removeClass('valid');
    element.addClass('invalid');
  }
  function invalidate(element) {
    element.removeClass('invalid');
    element.addClass('valid');
  }
  
  // Story URL preview and title length validation
  if ($('#story_title') && $('#story_url_slug') && $('#story_slug')) {
    $('#story_title').keyup(function() {
      var slug = slugify($(this).val());
      $('#story_url_slug').html(slug);
      $('#story_slug').val(slug);
      update_chars_left($(this), $('#story_title_chars_left'), 100);
    });
    $('#story_snippet').keyup(function() {
      update_chars_left($(this), $('#story_snippet_chars_left'), 100);
    });
  }
  
  // Group URL preview
  if ($('#group_title') && $('#group_url_slug') && $('#group_slug')) {
    $('#group_title').keyup(function() {
      var slug = slugify($(this).val());
      $('#group_url_slug').html(slug);
      $('#group_slug').val(slug);
    });
  }

  // User URL preview and login validation
  $("#user_login").keyup(function() {
    $('#user_url_preview').html($(this).val());
    if ($(this).val() == '') {
      $('#user_url_validity').html('');
    } else {
      $('#user_url_validity').html('is ...');
      $.post("/users/validate_login", {login: $(this).val()}, function(data) {
        if (data == 'available') {
          $('#user_url_preview').removeClass('invalid');
          $('#user_url_preview').addClass('valid');
          $('#user_url_validity').html('is available!');
        } else {
          $('#user_url_preview').removeClass('valid');
          $('#user_url_preview').addClass('invalid');
          if (data == 'unavailable') {
            $('#user_url_validity').html('is not available');
          } else if (data == 'invalid') {
            $('#user_url_validity').html('is invalid (4-24 characters)');
          }
        }
      });
    }
  });
  
});