// Requisitar o tempo da sessão a cada 30 seg
var __syncSessionInterval = this.setInterval(timeSessionSync,1000*30);
// Chamar o contador a cada 1 seg
var __countSessionInterval = this.setInterval(countSessionTime,1000);

var __sessionTimeLeft;
//Apenas uma requisição por vez
var __sessionRequestRunning = false;

function timeSessionSync(){
	if( !__sessionRequestRunning ){
		
		__sessionRequestRunning = true;
		
		var ajax = new sack();
		ajax.requestFile = "includes/sessiontime.php?"+Math.ceil(Math.random()* 1000);
		ajax.onCompletion = function(){
			__sessionRequestRunning = false;
			synchronize(ajax.response); 
		};
		ajax.runAJAX();	
	}
}

function synchronize(time){
	
	// Se a diferença de tempo for maior que 30seg, chame a atenção do usuário
	if( (time - __sessionTimeLeft)>30 ){
		$('timerAtualizado').show();
		new Effect.Parallel([
		    new Effect.Highlight('timerAtualizado', {duration: 0.8}), 
		    new Effect.Opacity('timerAtualizado', { sync: true, from: 1.4, to: 0 })
		  ], { 
		    duration: 1.5
		  });		
		Effect.Pulsate($('timer').getElementsByTagName('span')[0]);
	}
	__sessionTimeLeft = Math.abs(time);
	
}
function countSessionTime(){
	if(! $('timer') ){
		return;
	}

	var clock = $('timer').getElementsByTagName('span')[0];
	
	var min = Math.floor( __sessionTimeLeft/60 );
	var seg = Math.floor( __sessionTimeLeft%60 );
	
	if( __sessionTimeLeft == 0 ){
		this.clearInterval(__countSessionInterval);
		this.clearInterval(__syncSessionInterval);
		$('timer').innerHTML ='sua sessão expirou';
		return;
	}
	
	if( seg<10 ){ seg = '0'+seg }
	
	clock.innerHTML = min+':'+seg;
	
	__sessionTimeLeft--;
}