var oMain,
	suggestSearch,
	DirectoryList,
	isReady = false,
	mapController;

var onloadFunc = function(){
	if (isReady) return;
	if (window.Timing) window.Timing.addEntry("_initStart_");
	isReady = true;
	
	var MOL = MapionOfficialLayout;
	MOL.idName();
	MOL.Layout();
	MOL.ClickChange();
	MOL.ListAd();
	MOL.ListPoi();
	MOL.ListDetail();
	MOL.SearchDisplay();

	suggestSearch = new LocalSearchBox(LocalSearchBoxParameters.MAP_PAGE);

	//制作側の初期化実施
	if(typeof(preOnload)=="function") preOnload.call();

	//地図初期化
	mapController = new MapController(document.getElementById("mmap"), {imgPath:"/f/mapion/img/api_images/"});
	// MMapインスタンスを返す
	var mm = mapController.init('map');

	MapionOfficial.ParseInitLatLng();
	MapionOfficial.mapInit(mm);
	//ディレクトリクラス初期化
	DirectoryList = new MapionOfficialDirectory({main:oMain});

	//サジェスト初期化
	MOL.SearchBoxPtn = "Ptn_shop";
	MOL.SearchBoxDefault();
	MOL.SearchBoxChg("st_shop");
	MOL.SearchBtn();
	MOL.eft_NavLocal();

	//ファイル読み込み後、さらに関数の処理が完了した時点で、下記を実行したい
	MOL.GV_Wrapper.style.filter = "";
	MOL.GV_Wrapper.style.opacity = "1.0";
	MOL.GV_loading.style.display = "none";
	MapionUtil.setClassName(MOL.GV_loading,"afterLoading");

	//メインクラス初期化
	oMain=new MapionOfficial({map:mm,d:DirectoryList,s:suggestSearch});

	// 地図layer
	var locurl = location.href;
	if (locurl.match(/layer=([^\/]+)\//ig)) {
		var layer = RegExp.$1;
		if (layer == "map3d" && mapController.getState() != "map3d") mapController.change('map3d');
	}

	MapionOfficial.map=mm;
	suggestSearch.all = new SidebarAllSearch( {"main":oMain,"SearchType":"Map", "inputCharset":"utf8", "inputCharset":"utf8"});
	suggestSearch.shop = new SidebarShopSearch({"main":oMain,"SearchType":"Map", "inputCharset":"utf8", "inputCharset":"utf8"});

	DirectoryList.main=oMain;
	MODView.main=oMain;
	if(oMain.exteded){
		oMain.search();
	}

    // Geolocation API
	var MGeo = new MapionGeolocation();
    if (MGeo.check === true) {
    	var geo_btn = MMap.___document.getElementById("MapGeo");
    	geo_btn.style.display = "block";
        geo_btn.onclick = function () {
            MGeo.move(mm, oMain);
        }
    }

	// news ticker
	var news = new NewsTicker();
	MEvent.addListener(mm, "move", function(){ news.stop() });
	MEvent.addListener(mm, "moveend", function(){ news.start() });


	// Yahoo!災害情報API
	new DisasterControl(mm, function(e){
		if (e.isDisaster) {
			// 災害が無い場合disasterTrueクラスを削除する
			var bottomRightDiv = document.getElementById("bottomRightDiv");
			bottomRightDiv.setAttribute("class", "disasterTrue");
			oMain.disasterFlag = true;

			// panoramioを再描画する
			if (oMain.panoramio.flags.visible) oMain.panoramio.show();
		} else {
			oMain.disasterFlag = false;
		}
	});

	//adlantis rectangle advertise
	if(adlantis){
		setTimeout(function(){
			adlantis.location.replace("/f/mapion/html/ad/rectangle_ad_map.html");
		}, 100);

		//update rectangle
		oMain.addEventListener("geocodechanged",function(e){
			if(adlantis && adlantis.kencode != e.target.getKenCode() && oMain.listType == "defaultDir") {
				try {
					adlantis.location.replace("/f/mapion/html/ad/rectangle_ad_map.html");
				} catch(e){}
			}
		});
	}
	if (window.Timing) {
		Timing.addEntry("_initEnd_");
		Timing.addPerformanceEntries();
		Timing.log();
	};
}

window.onunload=function(){
	if(adlantis) adlantis.location.replace("/f/mapion/html/ad/default.html");
}

var DOMContentLoaded = !MBrowser.ie5up ?
	function(){
		document.removeEventListener("DOMContentLoaded", DOMContentLoaded, false);
		onloadFunc();
	} :
	function(){
		if (document.readyState == "complete") {
			document.detachEvent("onreadystatechange", DOMContentLoaded);
			onloadFunc();
		}
	};

if (!MBrowser.ie5up) {
	document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
	document.addEventListener("load", onloadFunc, false);
} else {
	document.attachEvent("onreadystatechange", DOMContentLoaded);
	document.attachEvent("onload", onloadFunc);

	var toplevel = false;
	try {
		toplevel = window.frameElement == null;
	} catch(e) {}

	if (document.documentElement.doScroll && toplevel) {
		(function(){
			try {
				document.documentElement.doScroll('left');
			} catch(e) {
				setTimeout(arguments.callee, 50);
				return;
			}
			onloadFunc();
		})();
	}
};

