// YUI Character Counter
// This script creates a character counter for form elements.

// Usage:
// Define a character limit to be used for your fields.
// In init, call insert_counter('your_field_id', limit) for each field
// you want a counter for.
// This inserts a counter span into the DOM with the class
// "counter" and id "(your_field_id)_counter"

// TODO:
// Allow each field to have its own limit.

    YAHOO.util.Event.onDOMReady(init);

    // Set character limit for fields
    var limit = '300';

    function init () {
    insert_counter('comments_formId', limit);
    insert_counter('describe_unusual_formId', limit);
    }

        // Loads the counter node into the DOM
    function insert_counter (field_id, limit) {
        if (field_id) {
      var counter = document.createElement('span');
      var counter_id = field_id + '_counter';
      counter.setAttribute('id', counter_id);
      counter.setAttribute('class', 'counter');

      // Checks for YUI textarea
      var container_id = 'resize_'+field_id;
      var container = YAHOO.util.Dom.get(container_id);

      // If YUI textarea, inserts after container
      if (container) {
        YAHOO.util.Dom.insertAfter(counter, container);
      } else {
        YAHOO.util.Dom.insertAfter(counter, field_id);
      }
            // Update counter with remaining characters
            check_count(field_id, limit);

            // Check char count as user types
            YAHOO.util.Event.on(field_id, "keyup", poll_counter);
        }
    }

        function poll_counter(e) { check_count(this.id, limit); }

        // Calculate remaining characters and send to update_counter
    function check_count (field_id, limit) {
      if (field_id) {
        var field = YAHOO.util.Dom.get(field_id);
                var count = field.value.length;
        var remaining = limit - count;

        if (count > limit) {
          // Trim the input if it exceeds the limit
          field.value = field.value.substring(0, limit);
          count = limit;
          remaining = 0;
        }

        update_counter(field_id, remaining);
        return remaining;
      } else { return false; }
    }

    // Update the counter with new remaining total
    function update_counter (field_id, remaining) {
        if (field_id) {
      var counter_id = field_id + '_counter';
      var counter = YAHOO.util.Dom.get(counter_id);
            if (counter) { counter.innerHTML = remaining; }
        }
    }
