/**
 * @fileOverview 説明会カレンダーJSファイル<br>
 * ※要prototype.js,rnmp.js
 */

/**
 * @namespace 名前空間 説明会カレンダー
 */
rnmp.setsukare = rnmp.setsukare || {};

/**
 * 設定
 * @return {Object}
 */
rnmp.setsukare.conf = {
	/**
	 * 書き出し先
	 * @return {Object}
	 */
	stage: document.getElementById('setsukare') || null,
	/**
	 * 何週分作るか
	 * @return {Number}
	 */
	weekRange: 4,
	/**
	 * id, class名に使う接頭辞
	 * @return {String}
	 */
	prefix: 'rnmp_setsukare_',
	/**
	 * iscコード
	 * @return {String}
	 */
	iscCode: '&isc=r1rm00001006'
};


/**
 * 説明会カレンダー実行トリガ関数
 * @return {void}
 */
rnmp.setsukare.init = function(){
	var setsukare = new rnmp.setsukare.Calendar();
	var setsukareEvent = new rnmp.setsukare.CalendarCellEvent();
	setsukareEvent.setEvent();
	rnmp.setsukare.conf.stage.style.display = 'block';
};

/**
 * 日付クラス
 * @class クラス 説明会カレンダー作成に必要な日付オブジェクトと、
 * それを取り扱う機能を持ちます
 * @property {Object} tempDate カレンダー構築用日付オブジェクト
 * @property {Object} todayDate ローカルの当日用日付オブジェクト
 */
rnmp.setsukare.cDate = function(){
	this.initialize.apply(this, arguments);
};
rnmp.setsukare.cDate.prototype = {
	tempDate: new Date(),
	todayDate: new Date(),
	/**
	 * コンストラクタ
	 * @return {void}
	 */
	initialize: function(){
		var tempDate = this.tempDate;
		if(tempDate.getDay() === 0){
			tempDate.setTime(tempDate.getTime() - 60 * 60 * 24 * 1000 * 6);
		}else{
			for(var i = tempDate.getDay(); i > 1; --i){
				tempDate.setTime(tempDate.getTime() - 60 * 60 * 24 * 1000);
			}
		}
		this.tempDate = tempDate;
	},
	/**
	 * tempDateを一日進める
	 * @return {void}
	 */
	stepDate: function() {
		var tempDate = this.tempDate;
		tempDate.setTime(tempDate.getTime() + 60 * 60 * 24 * 1000);
		this.tempDate = tempDate;
	},
	/**
	 * tempDateを一日戻す
	 * @return {void}
	 */
	backDate: function() {
		var tempDate = this.tempDate;
		tempDate.setTime(tempDate.getTime() - 60 * 60 * 24 * 1000);
		this.tempDate = tempDate;
	},
	/**
	 * tempDateが持つ現在の日付を8桁の文字列で返す
	 * @return {String}
	 */
	getTempDateEight: function() {
		var year = String(this.getTempYear());
		var month = String(this.getTempMonth());
		var date = String(this.getTempDate());
		if(month < 10){month = '0' + month;}
		if(date < 10){date = '0' + date;}
		return year + month + date;
	},
	/**
	 * tempDateが持つ現在の日付を6桁の数値で返す
	 * @return {Number}
	 */
	getTempDateSix: function() {
		var date = this.getTempDateEight();
		return date.substring(2,date.length);
	},
	/**
	 * ローカルの今日の日付を8桁の文字列で返す
	 * @return {String}
	 */
	getTodayDateEight: function() {
		var year = String(this.getTodayYear());
		var month = String(this.getTodayMonth());
		var date = String(this.getTodayDate());
		if(month < 10) month = '0' + month;
		if(date < 10) date = '0' + date;
		return year + month + date;
	},
	/**
	 * ローカルの今日の日付を6桁の数値で返す
	 * @return {Number}
	 */
	getTodayDateSix: function() {
		var date = this.getTodayDateEight();
		return date.substring(2, date.length);
	},
	/**
	 * tempDateを返す
	 * @return {Object}
	 */
	getTempTime: function() { return this.tempDate; },
	/**
	 * tempDateの年を返す
	 * @return {Number}
	 */
	getTempYear: function() { return this.tempDate.getFullYear(); },
	/**
	 * tempDateの月を返す
	 * @return {Number}
	 */
	getTempMonth: function() { return this.tempDate.getMonth() + 1; },
	/**
	 * tempDateの日を返す
	 * @return {Number}
	 */
	getTempDate: function() { return this.tempDate.getDate(); },
	/**
	 * todayDateを返す
	 * @return {Object}
	 */
	getTodayTime: function() { return this.todayDate; },
	/**
	 * todayDateの年を返す
	 * @return {Number}
	 */
	getTodayYear: function() { return this.todayDate.getFullYear(); },
	/**
	 * todayDateの月を返す
	 * @return {Number}
	 */
	getTodayMonth: function() { return this.todayDate.getMonth() + 1; },
	/**
	 * todayDateの日を返す
	 * @return {Number}
	 */
	getTodayDate: function() { return this.todayDate.getDate(); }
};

/**
 * カレンダークラス
 * @class 説明会カレンダーを書き出したりします<br>
 * カレンダーの各セル（td）は別クラス（calendarCell）にしました。
 * @property {Object} calendar 作成したカレンダー
 * @property {Object} date 説明会カレンダー用日付インスタンス
 */
rnmp.setsukare.Calendar = function(){
	this.initialize.apply(this, arguments);
};
rnmp.setsukare.Calendar.prototype = {
	calendar: 'undefined',
	date: 'undefined',
	/**
	 * コンストラクタ
	 * 日付インスタンスを生成してメインループへ移行します。
	 * @return {void}
	 */
	initialize: function(){
		this.date = new rnmp.setsukare.cDate();
		this.main();
	},
	/**
	 * メインループ
	 * 設定オブジェクトを読みつつ、カレンダーを構築。書き出します。
	 * ループ内のtd要素生成部分は別クラスに整理してみました。
	 * @return {void}
	 */
	main: function(){
		// 書き出し先取得
		var stage = rnmp.setsukare.conf.stage;
		// 書き出し週数取得
		var weekRange = rnmp.setsukare.conf.weekRange;
		// カレンダーtable作成
		var table = this.createTable();
		var tbody = this.createTbody();
		// 曜日行を作成して挿入
		tbody.appendChild(this.createDayRow());
		// 日付インスタンスを1日巻き戻す
		this.date.backDate();
		// カレンダー構築ループ
		for(var i=0; i<=weekRange; ++i) {
			var tr = document.createElement('tr');
			for(var j=0; j<7; ++j){
				this.date.stepDate();
				var td = new rnmp.setsukare.CalendarCell(this.date).getElement();
				tr.appendChild(td);
			}
			tbody.appendChild(tr);
		}
		// 出来たカレンダーの書き出し
		table.appendChild(tbody);
		this.calendar = table;
		stage.appendChild(table);
	},
	/**
	 * カレンダーのtable要素を作成して返す
	 * @return {void}
	 */
	createTable: function(){
		var table = document.createElement('table');
		table.id = rnmp.setsukare.conf.prefix + 'table';
		return table;
	},
	/**
	 * カレンダーのtbody要素を作成して返す
	 * @return {Object}
	 */
	createTbody: function(){
		var tbody = document.createElement('tbody');
		return tbody;
	},
	/**
	 * 曜日行のtrを作成して返す
	 * @return {Object}
	 */
	createDayRow: function() {
		var dayArray = ['月','火','水','木','金','土','日'];
		var tr = document.createElement('tr');
		tr.className = rnmp.setsukare.conf.prefix + 'day_row';
		for(var i=0; i<7; ++i){
			var th = document.createElement('th');
			if(i<5){
				th.className = rnmp.setsukare.conf.prefix + 'weekday';
			}else if(i===5){
				th.className = rnmp.setsukare.conf.prefix + 'saturday';
			}else if(i===6){
				th.className = rnmp.setsukare.conf.prefix + 'sunday';
			}
			th.appendChild(document.createTextNode(dayArray[i]));
			tr.appendChild(th);
		}
		return tr;
	},
	/**
	 * カレンダーをDOMへ挿入する
	 * @return {void}
	 * @param {Object} dom 挿入先要素
	 */
	setCalendar: function(dom){
		dom.appendChild(this.calendar);
	}
};
/**
 * カレンダーセルクラス
 * @class カレンダーのセルとなるtd要素と、それを構築するための機能を所持します
 * @property {Object} date 説カレ日付クラスのインスタンス
 * @property {Object} tooltip 説カレツールチップクラスのインスタンス
 * @property {Object} element 生成したtd要素
 * @param {Object} date 説カレ日付クラスのインスタンス。カレンダークラスから受け取る
 */
rnmp.setsukare.CalendarCell = function(date){
	this.initialize.apply(this, arguments);
};
rnmp.setsukare.CalendarCell.prototype = {
	date: 'undefined',
	element: 'undefined',
	/**
	 * コンストラクタ<br>
	 * 受け取った日付インスタンスの格納。ツールチップインスタンスの生成。<br>
	 * これらを利用してtd要素の生成を行います。
	 * @return {void}
	 * @param {Object} date 説カレ日付クラスのインスタンス
	 */
	initialize: function(date){
		this.date = date;
		this.createCell();
	},
	/**
	 * 要素生成実行
	 * @return {void}
	 */
	createCell: function(){
		this.createTd();
		this.createAnchor();
	},
	/**
	 * td要素を生成してプロパティへ格納
	 * @return {void}
	 */
	createTd: function(){
		var td = document.createElement('td');
		td.className = rnmp.setsukare.conf.prefix + 'td';
		this.element = td;
	},
	/**
	 * a要素を生成してプロパティのtd要素へappendChildする
	 * @return {void}
	 */
	createAnchor: function(id) {
		var a = document.createElement('a');
		var todaySixDigitDate = this.date.getTodayDateSix();
		var tempSixDigitDate = this.date.getTempDateSix();
		var tempMonth = this.date.getTempMonth();
		var tempDate = this.date.getTempDate();
		var dateId = rnmp.setsukare.conf.prefix + tempSixDigitDate;
		var textNode = tempMonth + '/' + tempDate;
		var date = '20' + dateId.substring(rnmp.setsukare.conf.prefix.length, dateId.length);
		var startDate = this.getStartDate(date);
		var query = ['http://job.rikunabi.com/2011/search/seminar/result/?moduleCd=3&kdb=SSA&date=',
						date,
						'&startDate=',
						startDate,
						rnmp.setsukare.conf.iscCode].join('');
		if(Number(tempSixDigitDate) < Number(todaySixDigitDate)){
			// 当日以前
			var div = document.createElement('div');
			div.className = rnmp.setsukare.conf.prefix + 'checked';
			a.appendChild(div);
			a.className = rnmp.setsukare.conf.prefix + 'backward';
			if(navigator.appName == 'Microsoft Internet Explorer'){
				var clearDiv = this.createClearDiv();
				a.appendChild(clearDiv);
			}
		}else if(Number(tempSixDigitDate) == Number(todaySixDigitDate)){
			// 当日
			a.id = dateId;
			a.className = rnmp.setsukare.conf.prefix + 'today';
			a.setAttribute('href', query);
		}else if(Number(tempSixDigitDate) > Number(todaySixDigitDate)){
			// 当日以降
			a.id = dateId;
			a.className = rnmp.setsukare.conf.prefix + 'tomorrow';
			a.setAttribute('href', query);
		}
		a.appendChild(document.createTextNode(textNode));
		this.element.appendChild(a);
	},
	/**
	 * IE用に画面崩れ防止用の要素を生成
	 * @return {Object}
	 */
	createClearDiv: function() {
		var clearDiv = document.createElement('div');
		clearDiv.style.clear = 'both';
		return clearDiv;
	},
	/**
	 * 生成したtd要素を取り出す
	 * @return {Object}
	 */
	getElement: function(){
		return this.element;
	},
	/**
	 * startDateを返す
	 * @return {String}
	 */
	getStartDate: function(date){
		var y = date.substring(0, 4);
		var m = parseInt(date.substring(4, 6), 10);
		var d = parseInt(date.substring(6, 8), 10);
		var D = new Date();
		D.setYear(y);
		D.setMonth(m-1);
		D.setDate(d);
		while (D.getDay() != 3) {
			D.setTime(D.getTime() - 60 * 60 * 24 * 1000);
		}
		var year = D.getFullYear();
		var month = rnmp.util.setDigit(D.getMonth()+1, 2);
		var date = rnmp.util.setDigit(D.getDate(), 2);
		return [year, month, date].join('');
	}
};
/**
 * カレンダーイベントクラス
 * @class カレンダーの各セル、a要素達を保持。<br>
 * それらへのイベント登録及びハンドリングを行います。
 * @property {Array} pool カレンダーのa要素の配列
 * @property {Object} tooltip ツールチップインスタンス
 */
rnmp.setsukare.CalendarCellEvent = function(){
	this.initialize.apply(this, arguments);
};
rnmp.setsukare.CalendarCellEvent.prototype = {
	pool: [],
	tooltip: 'undefined',
	/**
	 * コンストラクタ<br>
	 * カレンダー内の非イベント対象となる当日、未来の日付のa要素を集めて<br>
	 * プロパティへ格納します。
	 * @return {void}
	 */
	initialize: function(){
		var stage = rnmp.setsukare.conf.stage;
		var anchors = rnmp.util.node2Array(stage.getElementsByTagName('a'));
		for(var i=0,l=anchors.length; i<l; i++){
			if(anchors[i].className.indexOf('backward') != -1){
				anchors.splice(i, 1);
				i--;
				l--;
			}
		}
		this.pool = anchors;
	},
	/**
	 * イベントの登録<br>
	 * マウスオーバー時にツールチップを表示するイベントを登録します。
	 * @return {void}
	 */
	setEvent: function(){
		this.tooltip = new rnmp.setsukare.Tooltip();
		var pool = this.pool;
		var l = pool.length;
		for(var i=0; i<l; i++){
			Event.observe(pool[i], 'mouseover', this.onMouseOver.bind(this));
		}
	},
	/**
	 * マウスオーバー時のイベント
	 * @return {void}
	 * @param {Object} イベントオブジェクト
	 */
	onMouseOver: function(e){
		this.tooltip.showToolTip(e);
		Event.element(e).addClassName('rnmp_setsukare_onmouse');
	}
};
/**
 * ツールチップクラス
 * @class ツールチップのための要素と、それを構築するための機能を持ちます
 * @property {Object} iHash 業種コードハッシュ
 * @property {Array} iIndex 業種コードインデックス
 * @property {Object} aHash エリアハッシュ
 * @property {Array} aIndex エリアインデックス
 * @property {Object} eventTarget オンマウスイベント発生源のカレンダーセルへの参照
 * @property {Object} tooltip 作成したツールチップ
 * @property {Object} baseLayer 作成したベースレイヤー
 */
rnmp.setsukare.Tooltip = function(){
	this.initialize.apply(this, arguments);
};
rnmp.setsukare.Tooltip.prototype = {
	iHash: {
		'01': 'メーカー',
		'02': '商社',
		'03': '百貨店・ストア・専門店',
		'04': '金融・証券・保険',
		'05': '情報（通信・マスコミ）',
		'06': 'ソフトウェア・情報処理',
		'07': 'サービス'
	},
	iIndex: ['01', '02', '03', '04', '05', '06', '07'],
	aHash: {
		'01': '北海道・東北',
		'02': '関東',
		'03': '北陸・甲信越',
		'04': '東海',
		'05': '近畿',
		'06': '中国・四国',
		'07': '九州・沖縄'
	},
	aIndex: ['01', '02', '03', '04', '05', '06', '07'],
	eventTarget: 'undefined',
	tooltip: 'undefined',
	baseLayer: 'undefined',
	coverLayer: 'undefined',
	/**
	 * コンストラクタ<br>
	 * 特になにもしてません。
	 * @return {void}
	 */
	initialize: function(){},
	/**
	 * ツールチップを表示する<br>
	 * 引数にとったイベントオブジェクトを基に、各クラスメソッドへ依頼して<br>
	 * ツールチップの構築、書き出しを行います。
	 * @return {void}
	 * @param {Object} e イベントオブジェクト
	 */
	showToolTip: function(e){
		this.hideToolTip(e);
		var element = this.eventTarget = Event.element(e);
		var posX = rnmp.util.getPosX(element);
		var posY = rnmp.util.getPosY(element);
		var adjX = element.offsetWidth / 2;
		var adjY = element.offsetHeight / 2;
		var x = posX + adjX;
		var y = posY + adjY;
		var id = element.id;
		this.createBaseLayer();
		this.createToolTip(x, y, id);
		document.body.appendChild(this.baseLayer);
		this.setCoverLayer(id);
		document.body.appendChild(this.tooltip);
	},
	/**
	 * 下敷きレイヤーを作成してイベント割り当て、DOM挿入します。
	 * @return {void}
	 */
	createBaseLayer: function(){
		this.baseLayer = rnmp.util.createBaseLayer();
		Event.observe(this.baseLayer, 'mouseover', this.hideToolTip.bind(this));
	},
	/**
	 * 各メソッドに投げつつツールチップ要素をtooltipプロパティに作成します。
	 * @return {void}
	 * @param {Number} x 表示位置x座標
	 * @param {Number} y 表示位置y座標
	 * @param {String} id ツールチップid
	 */
	createToolTip: function(x,y,id){
		var div = document.createElement('div');
		var divTop = document.createElement('div');
		var divMiddle = document.createElement('div');
		var divBottom = document.createElement('div');
		var caption = this.createCaption(id);
		var nNavi = this.createNewNavigation(id);
		var iNavi = this.createIndustryNavigation(id);
		var aNavi = this.createAreaNavigation(id);
		div.id = rnmp.setsukare.conf.prefix + 'tooltip';
		divTop.className = rnmp.setsukare.conf.prefix + 'tooltip_top';
		divMiddle.className = rnmp.setsukare.conf.prefix + 'tooltip_middle';
		divBottom.className = rnmp.setsukare.conf.prefix + 'tooltip_bottom';
		divMiddle.appendChild(caption);
		divMiddle.appendChild(nNavi);
		divMiddle.appendChild(iNavi);
		divMiddle.appendChild(aNavi);
		div.appendChild(divTop);
		div.appendChild(divMiddle);
		div.appendChild(divBottom);
		div.style.left = x + 'px';
		div.style.top = y + 'px';
		this.tooltip = div;
	},
	/**
	 * キャプション部分を作成して返す。
	 * @return {Object}
	 * @param {String} id ツールチップid
	 */
	createCaption: function(id){
		var div = document.createElement('div');
		var fullDate = id.substring(rnmp.setsukare.conf.prefix.length, id.length);
		var year = fullDate.substring(0,2);
		var fullYear = '20' + year;
		var month = Number(fullDate.substring(2,4));
		var date = Number(fullDate.substring(4,6));
		var text = fullYear + '年' + month + '月' + date + '日の説明会';
		div.id = 'tooltip_caption';
		div.appendChild(document.createTextNode(text));
		return div;
	},
	/**
	 * 新着説明会リンク部分を作成して返す
	 * @return {Object}
	 * @param {String} id ツールチップid
	 */
	createNewNavigation: function(id){
		var date = '20' + id.substring(rnmp.setsukare.conf.prefix.length, id.length);
		var lastThursday = this.getLastThursdayDate();
		var localToday = rnmp.util.getStrDate();
		var startDate = this.getStartDate(date);
		var div = document.createElement('div');
		var a = document.createElement('a');
		var divText = '新着説明会から探す';
		var query = ['http://job.rikunabi.com/2011/search/seminar/result/?moduleCd=3&yyyymmdd=',
					lastThursday,
					'&kdb=SSNA&date=',
					date,
					'&startDate=',
					startDate,
					rnmp.setsukare.conf.iscCode].join('');
		div.className = 'shead';
		a.appendChild( document.createTextNode(divText) );
		div.appendChild(a);
		a.setAttribute('href', query);
		div.id='new_navigation';
		return div;
	},
	/**
	 * 業種リンク部分を作成して返す。
	 * @return {Object}
	 * @param {String} id ツールチップid
	 */
	createIndustryNavigation: function(id){
		var date = '20' + id.substring(rnmp.setsukare.conf.prefix.length, id.length);
		var startDate = this.getStartDate(date);
		var div = document.createElement('div');
		var head = document.createElement('div');
		var headText = '業種から探す';
		head.className = 'head';
		head.appendChild( document.createTextNode(headText) );
		div.appendChild(head);
		for( var i=0,len=this.iIndex.length; i < len; ++i ) {
			var a = document.createElement('a');
			var span = document.createElement('span');
			var iCode = this.iIndex[i];
			var query = ['http://job.rikunabi.com/2011/search/seminar/result/?moduleCd=3&bbc=',
						parseInt(iCode, 10),
						'&kdb=SSDA&date=',
						date,
						'&startDate=',
						startDate,
						rnmp.setsukare.conf.iscCode].join('');
			var sep = '｜';
			span.appendChild( document.createTextNode(sep) );
			span.className = 'sep';
			a.appendChild( document.createTextNode( this.iHash[ this.iIndex[i] ] ) );
			a.setAttribute('href', query);
			div.appendChild(a);
			if((i == 2) || (i == 4) ) {
				div.appendChild( document.createElement('br') );
			} else if( i != this.iIndex.length - 1 ) {
				div.appendChild(span);
			}
		}
		div.id='industry_navigation';
		return div;
	},
	/**
	 * 地域リンク部分を作成して返す。
	 * @return {String}
	 * @param {String} id ツールチップid
	 */
	createAreaNavigation: function(id){
		var date = '20' + id.substring(rnmp.setsukare.conf.prefix.length, id.length);
		var startDate = this.getStartDate(date);
		var div = document.createElement('div');
		var date = '20' + id.substring(rnmp.setsukare.conf.prefix.length, id.length);
		var head = document.createElement('div');
		var headText = '開催地から探す';
		head.className = 'head';
		head.appendChild( document.createTextNode(headText) );
		div.appendChild(head);
		for( var i=0,len=this.aIndex.length; i < len; ++i ) {
			var a = document.createElement('a');
			var span = document.createElement('span');
			var aCode = this.aIndex[i];
			var query = ['http://job.rikunabi.com/2011/search/seminar/result/?moduleCd=3&date=',
						date,
						'&startDate=',
						startDate,
						'&kdb=SSAP&placearea=',
						parseInt(aCode, 10),
						rnmp.setsukare.conf.iscCode].join('');
			var sep = '｜';
			span.appendChild( document.createTextNode(sep) );
			span.className = 'sep';
			a.appendChild( document.createTextNode( this.aHash[ this.aIndex[i] ] ) );
			a.setAttribute('href', query);
			div.appendChild(a);
			if((i == 2) || (i == 5) ) {
				div.appendChild( document.createElement('br') );
			} else if( i != this.aIndex.length - 1 ) {
				div.appendChild(span);
			}
		}
		div.id='area_navigation';
		return div;
	},
	/**
	 * startDateを返す
	 * @return {String}
	 */
	getStartDate: function(date){
		var y = date.substring(0, 4);
		var m = parseInt(date.substring(4, 6), 10);
		var d = parseInt(date.substring(6, 8), 10);
		var D = new Date();
		D.setYear(y);
		D.setMonth(m-1);
		D.setDate(d);
		while (D.getDay() != 3) {
			D.setTime(D.getTime() - 60 * 60 * 24 * 1000);
		}
		var year = D.getFullYear();
		var month = rnmp.util.setDigit(D.getMonth()+1, 2);
		var date = rnmp.util.setDigit(D.getDate(), 2);
		return [year, month, date].join('');
	},
	/**
	 * 先週木曜の日付を返す
	 * @return {String}
	 */
	getLastThursdayDate: function(){
		var D = new Date();
		while (D.getDay() != 4) {
			D.setTime(D.getTime() - 60 * 60 * 24 * 1000);
		}
		var year = D.getFullYear();
		var month = rnmp.util.setDigit(D.getMonth()+1, 2);
		var date = rnmp.util.setDigit(D.getDate(), 2);
		return [year, month, date].join('');
	},
	/**
	 * ツールチップを消す
	 * @return {void}
	 * @param {Object} e イベントオブジェクト
	 */
	hideToolTip: function(e){
		if(this.tooltip==='undefined') return;
		document.body.removeChild(this.baseLayer);
		this.remCoverLayer();
		document.body.removeChild(this.tooltip);
		this.tooltip = 'undefined';
		this.eventTarget.removeClassName('rnmp_setsukare_onmouse');
	},
	/**
	 * ベースレイヤーとツールチップの間にカバーレイヤーをセットする。<br>
	 * ベースレイヤーのオンマウス→カレンダーセルのオンマウスのイベントが連続して<br>
	 * ツールチップがちらつくのを防ぎます。
	 * @return {void}
	 */
	setCoverLayer: function(id){
		var date = '20' + id.substring(rnmp.setsukare.conf.prefix.length, id.length);
		var startDate = this.getStartDate(date);
		var e = this.eventTarget;
		var cover = document.createElement('a');
		cover.style.zIndex = '2';
		cover.style.position = 'absolute';
		cover.style.top = rnmp.util.getPosY(e) + 'px';
		cover.style.left = rnmp.util.getPosX(e) + 'px';
		cover.style.width = e.offsetWidth + 'px';
		cover.style.height = e.offsetHeight + 'px';
		cover.href = ['http://job.rikunabi.com/2011/search/seminar/result/?moduleCd=3&kdb=SSA&date=',
						date,
						'&startDate=',
						startDate,
						rnmp.setsukare.conf.iscCode].join('');
		document.body.appendChild(cover);
		this.coverLayer = cover;
	},
	/**
	 * カバーレイヤーを削除する
	 * @return {void}
	 */
	remCoverLayer: function(){
		document.body.removeChild(this.coverLayer);
		this.coverLayer = 'undefined';
	}
};

