(function($) {
	var cache = [];
	// Arguments are image paths relative to the current page.
	$.preLoadImages = function() {
		var args_len = arguments.length;
		for (var i = args_len; i--;) {
			var cacheImage = document.createElement('img');
			cacheImage.src = arguments[i];
			cache = cache.concat([cacheImage]);
		}
	}
	
	$(document).ready(function($) {
		$('.noscript').remove();
		$('a.popup').click(function(e) {
			e.preventDefault();
			window.open(jQuery(this).attr('href'));
		});
		
		var imageMouseOver = function() {
			var id = jQuery(this).attr('id');
			if(id && ('undefined' != typeof window.dynamicImages[id].hover)) {
				jQuery(this).find('img:first').attr('src', window.dynamicImages[id].hover);
			}
		};
		
		var imageBlur = function() {
			var id = jQuery(this).attr('id');
			if(id && ('undefined' != typeof window.dynamicImages[id].original)) {
				jQuery(this).find('img:first').attr('src', window.dynamicImages[id].original);
			}
		};
		
		var imageFocus = function() {
			var id = jQuery(this).attr('id');
			if(id && ('undefined' != typeof window.dynamicImages[id].select)) {
				jQuery(this).find('img:first').attr('src', window.dynamicImages[id].select);
			}
		};
		
		window.dynamicImages = {};
		$('a.dynamicImage').each(function() {
			var id = jQuery(this).attr('id');
			var rel = jQuery(this).attr('rel');
			var img = jQuery(this).find('img:first');
			if(id && rel && img) {
				var obj = null;
				if('undefined' != typeof JSON) {
					obj = JSON.parse(rel);
				} else {
					obj = eval('(' + rel + ');');
				}
				
				if(obj) {
					dynamicImages[id] = {'original': img.attr('src')};
					
					if('undefined' != typeof obj.hover) {
						jQuery.preLoadImages(obj.hover);
						dynamicImages[id].hover = obj.hover;
						jQuery(this).hover(imageMouseOver, imageBlur);
					}
					
					if('undefined' != typeof obj.select) {
						jQuery.preLoadImages(obj.select);
						dynamicImages[id].select = obj.select;
						jQuery(this).mousedown(imageFocus);
						jQuery(this).mouseup(imageBlur);
						jQuery(this).focus(imageFocus);
						jQuery(this).blur(imageBlur);
					}
				}
			}
		});
		
		$('#nav .submenu').css({'visibility': 'hidden'}); // Opera Fix
		$('#nav > li').hover(
			function() {
				jQuery(this).find('.submenu:first').css({'visibility': 'visible', 'display': 'none'}).show(400);
			}, function() {
				jQuery(this).find('.submenu:first').css({'visibility': 'hidden'});
			}
		);
	});
})(jQuery);
