/*******************************************************************
 * 設定
 *******************************************************************/
var Conf = {
	// Google Map 画像情報
	gmapMarkerIcons : {
		centerMark: {
			icon : {
				url        :  '../images/map_centerMark.png',
				size       : {width:41, height:41},
				anchor     : {x:20, y:20}
			}
		},
		pointer: {
			icon : {
				url        :  '../images/pointer.gif',
				size       : {width:22, height:30},
				anchor     : {x:11, y:30}
			}
		},
		defaultIcon: {
			icon : {
				url        :  '../images/map_point1.png',
				size       : {width:22, height:30},
				anchor     : {x:11, y:30}
			},
			shadow : {
				url        :  '../images/map_pointshadow.png',
				size       : {width:20, height:11},
				anchor     : {x:4, y:9}
			}
		}
	},
	hotspotMarker : {
		icon : {
			url        :  '../images/marker',
			size       : {width:22, height:30},
			anchor     : {x:11, y:30}
		},
		shadow : {
			url        :  '../images/map_pointshadow.png',
			size       : {width:20, height:11},
			anchor     : {x:4, y:9}
		}
	},
	images : {
		loading : {
			url : '../images/loading.gif',
			size: {width:32, height:32}
		}
	},
	minViewWidthForSideNavi : 1000 // サイドナビ表示の最小ブラウザ幅
};
/*******************************************************************
 * 共通関数
 *******************************************************************/
/* Googlemapマーカー画像インスタンスを作成 */
function createGmapMarkerImage(key, type/*'icon'or'shadow'*/) {
	if(!Conf.gmapMarkerIcons[key] || !Conf.gmapMarkerIcons[key][type]) {
		key = 'defaultIcon';
		if(!Conf.gmapMarkerIcons[key] || !Conf.gmapMarkerIcons[key][type]) {
			return null;
		}
	}
	imgConf = Conf.gmapMarkerIcons[key][type];
	var img = new google.maps.MarkerImage(
		Conf._p(imgConf.url),
		imgConf.size  ?(new google.maps.Size(imgConf.size.width, imgConf.size.height)):null,
		imgConf.origin?(new google.maps.Point(imgConf.origin.x, imgConf.origin.y)):null,
		imgConf.anchor?(new google.maps.Point(imgConf.anchor.x, imgConf.anchor.y)):null
	);
	return img;
}
function createHotspotMarker(term, type/*'icon'or'shadow'*/) {
	if(!term || term == '') return createGmapMarkerImage('', type);
	
	var imgConf = Conf.hotspotMarker[type];
	var url = Conf._p(imgConf.url);
	if(type == 'icon') url += '/' + term + '.png';
	var img = new google.maps.MarkerImage(
		url,
		imgConf.size  ?(new google.maps.Size(imgConf.size.width, imgConf.size.height)):null,
		imgConf.origin?(new google.maps.Point(imgConf.origin.x, imgConf.origin.y)):null,
		imgConf.anchor?(new google.maps.Point(imgConf.anchor.x, imgConf.anchor.y)):null
	);
	return img;
}
Conf.onload = function() {
	// テキストエリアの入力制限
	var textareaMaxLength = function(){
		var max = $(this).readAttribute('maxlength');
		if($(this).value.length > max){
			$(this).value = $(this).value.substring(0, max);
		}
	}
	$$('textarea[maxlength]').each(function(e){
		e.observe('keydown', textareaMaxLength);
		e.observe('keyup', textareaMaxLength);
		e.observe('click', textareaMaxLength);
	});
	// サイドナビ表示/非表示
	//sideNavi
	var sideNavi           = $('sideNavi');
	var twitterFollowBadge = $('twitterFollowBadge');
	if(sideNavi) {
		var sideNaviVisibility = function() {
			if(document.viewport.getWidth() < Conf.minViewWidthForSideNavi) {
// 				if(sideNavi) sideNavi.setOpacity(0.3);
// 				if(twitterFollowBadge) twitterFollowBadge.setOpacity(0.3);
				if(sideNavi) sideNavi.hide();
				if(twitterFollowBadge)twitterFollowBadge.hide();
			}
			else {
// 				if(sideNavi) sideNavi.setOpacity(1.0);
// 				if(twitterFollowBadge) twitterFollowBadge.setOpacity(1.0);
				if(sideNavi)sideNavi.show();
				if(twitterFollowBadge)twitterFollowBadge.show();
			}
		}
		Event.observe(window, "resize", sideNaviVisibility);
		sideNaviVisibility();
	}
}
/* 初期化 */
Conf.init = function() {
	var srcPattern = /(app.conf\.js)$/;
	var scriptTags = document.getElementsByTagName('script');
	for(var i=0; i<scriptTags.length; i++) {
		var script = scriptTags[i];
		if(script.src.match(srcPattern)) {
			Conf.baseDir = script.src.substr(0, script.src.length - RegExp.$1.length);
			break;
		}
	}
	if(document.observe)
		document.observe("dom:loaded", Conf.onload);
}
/** アプリケーション部品 */
Conf._applicationParts = {};
Conf.getApplicationParts = function(partsId) {
	if(Conf._applicationParts[partsId]) {
		return Conf._applicationParts[partsId].cloneNode(1);
	}
	var appParts = document.getElementById(partsId);
	if(appParts) {
		// コメントノードから部品を作成
		for(var i = 0; i < appParts.childNodes.length; i++) {
			var comment = appParts.childNodes[i];
			if(comment.nodeType != 8/* コメントノード */) continue;
			var src = comment.nodeValue.replace(/(^\s+)|(\s+$)/, '');
			var tmp = document.createElement('div');
			tmp.innerHTML = src;
			for(var j=0; j < tmp.childNodes.length; j++) {
				var e = tmp.childNodes[j];
				if(e.nodeType != 1/* 要素ノード */) continue;
				Conf._applicationParts[partsId] = e;
				return e.cloneNode(1);
			}
			break;
		}
	}
	return null;
}
document.write('<style type="text/css">' + "\n");
document.write('.application-parts {display:none;}' + "\n");
document.write('</style>' + "\n");

/** パスを正規化 */
Conf._p = function(str) {
	return str.replace(/^(\.\.?\/)/, Conf.baseDir + "/$1").replace(/\/[^\/]+\/+\.\.\/|\/\.\//,'/');
}
// 初期化開始
Conf.init();

	
