/* -----------------------------------------------
 *
 * simpleLPO（クライアントサイド簡易LPOスクリプト） ver 0.1
 * by linnet
 *
 * -----------------------------------------------
 * 使い方
 * -----------------------------------------------
 * <html>
 * <head>
 * <script src="ecl.js"></script><!-- Escape Codec Library ( http://nurucom-archives.hp.infoseek.co.jp/digital/escape-codec-library.html ) -->
 * <script src="simplelpo.js"></script><!-- simpleLPO -->
 * <script>
 * 	function setLPO() {
 * 		var s = new simpleLPO();	// まず、インスタンス生成
 * 		s.init('forLPO', {	// 書き換える要素のID
 * 			'html'			: '<p><a href="#">HTML!</a></p>',	// 'キーワード' : '表示するHTMLのソース'
 * 			'javascript'	: '<p><a href="#">JavaScript</a></p>'
 * 		})
 * 	}
 * 	window.onload = setLPO;	// オンロード後に呼び出し
 * </script>
 * </head>
 * <body>
 * <div id="forLPO"></div>
 * </body>
 * </html>
 * 
 * -------------------------------------------- */

var LPO3 = function() {

	// バナー等を表示するタグのID名
	target = '',

	// キーワードと表示用タグ（テキストでも可）
	t = {},

	// 検索エンジン別のキーワードのパラメータ名（使用開始前に最新情報に反映すること）
	s = {
		'www.google.'	: 'q',		// Google
		'yahoo'			: 'p',		// Yahoo!
		'msn'			: 'q',		// MSN
		'www.excite'	: 'search',	// Excite
		'goo'			: 'MT',		// goo
		'www.infoseek'	: 'qt',		// Infoseek
		'fresheye.com'	: 'kw',		// FreshEye
		'ask.jp'		: 'q',		// Ask.jp
		'baidu.jp'		: 'wd',		// 百度
		'bing.com'		: 'q'		// Bing
	}
}

LPO3.prototype = {

	// ----------------------------------------------
	// 簡易LPO処理開始

	init : function(i, k) {
		this.target = i;
		this.t = k;
		if (i && k) {
			this.startLPO();
		}
	},

	// ----------------------------------------------
	// 簡易LPO処理開始

	startLPO : function() {
		var i;
		var content;
		var re = document.referrer;

		// Getパラメータがなければ処理しない
		if (re.indexOf('?') < 0) return null;

		// エンコードが混在する検索エンジン用処理（例：Infoseek）
		re = this.regEncode(re);

		// リファラーのクエリ部分を取得、かつエンコード
		re = this.getParam(re);

		// 検索語の抽出
		for (i in this.t) {
			if (re.indexOf(i) >= 0) {
				this.outputHTML(this.t[i]);
				break;
			}
		}
	},

	// ----------------------------------------------
	// HTMLに書き出し

	outputHTML : function(c) {
		var obj = document.getElementById(this.target);
		document.getElementById(this.target).innerHTML = c;
	},

	// ----------------------------------------------
	// 検索エンジン毎のパラメータ名を取得（なんかココうまく作れないかな。メンテフリーにしたい・・・）

	getQuery : function(query) {
		var pName;
		var i;
		var p = '';

		for (i in s) {
			// ドメイン（の一部）とパラメータ名を含むか
			if ((query.indexOf(i) >= 0) && (query.indexOf(s[i]) >= 0)){
				p = s[i] + '=';
				break;
			}
		}

		// 未登録の検索エンジンの場合はクエリ部分(?以降)を丸ごと返す
		if (p == '') return query.substring(query.indexOf('?'));

		// クエリの該当箇所を抽出かつ単語間の区切り(+)を除去
		p = query.substring(query.indexOf(p) + p.length).split('&')[0].replace(/\+/g, '');
		return p;
	},

	// ----------------------------------------------
	// リファラーのクエリ部分を取得かつエンコード

	getParam : function(str) {

		// クエリの該当箇所を抽出
		str = this.getQuery(str);

		// 文字コード取得
		var encode = GetEscapeCodeType(str);

		// エンコード (JQueryのパクリ。左から順に評価してくので最初にtrueになった&&の右の値が入る)
		str = (encode == 'SJIS') && UnescapeSJIS(str) || (encode == 'EUCJP') && UnescapeEUCJP(str) || (encode == 'UTF8') && UnescapeUTF8(str) || (encode == 'Unicode') && UnescapeUnicode(str) || str;

		return str;
	},

	// ----------------------------------------------
	// エンコードが混在する検索エンジン用処理

	regEncode : function(str) {
		// for Infoseek（検索語がUTF8で、検索ボタンのラベルがEUCJP）
		if ((str.indexOf('http://search.www.infoseek.co.jp/') >= 0) && (str.indexOf('&search=%A5%A6%A5%A7%A5%D6%B8%A1%BA%F7&') >= 0)){
			// 文字コードが違う部分を除去
			str = str.substring(0, str.indexOf('&search=%A5%A6%A5%A7%A5%D6%B8%A1%BA%F7&'));
		}
		return str;
	}
};

