application = {
	initBorderFading: function(selector, options) {
		var elements = $$(selector),
			options = options || {};
	
		if(options.excludeSelector) {
			var exclude_elements = $$(options.excludeSelector);
		
			elements = elements.reject(function(element){
				return exclude_elements.include(element);
			});
		}

		elements.each(function(element) {
			var overEffect, outEffect;
					
			element.setStyle({ borderColor: options.from });
		
			element.observe('mouseover', function(event) {
				overEffect = new Effect.Morph(element, { 
					style: {
						borderColor: options.to
					}, 
					duration: options.fadeDuration, 
					beforeStart: function(){ 
						if (outEffect) outEffect.cancel(); 
					}
				});
			});
		
			element.observe('mouseout', function(event) {
				outEffect = new Effect.Morph(element, { 
					style: {
						borderColor: options.from
					},
					duration: options.resetDuration, 
					beforeStart: function(){ 
						if (overEffect) overEffect.cancel();
					} 
				});
			});
		});
	},
	
	initNavigationOverlays: function(options){
		var navigationItems = $$('#headerNavigation li a', '#headerLogin p a');
		
		navigationItems.each(function(item){
			var overlay = Builder.node('span', { className: 'overlay' }),
				overEffect, outEffect;
			
			item.insert({ bottom: overlay });
			
			$(overlay).setOpacity(0);
			
			item.observe('mouseover', function(event){
				overEffect = new Effect.Opacity(overlay, { to: 1, from: 0, duration: 0.5, beforeStart: function(){ if(outEffect) outEffect.cancel(); } });
			});
			
			item.observe('mouseout', function(event){
				outEffect = new Effect.Opacity(overlay, { to: 0, from: 1, duration: 0.5, beforeStart: function(){ if(overEffect) overEffect.cancel(); } });
			});
		});
	}
}

document.observe('dom:loaded', function() {	
	application.initBorderFading('.image a img', {
		from: '#159dd1',
		to: '#e054aa',
		fadeDuration: 0.5,
		resetDuration: 0.25
	});
	
	application.initNavigationOverlays();
});