﻿/*
 * link.js
 * 2006/09/12
 */

var sNameValueDefault = '学校名で検索';
var _sClass;
var cArea = '';
var cCategory = '';
var cCity = '';
var csName = '';
var map = false;
var dataCount;
var jMenu;
var jLink;
var modInfoOpen = true;
// マーク配列
aMark = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
// 高さと幅を取得
var getHeightWidth;

window.onload = function() {
/*
 * window.onload
 */

	// ブラウザ判定
	if (fBrowserCheck() == 'IE') {
		_sClass = 'className';
		getHeightWidth = getHeightWidthIE;
	}
	if (fBrowserCheck() == 'GE') {
		_sClass = 'class';
		getHeightWidth = getHeightWidthGE;
	}
	
	// 学校名で検索
	if (($F('sName') != '') && ($F('sName') != sNameValueDefault))
		$('sName').style.color = 'black';
	
	// 初期化
	$('Area').value = cArea;
	$('City').value = cCity;
	$('Category').value = cCategory;
	$('sName').value = decodeURIComponent(csName);
	if (map == 'true') {
		$('mapTrue').checked = true;
		$('mapFalse').checked = false;
	} else {
		$('mapTrue').checked = false;
		$('mapFalse').checked = true;
	}
	sNameBlur();
	sMapModeChange();
	
	if (map != 'true') return true;
	sMapResizeInterval();
	sMapLoad();
	readLinkData();
}

window.onblur = function() {
	sMapResize();
}

window.onresize = function() {
	sMapResize();
}

function fBrowserCheck() {
/*
 * ブラウザ判定
 */

	if (navigator.userAgent.match('MSIE')) return 'IE';
	if (navigator.userAgent.match('Gecko')) return 'GE';
//	if (navigator.userAgent.match('Safari')) return 'SA';
	return '';
}

function setClassName(_id, _class) {
/*
 * クラス名指定関数
 */

	$(_id).setAttribute(_sClass, _class);
}

function readLinkData() {
/*
 * リンクデータの読み込み
 */

	sMapModeChange();
	
	document.title = 'S-net/静岡県の学校 - 静岡県'
		+ $('h1Area').innerHTML + 'の'
		+ $('h1Category').innerHTML + $('h1sName').innerHTML;
	$('h1dCount').innerHTML = '';
	$('h1NaviOpt').innerHTML = '';
	$('h1NaviPrev').innerHTML = '';
	$('h1NaviNext').innerHTML = '';
	
	$('infoOpen').style.visibility = 'hidden';
	$('linkData').innerHTML = '<div id="progressBar">'
		+ '<img src="./mark/loading.gif" width="14" height="14" />処理中です...</div>';
	msec = (new Date()).getTime();
	ajaxLink = new Ajax.Request(
		'./link.inc.php',
		{
			method: 'get',
			parameters: 'map=' + map
				+ '&Area=' + cArea
				+ '&Category=' + cCategory
				+ '&City=' + cCity
				+ '&sName=' + encodeURIComponent(csName)
				+ '&cache=' + msec,
			onComplete: makeLinkLine
		}
	);
}

function makeLinkLine(obj) {
/*
 * リンクデータの組立
 */

	jMenu = '';
	_data = obj.responseText.split('\t');
	
	// 市郡メニュー
	eval('jMenu = ' + _data[0]);
	for (i = 1; i < jMenu.Area.length; i++) {
		jMenu.Area[i].City.each( function(nd) {
			setClassName('City' + nd.code, nd.css);
		});
	}
	// 御前崎市（西部）が中部からも検索できるようにする。
	if (cArea == 2) setClassName('City306', '');
	
	// リンクデータ
	eval('jLink = ' + _data[1]);
	dataCount = jLink.count;
	$('h1dCount').innerHTML = dataCount + '校';
	if (dataCount > 0) {
		ChangeDataNo(0);
	} else {
		$('linkData').innerHTML = jLink.data;
	}
	_data = '';
}

function AreaSelect(areaNo, cityNo) {
/*
 * 地域を選択
 */

	cArea = areaNo;
	$('Area').value = cArea;
	cityNo = (! cityNo) ? '' : cityNo;
	cCity = cityNo;
	$('City').value = cCity;
	
	if (map != 'true') return true;
	CssChange(areaNo, 'Area', jMenu.Area);
	if (cityNo == '') {
		$('h1Area').innerHTML = (areaNo == 0) ? '' : jMenu.Area[areaNo].name;
	} else {
		$('h1Area').innerHTML = jMenu.Area[areaNo].City[((cityNo % 100) - 1)].name;
	}
	for (i = 1; i < jMenu.Area.length; i++) {
		_class = ((cArea == '') || (cArea == i)) ? '' : 'None';
		for (j = 0; j < jMenu.Area[i].City.length; j++) {
			_city = jMenu.Area[i].City[j];
			_class = (cCity == _city.code) ? 'Select' : _class;
//			setClassName('City' + _city.code, _city.css);
			setClassName('City' + _city.code, _class);
		}
	}
	// 御前崎市（西部）が中部からも検索できるようにする。
	if (cArea == 2) setClassName('City306', '');
	readLinkData();
	return false;
}

function CitySelect(cityNo) {
/*
 * 市郡を選択
 */

	tArea = Math.floor(cityNo / 100);
	return AreaSelect(tArea, cityNo);
}

function CategorySelect(catNo, flgNoRead) {
/*
 * 校種を選択
 */

	cCategory = catNo;
	$('Category').value = cCategory;
	
	if (map != 'true') return true;
	CssChange(catNo, 'Category', jMenu.Category);
	$('h1Category').innerHTML = (catNo == '') ? '学校' : jMenu.Category[catNo];
	if (! flgNoRead) readLinkData();
	return false;
}

function ChangeDataNo(_dataNo) {
/*
 * 次の10校・前の10校
 */

	// 最終表示データ
	_dataNo = parseInt(_dataNo);
	_dataEnd = _dataNo + 10;
	_dataEnd = (_dataEnd > dataCount) ? dataCount : _dataEnd;
	if (dataCount > 10)
		$('h1dCount').innerHTML = dataCount + '校のうち' + (_dataNo + 1) + '校めから' + _dataEnd + '校め';
	_dataOptMax = Math.floor((dataCount - 1) / 10) * 10;
	
	// データの表示
	_str = '';
	viewCount = (dataCount >= 10) ? 10 : dataCount;
	for (i = _dataNo; i < _dataEnd; i++) {
		_a = '<a href="" onClick="return sMapOpenInfo(' + i + ')">';
		_sub = (jLink.data[i].info.length < 20) ? '<br />電話' : jLink.data[i].info;
		_str += _a + '<img src="./mark/li_' + aMark[i % 10] + '.png" width="24" height="34">' + '</a>'
			+ '<div id="data' + i + '">'
			+ jLink.data[i].name
			+ '<span id="info' + i + '" class="subInfo">' + _sub + '</span>'
//			+ '<div class="r">' + _a + '地図</a></div>'
			+ '</div><br />';
	}
	$('linkData').innerHTML = _str;
	
	// ナビゲーション
	if (dataCount > 10) {
		_strOpt = '<select id="SelectDataNo" name="SelectDataNo" onChange="return ChangeDataNo('
			+ "this.value" + ')">';
		for (i = 0; i <= _dataOptMax; i += 10) {
			_sel = (i == _dataNo) ? ' selected' : '';
			_strOpt += '<option value="' + i + '"' + _sel + '>' + (i + 1) + '校めから</option>';
		}
		_strOpt += '</select>';
		_strPrev = '';
		if (_dataNo >= 10) 
			_strPrev = '<a href="" onClick="return ChangeDataNo('
				+ (_dataNo - 10) + ')">前の10校</a>';
		_strNext = '';
		if (_dataEnd < dataCount) {
			_nextEnd = ((_dataEnd + 10) > dataCount) ? (dataCount - _dataEnd) : 10;
			_strNext = '<a href="" onClick="return ChangeDataNo('
				+ _dataEnd + ')">次の' + _nextEnd + '校</a>';
		}
		$('h1NaviOpt').innerHTML = _strOpt;
		$('h1NaviPrev').innerHTML = _strPrev;
		$('h1NaviNext').innerHTML = _strNext;
		if ((_dataNo >= 10) || (_dataEnd < dataCount)) {
			$('linkData').innerHTML += '<div class="fxSmall fGray" style="text-align: right">'
				+ _strPrev + '&nbsp;' + _strNext + '</div>';
		}
	}
	
	// Google Mapに吹き出し表示
	sMapSetCenter(_dataNo);
	sMapMarker(_dataNo);
	sMapOpenInfo(_dataNo);
	$('infoOpen').style.visibility = 'visible';
	
	sMapResizeInterval();
	
	return false;
}

function sNameSearch() {
/*
 * 学校名で検索
 */

	if (map != 'true') return $('sLink').submit();
	
	csName = (($F('sName') == '') || ($F('sName') == sNameValueDefault)) ? '' : $F('sName'); 
	if (csName != '') {
		$('h1sName').innerHTML = 'から「' + csName + '」を検索';
		$('h1dCount').innerHTML = '';
		$('h1NaviOpt').innerHTML = '';
		$('h1NaviPrev').innerHTML = '';
		$('h1NaviNext').innerHTML = '';
		CategorySelect('', true);
		AreaSelect('');
	}
	return false;
}

function sNameClick() {
/*
 * 検索ボックスの制御
 */

	if ($F('sName') == sNameValueDefault) {
		$('sName').style.color = 'black';
		$('sName').value = '';
	}
}

function sNameBlur() {
/*
 * 検索ボックスの制御
 */

	if (($F('sName') == sNameValueDefault) || ($F('sName') == '')) {
		$('sName').style.color = 'gray';
		$('sName').value = sNameValueDefault;
	} else {
		$('sName').style.color = 'black';
	}
}

function SearchReset() {
/*
 * 検索のリセット
 */

	$('sName').style.color = 'gray';
	$('sName').value = sNameValueDefault;
	csName = '';
	$('h1sName').innerHTML = '';
	$('h1dCount').innerHTML = '';
	$('h1NaviOpt').innerHTML = '';
	$('h1NaviPrev').innerHTML = '';
	$('h1NaviNext').innerHTML = '';
	$('Area').value = '';
	$('City').value = '';
	$('Category').value = '';
	
	if (map != 'true') $('sLink').submit();
	CategorySelect('', true);
	AreaSelect('');
}

function CssChange(cd, _target, _array) {
/*
 * CSS変更
 */

	for (i = 1; i < _array.length; i++) {
		_class = (i == cd) ? 'Select' : '';
		setClassName(_target + i, _class);
	}
}

function sMapModeChange() {
/*
 * 地図を表示するか、一覧を表示するか
 */

	map = '' + $('mapTrue').checked;
	map = (fBrowserCheck() == '') ? 'false' : map;
	
	$('sMap').style.display = (map == 'true') ? 'block' : 'none';
	$('linkData').style.width = (map == 'true') ? '235px' : '100%';
	$('mapArea').style.display = (map == 'true') ? 'block' : 'none';
	$('infoOpen').style.visibility = (map == 'true') ? 'visible' : 'hidden';
}

function getHeightWidthIE() {
/*
 * 地図を表示可能な高さ、幅を計算する(MSIE)
 */

/*	_tm = $('sMap').offsetTop;
	_td = $('linkData').offsetTop;
	_t = (_tm > _td) ? _tm : _td;
*/
	_t = $('LinkMap').offsetTop;
	h = document.documentElement.clientHeight - _t;
	if (h > 10)  h = h - 8;
	return { "h" : h, "t" : _t };
}

function getHeightWidthGE() {
/*
 * 地図を表示可能な高さ、幅を計算する(Gecko)
 */

/*	_tm = $('sMap').offsetTop;
	_td = $('linkData').offsetTop;
	_t = (_td == 0) ? _tm : _td;
*/
	_t = $('LinkMap').offsetTop;
	h = window.innerHeight - _t;
	if (h > 10)  h = h - 8;
	
	return { "h" : h, "t" : _t };
}

function fInfoOpen() {
	if (map != 'true') return false;
	
	modInfoOpen = ($('infoOpen').src.match(/i_close/)) ? false : true;
	if (modInfoOpen) {
		$('infoOpen').src = './mark/i_close.png';
		$('infoOpen').alt = 'リンク表示を閉じる';
		$('linkData').style.display = 'block';
	} else {
		$('infoOpen').src = './mark/i_open.png';
		$('infoOpen').alt = 'リンク表示を開く';
		$('linkData').style.display = 'none';
	}
	sMapResizeInterval();
	
	return false;
}

