// whatsnew.js - JavaScript
// Copyright 2006 Sofrosune. All rights reserved.
// Author: Sofrosune; www.sofrosune.net
// No part of this program may be reproduced or transmitted in any form or 
// by any means without permission from the author, Sofrosune.
//
// Date: May 31, 2006.
// Version: 1.00; May 31, 2006.

// Usage: index.html?PARAM_TYPE=info&PARAM_OFFSET=10
/**
<head>
	<script type="text/javascript" src="../scripts/whatsnew.js"></script>
	<script type="text/javascript" src="../scripts/whatsnew_data.js"></script>
</head>

<body>
	<div class="newsbox">
	<div class="news_body">
	<script type="text/javascript">whatsnew_put();</script>
	</div>
	<div class="news_foot">
	<script type="text/javascript">whatsnew_navi();</script>
	</div>
	</div>
</body>
*/

// constants
var kWHATSNEW_HEAD_TMPL = '\
<table border="0" width="100%" cellspacing="0" cellpadding="0">\
';

var kWHATSNEW_FOOT_TMPL = '</table>\
';

var kWHATSNEW_ITEM_TMPL = '<tr>\
<td class="news_date" align="left" valign="top" width="64">$$$date$$$</td>\
<td class="news_type_$$$type$$$" align="center" valign="top" width="24">&nbsp;</td>\
<td class="news_subject" align="left" valign="top">$$$text$$$</td>\
</tr>\
';

var kWHATSNEW_SEPA_TMPL = '<tr>\
<td class="news_sepa" colspan="3"></td>\
</tr>\
';

var kWHATSNEW_NAVI_TMPL = '\
<table border="0" width="100%" cellspacing="0" cellpadding="0">\
<tr>\
<td align="left" valign="middle" width="50%">$$$prev$$$</td>\
<td align="right" valign="middle" width="50%">$$$next$$$</td>\
</tr>\
</table>\
';

var kWHATSNEW_PREV_TMPL = '<a class="prev" title="Show previous $$$rest$$$ items" href="$$$self$$$?PARAM_TYPE=$$$type$$$&PARAM_OFFSET=$$$offset$$$">Show previous $$$rest$$$ items</a>';

var kWHATSNEW_NEXT_TMPL = '<a class="next" title="Show next $$$rest$$$ items" href="$$$self$$$?PARAM_TYPE=$$$type$$$&PARAM_OFFSET=$$$offset$$$">Show next $$$rest$$$ items</a>';

// global variables
var gWhatsnew_numb = 5;
var gWhatsnew_data = new Array(); /* [ [date1,text1],[date2,text2],...,null ] */


// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// cWhatsnew_param
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// Usage:
//	index.htlm?PARAM_TYPE=info&PARAM_OFFSET=10
//	var param = new cWhatsnew_param()

function cWhatsnew_param() {
	this.self = "index.html";
	this.type = "";
	this.offset = 0;
	this.start = 0;
	this.end = 0;

	// get self; "index.html"
	var path = location.pathname.replace(/\\/g,"/");
	if (path.search(/\/([^\/]+)$/) != -1) {
		this.self = RegExp.$1;
	}

	// parse params
	var param_str = location.search; // "?KEY1=VAL1&KEY2=VAL2"
	if (param_str.charAt(0) == "?") {
		param_str = param_str.substring(1);
		var params = param_str.split("&");
		for (var i = 0; i < params.length; i++) {
			var tuple = params[i].split("=");
			var key = tuple[0]; // unescape()
			var val = tuple[1]; // unescape()
			switch (key) {
			case "PARAM_TYPE": this.type = val; break;
			case "PARAM_OFFSET": this.offset = parseInt(val); break;
			}
		}
	}

	// debug
//	window.alert("(type,offset)=("+this.type+","+this.offset+")");
}

var gWhatsnew_param = new cWhatsnew_param();


// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// whatsnew_rest
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// Usage:
//	offset = [0 .. (gWhatsnew_data.length - 1)]
//	step = [-1 or 1]

function whatsnew_rest(offset,step,type) {
	step = (step > 0 ? +1 : (step < 0 ? -1 : 0));
	if ((type == undefined) || (type == "")) { type = "all"; }

	var count = 0;
	while ((offset >= 0) && (offset < gWhatsnew_data.length)) {
		var tuple = gWhatsnew_data[offset];
		offset += step;
		if (tuple == null) { continue; }
		if ((type == "all") || (type == tuple[1])) { count += 1; }
	}

	return count;
}


// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// whatsnew_put
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

function whatsnew_put(type,numb) {

	if ((numb == undefined) || (numb < 0)) { numb = gWhatsnew_numb; }
	if (type != undefined) { gWhatsnew_param.type = type; }
	type = gWhatsnew_param.type;
	if (type == "") { type = "all"; }
	var offset = gWhatsnew_param.offset;
	var step = +1;
	if (offset < 0) { offset = - offset; step = - step; }

	// seach database for type record
	var idxes = new Array();
	var n = offset;
	while ((idxes.length < numb) && (n >= 0) && (n < gWhatsnew_data.length)) {
		var tuple = gWhatsnew_data[n];
		n += step;
		if (tuple == null) { continue; }
		if ((type == "all") || (type == tuple[1]) ) { idxes.push(n - step); }
	}
	if (step < 0) { idxes = idxes.reverse(); }
	if (idxes.length == 0) { return; }
	gWhatsnew_param.start = idxes[0];
	gWhatsnew_param.end = idxes[idxes.length - 1];

	// generate message
	var msg = "";
	msg += kWHATSNEW_HEAD_TMPL;
	for (var i = 0; i < idxes.length; i++) {
		if (i > 0) { msg += kWHATSNEW_SEPA_TMPL; }
		var tuple = gWhatsnew_data[idxes[i]];
		var date = tuple[0];
		var type = tuple[1];
		var text = tuple[2];
		var aMsg = kWHATSNEW_ITEM_TMPL;
		aMsg = aMsg.replace(/\$\$\$date\$\$\$/g,date);
		aMsg = aMsg.replace(/\$\$\$type\$\$\$/g,type);
		aMsg = aMsg.replace(/\$\$\$text\$\$\$/g,text);
		msg += aMsg;
	}
	msg += kWHATSNEW_FOOT_TMPL;

	document.write(msg);
}


// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// whatsnew_navi
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

function whatsnew_navi() {

	var self = gWhatsnew_param.self;
	var type = gWhatsnew_param.type;
	if (type == "") { type = "all"; }
	var offset = gWhatsnew_param.offset;
	var step = +1;
	if (offset < 0) { offset = - offset; step = - step; }
	var start = gWhatsnew_param.start;
	var end = gWhatsnew_param.end;
	var rest_prev = whatsnew_rest(start-1,-1,type);
	var rest_next = whatsnew_rest(end+1,+1,type);

	// generate prev and next navi
	var navi_prev = '<span class="prev">&nbsp;</span>';
	var navi_next = '<span class="next">&nbsp;</span>';

	// prev navi
	if (rest_prev > 0) {
		var aMsg = kWHATSNEW_PREV_TMPL;
		aMsg = aMsg.replace(/\$\$\$self\$\$\$/g,self);
		aMsg = aMsg.replace(/\$\$\$type\$\$\$/g,type);
		aMsg = aMsg.replace(/\$\$\$offset\$\$\$/g,- (start-1));
		aMsg = aMsg.replace(/\$\$\$rest\$\$\$/g,rest_prev);
		navi_prev = aMsg;
	}

	// prev navi
	if (rest_next > 0) {
		var aMsg = kWHATSNEW_NEXT_TMPL;
		aMsg = aMsg.replace(/\$\$\$self\$\$\$/g,self);
		aMsg = aMsg.replace(/\$\$\$type\$\$\$/g,type);
		aMsg = aMsg.replace(/\$\$\$offset\$\$\$/g,end+1);
		aMsg = aMsg.replace(/\$\$\$rest\$\$\$/g,rest_next);
		navi_next = aMsg;
	}

	// generate navi
	var msg = kWHATSNEW_NAVI_TMPL;
	msg = msg.replace(/\$\$\$prev\$\$\$/g,navi_prev);
	msg = msg.replace(/\$\$\$next\$\$\$/g,navi_next);

	document.write(msg);
}

// end of javascript
