/* IE 高速化 */
/*@cc_on
	var doc = document;
	eval('var document = doc');
@*/

/**
 * Elementを表示・非表示切り替えます。
 * Cookieに表示状態を記憶します。
 * @author me-you
 */

function setDisplayer($target_name)
{
	Displayer = new Displayer();
	Displayer.setupDisplayer( $target_name );
}

function Displayer ()
{

	/* コンストラクタ
	--------------------------------------------------------------------------------------------- */
	// 表示する文字列
	this.insert_text		 = { 1:'非表示', 2:'表示' };

	// 表示切替をするエレメントリスト
	this.target_list		 = {};

	// エレメントリストのキーリスト
	this.key_list			 = {};

	// COOCKIE配列
	this.cookie_value_list	 = {};

	/* メソッド
	--------------------------------------------------------------------------------------------- */

	// 初期設定
	this.setupDisplayer = function( $target_name )
	{

		var $is_ie = /*@cc_on!@*/false; 

		// スイッチエレメント取得します。
		if ( $target_name == undefined ) {
			$target_name = 'switch';
		}
		var $switch_element = document.getElementsByName($target_name);

		// COOKIEの情報取得します。
		var $cookie				 = document.cookie + ';';
		var $cookie_array		 = $cookie.split(';');
		for ( var $inc in $cookie_array ) {

			if ( $cookie_array[$inc] != undefined && $cookie_array[$inc] != '' ) {

				var $values = $cookie_array[$inc].split('=');
				if ( $values[1] != undefined && $values[1] != '' ) {

					$values[0] = $values[0].replace(/(^\s+)|(\s+$)/g, "");
					this.cookie_value_list[$values[0]] = $values[1];

				}

			}

		}

		// 情報の取得
		for ( var $inc1 in $switch_element ) {

			var $flag1 = false;
			if ( $is_ie ) {

				if ( $inc1 == $target_name ) {

					$flag1 = true;

				}

			} else {

				if ( !isNaN($inc1) ) {

					$flag1 = true;

				}

			}

			if ( $flag1 ) {

				var $propaty = $switch_element[$inc1];
				var $status		 = 1;
				var $target_name = '';
				if ( $propaty.tagName == 'A' ) {

					$target_name = $propaty.rel;

				} else if ( $propaty.tagName == 'INPUT' ) {

					$target_name = $propaty.alt;

				} else {

					break;

				}
				var $target_element		 = document.getElementById($target_name);

				// COOKIEの保存状態を取得します。
				var $key		 = $target_element.tagName + '_' + $target_name;
				var $save_status = this.cookie_value_list[$key];
				if ( $save_status != undefined ) {

					$status		 = $save_status;

				}

				// エレメントのスタイルを変更します。
				if ( $status == 1 ) {

					$target_element.style.display	 = this.getElementDefaultStyle( $target_element.tagName );

				} else if ( $status == 2 ) {

					$target_element.style.display	 = 'none';

				}

				// 情報の一時保存
				this.target_list[$key]								 = $target_element;
				this.key_list[$propaty.tagName + '_' + $target_name] = $key;


				var $in_text = $propaty.innerHTML.replace(/&nbsp;/g, '');
				$in_text	 = $in_text.replace(/(^\s+)|(\s+$)/g, '');
				if ( !$in_text ) {

					if ( $propaty.tagName == 'A' ) {

						$propaty.innerHTML	 = this.insert_text[$status];

					} else if ( $propaty.tagName == 'INPUT' ) {

						$propaty.value		 = this.insert_text[$status];
						$propaty.type		 = 'button';

					}

				}
				$propaty.style.display		 = 'inline';
				$propaty.style.visibility	 = 'visible';


				// イベントの登録
				$propaty.onclick = function() {

					Displayer.switchDisplay(this);

				}

			}

		}

	}

	// エレメントの初期スタイルに戻します。
	this.switchDisplay = function( $this )
	{

		var $target_name = '';
		if ( $this.tagName == 'A' ) {

			$target_name = $this.rel;

		} else if ( $this.tagName == 'INPUT' ) {

			$target_name = $this.alt;

		}

		var $element_key	 = this.key_list[$this.tagName + '_' + $target_name];
		var $target_element	 = this.target_list[$element_key];
		var $now_style		 = $target_element.style.display;
		var $status			 = '';
		if ( $now_style == 'none' ) {

			$target_element.style.display	 = this.getElementDefaultStyle( $target_element.tagName );
			$status							 = 1;

		} else {

			$target_element.style.display	 = 'none';
			$status							 = 2;

		}
		this.cookie_value_list[$element_key] = $status;


		if ( $this.tagName == 'A' ) {

			$this.innerHTML	 = this.insert_text[$status];

		} else if ( $this.tagName == 'INPUT' ) {

			$this.value		 = this.insert_text[$status];

		}

		// COOKIEへ書き込み
		var $cookei_str = '';
		for ( var $key in this.cookie_value_list ) {

			$cookei_str = $key + '=' + this.cookie_value_list[$key] + ';';

		}

		document.cookie = $cookei_str;

	}

	// エレメントの初期スタイルに戻します。
	this.getElementDefaultStyle = function( $tag_name )
	{

		var $display_array = {
							'DIV'			 : 'block'
							,'H1'			 : 'block'
							,'H2'			 : 'block'
							,'H3'			 : 'block'
							,'H4'			 : 'block'
							,'H5'			 : 'block'
							,'H6'			 : 'block'
							,'ADDRESS'		 : 'block'
							,'P'			 : 'block'
							,'BLOCKQUOTE'	 : 'block'
							,'PRE'			 : 'block'
							,'CENTER'		 : 'block'
							,'HR'			 : 'block'
							,'UL'			 : 'block'
							,'OL'			 : 'block'
							,'DL'			 : 'block'
							,'DIR'			 : 'block'
							,'MENU'			 : 'block'
							,'TABLE'		 : 'block'
							,'NOFRAMES'		 : 'block'
							,'FORM'			 : 'block'
							,'FIELDSET'		 : 'block'
							,'ISINDEX'		 : 'block'
							,'NOSCRIPT'		 : 'block'
							,'A'			 : 'inline'
							,'SPAN'			 : 'inline'
							,'BR'			 : 'inline'
							,'EM'			 : 'inline'
							,'STRONG'		 : 'inline'
							,'ABBR'			 : 'inline'
							,'ACRONYM'		 : 'inline'
							,'DFN'			 : 'inline'
							,'Q'			 : 'inline'
							,'CITE'			 : 'inline'
							,'SUP'			 : 'inline'
							,'SUB'			 : 'inline'
							,'CODE'			 : 'inline'
							,'VAR'			 : 'inline'
							,'KBD'			 : 'inline'
							,'SAMP'			 : 'inline'
							,'BDO'			 : 'inline'
							,'FONT'			 : 'inline'
							,'BASEFONT'		 : 'inline'
							,'BIG'			 : 'inline'
							,'SMALL'		 : 'inline'
							,'BLOCK'		 : 'inline'
							,'INLINE'		 : 'inline'
							,'S'			 : 'inline'
							,'STRIKE'		 : 'inline'
							,'U'			 : 'inline'
							,'TT'			 : 'inline'
							,'IMG'			 : 'inline'
							,'MAP'			 : 'inline'
							,'OBJECT'		 : 'inline'
							,'APPLET'		 : 'inline'
							,'IFRAME'		 : 'inline'
							,'INPUT'		 : 'inline'
							,'TEXTAREA'		 : 'inline'
							,'SELECT'		 : 'inline'
							,'BUTTON'		 : 'inline'
							,'LABEL'		 : 'inline'
							,'SCRIPT'		 : 'inline'
						}

		return $display_array[$tag_name];

	}
}
