//
//							[ banner.js ]
//
//					Programmed by Yoshinori Shinoda
//					 Computer for WWW Server System (UNIX)
//					   Language of Perl & PostgreSQL
//
//														DATE : 2010/04/20
//
//	Copyright (C) 2010 Patentic Software Co.,Ltd. All rights reserved.

//
//	リクエスト・オブジェクトを作成する。
//
function	CreateRequestObject()
{
	var	objException;

	//	IE以外？
	if(window.XMLHttpRequest)
	{
		return new XMLHttpRequest();
	}

	//	IE？
	else if(window.ActiveXObject)
	{
		try
		{
			return new ActiveXObject("Mxxml2.XMLHTTP");
		}
		catch(objException)
		{
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}

	//	エラー
	return null;
}

//
//	バナーを表示する。
//
function ShowBanners(strUrlBase, strType, strOutId)
{
	var	strInfos;
	var	strBanners;

	//	バナー情報をロードする。
	strInfos = LoadBanners(strUrlBase, strType);

	//	バナー情報をロードする。
	strBanners = MakeBanners(strType, strInfos);

	//	バナーを表示する。
	document.getElementById(strOutId).innerHTML = strBanners;

	//	正常終了。
	return true;
}

//
//	バナー情報をロードする。
//
function LoadBanners(strUrlBase, strType)
{
	var	objReq;
	var	strPath;
	var	strText;
	var	strEscape;
	var	objNow = new Date;

	//	リクエスト・オブジェクトを作成する。
	objReq = CreateRequestObject();

	//	バナー情報のパスを作成する。
	strPath = strUrlBase + 'BanerSet/' + strType + 'banner.txt?' + objNow.getTime();

	//	サーバに問い合せを行なう。
	objReq.open('GET', strPath, false);
	objReq.setRequestHeader('User-Agent', 'nanzan-tokiwakai');
	objReq.setRequestHeader('Content-type', 'text/plain');
	objReq.send('');

	//	処理結果を取得する。
	strText = objReq.responseText;

	//	Safari対応
	if (navigator.appVersion.indexOf("KHTML") > -1)
	{
		strEscape = escape(strText);
		if ((strEscape.indexOf("%u") < 0) && (strEscape.indexOf("%") > -1))
		{
			strText = decodeURIComponent(strEscape);
		}
	}

	//	リクエスト・オブジェクトを開放する。
	objReq = null;

	//	バナー情報を返す。
	return strText;
}

//
//	バナーHTMLを作成する。
//
function MakeBanners(strType, strInfos)
{
	var	strBanner;
	var	aryLine;
	var	lngLine;
	var	aryCols;
	var	aryRows;

	//	行に分離する。
	aryLines = strInfos.split('\n');

	//	行を走査する。
	aryRows = new Array();
	for (lngLine = 0; lngLine < aryLines.length; lngLine++)
	{
		//	改行を取り除く。
		aryLines[lngLine] = aryLines[lngLine].replace(/[\r\n]/, '');

		//	空行であれば次へ。
		if (aryLines[lngLine] == '')
			continue;

		//	列に分解する。
		aryCols = aryLines[lngLine].split(/,/);
		aryCols.length = 3;

		//	画像のパス部分のみを抽出する。
		aryCols[0] = aryCols[0].replace(/^.*href="(.*?)".*$/, "$1");

		//	バナーHTMLを作成する。
		if (aryCols[2] == null)
			strBanner = '<li STYLE="#EXTRASTYLE#"><img src="#IMGURL#" width="140" height="80" alt="#NAME#" border="0" /></li>';
		else
			strBanner = '<li STYLE="#EXTRASTYLE#"><a href="#LINKURL#" target="_blank"><img src="#IMGURL#" width="140" height="80" alt="#NAME#" border="0" /></a></li>';
		strBanner = strBanner.replace(/#IMGURL#/, aryCols[0]);
		strBanner = strBanner.replace(/#NAME#/, aryCols[1]);
		strBanner = strBanner.replace(/#LINKURL#/, aryCols[2]);

		if (strType == 'top')
			strBanner = strBanner.replace(/#EXTRASTYLE#/g, '');
		else
			strBanner = strBanner.replace(/#EXTRASTYLE#/g, 'background-color: transparent; padding-bottom: 2px;');

		aryRows.length++;
		aryRows[aryRows.length - 1] = strBanner;
	}

	//	シャッフルする。
	aryRows.shuffle();

	//	バナーHTMLを返す。
	return '<ul>' + aryRows.join('') + '</ul>';
}

//
//	シャッフルする。
//
Array.prototype.shuffle = function()
{
	var i = this.length;

	while(i)
	{
		var j = Math.floor(Math.random()*i);
		var t = this[--i];
		this[i] = this[j];
		this[j] = t;
	}

	return this;
}
