﻿var data;
var digestArchivePages = new Object();
var digestCategoryPages = new Object();
var maxDigestNum = 5;
var topURL;

// Squeakページ表示
function viewPage( cnt ) {
	var string = '';
	var htmlString = '';
	
	string += '<div class=\"description\">';
	string += '<p class=\"digestDate\">'+data["articles"]["article"][cnt]["year"]+'/'+data["articles"]["article"][cnt]["month"]+'/'+data["articles"]["article"][cnt]["day"]+'</p>\n';
	string += '<p class=\"digestTitle\">'+data["articles"]["article"][cnt]["title"]+'</p>\n';
	string += '<p class=\"digestDescription\">'+data["articles"]["article"][cnt]["description"]+'</p>\n';
	if (data["articles"]["article"][cnt]["comment"] != null) {
	    string += '<p class=\"digestComment\">'+data["articles"]["article"][cnt]["comment"]+'</p>\n';
	}
	string += '<ul><li>分類:'+data["articles"]["article"][cnt]["category"]+'</li>\n';
	string += '<li>キーワード:'+data["articles"]["article"][cnt]["keyword"]+'</li>\n';
	string += '<li>書いた人:'+data["articles"]["article"][cnt]["author"]+'</li></ul>\n';
	string += '</div>\n';
	if (navigator.appName.indexOf("Microsoft") > -1) {
	    htmlString = data["articles"]["article"][cnt]["projectUrl"];
	    var idx = htmlString.lastIndexOf(".");
	    var htmlUrl = htmlString.substring(0, htmlString.lastIndexOf(".",idx-1));
	    htmlUrl += '.html';
	    string += '<iframe src=\"'+topURL+'/archives/'+htmlUrl+'\" name=\"SqueakPlugin\" width=\"640\" height=\"540\" marginheight=\"0\" marginwidth=\"0\" scrolling=\"no\" frameborder=\"0\"></iframe>';
	} else {
    	    string += '<OBJECT \n';
    	    string += 'ID=\"SqueakOCX Control\" \n';
    	    string += 'WIDTH=' + data["articles"]["article"][cnt]["width"] + ' HEIGHT=' + data["articles"]["article"][cnt]["height"] + ' \n';
    	    string += 'ALIGN=center BORDER=1 \n';
    	    string += 'CLASSID=\"CLSID:2BE9C39E-8386-4435-B337-FCDAD8EAB006\" \n';
    	    string += 'CODEBASE=\"http://www.squeakland.org/installers/SqueakPluginInstaller.exe\"> \n';
    	    string += '<PARAM name=\"src\" value=\"'+topURL+'/archives/' + data["articles"]["article"][cnt]["projectUrl"] + '\"> \n';
    	    string += '<PARAM name=\"update\" value=\"29\"> \n';
    	    string += '<PARAM name=\"pluginspage\" value=\"http://www.squeakland.org/detect.html\"> \n';
    	    string += '<PARAM name=\"update_url\" value=\"http://www.squeakland.org/update/\"> \n';
    	    string += '<PARAM name=\"apiSupported\" value=\"true\"> \n';
    	    string += '<embed \n';
    	    string += 'type=\"application/x-squeak-source\" \n';
    	    string += 'ALIGN=\"CENTER\" \n';
    	    string += 'WIDTH=\"' + data["articles"]["article"][cnt]["width"] + '\" \n';
    	    string += 'HEIGHT=\"' + data["articles"]["article"][cnt]["height"] + '\" \n';
    	    string += 'src=\"'+topURL+'/archives/' + data["articles"]["article"][cnt]["projectUrl"] + '\" \n';
    	    string += 'update=\"29\" \n';
    	    string += 'apiSupported=\"TRUE\" \n';
    	    string += 'pluginspage=\"http://www.squeakland.org/detect.html\" \n';
    	    string += 'update_url=\"http://www.squeakland.org/update/\" \n';
    	    string += '></embed>\n</OBJECT> \n';
    	    string += '<hr /> \n';
	}
	return string;
}
// 書庫リンク作成(月単位)
function mkArchive() {
    var string = '';
    var s = '';
    var ca = new Array();
    var flag = 0;
    var d;
    string += '<ul>\n';
    for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
        s = data["articles"]["article"][cnt]["year"]+data["articles"]["article"][cnt]["month"];
	flag = 0;
	for (i = 0; i < ca.length; i++) {
	    if (s == ca[i]) {
		flag = 1;
                break;
            }
        }
        if (flag == 1) {
	    continue;
	}
    	string += '<li>';
        string += '<a href=\"javascript: showArchivePage(\''+s+'\', 1)\">';
        string += data["articles"]["article"][cnt]["year"]+'年'+data["articles"]["article"][cnt]["month"]+'月';
	string += '</a>\n';
    	string += '</li>';
	ca.push(s);
    }
    string += '</ul>\n';
    document.getElementById('Archive').innerHTML = string;
}
// カテゴリリンク作成
function mkCategory() {
    var string = '';
    var ca = new Array();
    var flag = 0;
    string += '<ul>\n';
    for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {

	if (data["articles"]["article"][cnt]["category"] != null) {

	    flag = 0;
	    for (i = 0; i < ca.length; i++) {
	        if (data["articles"]["article"][cnt]["category"] == ca[i]) {
		    flag = 1;
                    break;
                }
            }
            if (flag == 1) {
	        continue;
	    }
    	    string += '<li>';
	    string += '<a href=\"javascript: showCategoryPage(\''+data["articles"]["article"][cnt]["category"]+'\', 1)\">';
            string += data["articles"]["article"][cnt]["category"];
	    string += '</a>\n';
    	    string += '</li>';
	    ca.push(data["articles"]["article"][cnt]["category"]);
	}
    }
    string += '</ul>\n';
    document.getElementById('Category').innerHTML = string;	
}
// 指定個別ページの表示
function showPage(cnt) {
	document.getElementById('myContents').innerHTML = viewPage( cnt );
}
// 年月日ページ(for calendar)
function showDate( aYear, aMonth, aDate )
{
    var string = '';
    var s;
    var year;
    var month;
    var day;

    year = aYear.toString();
    month = aMonth.toString();
    day = aDate.toString();
    if ((digestArchivePages[year+month] != null) && (digestArchivePages[year+month] > 0)) {
        string += '<div id=\"calendarTop\">Top&gt;'+year+'/'+month+'/'+day+'</div>\n';
        for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
            s = data["articles"]["article"][cnt]["year"]+'/'+data["articles"]["article"][cnt]["month"]+'/'+data["articles"]["article"][cnt]["day"];
            if (s == year+'/'+month+'/'+day) {
                string += viewDigestPage(cnt);
            }
        }
    }
    document.getElementById('myContents').innerHTML = string;
}
// カレンダリンク作成
function mkCalendarLink() {
    var now = new Date();
    var s;
    var string;
    var year;
    var month;

    year = now.getFullYear().toString();
    month = (now.getMonth()+1).toString();
    if ((digestArchivePages[year+month] != null) && (digestArchivePages[year+month] > 0)) {
        for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
            s = data["articles"]["article"][cnt]["year"]+'/'+data["articles"]["article"][cnt]["month"];
            if (s == (year+'/'+month)) {
                var id;
                id = year+'/'+month+'/'+data["articles"]["article"][cnt]["day"];
		string = '<a href=\"javascript: showDate('+year+','+month+','+data["articles"]["article"][cnt]["day"]+')\">';
		string += data["articles"]["article"][cnt]["day"];
		string += '</a>';
	        document.getElementById(id).innerHTML = string;
            }
        }
    }   
}

// ダイジェスト(サムネイルとプロジェクト情報)ページの表示
function viewDigestPage( cnt ) {
	var string = '';
	string += '<div class=\"digest\"><table><tr>';
	if ((data["articles"]["article"][cnt]["width"] > 680) ||
	    (data["articles"]["article"][cnt]["height"] > 600)) {
	    htmlString = data["articles"]["article"][cnt]["projectUrl"];
	    var idx = htmlString.lastIndexOf(".");
	    var htmlUrl = htmlString.substring(0, htmlString.lastIndexOf(".",idx-1));
	    htmlUrl += '.html';
        string += '<th><a href=\"'+topURL+'/archives/'+htmlUrl+'\" target=\"_blank\">';
    } else {
	    string += '<th><a href=\"javascript: showPage('+cnt+')\">';
    }
	string += '<img class=\"digestImage\" src=\"'+topURL+'/archives/'+data["articles"]["article"][cnt]["thumbnailUrl"]+'\"></a></th><th>';
	string += '<p class=\"digestDate\">'+data["articles"]["article"][cnt]["year"]+'/'+data["articles"]["article"][cnt]["month"]+'/'+data["articles"]["article"][cnt]["day"]+'</p>\n';
	string += '<p class=\"digestTitle\">'+data["articles"]["article"][cnt]["title"]+'</p>\n';
	string += '<p class=\"digestDescription\">'+data["articles"]["article"][cnt]["description"]+'</p>\n';
	if (data["articles"]["article"][cnt]["comment"] != null) {
	    string += '<p class=\"digestComment\">'+data["articles"]["article"][cnt]["comment"]+'</p>\n';
	}
	string += '<ul><li>分類:'+data["articles"]["article"][cnt]["category"]+'</li>\n';
	string += '<li>キーワード:'+data["articles"]["article"][cnt]["keyword"]+'</li>\n';
	string += '<li>書いた人:'+data["articles"]["article"][cnt]["author"]+'</li></ul>\n';
	string += '</th></tr></table></div>\n';
	return string;
}
// 書庫ページ(月単位)表示
function showArchivePage(date, displayPageNo) {
    var string = '';
    var s = '';
    var currentDigestNum = 1;
    var startDigestNo = maxDigestNum * (displayPageNo - 1) + 1;

    string += '<div id=\"archiveTop\">Top&gt;アーカイブ&gt;'+date+'</div>\n';
    for (var cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
        s = data["articles"]["article"][cnt]["year"]+data["articles"]["article"][cnt]["month"];
		if (s == date) {
			if (currentDigestNum >= (startDigestNo)) {
				if ((startDigestNo + maxDigestNum) <= currentDigestNum) {
					break;
				}
	    		string += viewDigestPage(cnt);
	    	}
	    	currentDigestNum = currentDigestNum + 1;
        }
    }
    // 次ページリンク・戻るリンク作成
    if (currentDigestNum-1 > maxDigestNum) {
    	// 戻るリンク作成
    	// Link to showArchivePage(date, currentDigestNum / maxDigestNum - 1)
    	string += '<div id=\"backpage\"><a href=\"javascript: showArchivePage(\''+date+'\', '+(Math.ceil((currentDigestNum-1) / maxDigestNum) - 1)+')\">戻る</a>';
		string += '</div>';
    }
    if ((currentDigestNum-1) < digestArchivePages[date]) {
    	// 次ページリンク作成
    	// Link to showArchivePage(date, currentDigestNum / maxDigestNum + 1)
    	string += '<div id=\"nextpage\"><a href=\"javascript: showArchivePage(\''+date+'\', '+Math.floor((currentDigestNum-1) / maxDigestNum + 1)+')\">次ページ</a>';
		string += '</div>';
    }
    document.getElementById('myContents').innerHTML = string;
}
// カテゴリページ表示
function showCategoryPage( categoryName, displayPageNo ) {
    var string = '';
    var currentDigestNum = 1;
    var startDigestNo = maxDigestNum * (displayPageNo - 1) + 1;
    
    string += '<div id=\"categoryTop\">カテゴリ&gt;'+categoryName+'</div>\n';
    for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
		if (data["articles"]["article"][cnt]["category"] == categoryName) {
			if (currentDigestNum >= (startDigestNo)) {
				if ((startDigestNo + maxDigestNum) <= currentDigestNum) {
					break;
				}
		    	string += viewDigestPage(cnt);
	    	}
	    	currentDigestNum = currentDigestNum + 1;
        }
    }
    // 次ページリンク・戻るリンク作成
    if (currentDigestNum-1 > maxDigestNum) {
    	// 戻るリンク作成
    	// Link to showCategoryPage(categoryName, currentDigestNum / maxDigestNum - 1)
    	string += '<div id=\"backpage\"><a href=\"javascript: showCategoryPage(\''+categoryName+'\', '+(Math.ceil((currentDigestNum-1) / maxDigestNum) - 1)+')\">戻る</a>';
		string += '</div>';
    }
    if ((currentDigestNum-1) < digestCategoryPages[categoryName]) {
    	// 次ページリンク作成
    	// Link to showCategoryPage(categoryName, currentDigestNum / maxDigestNum + 1)
    	string += '<div id=\"nextpage\"><a href=\"javascript: showCategoryPage(\''+categoryName+'\', '+Math.floor((currentDigestNum-1) / maxDigestNum + 1)+')\">次ページ</a>';
		string += '</div>';
    }
    document.getElementById('myContents').innerHTML = string;
}
// 検索
function searchArticles (pattern) {
    var hit = 0;
    var searchNum = 0;
    var string = '';
    var currentDigestNum = 1;
    var regex = new RegExp(pattern, "i");

    for (var cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
        hit = 0;
        if (data["articles"]["article"][cnt]["author"] != null) {
            if (data["articles"]["article"][cnt]["author"].match(regex)) {
	        hit = 1;
	    }
	}
        if (data["articles"]["article"][cnt]["description"] != null) {
            if (data["articles"]["article"][cnt]["description"].match(regex)) {
	        hit = 1;
	    }
	}
        if (data["articles"]["article"][cnt]["keyword"] != null) {
            if (data["articles"]["article"][cnt]["keyword"].match(regex)) {
	        hit = 1;
	    }
	}
        if (data["articles"]["article"][cnt]["comment"] != null) {
            if (data["articles"]["article"][cnt]["comment"].match(regex)) {
	        hit = 1;
	    }
	}
        if (data["articles"]["article"][cnt]["title"] != null) {
            if (data["articles"]["article"][cnt]["title"].match(regex)) {
	        hit = 1;
	    }
	}
	if (hit > 0) {
            if (searchNum == 0) {
		string += '<div id=\"searchTop\">検索'+pattern+'</div>\n';
	    }
	    string += viewDigestPage(cnt);
	    searchNum += 1;
        }
    }
    if (searchNum == 0) {
        string += '<div id=\"searchTop\">記事がみつかりませんでした</div>\n';
    }
    document.getElementById('myContents').innerHTML = string;
}
// Mainページ表示
function showMainPage( displayPageNo ) {
    var string = '';
    var maxPage = 0;
    var startDigestNo = maxDigestNum * (displayPageNo - 1) + 1;
    var currentDigestNum = startDigestNo;

    string += '<div id=\"mainTop\">メイン&gt;'+displayPageNo+'</div>\n';
    maxPage = Math.min((maxDigestNum + startDigestNo), data["articles"]["article"].length);
    for (cnt = startDigestNo; cnt < maxPage ; cnt++) {
    	string += viewDigestPage(cnt);
    	currentDigestNum = currentDigestNum + 1;
    }
    // 次ページリンク・戻るリンク作成
    if (currentDigestNum-1 > maxDigestNum) {
    	// 戻るリンク作成
    	// Link to showCategoryPage(categoryName, currentDigestNum / maxDigestNum - 1)
    	string += '<div id=\"backpage\"><a href=\"javascript: showMainPage('+(Math.ceil((currentDigestNum-1) / maxDigestNum) - 1)+')\">戻る</a>';
		string += '</div>';
    }
    if ((currentDigestNum-1) < (data["articles"]["article"].length-1)) {
    	// 次ページリンク作成
    	// Link to showCategoryPage(categoryName, currentDigestNum / maxDigestNum + 1)
    	string += '<div id=\"nextpage\"><a href=\"javascript: showMainPage('+Math.floor((currentDigestNum-1) / maxDigestNum + 1)+')\">次ページ</a>';
		string += '</div>';
    }
    document.getElementById('myContents').innerHTML = string;
}
// 書庫ページ数カウント
function countArchive() {
    var s = '';
    var ca = new Array();
    var flag = 0;

     for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
        s = data["articles"]["article"][cnt]["year"]+data["articles"]["article"][cnt]["month"];
		if (s.length > 0) {
			flag = 0;
			for (i = 0; i < ca.length; i++) {
	    		if (s == ca[i]) {
					flag = 1;
					digestArchivePages[s] = digestArchivePages[s] + 1;
                	break;
            	}
        	}
        	if (flag == 1) {
	    		continue;
			}
			ca.push(s);
			digestArchivePages[s] = 1;
		}
    }
}
// カテゴリページ数カウント
function countCategory() {
    var s = '';
    var ca = new Array();
    var flag = 0;

    for (cnt = 1; cnt < data["articles"]["article"].length ; cnt++) {
    	s = data["articles"]["article"][cnt]["category"];
		if ((s != null) && (s.length > 0)) {
		    flag = 0;
			for (i = 0; i < ca.length; i++) {
	        	if (s == ca[i]) {
					flag = 1;
					digestCategoryPages[s] = digestCategoryPages[s] + 1;
                    break;
                }
            }
            if (flag == 1) {
	        	continue;
	    	}
		    ca.push(s);
			digestCategoryPages[s] = 1;
		}
    }
}
//初期ページ(index.html)
function topPage(topUrl) {
    var url = topUrl + "/archives/articles.xml";
    var http = new JKL.ParseXML( url );
    data = http.parse();
    var string = '';
	
	topURL = topUrl;
    countArchive();
    countCategory();
    mkCategory();
    mkArchive();
    mkCalendarLink();
    showMainPage( 1 );
}
//ロード時の処理
function init(url) {
    topPage(url);
}

