/*!
 * jQuery.Display
 *
 * @projectDescription Simple css-based digital-like display.
 * @author Jiri Prokop
 * @version 0.1
 *
 * @id jQuery.display
 * @id jQuery.fn.display
 * @param {Object} settings Hash of settings, nothing is required.
 * @return {jQuery} Returns the same jQuery object, for chaining.
 */

(function($) {
  var Display = function(element, options) {
    // private fields and shortcuts
    var $elem = $(element);
    var id = $elem.attr('id');
    var me = this;
    var settings = $.extend({
      digitClass: 'digit',
      digitCount: 2,
      // key-value pair: index as a key, value as a classname
      digitClasses: {}
    }, options || {});
    var $digits = {};
    
    // public methods
    this.setValue = function(index, value) {
      percVal = parseInt(value);
      if (percVal >= 0 && percVal <= 9) {
        percVal = (percVal + 1) + '0'; // produces values 10, 20, ..., 90
      } else {
        // for invalid values there will be initial background-position
        percVal = '0';
      }
      $digits[index].css('background-position', '0% ' + percVal + '%');
    }
    
    // private methods
    var initialize = function() {
      for (var i = 0; i < settings.digitCount; i++) {
        var $digit = $('<div>').addClass(settings.digitClass);
        var additionalClass = settings.digitClasses[i];

        if (typeof additionalClass !== 'undefined') {
          $digit.addClass(additionalClass);
        }
        
        $elem.append($digit);
        // cache for quick access to digits after creating (setting of value)
        $digits[i] = $digit;
      }
    };
    
    // initialize
    initialize();
  };

  $.fn.display = function(options) {
    return this.each(function() {
      var $elem = $(this);
      var key = 'display';
      var data = $elem.data(key);
      var instanceExists = false;
      
      if (typeof data !== 'undefined' && data instanceof Display) {
        instanceExists = true;
      } else if (typeof data === 'object') {
        // options from html data-element are merged together with options of plugin when initializing
        options = $.extend(data, options || {});
      }
      
      if (!instanceExists) {
        $elem.data(key, new Display(this, options));
      }
    });
  };
})(jQuery);

