// --------------------------------------------------------------------
// Author  : mashimonator
// Create  : 2009/02/17
// Update  : 2009/02/17
// Description : 指定エリアに外部ファイルの内容を挿入する
// --------------------------------------------------------------------


var loadFile_httpObj; // HTTP通信用オブジェクト

var loadFile = {

	//-----------------------------------------
	// 設定値
	//-----------------------------------------
	conf : {

		// 挿入対象のクラス名
		targetCls : 'loadFile',
		// 挿入対象の要素
		targetElm : 'div',
		// PHPファイルの配置パス(本JSを使用するHTMLファイルからの相対パス)
		phpFilePath : '/common/php/getFile.php',
		// サイトの文字コード
		defaultCharset : 'utf-8',
		// ファイルに対応するクラス
		fileClass : [
					 'data1',
					 'data2',
					 'data3',
					 'data4',
					 'data5',
					 'data6',
					 'data7',
					 'data8'
					 ],
		// ファイルの配置パス(phpファイルからの相対パス)
		filePath : [
					'../data/header.html',
					'../data/footer.html',
					'../data/menu.html',
					'../data/menu_beauty.html',
					'../data/menu_diet.html',
					'../data/menu_healing.html',
					'../data/menu_health.html',
					'../data/menu_recommend.html'
					],
		// ファイルの文字コード
		fileCharset : [
					'utf-8',
					'utf-8',
					'utf-8',
					'utf-8',
					'utf-8',
					'utf-8',
					'utf-8',
					'utf-8'
					]

	},

	//-----------------------------------------
	// main処理
	//-----------------------------------------
	main : function() {

		// 挿入先要素を取得
		var elements = loadFile.getTargetElements(loadFile.conf.targetElm, loadFile.conf.targetCls);
		// 非表示
		for (var i = 0; i < elements.length; i++) {
			for (var x = 0; x < loadFile.conf.fileClass.length; x++) {
				if ( elements[i].className.match(loadFile.conf.fileClass[x]) ) {
					elements[i].style.display = 'none';
				}
			}
		}

		// 文字コード設定
		for (var i = 0; i < loadFile.conf.fileCharset.length; i++) {
			if ( loadFile.conf.fileCharset[i] == '' ) {
				loadFile.conf.fileCharset[i] = loadFile.conf.defaultCharset;
			}
		}

		// 最初のリクエストを送信
		var reqParam = 'path=' + encodeURI(loadFile.conf.filePath[0]) + '&fileEncode=' + encodeURI(loadFile.conf.fileCharset[0]) + '&encode=' + encodeURI(loadFile.conf.defaultCharset);
		loadFile_httpObj = loadFile.sendData('POST', loadFile.conf.phpFilePath, reqParam, loadFile.callback);

	},

	//-----------------------------------------
	// callback処理
	//-----------------------------------------
	callback : function() {

		if ((loadFile_httpObj.readyState == 4) && (loadFile_httpObj.status == 200)) {

			// 挿入先要素を取得
			var elements = loadFile.getTargetElements(loadFile.conf.targetElm, loadFile.conf.targetCls);
			// 内容置き換え
			for (var i = 0; i < elements.length; i++) {
				if ( elements[i].className.match(loadFile.conf.fileClass[0]) ) {
					elements[i].innerHTML = loadFile_httpObj.responseText;
					elements[i].style.display = 'block';
				}
			}
			if ( loadFile.conf.fileClass.length > 1 ) {
				// 配列操作
				loadFile.conf.fileClass.shift();
				loadFile.conf.filePath.shift();
				loadFile.conf.fileCharset.shift();
				// 次のリクエストを送信
				var reqParam = 'path=' + encodeURI(loadFile.conf.filePath[0]) + '&fileEncode=' + encodeURI(loadFile.conf.fileCharset[0]) + '&encode=' + encodeURI(loadFile.conf.defaultCharset);
				loadFile_httpObj = loadFile.sendData('POST', loadFile.conf.phpFilePath, reqParam, loadFile.callback);
			}

		}

	},

	//-----------------------------------------
	// ターゲットタグを取得する
	//-----------------------------------------
	getTargetElements : function(tag, cls) {

		var elements = new Array();
		var targetElements = document.getElementsByTagName(tag);

		for (var i = 0; i < targetElements.length; i++) {
			if (targetElements[i].className.match(cls)) {
				elements[elements.length] = targetElements[i];
			}
		}

		return elements;

	},

	// -----------------------------------
	// 非同期通信
	// -----------------------------------
	sendData : function(method, url, data, callback) {
		loadFile_httpObj = loadFile.createXMLHttpRequest(callback);
		if (loadFile_httpObj) {
			loadFile_httpObj.open(method,url,true);
			if ( method == 'POST' ) {
				loadFile_httpObj.setRequestHeader("content-type","application/x-www-form-urlencoded;charset="+loadFile.conf.defaultCharset);
				loadFile_httpObj.send(data);
			} else {
				loadFile_httpObj.send(null);
			}
		}
		return loadFile_httpObj;
	},
	
	// -----------------------------------
	// HTTP通信用オブジェクト取得
	// -----------------------------------
	createXMLHttpRequest : function(cbFunc) {
		
		var XMLhttpObject = window.XMLHttpRequest ? new XMLHttpRequest() : (function() {
				try { return new ActiveXObject("Msxml2.XMLHTTP");}
				catch(e) { return new ActiveXObject("Microsoft.XMLHTTP");}
		})();
	
		if (XMLhttpObject) {
			XMLhttpObject.onreadystatechange = cbFunc;
		}
	
		return XMLhttpObject;
	},

	//-----------------------------------------
	// Loadイベントに追加
	//-----------------------------------------
	addLoadEvent : function() {
		try {
			window.addEventListener('load', this.main, false);
		} catch (e) {
			window.attachEvent('onload', this.main);
		}
	}

}

loadFile.addLoadEvent();

