if(typeof console=="undefined")console={log:function(){},debug:function(){},info:function(){},warn:function(){},error:function(){}};

/**
 * jQuery plugin for image-button support
 *
 * @author Feedforce Inc.,
 *
 * $('selector img').buttonImageState({
 *     over    :'', //hover時のサフィックス or ファイル名
 *     down    :'', //mousedown時のサフィックス or ファイル名
 *     selected:'', //selected時のサフィックス or ファイル名
 *     selectedClassName:'chosen', 選択状態を示すクラス名
 *     filename:false, //TRUEの場合はover,down,selectedで指定したファイル名で置換される。 FALSEの場合はサフィックスを操作する。デフォルト:false （未実装）
 * })
 *
 */
(function ($) {

  var methods = {
    initialize: function (options) {
      var _options = $.extend({}, $.fn.buttonImageState.defaults, options);
      var _dataKey = 'buttonImageState';

      return this.each(function (index, item) {

        var $img = $(item);
        if (!$img.is('img')) return;

        //@note this may not work if parent elements has the same class name!
        var selected = ($img.closest('.' + _options.selectedClassName).size() > 0) ? true : false;

        //set filenames for each state.
        //when file extension cannot be recognized, then exit process. 
        var src = $img.attr('src');
        var param = '';
        if (src.indexOf('?') != -1) {
          param = src.substring(src.indexOf('?'));
          src = src.replace(param, '');
        }

        var match = /(.+)\.([^\.]+)$/.exec(src)
        if (!match) return;

        var filename = match[1];
        var ext = match[2];

        var data = {
          up: src + param,
          over: (_options.over) ? filename + _options.over + '.' + ext + param : undefined,
          down: (_options.down) ? filename + _options.down + '.' + ext + param : undefined,
          selected: (_options.selected) ? filename + _options.selected + '.' + ext + param : undefined
        };

        if (selected && data.selected) {
          $img.attr('src', data.selected);
          data.up = data.selected;
        }
        $img.data(_dataKey, data);

        //set mouse events
        $img.mouseover(function (e) {
          var $this = $(this);
          if ($this.data(_dataKey).over) $this.attr('src', $this.data(_dataKey).over);
        }).mouseout(function (e) {
          var $this = $(this);
          $this.attr('src', $this.data(_dataKey).up);
        }).mousedown(function (e) {
          var $this = $(this);
          if ($this.data(_dataKey).down) $this.attr('src', $this.data(_dataKey).down);
        });

      });
    }
  }

  $.fn.buttonImageState = function (method) {
    if (methods[method]) {
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    } else if (typeof method === 'object' || !method) {
      return methods.initialize.apply(this, arguments);
    } else {
      $.error('Method ' + method * ' does not exit on jQuery.ffSimpleButton');
    }
  };

  /**
   * default options
   * 
   * over                : suffix or filename for over event depending on suffix setting.
   * down                : suffix or filename for down event depending on suffix setting
   * selected            : suffix or filename for selected event depending on suffix setting
   * selecedClassName : class name to determine whether its selected or not.
   * suffix            : if TRUE, each state option must be a complete filename. 
   */
  $.fn.buttonImageState.defaults = {
    over: undefined,
    down: undefined,
    selected: '_s',
    selectedClassName: 'chosen',
    filename: false
  }

})(jQuery);
