$(document).ready(function() {

/**
* Display interactive character limit feedback for text field or text area.
* see http://ndpsoftware.com/show_char_limit.php
*/
jQuery.fn.show_char_limit = function(limit_or_opts, opts) {

  if (!opts) opts = {};

  // if provided max_length, save it
  if (typeof limit_or_opts === 'number') {
    opts['maxlength'] = limit_or_opts
  } else {
    opts = limit_or_opts || {}
  }

  var o = jQuery.extend({
    error_class: 'error',
    status_style: 'text',
    status_element_suffix: '__status'
  }, opts);

  var show_limit = function(src) {

    src = jQuery(src);

    var chars_typed = src.val().length;

    var m = src.attr('maxlength');
    if (!m || m == "" || m == -1) {
        m = o['maxlength'];
    }
    var left = m - chars_typed;

// quick, dirty hack
    if (chars_typed==0 || left<=0) {
        $('.button input').attr('disabled','disabled');
        $('.button').addClass('disabled');
    } else {
        $('.button input').removeAttr('disabled');
        $('.button').removeClass('disabled');
    }

    var msg;
    if (o.status_style == 'chars_typed') {
      msg = "" + chars_typed;
    } else if (o.status_style == 'chars_left') {
      msg = "" + left;
    } else {
       var status = (o.status_style == 'text') ? (left >= 0 ? 'left' : 'over') : 'left';
       var unit = (Math.abs(left) != 1 ? "characters" : "character");
       left = (o.status_style == 'text') ? Math.abs(left) : left
       msg = "" + left + " <span class='a11y'>" + unit + " " + status + "</span>";
    }

    var e = o.status_element ? o.status_element : ("#" + src.attr('id') + o.status_element_suffix);
    if (jQuery(e).size() == 0) {
        if (src.attr('id') == '') {
            var id = "" + Math.floor(Math.random() * 9999999999);
            src.attr('id', id);
            e = '#'+id + o.status_element_suffix;
        }
        src.after('<span class="status" id="'+src.attr('id') + o.status_element_suffix +'"></span>');
    }
    jQuery(e).html(msg);
    if (o.error_element || o.error_element_suffix) {
        var e = o.error_element ? o.error_element : ("#" + src.attr('id') + o.error_element_suffix);
        if (left < 0) {
          jQuery(e).addClass(o.error_class);
        } else {
          jQuery(e).removeClass(o.error_class);
        }
    }
  };

  return this.each(function() {
    show_limit(this);
    jQuery(this).keyup(function() {
      show_limit(this);
    });
  });
};





$('#status').show_char_limit({
    maxlength: 140,
    status_element: '.charcounter',
    status_style: 'chars_left_text'
});



});
