window.addEvent('domready', function(){

	// smooth scrolling
	new Fx.SmoothScroll({ links: $$('a[href^=#]') });

	// home page header feature
	/*var headerblocks = $$('#header-home > .block');
	if (headerblocks.length > 1) {
		(function(){
			var spaceperheader = 4000;
			var slidedelay     = 5000;
			var currentblock   = 0;

			// position the headers
			headerblocks.each(function(el, i){
				el.setStyles({
					position: 'absolute',
					top: 0,
					left: i * spaceperheader
				});
			});

			var headerblockfx = new Fx.Elements(headerblocks, {
				duration: 1000,
				transition: 'quad:in:out'
			});

			var animateToBlock = function(whichblock){
				var fxobj = {};

				headerblocks.each(function(el, i){
					fxobj[i] = {
						left: (whichblock - i) * -spaceperheader
					}
				});

				headerblockfx.start(fxobj);
				currentblock = whichblock;
			};

			var animateToNext = function(){
				currentblock++;
				if (currentblock == headerblocks.length) {
					currentblock = 0;
				}

				animateToBlock(currentblock);
			};

			animateToNext.periodical(slidedelay);
		})();
	}*/

	// expanders
	var expanderlist = document.getElement('ul.expander');
	if (expanderlist) {
		(function(){
			var hover = expanderlist.hasClass('hover-expander');
			var items = $$('ul.expander > li');

			var itemfx = new Fx.Elements(items, {
				link: 'cancel',
				transition: 'quad:in:out'
			});

			var animate = function(open, immediate){
				var o = {};
				items.each(function(other, j){
					o[j] = normal[j];
				});
				if (open != -1) o[open] = full[open];
				if (!hover) history.setValue(0, parseInt(open)+1);
				if (immediate == true) {
					itemfx.set(o);
				} else {
					itemfx.start(o);
				}
			}

			if (!hover) {
				var history = HistoryManager.register(// arguments are (key, defaults, onMatch, onGenerate, regexp, options)
					'expanders',
					[false],
					function(values){ animate(parseInt(values[0]-1), true); },
					function(values){ return '_' + values[0]; },
					'_([a-z0-9-]+)'
				);
			}

			var normal = {};
			var semi   = {};
			var full   = {};

			if (hover) {
				var normalHeight = 10;
				items.each(function(item){
					var inner = item.getFirst();
					var oldHeight = inner.getStyle('height').toInt();
					normalHeight = Math.max(normalHeight, inner.setStyle('height', 'auto').getSize().y);
					inner.setStyle('height', oldHeight);
				});
			}

			items.each(function(item, i){
				if (hover) {
					normal[i] = {
						height: normalHeight,
						opacity: 0.3,
						color: '#232323'
					};

					full[i] = {
						height: 250,
						opacity: 1,
						color: '#232323'
					};
				} else {
					normal[i] = {
						height: item.getElement('.body').getPosition(item).y + item.getElement('.body').getStyle('padding-top').toInt(),
						opacity: 0.3,
						color: '#232323',
						cursor: 'pointer'
					};

					full[i] = {
						height: item.getStyle('height'),
						opacity: 1,
						color: '#232323',
						cursor: 'auto'
					};
				}

				item.setStyles(normal).addEvents(
					(
						hover
						? {
							mouseenter: animate.pass(i),
							mouseleave: animate.pass(-1)
						}
						: {
							click: animate.pass(i)
						}
					)
				);
			});

			animate((hover ? -1 : 0), true);
		})();
	}


	// project grid
	var grid = document.getElement('ul.project-grid');
	if (grid) {
		(function(){
			var filters   = $$('ul.sub-navigation li');
			var projects  = grid.getElements('li');

			var getClasses = function(element){
				var classes = element.get('class').split(' ');
				return classes.filter(function(thisclass){
					return (thisclass.indexOf('work-') == 0);
				});
			};

			projects.each(function(project, i){
				// animate project mouseovers
				var img  = project.getElement('img');
				var span = project.getElement('span');
				var spanBottom = -span.getSize().y;
				img.set({
					styles: { opacity: 0.3 },
					tween:  { duration: 250 }
				});
				span.set({
					styles: { bottom: spanBottom },
					tween:  { duration: 250 }
				});

				project.addEvents({
					'mouseenter': function(){
						img.tween('opacity', 1);
						span.tween('bottom', 0);
					},
					'mouseleave': function(){
						img.tween('opacity', 0.3);
						span.tween('bottom', spanBottom);
					},
					'focus': function(){
						project.fireEvent('mouseenter');
					},
					'blur': function(){
						project.fireEvent('mouseleave');
					}
				});
			});

			if (filters.length) {
				var effects   = new Fx.Elements(projects, {
					link: 'chain'
				});

				// ie doesn't do transparency inheritance properly, f'ing typical!
				if (Browser.Engine.trident6) {
					var effects2 = new Fx.Elements(grid.getElements('li img'), {
						link: 'chain'
					});
				}

				var positions = [];
				var currentlyShowing = 'work-all';

				grid.setStyle('height', grid.getParent().getParent().getSize().y);

				// setup the back button
				var history = HistoryManager.register(// arguments are (key, defaults, onMatch, onGenerate, regexp, options)
					'project-grid',
					['all'],
					function(values){
						values.each(function(value, i){
							values[i] = 'work-' + value;
						});
						var link = document.getElement('ul.sub-navigation li.' + values[0] + ' a');
						if (link) link.fireEvent('click');
					},
					function(values){
						var retstring = '';
						values.each(function(value){
							retstring = retstring + '_' + value.substring(5);
						});
						return retstring;;
					},
					'(?:_([a-z0-9-]+))+'
				);

				// get project grid positions
				projects.each(function(project, i){
					project.store('classes', getClasses(project));
					var pos = project.getPosition(grid);
					positions[i] = {
						left: pos.x - project.getStyle('margin-left').toInt(),
						top:  pos.y
					};
				});

				projects.each(function(project, i){
					// set project position
					project.setStyles(positions[i]).setStyle('position', 'absolute');
				});

				filters.each(function(filter){
					filter.store('classes', getClasses(filter)).getElement('a').addEvent('click', function(event){
						if (event) event.stop();
						filters.each(function(el){
							if (el != filter) {
								el.removeClass('selected');
							}
						});
						filter.addClass('selected');
						if (history) history.setValues(filter.retrieve('classes'));
						showWork(filter.retrieve('classes'));
						Cookie.write('lastworkpage', window.location);
					});
				});

				var showWork = function(whichWork){
					var effectobj   = {};
					var effectobj2  = {};
					var effectobj3  = {};

					// ie doesn't do transparency inheritance properly, f'ing typical!
					var effect2obj  = {};
					var effect2obj2 = {};
					var effect2obj3 = {};

					if (whichWork.contains('work-all')) {
						projects.each(function(project, i){
							effectobj[i] = positions[i];
							effectobj2[i] = {
								opacity: 1
							};
						});
					} else {
						var k = 0;
						projects.each(function(project, i){
							var showproject = false;

							for (var j in whichWork) {
								if (project.hasClass(whichWork[j])) {
									showproject = true;
									break;
								}
							}

							effectobj[i]  = (showproject ? {} : {opacity: 0});
							effectobj2[i] = (showproject ? positions[k++] : {});
							effectobj3[i] = {opacity: (showproject ? 1 : 0)};

							// ie doesn't do transparency inheritance properly, f'ing typical!
							if (effects2) {
								effect2obj[i]  = (showproject ? {} : {opacity: 0});
								effect2obj2[i] = {};
								effect2obj3[i] = {opacity: (showproject ? 0.3 : 0)};
							}

						});
					}

					// if moving between two categories that aren't "all", transition to "all" first
					/*if (currentlyShowing != 'work-all' && !whichWork.contains('work-all')) {
						showWork(['work-all']);
					} else {
						effects.cancel();
					}*/
					effects.start(effectobj).start(effectobj2).start(effectobj3);

					// ie doesn't do transparency inheritance properly, f'ing typical!
					if (effects2) {
						effects2.start(effect2obj).start(effect2obj2).start(effect2obj3);
					}

					currentlyShowing = whichWork[0];
				};
			}
		})();
	}


	// videos
	var videos = $$('ul.portfolio li[class^=video-]');
	if (videos.length) {
		(function(){
			videos.each(function(el){
				var videofile = '/videos/' + (el.get('class').split(' '))[0].substring(6) + '.flv';
				var player = new Swiff('/flash/portfolio-video-player.swf', {
					width: 728,
					height: 540,
					params: {
						wmode: 'transparent',
						bgcolor: '#232323'
					},
					vars: {
						videoFile: videofile
					}
				});
				var newli = new Element('li');
				var itemnumber = false;
				el.getParent().getElements('li').each(function(li, i){
					if (itemnumber) {
						var num = i+2;
						li.getElement('span em').set('html', (num < 10 ? '0'+num : num) + '/');
					} else if (li == el) {
						itemnumber = i+2;
					}
				});
				newli.adopt(
					new Element('span', {html: ' Video'}).grab(
						new Element('em', {html: (itemnumber < 10 ? '0'+itemnumber : itemnumber) + '/'}),
						'top'
					),
					player
				).inject(el, 'after');
			});
		})();
	}


	// start the history manager
	HistoryManager.start();
});