/**
 * sdekisugi.js
 *
 * @author Moshimo System Team
 * @copyright Moshimo Co., Ltd.
 * @package Mds
 * @version $Id$
 */

/**
 * 超できすぎくんの既定クラス
 *
 * @author Moshimo System Team
 * @package Mds
 * @access public
 */
var Mds_SDekisugi = Class.create(
  {

    // {{{ switchArticleImage
    /**
     * 商品画像切り替え
     *
     * @param String _target_rel 切り替え対象の画像要素の rel 属性の値
     * @param Integer _number 置換する画像のインデックス
     */
    switchArticleImage: function(_target_rel, _number) {
      var article_image = $(this).up('div.d-picture').down('img[rel="' + _target_rel + '"]');
      article_image.writeAttribute(
        'src',
        article_image.readAttribute('src').sub(/\d\/([smrl]\.jpg)$/, _number + '/#{1}')
      );
    },
    // }}}

    // {{{ decode
    /**
     * 暗号化済みの配列から文字列を復元する
     *
     * @param Array _string_list 暗号化済の配列
     * @return String 複合化した数値参照文字列
     */
    decode: function(_string_list) {
      var _strings = "";
      var _strings_object = {
        _strings: _strings
      };
      $A(_string_list).each(
        function(_char_list, _char_index) {
          var _string = "&#x";
          var _char = "";
          var _char_object = {
            _char: _char,
            _char_index: _char_index
          };
          _char_list.each(
            function(_byte, _byte_index) {
              this._char += (_byte - (this._char_index % 7)).toPaddedString(2, 16).toUpperCase();
            },
            _char_object
          );
          _string += _char_object._char;
          _string += ";";
          this._strings += _string;
        },
        _strings_object
      );
      return _strings_object._strings;
    },
    // }}}

    // {{{ decodeAll
    /**
     * 全ての暗号化済み要素をデコードする
     */
    decodeAll: function() {
      $$('.dc-escaped').each(
        function(_escaped_element) {
          var _string_list = _escaped_element.readAttribute('rel').evalJSON();
          _escaped_element.update(this.decode(_string_list));
        },
        this
      );
    },
    // }}}

    // {{{ initialize
    /**
     * コンストラクタ
     */
    initialize: function() {
    }
    // }}}

  }
);

var sdekisugi = new Mds_SDekisugi;

Event.observe(
  window,
  'load',
  function() {
    sdekisugi.decodeAll.bind(sdekisugi)();
  }
);

