// フォームのボタン連打を防ぐために、フォームで
// :onsubmit => "disableSubmits(this)" のようにして使う
function disableSubmits(form) {
  Form.getInputs(form).each(function(submit){
    if (submit.type == "submit" || submit.type == "image") {
      submit.disabled = 'disabled';
    }
  });
}

function toggle_checks(item, value) {
  state = value
  elems = document.getElementsByTagName('input');
  for (i = 0; i < elems.length; i++) {
    if (elems[i].type == 'checkbox') {
      elems[i].checked = state;
    }
  }
}

function toggle_checks_by_id(item, value, id) {
  state = value
  elems = document.getElementsByTagName('input');

  for (i = 0; i < elems.length; i++) {
    if (elems[i].type == 'checkbox' && elems[i].id  == id) {
      elems[i].checked = state;
    }
  }
}

// Firebug のコンソールに debug print する (現状では動いていない)
function printfire() {
  if (document.createEvent) {
    printfire.args = arguments;
    var ev = document.createEvent("Events");
    ev.initEvent("printfire", false, true);
    dispatchEvent(ev);
  }
}

// 一覧のなかでチェックボックスがついたものだけを処理する用
CheckList = Class.create();
CheckList.prototype = {
  initialize: function() {
    this.options = Object.extend({
      check_boxes_selector: "input.record_check",
      check_all_toggle_area: "check_all_toggle_area",
      check_all_toggle: "check_all_toggle",
      delete_button: "delete_button",
      debug: false,
      record_name: "レコード",
      record_action_message: "レコードを削除します。",
      dummy: 0
    }, arguments[0] || {})
    this.count = 0;
    this.check_boxes = $$(this.options["check_boxes_selector"]);
  },

  run: function() {
    $(this.options["check_all_toggle_area"]).toggle();
    if($(this.options["delete_button"])){ $(this.options["delete_button"]).toggle(); }

    this.check_boxes.each((function(element) {
      if (this.options["debug"]) {
        alert(element.checked);
      }
      if (element.checked) {
        this.count++;
      }
    }).bindAsEventListener(this));

    this.check_boxes.each((function(element) {
      new Form.Element.EventObserver(element, (function(elem, checked_flag) {
        if (false) {
          alert([elem.checked, checked_flag].inspect());
        }
        if (elem.checked) {
          this.count++;
        } else {
          this.count--;
        }
      }).bindAsEventListener(this));
    }).bindAsEventListener(this));

    this.check_all_toggle();
  },

  check_all_toggle: function() {
    if ($(this.options["check_all_toggle"])) {
      new Form.Element.EventObserver(this.options["check_all_toggle"], (function(element, checked_all_flag) {
        var checked = $(this.options["check_all_toggle"]).checked;
        this.check_boxes.each(function(value, index) {
          value.checked = checked;
        });
      }).bindAsEventListener(this));
    }
  },

  get_count: function() {
    count = 0;
    this.check_boxes.each(function(element) {
      if (element.checked) {
        count++;
      }
    });
    return count;
  },

  delete_link: function(func) {
    if (this.get_count() == 0) {
      alert("削除したい" + this.options["record_name"] + "にチェックを入れてください。");
    } else {
      if (confirm("" + this.get_count() + "件の" + this.options["record_action_message"] + "\nよろしいですか？")) {
        func();
      }
    }
  }
}
