The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
var image = new function() {
	var preloaded_images = new Array();
	
	var check_content = function( item ) {
		if ( ! item.get( 'loc' ) ) return;

		new Ajax.Request(
			'/content' + item.get( 'loc' ) + 'index.htm?' + Math.round( Math.random() * 99999 ) + '=' + Math.round( Math.random() * 99999 ),
			{
				method:	'get',
				onComplete	: function( req ) {
					var div = new Element( 'div' ).update( req.responseText.stripScripts() );

					div.select( 'img' ).each(
						function( img ) {
							var bild = new Image();
							bild.src = img.readAttribute('src');
							
							preloaded_images[preloaded_images.length] = bild;
							//alert( bild.src );
						}
					)
				}
			}
		);

		if ( item.get( 'subs' ) ) {
			item.get( 'subs' ).each(
				function( sub_item ) {
					check_content( sub_item );
				}
			);
		}
	}

	return {
		preload	: function() {
			var menu_hash = menu.get_menu_hash();

			menu_hash.each(
				function( item ) {
					check_content( item );
				}
			);
		}
	}
}

var content = new function() {
	return {
		process	: function() {
			var args = $A( content.process.arguments );

			var loc = args.shift();

			if ( ! loc ) { return; }

			var inner_div = new Element( 'div' );

			inner_div.setStyle(
				{
					'padding'	: '0px',
					'margin'	: '0px'
				}
			);

			if ( $( 'div_content' ).visible() ) {
				new Effect.Fade(
					'div_content',
					{
						afterFinish	: function() {

							new Ajax.Request(
								'/content' + loc + 'index.htm?' + Math.round( Math.random() * 99999 ) + '=' + Math.round( Math.random() * 99999 ),
								{
									method:	'get',
									onComplete	: function( req ) {

										var the_content = inner_div.update( req.responseText );

										$( 'div_content' ).update( the_content );

										new Effect.Appear(
											'div_content',
											{
												from	: 0.01
											}
										);
									}
								}
							)
						},
						to	: 0.01
					}
				);
			}
			else {
				new Ajax.Request(
					'/content' + loc + 'index.htm?' + Math.round( Math.random() * 99999 ) + '=' + Math.round( Math.random() * 99999 ),
					{
						method:	'get',
						onComplete	: function( req ) {

							$( 'div_content' ).update( inner_div.update( req.responseText ) );

							new Effect.Appear(
								'div_content',
								{
									from	: 0.00
								}
							);
						}
					}
				)
			}
		}
	}
}

// ----------------------------------------------------------------------------

var wait = 0;

window.dhtmlHistory.create(
	{
		toJSON: function(o) {
			return Object.toJSON(o);
		},
		fromJSON: function(s) {
			return s.evalJSON();
		}
	}
);

function handle_location( newLocation, historyData ) {
	newLocation = newLocation ? newLocation : '/';

	if ( ! wait && newLocation ) {
		wait = 1;

		content.process( newLocation );
		menu.process( newLocation );

		reset_wait();
	}
}

function handle_click( newLocation, historyData ) {
	if ( ! wait ) {
		dhtmlHistory.add( newLocation, historyData );
	}
	handle_location( newLocation, historyData );
}

function reset_wait() {
	var queue = $A(Effect.Queue);

	if ( queue.length > 0 ) {
		setTimeout( "reset_wait();", 1000 );
	}
	else {
		wait = 0;
	}
}

window.onload = function() {
	dhtmlHistory.initialize();
	dhtmlHistory.addListener(handle_location);

	menu.init();

	initialLocation = dhtmlHistory.getCurrentLocation();

	initialLocation = initialLocation ? initialLocation : '/';

	if ( dhtmlHistory.isFirstLoad() ) {
		if ( ! wait ) {
			dhtmlHistory.add( initialLocation, null );
		}
		handle_location( initialLocation, null );
	}

	image.preload();
	//alert( 'onload' );
}