var site, toggle;
if(typeof jQuery != 'undefined') {
	$(document).ready(function() {
		var $body,
			$container, $header, $site,
			$portfolio, $images, $login,
			$supersize, $pagination, $nav,
			$preview, $preview_t, $preview_li, preview_src, preview_title;
		
		
		$body 				= $('body');
		$container 			= $('#container');
		$header				= $('#header');
		$site 				= $('#site');
		$portfolio			= $('#portfolio');
		$images 			= $('#images, #thumbnail-images');
		$login				= $('#client-login');
		$preview 			= $('#preview');
		$preview_t			= $('#preview-text');
		$supersize 			= $('#supersize');
		$pagination			= $('#pagination');
		$nav				= $('#nav');
		
		$preview_li			= $images.find('li.active');
		preview_src			= $preview.children().attr('src');
		preview_title		= $preview.children().attr('title');
		
		toggle = {
			initial	: 'toggle',
			show	: 'toggle-show',
			hide	: 'toggle-hide',
			move	: 'toggle-movement',
			prev	: 'toggle-previous',
			next	: 'toggle-next'
		};
		
		/**
		* overlay
		*/
		var $overlay = $('<div/>').attr('id', 'overlay').hide().prependTo($body);
		
		/**
		* Show/Hide setup information 
		*/
		var $h1 		= $header.children('h1');
		var $all		= $h1.nextAll().wrapAll('<div/>');
		var $toggle		= $('<div/>').attr('id','toggle');
		
		site = {
			show : {
				text	 : 'Show',
				title 	 : 'Show',
				href	 : '#show',
				duration : 500
			},
			hide : {
				text	 : 'Hide',
				title 	 : 'Hide',
				href	 : '#hide',
				duration : 750
			},
			initial		 : 'show',
			cookieName	 : 'site_show'
		};
		
		if($.cookie && $.cookie(site.cookieName) && $.cookie(site.cookieName)==='true') {
			$site.show(); $overlay.show();
			site.initial = 'hide';
		}
		else if($.browser.msie) {
			$('img', $preview).hide();
		}
		$body.addClass(site.initial);
		
		var $toggle_a	= $('<a/>')
								.text(site[site.initial].text)
								.attr('href',site[site.initial].href)
								.attr('title',site[site.initial].title)
								.addClass(toggle.initial).addClass(toggle[site.initial]);
				
		/**
		* Show/hide the information area
		*/
		$h1.after($toggle_a);
		$toggle_a.bind('click.toggleSite', function(e) {
			var $$, type;
			$$ = $(this);
			if($site.is(':visible')) {
				type = 'show';
				if($.browser.msie) {
					$('img', $preview).hide();
				}
				$site.animate({opacity: 'hide', height: 'hide'}, {duration: site.show.duration, complete: function(){
					$$.swapClass(toggle.show,toggle.hide).removeClass(toggle.move);
					$body.swapClass(site.show.text,site.hide.text);
				}});
				if($.cookie) {
					$.cookie(site.cookieName, null, {path: '/'});
				}
				$overlay.animate({opacity: 'hide'}, {duration: site.show.duration});
				$().trigger('siteClosed');
			}
			else {
				type = 'hide';
				$site.animate({opacity: 'show', height: 'show'}, {duration: site.show.duration, complete: function(){
					$$.swapClass(toggle.hide,toggle.show).removeClass(toggle.move);
					$body.swapClass(site.hide.text,site.show.text);
					if($.browser.msie) {
						$('img', $preview).show();
					}
				}});
				if($.cookie) {
					$.cookie(site.cookieName, 'true', {expires: 14, path: '/'});
				}
				$overlay.animate({opacity: 'show'}, {duration: site.show.duration});
				$().trigger('siteOpen');
			}
			$$.text(site[type].text).attr('href',site[type].href).attr('title',site[type].title);
			$$.blur();
			e.preventDefault();
		});
		$h1.bind('click.logo', function(e){
			var $$;
			$$ = $(this);
			$toggle_a.trigger('click.toggleSite');
			$$.closest('h1').children().blur();
			e.preventDefault();
		});
		
		/**
		* Previous / Next Links
		*/
		$prev_next_ul = $('<ul/>').addClass('nav').addClass('prev-next');
		$prev_a  = $('<a/>').text('Previous').attr('href','#prev').attr('rel','prev').attr('accesskey','z').addClass(toggle.initial).addClass(toggle.prev);
		$next_a  = $('<a/>').text('Next').attr('href','#next').attr('rel','next').attr('accesskey','x').addClass(toggle.initial).addClass(toggle.next);
		$prev_li = $('<li/>'); $prev_li.append($prev_a);
		$next_li = $('<li/>'); $next_li.append($next_a);
		
		$prev_next_ul.append($prev_li).append($next_li).insertAfter($h1).bind('click.nextPrevImage', function(e){
			var $$, $toggle;
			$$ = $(e.target);
			if($$.is('a.' + toggle.prev)) {
				$toggle = $preview_li.prev();
				if($toggle.length===0) {
					$toggle = $preview_li.closest('ul').children('li:last');
				}
			}
			else if($$.is('a.' + toggle.next)) {
				$toggle = $preview_li.next();
				if($toggle.length===0) {
					$toggle = $preview_li.closest('ul').children('li:first');
				}
			}
			$toggle.children().trigger('click');
			$$.blur();
			e.preventDefault();
		}).clone().insertAfter($pagination.children()).bind('click.nextPrevPagination', function(e){
			var $$, page, $toggle;
			$$ = $(e.target);
			if($$.is('a.toggle-previous')) {
				$toggle = $pagination.find('ul.index li.active').prev();
			}
			else if($$.is('a.toggle-next')) {
				$toggle = $pagination.find('ul.index li.active').next();
			}
			$toggle.children('a').trigger('click.pagination');
			$$.blur();
			e.preventDefault();
		});
		$pagination.children('ul.index').bind('click.pagination', function(e){
			var $$, urlParts, page;
			$$ = $(e.target);
			if($$.is('a') && $$.attr('href')!==window.location.pathname) {
				urlParts = $$.attr('href').match('page/([0-9]+)/?');
				if(urlParts.length===2) {
					page = parseInt(urlParts[1], 10);
				}
				if(typeof page === 'number') {
					data = {
						page 	: page,
						type	: $nav.find('li.active a').attr('href').replace('/','')
					};
					data.section = data.type;
					$.ajax({
						url: '/json/pagination/',
						cache: true,
						type: 'GET',
						data: data,
						dataType: 'html',
						success: function(data){
							$images.html($(data).children());
							$$.parent().siblings().removeClass('active').end().andSelf().parent().addClass('active');
						},
						beforeSend: function(XMLHttpRequest) {},
						error: function (XMLHttpRequest, textStatus, errorThrown) {},
						complete: function(event, XMLHttpRequest, ajaxOptions) {}
					});
				}
			}
			$$.blur();
			e.preventDefault();
		});
		
		/**
		* Preview thumbnails
		*/
		$images.bind('mouseover', function(e) {
			var $$, href, title, href_new;
			$$ = $(e.target);
			if($$.is('a')) {
				href = $$.attr('href');
				title = $$.attr('title');
				href_new = $.preview(href);
				if($preview.children().length > 0) {
					$preview.children().attr('src', href_new).attr('alt', title);
					$preview_t.text(title);
				}
			}
		}).bind('mouseleave', function(e) {
			var $$;
			$$ = $(e.target);
			if($preview.children().length > 0) {
				$preview.children().attr('src', preview_src).attr('alt', preview_title);
				$preview_t.text(preview_title);
			}
		}).live('click.thumbnail', function(e){
			var $$, $ul, $li, href, title;
			$$ = $(e.target);
			$$ = $$.closest('a');
			if($$.is('a')) {
				$ul = $$.closest('ul');
				$li = $$.parent();
				href = $$.attr('href');
				title = $$.attr('title');
				
				$ul.children().filter('.active').removeClass('active');
				$li.addClass('active');
				
				$preview_li		= $li;
				preview_src 	= $.preview(href);
				preview_title 	= title;
				
				if($.fn.crossfade && $site.is(':visible') && preview_src!==$preview.children().attr('src')) {
					$preview.crossfade({
						wrap	 : null,
						duration : 1800,
						wrapCss	 : {height: 113, width: 180},
						animated : true,
						target	 : preview_src,
						callback : function(options){
							$preview_t.text(preview_title);
						},
						loader	 : '<div class="loader loader-small" />'
					});
				}
				else {
					if($preview.children().length > 0) {
						$preview.children().attr('src', preview_src).attr('alt', preview_title);
						$preview_t.text(preview_title);
					}
				}
				
				if($.fn.crossfade) {
					// this sets to 100px... 
					var activeType, centerCrossfade;
					activeType = 'supersize'; centerCrossfade = false;
					$activeSupersizeType = $('#toolkit-fit, #toolkit-supersize').filter('.active');
					if($activeSupersizeType.length === 1) {
						activeType = $.toolkitType($activeSupersizeType)
						centerCrossfade = true;
					}
					
					$supersize.crossfade({
						wrap	 : null,
						target	 : href,
						center	 : centerCrossfade,
						callback : function(options){
							src = $supersize.children().attr('src');
							$('<img />').load(function(){
								
								switch(activeType.toLowerCase()) {
									case 'fit':
										// turn off supersize
										$(window).unbind('resize.supersize');
										$supersize.imageFit();
										break;
										
									case 'supersize':
									default:
										// turn on supersize
										$(window).unbind('resize.imageFitResize');
										$supersize.children().attr('alt', preview_title).superresize({
											height	: this.height,
											width	: this.width
										});
										break;
								}
								
							}).attr('src', src);
						}						
					});
				}

				e.preventDefault();
			}
		});
		$.each($('li a', $images), function(i){
			var src = $.preview($(this).attr('href'));
			$('<img />').attr('src', src);
		});
		/*
		$.each($('li a', $images), function(i){
			var src = $(this).attr('href');
			$('<img />').attr('src', src);
		});
		*/
		
		/**
		* Visited Plugin to track which images were viewed
		* @uses visited()
		*/
		if($.fn.visited) {
			$images.visited();
			$preview_li.children('a').visited().triggerHandler('click.visited');
			$preview_li.children('a').unbind('click.visited');
		}
		
		/**
		* Scale the main image based on brower size
		* @uses supersize()
		*/
		if($.fn.imageFit && $body.is('.cms')) {
			$supersize.imageFit(); 
		}
		else if($.fn.supersize) {
			$supersize.supersize(); 
		}
		$overlay.bind('click.supersizeTrigger', function(e) {
			var $$;
			$$ = $(e.target);
			if($site.is(':visible')) {
				$toggle_a.trigger('click.toggleSite');
			}
			e.preventDefault();
		});
		
		/**
		* Extra Toggle Setup
		*/
		var extra;
		extra = {
			show : {
				text	 : 'Show',
				title 	 : 'Show',
				href	 : '#show',
				duration : 200
			},
			hide : {
				text	 : 'Hide',
				title 	 : 'Hide',
				href	 : '#hide',
				duration : 200
			}
		};
		$('div.extra:not(.page)').each(function(){
			var $$, $h2, $a, $div;
			$$ 		= $(this);
			$div 	= $$.closest('div[id]');
			$h2 	= $$.find('h2');
			$a		= $('<a/>').attr('href',extra.show.href).attr('title',extra.show.title);
			if($h2.children('a').length===0) {
				$h2.wrapInner($a);
			}
			$$.children(':not(h2)').wrapAll('<div class="toggle" />');
			if($$.is(':not(.active)') && $$.is(':not(.visible)')) {
				$$.children('div.toggle').hide();
			}
		}).find('h2 a:not([href=/])').bind('click.toggleExtra', function(e){
			var $$, $div, $sibling, type;
			$$ 		 = $(this);
			$div 	 = $$.closest('div[id]');
			$sibling = $div.siblings('div.extra:not(.page)');
						
			if($div.children('div.toggle').is(':visible')) {
				type = 'show';
				$div.children('div.toggle').slideUp(extra[type].duration);
				$div.removeClass('active');
				$images.filter('#images').fadeIn(extra[type].duration);
				$pagination.fadeIn(extra[type].duration);
				$nav.fadeIn(extra[type].duration);
			}
			else {
				type = 'hide';
				$div.children('div.toggle').slideDown(extra[type].duration, function(){
					$('input:first', this).focus();
				});
				$div.addClass('active');
				$images.filter('#images').fadeOut(extra[type].duration);
				$pagination.fadeOut(extra[type].duration);
				$nav.fadeOut(extra[type].duration);
			}

			$$.attr('href', extra[type].href).attr('title', extra[type].title);
			$sibling.removeClass('active').children('div.toggle').slideUp(extra[type].duration)
					.parent().find('h2 a:not([href=/])').attr('href',extra.show.href).attr('title',extra.show.title);
			
			if(type==='hide' && $div.is('.viewing')) {
				$portfolio.children('div.toggle').slideDown(extra[type].duration);
			}
			
			$$.blur();
			e.preventDefault();
		});
		
		/**
		* Login, move labels to inputs
		*/
		$('input[id]:not(:submit)', $login).each(function(){
			var $$, forAttr, $label, text;
			$$ = $(this);
			if($$.is('[id]:not(:submit)')) {
				text = $$.forLabel().text();
				$$.val(text).data('default-value', text).attr('title', text);
			}
		}).bind('focus blur', function(e){
			var $$, defaultValue, value;
			$$ = $(this);
			value = $.trim($$.val());
			defaultValue = $.trim($$.data('default-value'));
			switch(e.type.toLowerCase()) {
				case 'focus':
					if(value===defaultValue) {
						$$.val('');
					}
					break;
					
				case 'blur':
					if(value==='') {
						$$.val(defaultValue);
					}
					break;
			}
		}).closest('form').bind('submit', function(e){
			
		});
	});
}

/**
* Some useful utilities
*/
jQuery.fn.exists = function() {
	return (this.length > 0);
};
jQuery.fn.swapClass = function(a,b) {
	return this.each(function(){
		$(this).toggleClass(a.toLowerCase()).toggleClass(b.toLowerCase());
	});
};
jQuery.fn.forLabel = function() {
	var id, $$;
	$$ = $(this);
	id = $$.attr('id');
	if(id.length > 0) {
		return $$.closest('form').find('label[for=' + id + ']');
	}
};

/**
* Code Specific helper functions
*/
jQuery.preview = function(supersize) {
	return supersize.replace('supersize/', '');
};
jQuery.fileName = function(filePath) {
	idx = filePath.lastIndexOf('/');
	if(idx != '-1') {
		filePath = filePath.slice(idx + 1);
	}
	return filePath;
};
jQuery.toolkitType = function($$){
	return $$.attr('id').replace('toolkit-', '').replace('#', '').toLowerCase();
};