
var MOverture = {
	/** リクエストURL */
	domain: 'http://dx.mapion.co.jp',
	grp: 'all',
	partner: 'mapion_jp_hotspot',
	keywords: null,
	default_keywords: '%A5%ED%A1%BC%A5%F3',	// 住み替え
	accountFilters: 'mapion_jp',
	urlFilters: 'mapion_jp',
	termFilters: 'mapion_jp',
	adultFilter: 'clean',
	mkt: 'jp',
	type: 'site1',
	count: '5',
	bolding: 'true',
	affilData: 'ip%3D203.14.212.216%26ua%3DMozilla%2F4.0+%28compatible%3B+MSIE+6.0%3B+Windows+NT+5.1%29',
	serveUrl: location.href,
	xargs: null,
	
	/** 広告表示フラグ(true/false) */
	isEnable: true,
	/** タイトル */
	/* title: 'スポンサーサイト', */
	title: '',
	/** 広告を表示させるエレメントID(デフォルト)  */
	panel: new Array( 'adArea' ),
	/** パネルあたりの広告数(デフォルト) */
	adPerPanel: new Array( '5' ),
	/** リトライ回数 */
	retryCount: 0,
	/** リトライMAX */
	retryMax: 10,
	/** リトライ間隔(ms) */
	retryInterval: 100,
	/** リトライフラグ */
	retryFlag: 0,
	/** リトライする最大リクエスト数 */
	retryRequest: 2,
	/** タイマーID */
	timerID: null,
	/** JSONリクエスト */
	jsonRequest: '',
	/** JSONフラグ */
	isJson: true,
	
	/** ID */
	id: '_MOvertureSSScript',
	ovsscount: 0,

	/** URLパラメータ */
	param: new Array(),
	/** 次ページ */
	next: null,
	/** 前ページ */
	prev: null,
	/** hData */
	hData: null,
	
	/** encoding*/
	enc: null,
	/** デフォルトエンコード */
	default_encoding: 'euc-jp',
	
	/** サムネイル表示 */
	thumbnail:false,
	
	/**
	 * 初期化処理
	 */
	init: function(){
		if( MOverture.isEnable == false ) return;
		// URLに?または&を含まない場合
		if(MOverture.serveUrl.indexOf("q=")==-1 && MOverture.serveUrl.indexOf("find=")==-1){
			// キーワードがある場合
			if (MOverture.keywords != null) {
				// URLに?を含む場合、serveUrlにパラメータをセット
				if (MOverture.serveUrl.indexOf("?")!=-1) {
					MOverture.serveUrl = MOverture.serveUrl.split("?")[0];
				}
				MOverture.request();
				return;
			} else {
				return;
			}
		}
		
		// エンコードを指定
		if(MOverture.enc == null){
			MOverture.enc = MOverture.default_encoding;
		}
		
		// URLをパラメータ毎に分割
		var params = new Array();
		if(MOverture.serveUrl.match(/\/q=|\/find=/)){
			params = MOverture.serveUrl.split("/");
		} else {
			params = MOverture.serveUrl.split("?")[1];
			params = params.split("&");
		}
		
		// パラメータからキーワードを取得
		for( var i=0; i<params.length; i++ ){

			MOverture.param[params[i].split("=")[0]] = params[i].split("=")[1];
			
			if( MOverture.keywords==null ){
				if( params[i].split("=")[0] == "find" || params[i].split("=")[0] == "q" ){
					MOverture.keywords = params[i].split("=")[1];
				}
			}
			if( params[i].split("=")[0] == "xargs" ){
				MOverture.xargs = params[i].split("=")[1];
			}
			if( params[i].split("=")[0] == "hData" ){
				MOverture.hData = params[i].split("=")[1];
			}
		}
		
		// サーバURLから?以降を除去
		if( MOverture.serveUrl.indexOf("?")!=-1 ){
			MOverture.serveUrl = MOverture.serveUrl.split("?")[0];
		}
		MOverture.serveUrl = "http://"+MOverture.serveUrl.split("//")[1].split("/")[0]+"/";
		if(MOverture.encoding=='euc-jp')MOverture.serveUrl = EscapeEUCJP(MOverture.serveUrl);
		else MOverture.serveUrl = encodeURI(MOverture.serveUrl);

		// リクエスト生成
		MOverture.request();
	},
	
	
	/**
	 * リクエストの生成
	 */
	request: function(){
		
		// 空文字チェック
		if( !MOverture.keywords || typeof(MOverture.keywords) == "undefined" || MOverture.keywords==null || MOverture.keywords=="" ) return;
		
		// 呼び出しURL
		var url = MOverture.domain + '/map/uc/ApiCall?';
		url += 'grp=' + MOverture.grp;
		url += '&apiName=OvertureSS';
		url += '&ie='+MOverture.enc;
		url += '&oe=euc-jp';
		url += '&json=1';
		url += '&Partner=' + MOverture.partner;
		url += '&Keywords=' + MOverture.keywords;
		url += '&accountFilters=' + MOverture.accountFilters;
		url += '&urlFilters=' + MOverture.urlFilters;
		url += '&termFilters=' + MOverture.termFilters;
		url += '&adultFilter=' + MOverture.adultFilter;
		url += '&mkt=' + MOverture.mkt;
		url += '&type=' + MOverture.type;
		url += '&maxCount=' + MOverture.count;
		url += '&bolding=' + MOverture.bolding;
		url += '&affilData=' + MOverture.affilData;
		if( MOverture.xargs!=null ){
			url += '&xargs=' + MOverture.xargs;
		}
		if( MOverture.hData!=null ){
			url += '&hData=' + MOverture.hData;
		}
		url += '&serveUrl=' + MOverture.serveUrl;
		url += '&callback=MOverture.get';
		
		// scriptエレメント
		var elScript = document.createElement('script');
		elScript.type = 'text/javascript';
		if (MOverture.encoding == null || MOverture.encoding == '') {
			elScript.charset = "EUC-JP";
		} else {
			elScript.charset = MOverture.encoding;
		}
		elScript.src = url;
		elScript.id = '_MOvertureSSScript'+MOverture.ovsscount++;
		document.getElementsByTagName('head')[0].appendChild( elScript );
		
	},
	
	/**
	 * 検索結果をセット
	 */
	get: function( json ){
		// 広告情報が読み込まれるまで待機
		MOverture.isJson = true;
		if( MOverture.timerID != null ) clearTimeout( MOverture.timerID );
		
		try{
			var test = json.Results.ResultSet.Listing;
		}catch(e){
			if( MOverture.retryCount > MOverture.retryMax ) return;
			else if( MOverture.isJson==true && MOverture.retryCount < MOverture.retryMax ){
				MOverture.retryCount += 1;
				MOverture.timerID = setTimeout( MOverture.get, MOverture.retryInterval );
				return;
			}
		}
		
		// タイマーをクリア
		clearTimeout( MOverture.timerID );
		MOverture.timerID = null;
		
		// 検索結果が空の場合
		if( typeof(json)=="undefined" || typeof(json.Results)=="undefined" ) {
			// MOverture.retryRequest回まで&xargsなしのリクエストを実行
			if( MOverture.retryFlag < MOverture.retryRequest ){
				MOverture.retryCount = 0;
				MOverture.retryFlag++;
				// 最後のリクエストは、デフォルトワードで検索
				if( MOverture.retryFlag == MOverture.retryRequest ) {
					MOverture.enc = MOverture.default_encoding; // デフォルトキーワードはeuc-jp
					MOverture.keywords = MOverture.default_keywords;
				}
				MOverture.request();
				return;
			}
			return;
		}
		
		// Overtureを表示
		MOverture.show( json );
		
		// ページ送りの再生成
		MOverture.page("headerPager");			// ページ送り（上）
		MOverture.page("footerPager");			// ページ送り（下）
	},
	
	
	/**
	 * 広告の表示処理
	 */
	show: function( json ){
		// 検索結果をセット
		var list = json.Results.ResultSet.Listing instanceof Array ? json.Results.ResultSet.Listing : [json.Results.ResultSet.Listing];
		var len = json.Results.ResultSet.numResults;
		if( typeof(json.Results.ResultSet.NextArgs)!="undefined" ){
			var next_arr = json.Results.ResultSet.NextArgs.split("&");
			for(var i=0; i<next_arr.length; i++ ){
				if(next_arr[i].indexOf("xargs")!=-1){
					MOverture.next = next_arr[i];
				}else if(next_arr[i].indexOf("hData")!=-1){
					MOverture.hData = next_arr[i];
				}
			}
		}
		if( typeof(json.Results.ResultSet.PrevArgs)!="undefined" ){
			var prev_arr = json.Results.ResultSet.PrevArgs.split("&");
			for(var i=0; i<prev_arr.length; i++ ){
				if(prev_arr[i].indexOf("xargs")!=-1){
					MOverture.prev = prev_arr[i];
				}else if(prev_arr[i].indexOf("hData")!=-1){
					MOverture.hData = prev_arr[i];
				}
			}
		}
		
		// 各パネルへ広告を表示
		var num1,num2 = null;
		
		for( var p=0; p<MOverture.panel.length; p++ ){
			
			// ループ回数をセット
			var num = MOverture.set(p,len);
			num1 = num[0];
			num2 = num[1];
			
			// 表示タグを生成
			var adStr = '<p class="adblock_title">' + MOverture.title + '</p><ul>';
			for( var i=num1; i<num2; i++ ){
				if( typeof(list[i])=="undefined" ) continue;
				var clickURL = list[i].ClickUrl.content;	// listing link
				var title = list[i].title;					// listing title
				title = (title||"").replace(/"/g,"&quot;");
				var descr = list[i].description;			// listing description
				var sitehost = list[i].siteHost;			// advertiserfs domain name
				//var rank = list[i].rank;					// (ignore)
				
				var withThumbnail = MOverture.thumbnail;
				var thumbnail = '<img style="float:left;margin-right:5px;" title="'+title+'" src="http://capture.heartrails.com/small?'+sitehost+'" alt="'+sitehost+'" width="80" height="60" />';
				
				adStr += (withThumbnail?'<li class="inthumbnail">':'<li>')
					+ '<a target="_blank" href="' + clickURL + '">'
					+ (withThumbnail?thumbnail:"")
					+ '<em class="ad_title">' + title + '</em>'
					+ '<span class="ad_read">' + descr + '</span>'
					+ '<span class="ad_url">' + sitehost + '</span></a></li>';
			}			
			adStr += '</ul>';

			// 画面上に表示
			if( document.getElementById( MOverture.panel[p] ) ){
				document.getElementById( MOverture.panel[p] ).innerHTML = adStr;
			}
		}
		
		// scriptタグを削除
		MOverture.isJson = false;
		var sctipttag = document.getElementById( MOverture.id );
		if (sctipttag != null) {
			document.getElementsByTagName('head')[0].removeChild( sctipttag );
		}
		MOverture.ovsscount++;
	},
	
	/**
	 * ループの回数をセット
	 */
	set: function( p, len ){
		
		// Overture表示エリア数
		switch( MOverture.panel.length ){
			
			case 0 : break;
			
			case 1 :
				// 「エリア1の表示数」が「検索結果件数」以上
				if( parseInt(MOverture.adPerPanel[0]) > len ){
					num1=0; num2=len;
				}else{
					num1=0; num2=MOverture.adPerPanel[p];
				}
			break;
			
			case 2 :
				// 「エリア1とエリア2の合計表示件数」
				var count_all = parseInt(MOverture.adPerPanel[0])+parseInt(MOverture.adPerPanel[1]);
				
				if( MOverture.count < count_all  ){
					// 「取得数」が「合計表示件数」未満
					if( MOverture.count <= parseInt(MOverture.adPerPanel[0]) ){
						// 「取得数」が「エリア1の表示数」以下
						switch( p ){
							case 0: num1=0; num2=MOverture.count; break;
							case 1: num1=0; num2=0; break;
						}
					}else{
						// 「取得数」が「エリア1の表示数」以上
						switch( p ){
							case 0: num1=0; num2 = MOverture.adPerPanel[p]; break;
							case 1: num1=MOverture.adPerPanel[p-1]; num2=count_all; break;
						}
					}
				
				}else if( MOverture.count >= count_all ){
					// 「取得数」が「合計表示件数」以内
					switch( p ){
						case 0: num1=0; num2=MOverture.adPerPanel[p]; break;
						case 1: num1=MOverture.adPerPanel[p-1]; num2=count_all; break;
					}
				}

			break;

			default :
				// 「エリア1の表示数」が「検索結果件数」以上
				if( parseInt(MOverture.adPerPanel[0]) > len ){
					num1=0; num2=len;
				}else{
					num1=0; num2=MOverture.adPerPanel[p];
				}
			break;
		}
		return num = new Array(num1,num2);
	},	
	
	/**
	 * ページ送りURLの再生成
	 */
	page: function( id ){
		// 前ページ
		if( MOverture.prev!=null && document.getElementById(id+"_prev") ){
			var span = document.getElementById(id+"_prev");
			if( typeof(span.childNodes[0])=="undefined" ) return;
			var span_a = span.childNodes[0];
			var span_href = span_a.href;
			span_href += "&"+MOverture.prev;
			if( MOverture.hData!=null ) {
				span_href += "&"+MOverture.hData;
			}
			span_a.href = span_href;
		}
		// 次ページ
		if( MOverture.next!=null && document.getElementById(id+"_next") ){
			var span = document.getElementById(id+"_next");
			if( typeof(span.childNodes[0])=="undefined" ) return;
			var span_a = span.childNodes[0];
			var span_href = span_a.href;
			span_href += "&"+MOverture.next;
			if( MOverture.hData!=null ) {
				span_href += "&"+MOverture.hData;
			}
			span_a.href = span_href;
		}
	}
	
};


EscapeEUCJP = function(str){
	return str.replace(/[^*+.-9A-Z_a-z-]/g,function(s){
		var c=s.charCodeAt(0);
		return (c<128?(c<16?"%0":"%")+c.toString(16):65376<c&&c<65440?"%8E%"+(c-65216).toString(16):(c=JCT8836.indexOf(s))<0?"%A1%A6":"%"+((c-(c%=94))/94+161).toString(16)+"%"+(c+161).toString(16)).toUpperCase()
	})
};


