// JavaScript Document

/* ==========================================================================

 概要

 . 「ColorBox」を設定したイメージに拡大鏡のイメージを重ねて配置する
 . 新着マークの表示（classを追加）

 (C)920 Lastupdate： 2009.11.24

========================================================================== */


/* ----------------------------------------------------------------------
 . イベントリスナユーティリティ
---------------------------------------------------------------------- */

// イベントリスナの登録と削除
function addListener(element, type, listener) {
  if(element.addEventListener) {
	// W3C DOMのイベントモデルを利用可能な場合
	element.addEventListener(type, listener, false);
  } else if(element.attachEvent) {
	// Internet Explorerの場合
	element.attachEvent('on' + type, listener);
  }
}

function removeListener(element, type, listener){
  if(element.removeEventListener) {
	// W3C DOMのイベントモデルを利用可能な場合
	element.removeEventListener(type, listener, false);
  } else if(element.attachEvent) {
	// Internet Explorerの場合
	element.detachEvent('on' + type, listener);
  }
}


/* ----------------------------------------------------------------------
 . class共通化イベントリスナユーティリティ
---------------------------------------------------------------------- */

 // getAttribute / setAttribute で使うclassを統一
if(document.documentElement.getAttribute("style") == document.documentElement.style) {
	var unityClass = "className";
}
else {
	var unityClass = "class";
}

/*
	classStr = ogj.getAttribute("className");	// IE7以下
	classStr = ogj.getAttribute("class");		// IE7以下以外

と、するところを

	classStr = ogj.getAttribute(unityClass);	// 共通

のように指定できる。
*/


/* ----------------------------------------------------------------------
 . ブラウザのバージョン（メジャー）判定
---------------------------------------------------------------------- */

// Internet Explorer の判定
var isMSIE = /*@cc_on!@*/false;

// バージョンの判定（全てのブラウザのメジャーバージョン）
function getBrowserVersion() { // @return Number:
	return window.opera ? (opera.version().replace(/\d$/, "") - 0) // Opera10 shock
		: parseFloat((/(?:IE |fox\/|ome\/|ion\/)(\d+\.\d)/.
			exec(navigator.userAgent) || [,0])[1]);
}


/* ----------------------------------------------------------------------
 . 「cookie」の処理
---------------------------------------------------------------------- */
// cookieの保存
function setCookie(name, value, expires, domain, path, secure) {
    var cookieStr = name + "=" + encodeURIComponent(value);
    cookieStr += expires ? " ;expires=" + expires.toGMTString() : "";
    cookieStr += domain ? " ;domain=" + domain : "";
    cookieStr += path ? " ;path=" + path : "";
    cookieStr += secure ? " ;secure" : "";
    document.cookie = cookieStr;
}

// cookieの読み込み
function getCookie(name) {
    var i, cookies, value;
    cookies = document.cookie.split("; ");
    for (i = 0; i < cookies.length; i++) {
         value = cookies[i].split("=");
         if (value[0] == name) {
             return decodeURIComponent(value[1]);
         }
    }
    return null;
}


/* ----------------------------------------------------------------------
 . 日付選択セレクトメニューの設定
---------------------------------------------------------------------- */
/*

＜(X)HTMLの設定＞

	<select name="y" id="y">
	<option value="2010">2010</option>
	</select> 年
	
	<select name="m" id="m">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
	<option value="6">6</option>
	<option value="7">7</option>
	<option value="8">8</option>
	<option value="9">9</option>
	<option value="10">10</option>
	<option value="11">11</option>
	<option value="12">12</option>
	</select> 月
	
	<select name="d" id="d">
	<option value="1">1</option>
	</select> 日

 ・ optionの値は任意（一旦削除している）
 ・ idは任意（指定品ければ、上記サンプルhtmlのidとして処理）

＜設定例＞

	$(document).ready(function(){

		$().set_date_select();

		// 各種設定をするとき
		$().set_date_select({
			year_len: 5,							// 「年」の表示数
			objYear: 'mail_reserve_y',		// 「年」セレクトメニューの「id」
			objMonth: 'mail_reserve_m',	// 「月」セレクトメニューの「id」
			objDate: 'mail_reserve_d'			// 「日」セレクトメニューの「id」
		});
	});

*/


(function() {  
		
	jQuery.fn.set_date_select = function(config){

		config = jQuery.extend({
				year_len: 3,
				objYear: 'y',
				objMonth: 'm',
				objDate: 'd'
			},config);

		var today = new Date();
		var year = today.getFullYear();
		var month = today.getMonth() + 1;
		var date = today.getDate();

		// 「年」セレクトメニューの「option」を設定
		$('#' + config.objYear).children().remove();
		for(var i=0; i<config.year_len; i++) {
			var opYear =  year + i;
			$('#' + config.objYear).append($('<option>').attr({value:opYear}).text(opYear));
		}
		$('#' + config.objMonth).val(month);	// 選択項目を指定

		// 「日」セレクトメニューの「option」を設定
		var month_len = monthLen(year,month);	// セレクトメニューで指定された年月からその月の日数を取得
		set_date(month_len, date, config.objDate);

		// セレクトメニューで「年」を変更したときセレクトメニュー「日」を更新
		$('#' + config.objYear).change(function() {
			$('#' + config.objMonth).val(1);	// セレクトメニューで「月」選択項目を指定
			var changedYear = $('#' + config.objYear).val();
			var changedMonth = $('#' + config.objMonth).val();
			var changed_month_len = monthLen(changedYear,changedMonth);
			set_date(changed_month_len, 1, config.objDate);
		});

		// セレクトメニューで「月」を変更したときセレクトメニュー「日」を更新
		$('#' + config.objMonth).change(function() {
			var changedYear = $('#' + config.objYear).val();
			var changedMonth = $('#' + config.objMonth).val();
			var changed_month_len = monthLen(changedYear,changedMonth);
			set_date(changed_month_len, 1, config.objDate);
		});

		// 指定月の日数を取得
		function monthLen(year,month){
			return new Date(year,month,0).getDate();
		}
		
		// 「日」セレクトメニューの「option」を設定
		function set_date(month_len, date, obj) {
			$('#' + obj).children().remove();
			$('#' + obj).append($('<option>').attr({value:"未定"}).text("未定"));
			for(var i=1; i <= month_len; i++) {
				$('#' + obj).append($('<option>').attr({value:i}).text(i));
			}
			$('#' + obj).val(date);	// 選択項目を指定
		}

	};
})(jQuery);


/* ----------------------------------------------------------------------
 . 入力内容を半角数値に限定
---------------------------------------------------------------------- */
/*
 ・ keyupで動作
 ・ 全角数字は、半角数値に変換
 ・ それ以外の文字種は、削除
*/

(function() {  
		
	jQuery.fn.onlyNum = function(){

		var char_zen = new Array("１","２","３","４","５","６","７","８","９","０");
		var char_han = new Array(1,2,3,4,5,6,7,8,9,0);

		var str = '';
		for ( var i = 0, len=$(this).val().length; i < len; i++ ) {
			c = $(this).val().charAt(i);
			if ( "0123456789".indexOf(c,0) >= 0 ) {
				str += c;
			}
			else if ( "０１２３４５６７８９".indexOf(c,0) >= 0 ) {
				for(var n=0; n<10; n++) {
					c = c.replace(char_zen[n], char_han[n]);
				}
				str += c;
			}
		}
		$(this).val(str);

	};
})(jQuery);




(function() {  
		
	jQuery.fn.changeTelchar = function(){

		var char_zen = new Array("１","２","３","４","５","６","７","８","９","０","－","―","‐","ー");
		var char_han = new Array(1,2,3,4,5,6,7,8,9,0,"-","-","-","-");

		var str = '';
		for ( var i = 0, len=$(this).val().length; i < len; i++ ) {
			c = $(this).val().charAt(i);
			if ( "0123456789-".indexOf(c,0) >= 0 ) {
				str += c;
			}
			else if ( "０１２３４５６７８９－―‐ー".indexOf(c,0) >= 0 ) {
				for(var n=0; n<14; n++) {
					c = c.replace(char_zen[n], char_han[n]);
				}
				str += c;
			}
		}
		$(this).val(str);

	};
})(jQuery);

/* ----------------------------------------------------------------------
 . Internet Explorer 5/5.5/6ユーザーにブラウザのアップグレードを促す
---------------------------------------------------------------------- */

// 初期設定
// ---------------------------------------------------------------------- 


// 警告の内容（html）
var noMoreIE6Html = "\
<div id=\"ie6-warning\">\
<p id=\"ie6-warning-message\">ご利用の「Internet explorer」は旧式のものです。多くのサイトを快適にご覧いただくためにアップグレードをお奨めします。</p>\
<div id=\"ie6-warning-push\">\
<p id=\"ie6-warning-push-message\"><a href=\"#\" id=\"ie6-warning-push-btn\">お奨めのブラウザ</a></p>\
<div id=\"browser-icons-container\">\
<ul id=\"browser-icons\">\
<li><a href=\"http://www.microsoft.com/downloads/details.aspx?FamilyID=341c2ad5-8c3d-4347-8c03-08cdecd8852b&amp;DisplayLang=ja\" target=\"_blank\" id=\"browser-icon-ie\">Internet Explorer</a></li>\
<li><a href=\"http://www.mozilla.jp\" target=\"_blank\" id=\"browser-icon-firefox\">Mozilla Firefox</a></li>\
<li><a href=\"http://www.apple.com/jp/safari/download/\" target=\"_blank\" id=\"browser-icon-safari\">Safari</a></li>\
<li><a href=\"http://www.google.com/chrome?hl=ja\" target=\"_blank\" id=\"browser-icon-chrome\">Google Chrome</a></li>\
</ul>\
<div id=\"browser-icons-container-close\"><a href=\"#\" id=\"browser-icons-container-close-btn\" title=\"お奨めブラウザを閉じます\">お奨めブラウザを閉じる</a></div>\
</div>\
</div>\
</div>\
<div id=\"ie6-warning-close\"><a href=\"#\" id=\"ie6-warning-close-btn\" title=\"このメッセージを閉じます\">閉じる</a></div>\
";

// ---------------------------------------------------------------------- 

function ieUpgrade(delayTime) {

	// 警告を表示している時間（秒）
	var timeOut = delayTime;

	if (typeof document.body.style.maxHeight == "undefined") {	// IE6, older browsers

		var targetNode = document.getElementsByTagName("body")[0];
		var addNode = document.createElement("div");
		addNode.id = "no_more_ie_container";

		targetNode.appendChild(addNode);
		addNode.innerHTML = noMoreIE6Html;
		startTimer();

		var timerId

		document.getElementById("ie6-warning-close-btn").onclick = function() {
			addNode.parentNode.removeChild(addNode);
			clearTimeout(timerId);
			return false;
		}

		document.getElementById("ie6-warning-push-btn").onclick = function() {
			if(document.getElementById("browser-icons-container").style.display == "block") {
				document.getElementById("browser-icons-container").style.display = "none";
				startTimer();
			}
			else {
				document.getElementById("browser-icons-container").style.display = "block";
				clearTimeout(timerId);
			}
			return false;
		}

		document.getElementById("browser-icons-container-close-btn").onclick = function() {
			document.getElementById("browser-icons-container").style.display = "none";
			startTimer();
			return false;
		}

		function startTimer() {
			timerId = setTimeout(function() {
				addNode.parentNode.removeChild(addNode);
			},5000);
		}


	} 

}


/* ----------------------------------------------------------------------
 . 「ColorBox」を設定したイメージに拡大鏡のイメージを重ねて配置する
---------------------------------------------------------------------- */

/* ----------------------------------------------------------------------

 * JQueryを使用します。
 * 「a」タグにclass「zoom」を設定します。

---------------------------------------------------------------------- */


// 初期設定
// ----------------------------------------------------------------------

//var imgFile = '/images/magnifier.gif';		// 拡大鏡のイメージファイル
//var imgFileWidth = '22px';					// 拡大鏡イメージの幅
//var imgFileHeight = '22px';					// 拡大鏡イメージの高さ
//var positionTop = '5px';					// 拡大鏡イメージの上端からの位置
//var positionLeft = '5px';					// 拡大鏡イメージの左端からの位置
//var magplus = '/images/magplus.cur';		// カーソルイメージファイル

// ----------------------------------------------------------------------

(function() {  
		
	jQuery.fn.magnifier = function(config){

		config = jQuery.extend({
				iconClass: 'zoomIcon',
				cursorClass: 'zoom'
			},config);

		this.css({ 'display':'inline-block', 'position':'relative'});
		this.addClass(config.cursorClass);
		this.prepend('<span class="' + config.iconClass + '"></span>');

	};
})(jQuery);





/* ----------------------------------------------------------------------
 . フッターナビゲーション（1段）
---------------------------------------------------------------------- */

(function() {  
		
	jQuery.fn.footerMenu = function(config){

		config = jQuery.extend({
				slideSpeed: 500,
				isSubClass: 'isSubmenu'
			},config);

		
		$(this).find(' > li').each(function(){
			if($(this).find('ul').is('ul')) {
				$(this).find(' > a').addClass(config.isSubClass);
			}
		});


//		$(this).find('li ul').css({'display': 'none'});
	
		$(this).find(' > li').hover(function() {
			$(this).find("ul").slideDown(config.slideSpeed);
		},function() {
			$(this).find("ul").slideUp(config.slideSpeed);
		});

	};
})(jQuery);







/* ----------------------------------------------------------------------
 . フィードリンクの表示
---------------------------------------------------------------------- */

// 初期設定
// ----------------------------------------------------------------------

// 説明の内容（html）
var explanationHtml = "\
<p>RSS・ATOMフィードはサイトの更新をリアルタイムに通知してくれる便利なツールです。</p>\
";

// idとして、「feed-icon」・「feed-close」・「button_feed-close」を使用しています。

// ----------------------------------------------------------------------

function feeds(targetBox, panelBox, listBox) {

	// XHTMLに指定した、idを設定
	var feedsId = targetBox;				// 全体のボックス
	var feedpanelId = panelBox;		// 表示・非表示を切り替えるボックス
	var feedlistId = listBox;		// フィードリストのボックス（リスト以外でも可）
	
	if(document.getElementById(feedsId)) {

		var feedsNode = document.getElementById(feedsId);
		var panelNode = document.getElementById(feedpanelId);
		var listNode = document.getElementById(feedlistId);
	
		panelNode.style.position = "absolute";
		panelNode.style.display = "none";
		panelNode.style.zIndex = "920";
	
		var feedIconNode = document.createElement("div");
		feedIconNode.id = "feed-icon";
		feedsNode.insertBefore(feedIconNode, panelNode);
		feedIconNode.innerHTML = "<a href=\"#\" id=\"feeds_icon\" title=\"フィードのリンクを表示します\"><span>Feeds</span></a>";
	
		feedIconNode.style.display = "inline";
	
		var closeNode = document.createElement("div");
		closeNode.id = "feed-close";
		panelNode.insertBefore(closeNode, listNode);
		closeNode.innerHTML = "<a href=\"#\" title=\"閉じる\" id=\"button_feed-close\"><span>閉じる</span></a>";
	
		document.getElementById("feeds_icon").onclick = function() {
			if(panelNode.style.display == "none") {
				panelNode.style.display = "block";
				panelNode.style.zIndex = "920";
			}
			else {
				panelNode.style.display = "none";
			}
			return false;
		}
	
		document.getElementById("button_feed-close").onclick = function() {
			panelNode.style.display = "none";
			return false;
		}

		var explanationNode = document.createElement("div");
		explanationNode.id = "feeds-explanation";
		explanationNode.innerHTML = explanationHtml;
		panelNode.appendChild(explanationNode);

	}


}


/* ----------------------------------------------------------------------
 8. 文字サイズの変更ボタンを追加する
---------------------------------------------------------------------- */

/*

＜スクリプトの概要＞

下記の内容が、初期設定「changeTarget」で指定のボックスの最後のノードとして挿入されます。
CSSで適当な場所に表示してください。
onclickイベントは、「a」に設定されます。

	<div id="size-changer">
	<ul>
	<li id="初期設定で指定のid"><a href="#" id="初期設定で指定のid_botn"><span>初期設定で指定のテキスト</span></a></li>
	<li id="初期設定で指定のid"><a href="#" id="初期設定で指定のid_botn"><span>初期設定で指定のテキスト</span></a></li>
	 ↓
	</ul>
	</div>

選択された文字サイズのボタン（li）には、初期設定「addValue」で指定のclassが設定されます。

*/


// ----------------------------------------------------------------------

function textSizeChanger(config) {

	var datas = config;

	// 連想配列（キー:id　値:フォントサイズ）
	var size = new Array();
	
	// 挿入するボタンリストのXHTMLを生成
	var buttonsHtml = "<ul class=\"clearfix\">";

	for(var btnData in datas.buttonData) {
		buttonsHtml += "<li id=\"" + datas.buttonData[btnData].buttonId + "\"><a href=\"#\" id=\"" + datas.buttonData[btnData].buttonId + "_btn\" title=\"" + datas.buttonData[btnData].buttonName + "\"><span>" + datas.buttonData[btnData].buttonName + "</span></a></li>";
	}
	buttonsHtml += "</ul>";

	// ボタンを挿入
	var changeTargetNode = document.getElementById(datas.changeTarget);
	var changerNode = document.createElement("div");
	changerNode.id = "size-changer";
	changeTargetNode.appendChild(changerNode);
	changerNode.innerHTML = buttonsHtml;

	// クッキーの値を取得
	var selectSize = getCookie("fontsize");

	// クッキーの値で文字サイズをセット
	if(selectSize) {

		for(var btnData in datas.buttonData) {
			if(datas.buttonData[btnData].buttonId == selectSize) {
				document.getElementById(datas.changeTarget).style.fontSize = datas.buttonData[btnData].textSize;
				document.getElementById(datas.buttonData[btnData].buttonId).setAttribute(unityClass, datas.addValue);
			}
		}
		
	}
	else {
		selectSize = datas.defaultButton;
		document.getElementById(datas.defaultButton).setAttribute(unityClass, datas.addValue);
	}

	// 挿入したボタンにイベントを設定
	for(var btnData in datas.buttonData) {
		size[datas.buttonData[btnData].buttonId] = datas.buttonData[btnData].textSize;
		document.getElementById(datas.buttonData[btnData].buttonId).onclick = function () {
			document.getElementById(datas.changeTarget).style.fontSize = size[this.id];
			setCookie("fontsize", this.id);
			addClass(this.id);
			return false;
		}

	}

	// 選択されたサイズのボタンにクラスをセット
	var addClass = function (id) {
	
		for(var btnData in datas.buttonData) {
			if(datas.buttonData[btnData].buttonId == id) {
				if(!document.getElementById(datas.buttonData[btnData].buttonId).getAttribute(unityClass)) {
					document.getElementById(datas.buttonData[btnData].buttonId).setAttribute(unityClass, datas.addValue);
				}
			}
			else {
				document.getElementById(datas.buttonData[btnData].buttonId).removeAttribute(unityClass);
			}
			
		}
	
	}

}


/* ----------------------------------------------------------------------
 2. 新着マークの表示（classを追加）
-------------------------------------------------------------------------

指定されたidの要素内の指定されたタグに指定形式のclassが与えられていれば、新着か判断し、新着であれば指定のclassを同要素に追加する。

	class="update__2008-01-01"


ブラウザの動作状況

	Windows
		○ Internet Explorer 5.0
		○ Internet Explorer 5.5
		○ Internet Explorer 6
		○ Internet Explorer 7
		○ Internet Explorer 8
		○ Safari 3
		○ Opera 9.27 
	Mac
		○ Safari 3
		○ Internet Explorer 5.23
		○ Opera 9.25 

---------------------------------------------------------------------- */


// 初期設定
// ----------------------------------------------------------------------

// 新着として扱う日数
var recent = 7;

// 日付データに付加する文字列
var attachedStr = "update__";		// 日付形式: 2008-01-01 例: update__2008-01-01

// 新着の情報に追加するクラスネーム
var addClass = "newItem";

// ----------------------------------------------------------------------

var currentDate = new Date().getTime();

function newMark(scopeId,targetTag) {

	if(document.getElementsByTagName) {
		
		var items = document.getElementById(scopeId).getElementsByTagName(targetTag);
		
		for(var i=0; i < items.length; i++) {

			var itemClasss = items[i].getAttribute(unityClass);
				
			if(itemClasss) {
				if(itemClasss.match(attachedStr)) {
					var itemClass = itemClasss.split(" ");
					var updateTime;
					for (j=0; j<itemClass.length; j++) {
						if(itemClass[j].match(attachedStr)) {
							updateStrs = itemClass[j].split("__");
							updateTime = updateStrs[1];
						}
					}
					var times = updateTime.split("-");
					var entryDate = new Date(times[0], times[1]-1, times[2], 0, 0, 0).getTime();
					var passDay = Math.floor((currentDate - entryDate) / (24 * 60 * 60 * 1000));
					if(recent >= passDay) {

						items[i].setAttribute(unityClass,itemClasss + " " + addClass);


					}
				}
			}

		}

	}

}


