<!-- BEGIN [% component.name %] -->
    [% # INCLUDE dumper.tt dump = c.stash %]
	[% # INCLUDE dumper.tt dump = c.authen.last_access %]
	[% # INCLUDE dumper.tt dump = c.user_profile.session_idle_timeout %]

    <!-- new user messages -->
    [% IF c.authen.username; # skip if logged / timed out
        args = [];
        args.push('service='  _ c.cfg('settings').item('_centre') );
        args.push('username=' _ c.authen.username);
        args.push('app_url='  _ app_url);
        args.push('tt='       _ template.name);

		cgi_url = c.cfg('settings').base_href
			_ '/script/cgi/new_messages.cgi?'
			_ args.join(';');

		last_access_ms = c.authen.last_access * 1000;
		idle_time_ms   = c.user_profile.session_idle_timeout * 1000;
		interval_ms    = ( 60 * 1000 ) * 1; # mins (in millisecs)
    %]
        <script language="javascript" type="text/javascript">
			[% USE new_msgs
				= url( app_url _ '/ajax/seek_new_messages', tt = template.name); %]
			$(document).ready(function() { // on page load:
				jQuery.get("[% new_msgs %]", function(data) {
					$("#new_msg").html(data); // alert(data);
				});
			});
		</script>

		[% polling_window = idle_time_ms - interval_ms; # 1 interval short of idle-timeout %]
        <script language="javascript" type="text/javascript">
			var startTime = [% last_access_ms %]; // same as new Date().getTime()
			var interval = setInterval( function() {
				// will stop firing 1 interval-time shorter than idle timeout:
				var nowTime = new Date().getTime(); // alert(nowTime);
				if ( ( nowTime - startTime ) > [% polling_window %] ) {
					clearInterval(interval);
					return;
				} // alert( (nowTime - [% last_access_ms %]) / 1000 + ' seconds' );
				// require a unique string (eg time) to prevent brain-dead browser cacheing result:
				$('#new_msg').load( "[% cgi_url %];time=" + nowTime );
				//jQuery.get("[% cgi_url %];date=" + nowTime, function(data) { // same as above
				//	$("#new_msg").html(data); // alert(data);
				//});
			}, [% interval_ms %]);
		</script>
		<div id="new_msg" class="warning"></div>
    [% END %]
	<!-- end new user messages -->

    <script language="javascript" type="text/javascript">
	/*
		// test of setInterval & clearInterval function:
		var startTime = new Date().getTime();
		var interval = setInterval( function() {
			if ( new Date().getTime() - startTime > 60000 ) {
				clearInterval(interval);
				return;
			}
			// alert( (new Date().getTime()  - startTime) / 1000 );
		}, 10000);
	*/
	</script>

    <!-- stash messages -->
    [% IF c.stash.status_msg %]
        <p class="message">[% c.stash.status_msg %]</p>
    [% END %]

    [% IF c.stash.error_msg;
        error = c.stash.error_msg;
        IF is_code_ref(error); # split into list form: %]
            <div class="error">ERROR:</div>
            [% FOREACH e IN error %]<div class="indent error">* [% e %]</div>[% END %]
        [% ELSE %]
            <p class="error">ERROR: [% error %]</p>
        [% END %]
    [% END %]

    <!-- flash messages -->
    [% IF using_cap_flash; # using MessageStack instead & disabled to prevent c.flash producing undef msgs
        # PROCESS dumper.tt dump = c.flash.dump;
        # FOREACH type IN [ 'info', 'warning', 'error' ];
            # IF c.flash.has_key(type);
                # FOREACH message IN c.flash.get(type) -%]
                <p class="[% type %]">
                    [% type | upper %]: [% message %]
                </p>
                [% # END %]
            [% # END %]
        [% # END %]
    [% END %]

    [% INCLUDE site/snippets/message_stack.tt %]
<!-- END [% component.name %] -->
