try { // IE6の背景画像キャッシュを有効にする
  document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}

// チェックボックスの親子連動用
$$('.tree_script').invoke('observe', 'click', tree_script);
//$$('.scroll_button').invoke('observe', 'click', scroll_button);
$$('.scroll_button').invoke('observe', 'mousedown', scrollStart);
$$('.scroll_button').invoke('observe', 'mouseup', scrollExit);
$$('.scroll_button').invoke('observe', 'mouseout', scrollExit);

//----------------------------------------------------------------------------
// ツリー展開処理 および チェックボックス連動
function tree_script(e)
{
  var elem = Event.element(e);

  if (elem.tagName == 'LABEL') return;

// inputタグを特定
  var elem_cb = (elem.tagName == 'INPUT') 
              ? elem 
              : elem.ancestors().detect(function(v) { return v.hasClassName('tree_script') || (v.tagName == 'INPUT') } )
              ;
  if (elem_cb.hasClassName('tree_script'))
    elem_cb = null;

// 展開・収縮用タグを特定
  var elem_btn = (elem.hasClassName('shrink')
               || elem.hasClassName('expand')
               || elem.hasClassName('nochild'))
               ? elem 
               : elem.ancestors().detect(function(v) { return v.hasClassName('tree_script') || v.hasClassName('shrink') || v.hasClassName('expand') || v.hasClassName('nochild') } )
               ;
  if (elem_btn.hasClassName('tree_script'))
    elem_btn = null;

// どちらのタグも見つからない場合は終了
  if ((elem_cb == null) && (elem_btn == null))  return;

// クリックされたツリーを構成しているliタグを特定
  var elem_li = elem.ancestors().detect(function(v) { return v.hasClassName('tree_script') || (v.tagName == 'LI'); } );
  if ((!elem_li) || (elem_li.tagName != 'LI')) return;

  var expand = null;

  if (elem_cb == null) {  // チェックボックス部が見つからない場合
// 展開タグの状態を判定
    expand = elem_btn.hasClassName('shrink') ? true
           : (elem_btn.hasClassName('expand') ? false
           : null);
  } else {
// 子階層のチェックボックス全連動
    Selector.findChildElements(elem_li, ['input']).each(function(v) { v.checked = elem_cb.checked } ) ;

    if (elem_cb.checked) {
// チェック時は、子階層の展開を行う
      expand = true;
    } else {
// チェック解除時は、親階層のチェックボックスを連動して解除させる
// 解除時のみ親階層のチェックボックス全連動
      elem_li.ancestors().detect(function(v) {

// sync_checkクラスまで上流に辿り着いたら終了
        if (v.hasClassName('tree_script')) {
          return true;
        }
        if (v.tagName == 'UL') {

// ulタグの兄弟要素およびその子孫に対し、inputのチェック状態を全て連動
          v.previousSiblings().each(function(w) {
            if (w.tagName == 'input') {
              w.checked = elem_cb.checked;
            } else {
              Selector.findChildElements(w, ['input']).each(function(x) { x.checked = elem_cb.checked} ) ;
            }
          } );
        }
        return false;
      } );
    }
  }

// 展開処理のタグがあれば展開実行
  if (elem_btn && expand != null) {
// 展開対象のツリーを取得
    var elem_ul = elem_li.descendants().detect(function(v) { return (v.tagName == 'UL'); } );
    if (elem_ul == null) return;

    if (expand) {
      elem_btn.addClassName('expand');
      elem_btn.removeClassName('shrink');
      elem_ul.show();
    } else {
      elem_btn.addClassName('shrink');
      elem_btn.removeClassName('expand');
      elem_ul.hide();
    }
  }
  return;
}
//----------------------------------------------------------------------------
// スクロールボタン
function scroll_button(e)
{
  var elem_btn = Event.element(e);
  var updown = Event.element(e).hasClassName('scroll_up') ? - 50
             : (Event.element(e).hasClassName('scroll_down') ? 50
             : 0);
  if (updown == 0) {
    return false;
  }
  Event.stop(e);
// スクロール外枠を検索
  var elem_outer = elem_btn.ancestors().detect(function(v) { return v.hasClassName('scroll_outer'); } );
  if (elem_outer) {
// スクロール内枠をスクロールさせる
    elem_outer.immediateDescendants().detect(function(v) { 
      if (!v.hasClassName('scroll_inner')) return false;
      v.scrollTop = v.scrollTop + updown;
      return true;
    } ) ;
  }
  return false;
}
//----------------------------------------------------------------------------
// 2009/06/22　スクロールの動きの追加　=川勝＠アドバン=

	// 使用するグローバル変数
	var scrltargetObj = null;	// スクロールボタンの上でクリックした場合、この変数に対象となるscroll_outerオブジェクトを格納する。
	var scrlupdown = 0;			// クリックしたスクロールボタンによって変化する移動値。
	
	// スクロールボタンのマウスダウンイベント
	function scrollStart(e)
	{
		var elm_btn = Event.element(e);
		scrltargetObj = elm_btn.ancestors().detect(function(v) { return v.hasClassName('scroll_outer'); } );
		scrlupdown = Event.element(e).hasClassName('scroll_up') ? - 50
             : (Event.element(e).hasClassName('scroll_down') ? 50
             : 0);
		scrollin(e);
	}
	
	// スクロールボタンのマウスアップイベント
	function scrollExit()
	{
		scrltargetObj = null;
		scrlupdown = 0;
	}
	
	// スクローリングスクリプト
	function scrollin(e)
	{
		if(scrltargetObj == null || scrlupdown == 0)
		{
			return false;
		}
		scrltargetObj.immediateDescendants().detect(function(v) { 
		  if (!v.hasClassName('scroll_inner')) return false;
		  v.scrollTop = v.scrollTop + scrlupdown;
		  setTimeout(scrollin,100,e);
		  return true;
		} ) ;
		
	}		

//----------------------------------------------------------------------------
