var application = {
	initExpandableLists: function(){
		var lists = $$('dl.expandable');
		
		lists.each(function(list){
			var terms = list.select('dt'),
				definitions = list.select('dd'),
				closeLink;
				
			terms.each(function(term, i){
				term.observe('click', function(event){
					event.stop();
					
					definitions[i].toggle();
				});
			});
			
			definitions.each(function(definition, i){
				definition.hide();
				
				closeLink = Builder.node('p', [
					Builder.node('a', {
						className: 'close',
						href: '#'
					})
				]);
				
				definition.insert({ bottom: closeLink })
				
				definition.observe('click', function(event){
					event.stop();
					
					definitions[i].toggle();
				});
			});
		});
	},
	
	initImageBorders: function(toColor, fromColor){
		var imageLinks = $$('.image a img, .thumb a img');
		
		imageLinks.each(function(link){
			link.observe('mouseover', function(){
				link.morph('border-color: ' + toColor, { duration: 0.5 });
			});
			
			link.observe('mouseout', function(){
				link.morph('border-color: ' + fromColor, { duration: 0.5 })
			});
		});
	},
	
	initFormElementFocus: function(options){
		var formElements = $$('input[type=text], input[type=password], textarea');
		
		formElements.each(function(element) {
			var focusEffect, blurEffect;
			
			element.setStyle(options.blur);
			
			element.observe('focus', function(){
				focusEffect = new Effect.Morph(element, {
					style: options.focus,
					beforeStart: function(){ if(blurEffect) blurEffect.cancel(); }
				});
			});
			
			element.observe('blur', function(){
				blurEffect = new Effect.Morph(element, {
					style: options.blur,
					beforeStart: function(){ if(focusEffect) focusEffect.cancel(); }
				});
			});
		});
	},
	
	initNavigationOverlays: function(options){
		var navigationItems = $$('.navigation li 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(); } });
			});
		});
	},
	
	initHeaderAnimations: function(options){
		var headerSubTitle = $('headerSubTitle'),
			headerSubTitleStrong = headerSubTitle.down('strong');
		
		if(options.doAnimation == true) {
			new Effect.Move(headerSubTitleStrong, { x: 248, y: 0, mode: 'absolute', transition: Effect.Transitions.Bounce });
		} else {
			headerSubTitleStrong.setStyle({ top: '0px' });
		}
	}
}

document.observe('dom:loaded', function() {
	application.initFormElementFocus({ 
		focus: { 
			backgroundColor: '#f4f0ea', 
			borderColor: '#999999', 
			color: '#222222' 
		}, 
		blur: { 
			backgroundColor: '#ffffff', 
			borderColor: '#cccccc', 
			color: '#222222' 
		}
	});
	
	var ie6 =  /msie|MSIE 6/.test(navigator.userAgent);
	
	if(ie6) { animateHeader = false; }
	
	application.initNavigationOverlays();
	application.initHeaderAnimations({ doAnimation: animateHeader });
});