
// Soda

var soda = {};

// Preload

soda.preload = function(images) {
	images = $.isArray(images) ? images : [images];
	for (var i = 0; i < images.length; i++) {
		var img = new Image();
		img.src = images[i];
	}
}

// Scroll button

soda.scroll_btn = function() {
	$('#top_of_page a').click(function() {
		$('html, body').animate({scrollTop: 0}, 'slow');
		return false;
	});
}

// Print button

soda.print_btn = function(container) {
	if (!container) container = document.body;
	$('<a href="#" class="print_page"><span>Print Page</span></a>').click(function() { 
		window.print(); 
		return false; 
	}).appendTo(container);
}

// Featured

soda.featured = {

	current: 1,
	image_width: 619,

	setup: function() {

		// Elements
		soda.featured.container = $('#featured');
		soda.featured.description = $('#featured_description');
		soda.featured.display = $('#featured_display');
		soda.featured.projects = $('#featured_projects');
		
		// Disable text selection
		soda.featured.container.attr('unselectable', 'on').css('MozUserSelect', 'none');

		// Set project id's and get total number of projects
		soda.featured.count = 0;
		$('.project', soda.featured.projects).each(function(i, project) {
			$(project).attr('id', 'project' + (i + 1));
			soda.featured.count++;
		});
		
		// Set width of project display
		soda.featured.projects.width(soda.featured.count * soda.featured.image_width);

		// Extract descriptions for project image alt tags
		soda.featured.descriptions = [];
		$('.project img', soda.featured.projects).each(function(i, img) {
			soda.featured.descriptions[i] = $(img).attr('alt');
			$(img).attr('alt', '');
		});

		// Navigation functionality
		if (soda.featured.count > 1) {
		
			$.each(['left', 'right'], function(i, direction) {
	
				// Nav arrows
	
				soda.featured[direction + '_nav'] = $('<div id="featured_' + direction + '_nav" class="featured_nav"></div>');			
				
				soda.featured[direction + '_nav'].
					css('background-position', direction + ' ' + (soda.featured.available(direction) ? 'top' : 'bottom')).
					appendTo(soda.featured.container);
				
				// Hover regions
		
				soda.featured[direction] = $('<div id="featured_' + direction + '"></div>');
		
				soda.featured[direction].
					css({
						'width': soda.featured.display.width() / 2,
						'height': soda.featured.display.height(),
						'position': 'absolute',
						'top': 0,
						'z-index': 10,
						'background-color': 'rgb(255,255,255)',
						'opacity': 0
					}).
					css(direction, 0).
					appendTo(soda.featured.display);
				
				// Navigation actions
				
				$.each([soda.featured[direction], soda.featured[direction + '_nav']], function(i, nav) {
					
					nav.
						mouseover(function() { 
							soda.featured[direction + '_nav'].css('background-position', direction + ' ' + (soda.featured.available(direction) ? 'center' : 'bottom'));
						}).
						mouseout(function() { 
							soda.featured[direction + '_nav'].css('background-position', direction + ' ' + (soda.featured.available(direction) ? 'top' : 'bottom'));
						}).
						click(function() {	
							if (soda.featured.available(direction)) {
								soda.featured.current = (direction == 'left' ? soda.featured.current - 1 : soda.featured.current + 1);
								soda.featured.description.html(soda.featured.descriptions[soda.featured.current - 1]);
								soda.featured.projects.stop(true).animate({
									left: -((soda.featured.current - 1) * soda.featured.image_width)
								});
							}
							if (!soda.featured.available(direction)) {
								soda.featured[direction + '_nav'].css('background-position', direction + ' bottom');
							}
							if (direction == 'left' && soda.featured.available('right')) {	
								soda.featured['right_nav'].css('background-position', 'right top');
							} else if (direction == 'right' && soda.featured.available('left')) {	
								soda.featured['left_nav'].css('background-position', 'left top');
							}
						});
				});
		
			});		
		
		}
		
	},
	
	available: function(direction) {
		return $('#project' + (direction == 'left' ? soda.featured.current - 1 : soda.featured.current + 1)).length > 0;
	}

};

// Contact

soda.contact = {
	
	fields: {},
	
	setup: function() {
		soda.contact.sent = $('#contact_sent');
		soda.contact.required = $('#contact_required');
		$.each(['name', 'from', 'message'], function(i, field) {
			soda.contact.fields['contact_' + field] = $('#contact_' + field);
		});
		$('#contact_form').submit(function() {
			return soda.contact.validate();
		}).mousedown(function() {
			soda.contact.sent.hide();
		});
	},
	
	validate: function() {
		var errors = 0;
		$.each(soda.contact.fields, function(i, field) {
			var invalid = (field.attr('id') == 'contact_from' ? !soda.contact.valid_email(field.val()) : $.trim(field.val()) == '');
			field.parent().toggleClass('required', invalid);
			if (invalid) errors++;
		});
		soda.contact.required.toggle(errors > 0);
		return errors == 0;
	},
	
	valid_email: function(email) {
		return /^[^\s,;]+@([^\s.,;]+\.)+[\w-]{2,}$/i.test(email);
	}
	
};

// Preload UI

soda.preload_ui = function(ui) {
	switch(ui) {
		case 'portfolio':
			soda.preload([
				'/images/portfolio/portfolio_menu.png', 
				'/images/portfolio/info_box.png', 
				'/images/portfolio/summary_bg.png', 
				'/images/portfolio/artwork_bg.png'
			]);		
			break;
		case 'contact':
			soda.preload([
				'/images/contact/required.png'
			]);
			break;
	}

};