
/*

	くずなすくりぷとプラグイン

	現在の参加者
	ユーザー常駐時間
	メンバー常駐時間

*/

var Members =
{
	cgipath	: "http://ashocan.hp.infoseek.co.jp/cgi-bin/members.cgi",
	datpath	: "http://ashocan.hp.infoseek.co.jp/cgi-bin/members.dat",
	
	waste		: 0,
	expires		: "",
	membernum	: 0,
	membertime	: 0,
	lastfocus	: new Date(),
	
	run : function()
	{
		$("header").innerHTML += '&nbsp;&nbsp;<SPAN id="Members"></SPAN>';
		
		var date = new Date();
		date.setTime( date.getTime() + ( 1000 * 60 * 60 * 24 * 365 ) );
		Members.expires = date.toGMTString();
		
		Members.readCookie();
		
		Members.membercount();
		Members.synchronize();
		
		setInterval( "Members.mycount()", 1000 );
		setInterval( "Members.membercount()", 10000 );
		setInterval( "Members.synchronize()", 58000 );
		
		Event.add( window, "mouseover", ( function() { Members.lastfocus = new Date(); } ), false );
	},
	
	readCookie : function()
	{
		if ( document.cookie.match( /waste=(\d*)/ ) )
		{
			Members.waste = ( document.cookie.match( /waste=(\d*)/ ) )[1];
		}
	},
	
	mycount : function()
	{
		var text = "";
		
		text += "現在の参加者&nbsp;:&nbsp;";
		text += Members.membernum + "人";
		
		text += "&nbsp;&nbsp;";
		
		if ( new Date().getTime() - Members.lastfocus.getTime() < 3600 * 1000 )
		{
			Members.waste++;
			document.cookie = "waste=" + Members.waste + "; expires=" + Members.expires;
		}
		
		Members.membertime += Members.membernum;
		
		
		var time = Members.waste;
		
		text += "あなたの利用時間&nbsp;:&nbsp;";
		
		var h = Math.floor( time / 3600 );
		time -= h * 3600;
		if ( h > 0 ) text += h + "時間";
		
		var m = Math.floor( time / 60 );
		time -= m * 60;
		if ( m > 0 ) text += m + "分";
		
		text += Math.floor( time ) + "秒";
		
		text += "&nbsp;&nbsp;";
		
		time = Members.membertime;
		
		text += "みんなの利用時間&nbsp;:&nbsp;";
		
		var h = Math.floor( time / 3600 );
		time -= h * 3600;
		if ( h > 0 ) text += h + "時間";
		
		var m = Math.floor( time / 60 );
		time -= m * 60;
		if ( m > 0 ) text += m + "分";
		
		text += Math.floor( time ) + "秒";
		
		text += "&nbsp;&nbsp;";
		
		$("Members").innerHTML = text;
		
		Articles.resize();
	},
	
	membercount : function()
	{
		Ajax.Request( Members.datpath, { method : "HEAD", onComplete : Members.membercountComplete, parameters : new Date().getTime() } );
		
		return false;
	},
	
	membercountComplete : function( xmlhttp )
	{
		var len = xmlhttp.getResponseHeader( "Content-Length" );
		
		if ( ( len - 11 ) / 26 == Math.floor( ( len - 11 ) / 26 ) )
		{
			Members.membernum = ( len - 11 ) / 26;
		}
		
		return false;
	},
	
	synchronize : function()
	{
		if ( new Date().getTime() - Members.lastfocus.getTime() > 3600 * 1000 )
		{
			return false;
		}
		
		Ajax.Request( Members.cgipath, { method : "GET", onComplete : Members.synchronizeComplete, parameters : new Date().getTime() } );
		
		return false;
	},
	
	synchronizeComplete : function( xmlhttp )
	{
		if ( xmlhttp.status == 200 )
		{
			Members.membertime = parseInt( ( xmlhttp.responseText.match( /<MEMBERTIME>(\d+)<\/MEMBERTIME>/ ) )[1] );
		}
		
		return false
	}
}

Members.run();

/*

CGI部分

#!/usr/local/bin/perl

my $addr = crypt( $ENV{REMOTE_ADDR}, "ST" );

my $data = "";

open( my $fh, "+<members.dat" ); 
flock( $fh, 2 );

my $membertime = int( <$fh> );

while ( my $l = <$fh> )
{
	my( $a, $t ) = split( "<>", $l );
	
	next if( $t < time() - 60 );
	
	if ( $a eq $addr )
	{
		$membertime += time() - $t;
	}
	else
	{
		$data .= $l;
	}
}

seek( $fh, 0, 0 ); truncate( $fh, 0 );

print $fh sprintf( "%10d\n", $membertime );
print $fh "$data";
print $fh "$addr<>".time()."\n";

close( $fh );

print "Content-type:text/html\n\n<MEMBERTIME>$alltime</MEMBERTIME>";

*/