/*
	Carousel Reference: http://prototype-carousel.xilinus.com/
	Lightbox Reference: http://livepipe.net/projects/control_modal/
*/

Element.addMethods({
	showVisibility: function(element) {element.setStyle({'visibility': 'visible'})},
	hideVisibility: function(element) {element.setStyle({'visibility': 'hidden'})}
});

Object.extend(Array.prototype, {
	random: function() {return this[Math.floor((Math.random() * this.length))]}
});

var MODAL_DEFAULTS = {
	fade: true,
	fadeDuration: 0.5,
	opacity: 0.6
};

function submitContactForm(e) {
	e.stop();
	this.request({
		onComplete: function(transport) {
			var resp = (transport.responseText) ? transport.responseText.evalJSON() : {};
			if (resp.errors) {
				var missing = resp.errors.first().missing_fields;
				alert('Please complete the following fields: ' + missing.join(', '));
				return;
			}
			alert('Thank you.');
			Control.Modal.close();
		}
	});
}

function makeCarousel(el) {
	var c = el.down('.carousel-component');
	new Insertion.After(c, '<div class="controls"><a title="Previous Sample" class="previous">&laquo; Previous</a><a title="Next Sample" class="next">Next &raquo;</a></div>');
}

function enableCarousel(el) {
	var c = el.down('.carousel-component');
	var p = el.down('.previous');
	var n = el.down('.next');
	
	var carousel = new Control.Carousel(c, {
		previousButton: p,
		nextButton: n
	});
	carousel.nbVisible = 1;
}

function afterProjectModalOpen() {
	Control.Modal.container.down('.link-close').observe('click', Control.Modal.close);
	var el = Control.Modal.container.down('.project');
	makeCarousel(el);
	enableCarousel(el);
}

function afterContactModalOpen() {
	Control.Modal.container.down('.link-close').observe('click', Control.Modal.close);
	var el = Control.Modal.container.down('#contact-form');
	el.focusFirstElement();
	el.observe('submit', submitContactForm, el);
}

function enableProjectModal(el) {
	new Control.Modal(el, Object.extend(MODAL_DEFAULTS, {
		containerClassName: 'modal project',
		onSuccess: afterProjectModalOpen
	}));
}

function enableContactModal(el) {
	new Control.Modal(el, Object.extend(MODAL_DEFAULTS, {
		containerClassName: 'modal contact',
		onSuccess: afterContactModalOpen
	}));
}

function handleSectionClick(e) {
	e.stop();
	var node    = e.findElement('a');
	var section = $(node.className.substring(5));
	section.showVisibility();
	if (node.href.endsWith('#press')) {
		Effect.ScrollTo('press');
	} else if (section.id != 'who') {
		Effect.ScrollTo(section);
	} else {
		// We don't need to scroll the "who" section
	}
}

var trigger = (Prototype.Browser.IE) ? 'load' : 'dom:loaded';

Event.observe(window, trigger, function() {
	$('who', 'do', 'make', 'love').invoke('hideVisibility');
	$$('.link-who, .link-do, .link-make, .link-love').invoke('observe', 'click', handleSectionClick);
	
	$$('.project').each(function(el, index) {
		makeCarousel(el);
		enableCarousel(el, index);
	});
	
	$$('.link-contact').each(enableContactModal);
	$$('.project .more').each(enableProjectModal);
	$$('.project li a').each(enableProjectModal);
	
	if (!Prototype.Browser.IE)
		$$('#love a, #press a').invoke('setAttribute', 'target', '_blank');
	
	if (!location.hash.empty()) {
		var page = location.hash.replace('#make-', '');
		$$('#make .project-description a.more[href*=portfolio/' + page + '.html]').invoke('simulate', 'click');
	}
});