// System by SHOHEI TANAKA

var g_retry_cnt = 0;
var g_view_cnt = 0;
var g_state = 'inital';
var g_flip_timer = 0;
var g_request_offset = 15000;
var g_retry_interval= 15000;

Event.observe(window, 'load', function() 
	{
		g_state = 'miss';
		requestClk(0);
		g_request_offset = Math.floor( Math.random() * 1000 * 15);
	}
);

function cbOnFail() 
{
	g_retry_cnt++;

	switch(g_state) {
	case 'miss':
		waitReqClk(0);
		break;
	case 'nobuffered':
		waitReqClk(1);
		break;
	default:
	}
}

function onFlipTimer() 
{
	g_flip_timer = 0;

	switch(g_state) {
	case 'buffered':
		flip();
		g_state = 'nobuffered';
		waitReqClk(1);
		break;
	case 'miss':
		// NOP
		break;
	case 'nobuffered':
		g_state = 'miss';
		break;
	default:
	}
}

function setFlipTimer(interval)
{
	g_retry_cnt = 0;

	dd = new Date();
	ss = dd.getSeconds();
	
	if(ss>30){
    interval = (60 - ss) * 1000;
	}else{
    interval = (30 - ss) * 1000;
	}

	switch(g_state) {
	case 'miss':
		flip();
		g_state = 'nobuffered';
		waitReqClk(1);
		break;
	case 'nobuffered':
		g_state = 'buffered';
		break;
	default:
	}

	if(g_flip_timer != 0 ) {
		clearTimeout(g_flip_timer);
	}
	g_flip_timer = setTimeout(onFlipTimer, interval);
}

function flip() 
{
	$('ajax_data').remove();

	Effect.Appear('clk_tmp');
	$('clk_tmp').id = 'ajax_data';
}

function waitReqClk(isNext)
{
	request_interval = g_retry_interval;

	if(g_retry_cnt == 0) {
		request_interval = g_request_offset;
	} else {
		if( isNext == 0 ) {
			request_interval = g_retry_interval;
		} else {
			request_interval = g_retry_interval;
		}
	}

	setTimeout("requestClk(" + isNext + ")", request_interval);
}

function requestClk(isNext)
{
//表示位置対策
	if(! $('clk_tmp')) {
		$('ajax_data').insert({after: '<div id="clk_tmp" style="display:none;"></div>'});
	}

	dd = new Date();
	hh = dd.getHours();
	mm = dd.getMinutes();
	ss = dd.getSeconds();

//60分・24時の表示を0に戻す対策

	if(isNext) {
		target = 'clk_tmp';
		mm ++;
		if( 60 <= mm) {
			mm = 0;
			hh++;
		}
		if(24 <= hh){
			hh = 0;
		}
	} else {
		target = 'clk_tmp';
	}

//表示画像指定関数


   mm = hh * 60 + mm;
   mm = mm * 2;
   if(ss>30){
	   ss=1;
   }else{
	   ss=0;
   }
   kobe = mm + ss;
   term = 44;
   
   if(kobe > term){
   toy = kobe / term;
   num = Math.floor( toy );
   bon = num * term;
   num = kobe - bon;
   }else{
	   num = kobe;
   }
   if(10 > num){
	   num = '000' + num;
   } else {
	   if(100 > num){
       num = '00' + num;
       } else {
	   num = '0' + num;
	   }
   }
   

//prototypeによる表示

	new Ajax.Updater(
		target,
		'timer/' + num + '.html', 
		{
			asynchronous:true, 
			evalScripts:true, 
			method:'get', 
			onFailure:function(request, json) {
				cbOnFail();
			},
			requestHeaders:['X-Update', 'ajax_data']
		}
	);
	
}

