window.Token =
{
	// ----- Public fields -----------------------------------------------------

	ImgSrc: adressConf.tokenPrefix+'/imgs/visu/empty.gif',
	RefreshDelay: 60000, // // 1*60*1000 ms
	ErrStream: 'console',  // '' for no log or null, 'console' (firebug) and 'alert' otherwise
	LogStream: 'console',  // '' for no log or null, 'console' (firebug) and 'alert' otherwise
	Verbose: 1, // 0 (init), 1 (+ success), 2 (+ calls)

	// ----- Public methods ----------------------------------------------------

	// Mise en place de la gestion du jeton
	create: function () {
		var date = new Date();
		var sdate = date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear();
		var stime = date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();
		window.Token._log('Creation de la gestion du jeton le '+sdate+' a '+stime, 0);
		// La demande de jeton se fait via le chargement d'une image...
		window.Token._imgToken = new Image;
		// Mise en place du renouvellement de demande de mise a jour du jeton
		window.Token._timer = window.setInterval('window.Token._update();',window.Token.RefreshDelay); 
		// Demande de mise a jour initiale du jeton
		window.Token._update();
	},

	destroy: function () {
		if (window.Token._timer)
			window.clearInterval(window.Token._timer);
		if (window.Token._imgToken)
		{
			if (window.Token._imgToken.onload)
				window.Token._imgToken.onload = null;
			if (window.Token._imgToken.onreadystatechange)
				window.Token._imgToken.onreadystatechange = null;
			delete window.Token._imgToken;
		}
		if (window.Token._currentToken)
			delete window.Token._currentToken;
		if (window.Token._onCurrentLoaded)
			delete window.Token._onCurrentLoaded;
		if (window.Token._onCurrentCompleted)
			delete window.Token._onCurrentCompleted;
	},

	// ----- Private fields ----------------------------------------------------
	_timer: null,
	_imgToken: null,
	_currentToken: '',
	_currentTokenNumber: 1,
	_onCurrentLoaded: null,
	_onCurrentCompleted: null,

	// ----- Private methods ---------------------------------------------------

	// Demande de mise a jour du jeton (chargement d'une image a url variable)
	_update: function()
	{
		var date = new Date();
		var sdate = date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear();
		var stime = date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();
		if (window.Token._currentToken)
		{
		 	if (window.Token._currentTokenNumber > 0)
		 	{
		 		window.Token._currentTokenNumber--;
				window.Token._error('Pas de demande de mise a jour du jeton le '+sdate+' a '+stime+' car la demande "'+window.Token._currentToken+'" est toujours en cours...');
				return;
		 	}
		}
		window.Token._currentTokenNumber = 1;
		window.Token._currentToken = Math.random()+'&date='+sdate+'-'+stime;
		window.Token._log('Demande de mise a jour du jeton le '+sdate+' a '+stime, 2);
		window.Token._onCurrentLoaded = function(currentToken) {
			if ((! window.Token._currentToken) || (window.Token._currentToken != currentToken))
			{
				delete window.Token._onCurrentLoaded;
				delete window.Token._onCurrentCompleted;
				return;
			}
			window.Token._updated(currentToken);
		};
		window.Token._onCurrentCompleted = function(currentToken) {
			if ((! window.Token._currentToken) || (window.Token._currentToken != currentToken))
			{
				delete window.Token._onCurrentLoaded;
				delete window.Token._onCurrentCompleted;
				return;
			}
			if (window.Token._imgToken && window.Token._imgToken.readyState=='complete')
			{
				window.Token._updated(currentToken);
				delete window.Token._onCurrentLoaded;
				delete window.Token._onCurrentCompleted;
			}
		};
		window.Token._imgToken.onload = function() { window.Token._onCurrentLoaded(window.Token._currentToken) };
		window.Token._imgToken.onreadystatechange = function() { window.Token._onCurrentCompleted(window.Token._currentToken) };
		window.Token._imgToken.src = window.Token.ImgSrc+'?random='+window.Token._currentToken;
	},

	// Demande de mise a jour du jeton (chargement d'une image a url variable)
	_updated: function(currentToken)
	{
		if (! currentToken)
		{
			window.Token._error('Demande de validation erronee pour "'+currentToken+'"');
			return;
		}
		var date = new Date();
		var stime = date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();
		window.Token._log('Validation de la demande "'+currentToken+'" a '+stime, 1);
		window.Token._currentToken = '';
		window.Token._imgToken.onload = null;
		window.Token._imgToken.onreadystatechange = null;
	},

	_log: function(msg, msgVerbose) {
		if (! msgVerbose)
			msgVerbose = window.Token.Verbose;
		if (window.Token.LogStream)
			if (window.Token.LogStream == 'console')
			{
				if ((msgVerbose <= window.Token.Verbose) && (typeof(console)!='undefined') && console.log)
					console.log('Token: '+msg);
			}
			else // LogStream == 'alert'
			{
				if (msgVerbose <= window.Token.Verbose)
					alert('Token: '+msg);
			}
	},

	_error: function(msg) {
		if (window.Token.ErrStream)
			if (window.Token.ErrStream == 'console')
			{
				if ((typeof(console)!='undefined') && console.warn)
					console.warn('Token: '+msg);
			}
			else // LogStream == 'alert'
			{
				alert('Token: '+msg);
			}
	}
};

// Lancement immediat de la gestion du jeton
window.Token.create();

