﻿/************************************************************
Googleニュース表示用Javascript
Copyright (C) 2010 Value Promotion Inc. All Rights Reserved.
*************************************************************/

// 表示用変数を設定
var titleStr	= '「腎移植」に関係するGoogleニュース';		// タイトル
var flameWidth	= 560;							// 幅(必須)
var flameHeight	= -1;							// 高さ(設定しない場合はマイナスにする)
var searchKwd	= '腎移植 腎臓 移植 臓器移植';			// 検索するキーワード
var dispCnt		= 4;							// 表示する記事数(8件まで)

google.load('search', '1');  

var newsList;	// ソート後のニュース一覧

function initialize(){  
	if (!document.getElementById('searchResults')) {
		return;
	}

	var searcher = new google.search.NewsSearch();  
	searcher.setResultSetSize(google.search.Search.LARGE_RESULTSET);
	searcher.setSearchCompleteCallback(searcher, searchComplete, null);  
	searcher.execute(searchKwd); 
}

function searchComplete(){
	// 検索結果をソート
	sortList(this.results);

	// 画面表示
	showHead(document.getElementById('searchResults'));
	showSearchResults(newsList,document.getElementById('searchResults'));
	showBranding(document.getElementById('searchResults'));

	// 表示部のstyleを設定
	document.getElementById('searchResults').style.width = flameWidth + 'px';
	if (-1 < flameHeight) {
		document.getElementById('searchResults').style.height = flameHeight;
	}
}

// 検索結果を更新日の降順でソート
function sortList(searchResults) {
	newsList = new Array();

	// 検索結果をメンバ変数にコピー
	for (var i in searchResults) {
		newsList.push(searchResults[i]);
	}
	
	// ソート実行
	var c1, c2;
	var tmp;
	for (c1 = 0; c1 < newsList.length-1; c1++) {
		for (c2 = 0; c2 < newsList.length-c1-1; c2++) {
			if (convertDate2(newsList[c2].publishedDate) < convertDate2(newsList[c2+1].publishedDate)) {
				tmp = newsList[c2];
				newsList[c2]   = newsList[c2+1];
				newsList[c2+1] = tmp;
			}
		}
	}
}

// クレジット表示  
function showBranding(domElement) {
	var brandingNode = document.createElement('div');
	google.search.Search.getBranding(brandingNode);
	domElement.appendChild(brandingNode);
}


// 検索結果を表示
function showSearchResults(searchResults,domElement){  
	var topArticleNode;
	var articleNode;

	topArticleNode = document.createElement('div');
	topArticleNode.className = 'article1';
	articleNode = document.createElement('div');
	articleNode.className = 'article2';

	// 記事情報作成
	if (searchResults && searchResults.length > 0) {  
		for (var i = 0; i < dispCnt; i++) {  
			if (i == searchResults.length) {
				break;
			}

			var result=searchResults[i];
			if (result.image && i == 0) {
				// 画像あり記事が1件目だったら画像も表示
				drawTopArticle(result, topArticleNode);
		    } else {
				drawNormalArticle(result, articleNode);
			}
		}
	} else {
		topArticleNode.appendChild(document.createTextNode('表示可能なニュースがありません'));
	}

	domElement.appendChild(topArticleNode);
	domElement.appendChild(articleNode);
}

// ヘッダを表示
function showHead(domElement) {
	domElement.innerHTML = '';

	var headNode = document.createElement('div');
	headNode.appendChild(document.createTextNode(titleStr));
	headNode.className = "newsTitle";
	domElement.appendChild(headNode);
}

// トップ記事を表示
function drawTopArticle(searchResult, domElement) {
	var node;
	var articleNode = document.createElement('div');

	var imgNode = document.createElement('img');
	imgNode.src = searchResult.image.tbUrl;
	node = document.createElement('div');
	node.appendChild(imgNode)
	node.className = "floatLeft";
	domElement.appendChild(node);  

	var nodeWidth = searchResult.image.tbWidth - 0;
	var w = flameWidth - nodeWidth;
	node = document.createElement('div');
	node.className = "floatLeft";
	node.style.width = w + 'px';
	domElement.appendChild(node);

	// タイトル追加
	articleNode = null;
	articleNode = document.createElement('div');
	articleNode.innerHTML = '<a href="' + searchResult.unescapedUrl + '">' + searchResult.titleNoFormatting + '</a>';
	articleNode.className = "articleTitle1";
	node.appendChild(articleNode);
	
	// 更新日時追加
	articleNode = null;
	articleNode = document.createElement('div');
	articleNode.innerHTML = convertDate(searchResult.publishedDate);
	articleNode.className = "articleDate1";
	node.appendChild(articleNode);
	
	// 記事本文を追加
	articleNode = null;
	articleNode = document.createElement('div');
	articleNode.innerHTML = searchResult.content.replace(/<\/?[a-z]+>/ig,"");
	articleNode.className = "articleText1";
	node.appendChild(articleNode);

	node = document.createElement('div');
	node.style.clear = "both";
	domElement.appendChild(node);  
}

// トップ以外の記事を表示
function drawNormalArticle(searchResult, domElement) {
	if (!searchResult.titleNoFormatting) {
		return;
	}

	var node = document.createElement('div');
	node.innerHTML = '<div class="g_news"><span class="articleTitle2"><a href="' + searchResult.unescapedUrl + '">' + searchResult.titleNoFormatting + '</a></span></div>';
	node.innerHTML = '<img src="http://medipress.jp/wp-content/themes/default/images/topic_i.gif" style="margin:3px 5px;float:left;" /><span class="articleDate2">' + convertDate(searchResult.publishedDate) + '</span>' + node.innerHTML;
	domElement.appendChild(node);  
}

// 表示用に日付を抽出して変換（例：Fri, 20 Aug 2010 20:52:58 -0700→8月21日）
function convertDate(prm) {
	var pdate = new Date(prm);
	var pday = pdate.getDate();
	var pmonth = pdate.getMonth() + 1;
	var pyear = pdate.getFullYear();
	var phour = pdate.getHours();
	var pminute = pdate.getMinutes();
	var psecond = pdate.getSeconds();

	var strMonth = pmonth + '';
	if (strMonth.length == 1) {
		strMonth = '0' + strMonth;
	}
	var strDay = pday + '';
	if (strDay.length == 1) {
		strDay = '0' + strDay;
	}

	strDate = strMonth + "月" + strDay + "日";
	return strDate;
}

// ソート用に日付を抽出して変換（例：Fri, 20 Aug 2010 20:52:58 -0700→2010/08/20 20:52:58）
function convertDate2(prm) {
	var strDate;
	
	if (!prm) {
		return '';
	}

	var aryStr = prm.split(' ');
	if (!aryStr || aryStr == null || aryStr.count == 0) {
		return '';
	}
	
	strDate = aryStr[3] + '/';
	
	switch (aryStr[2]) {
		case 'Jan' :
			strDate = strDate + '01/';
			break;
		case 'Feb' :
			strDate = strDate + '02/';
			break;
		case 'Mar' :
			strDate = strDate + '03/';
			break;
		case 'Apr' :
			strDate = strDate + '04/';
			break;
		case 'May' :
			strDate = strDate + '05/';
			break;
		case 'Jun' :
			strDate = strDate + '06/';
			break;
		case 'Jul' :
			strDate = strDate + '07/';
			break;
		case 'Aug' :
			strDate = strDate + '08/';
			break;
		case 'Sep' :
			strDate = strDate + '09/';
			break;
		case 'Oct' :
			strDate = strDate + '10/';
			break;
		case 'Nov' :
			strDate = strDate + '11/';
			break;
		case 'Dec' :
			strDate = strDate + '12/';
			break;
		default :
			return '';
	}
	
	strDate = strDate + aryStr[1] + ' ';
	strDate = strDate + aryStr[4];
	return strDate;
}

google.setOnLoadCallback(initialize);

