/*
	functions.site.js
	JQuery / DOM Interaction Functions
	Creator: Matt Kircher
*/

/* GENERAL */
function setupPage(){
	translateEmails();		//changes unlinked email address to usable ones (spam protection)	
	
	//clearfix & grids
	$('#header, .grid2, .grid2_offset_left, .grid2_offset_right, .grid3, .padded_grid2, .padded_grid2_offset_left, .padded_grid2_offset_right, .padded_grid3, .home #sub-content, .subpage #content, .press_clip, #footer-nav, .pager').addClass('clearfix');
	$('.button').parent().addClass('clearfix');
	
	//cufon
	Cufon.replace(':header, .home #main-content p, #sub-nav li a, #gallery-banner p, #footer-info-bar li, #footer-nav a, #copyright', { fontFamily: 'Gill Sans', hover:true });
	
	//nav
	$('#main-nav ul').find('li:last').addClass('end_nav');
	$('.subpage #main-nav .selected').prev().find('> a').width($('.subpage #main-nav .selected').prev().find(' > a').width() - 1);
	
	//proximity
	$(':header').prev('p, ul, ol, blockquote').css({ marginBottom:'25px' });
}

//makes email tags invisible to spiders / spammers
function translateEmails(){
	$('span.email, address.email').each(function(){
		var spt = $(this);
		var at = / at /;
		var dot = / dot /g;		
		
		//EXAMPLE: <span class="email" title="link title | email address | email subject"> link content </span>		
		
		var inner_content = $(spt).html();						//inner HTML of span tag
		var t = $(spt).attr('title');						//email, link options from title attribute
		
		var title = t.substring(0, t.indexOf('|'));				//title for the link
		t = t.substring(t.indexOf('|')+1);
		
		var addr = t.substring(0, t.indexOf('|'));				//email address from id attribute
		addr = addr.replace(at,"@").replace(dot,".");				//replace words with chars
		
		var subject = t.substring(t.indexOf('|')+1);				//subject for email, if needed
		var fulladdr = ($.trim(subject) != "")?addr+'?subject='+subject:addr;	//full address formed with subject, if needed
		
		inner_content = ($.trim(inner_content) == "" || $.trim(inner_content) == "&nbsp;")?addr:inner_content;
		
		$(spt).after('<a href="mailto:'+fulladdr+'" title="'+title+'">'+ inner_content +'</a>')
		.hover(function(){window.status="Send an email!";}, function(){window.status="";});
		$(spt).remove();
	});
}

function initPressListing(){
	
	$('#press-listing .press_clip').each(function(){
		var i = $('#press-listing .press_clip').index(this);
		var id = 'clip'+i;
		$(this).attr('id', id);
		
		var date = $(this).find('.date').text();
		var publication = $(this).find('.publication').text();
		
		if($.trim(date) == ''){
			published = '<em>'+publication+'</em>';
		} else if($.trim(publication) == ''){
			published = '<em>'+date+'</em>';
		} else {
			published = '<em>'+publication+'<br />'+date+' </em>';	
		}
		
		$('#sub-nav ul').append('<li><a href="#'+id+'">'+published+$(this).find('.title').text()+'</a></li>');
		$('#sub-nav ul a[href="#'+id+'"]').click(function(){
			var e = $(this).attr('href');
			$('#sub-nav ul li').removeClass('selected');
			$(this).parent().addClass('selected');
			$('#press-listing div'+e).show().siblings().hide();
			Cufon.replace('#sub-nav a', { fontFamily: 'Gill Sans', hover:true });
		});
	});
	
	$('#sub-nav a:eq(0)').trigger('click');
	
	setupPagination('#sub-nav', 'li', 0, 6, 0);
	
	Cufon.replace('#sub-nav a', { fontFamily: 'Gill Sans', hover:true });
}

function setupGallery(){
	var apiKey 	= '4ad7a2dfc28199cd85295e4238128db2';
	var userId 	= '41392364@N04';
	var set 	= $.trim($(document).getUrlParam("photoset"));
	var showSet 	= (set != null && set != '')?1:0;
	
	$('#sub-nav').append('<li class="loading">Retrieving photosets...<br /><img src="images/loadingAnimation.gif" alt="Loading..." /></li>');
	
	//get all sets
	$.ajax({
		url:"http://api.flickr.com/services/rest/?format=json&method=flickr.photosets.getList&user_id="+userId+"&api_key="+apiKey,
		dataType: 'jsonp',
		jsonp: 'jsoncallback',
		timeout: 10000,
		data: ({ 'showSet': showSet }),
		success: function(data){
			
			$('#sub-nav li.loading').remove();
			$.each(data.photosets.photoset, function(j, item){
				$('#sub-nav ul').append('<li style="display:none;"><a href="gallery.php?photoset='+item.id+'">'+item.title._content+'</a></li>');
				if(set == item.id){ $('#sub-nav li:last').addClass('selected'); }
				
				//if specific set, append title & description
				if(showSet && set == item.id){
					$('#main-content #gallery-title')
					.append('<h2>'+item.title._content+'</h2>')
					.append('<p class="loading">Loading images...<br /><img src="images/loadingAnimation.gif" alt="Loading..." /></p>');
					
					$('#main-content #gallery-description')
					.append('<p>'+item.description._content+'</p>')
				}
			});
			
			if(!showSet){ menuPaginate(); }
			
			Cufon.replace('#main-content :header, #sub-nav a', { fontFamily: 'Gill Sans', hover:true });
			
			//if specific set, get set thumbnails
			if(showSet){
				$("#main-content #gallery-container").flickr({
					api_key: apiKey,
					type: 'photoset',
					user_id: userId,
					photoset_id: set,
					per_page: 100,
					page: 1,
					callback: initGallery
				});
			}
		}
	})
	
	/*$.getJSON("http://api.flickr.com/services/rest/?format=json&method=flickr.photosets.getList&user_id="+userId+"&api_key="+apiKey+"&jsoncallback=?", {'showSet': showSet},
		function(data){
			$('#sub-nav li.loading').remove();
			$.each(data.photosets.photoset, function(j, item){
				$('#sub-nav ul').append('<li><a href="gallery.php?photoset='+item.id+'">'+item.title._content+'</a></li>');
				if(set == item.id){ $('#sub-nav li:last').addClass('selected'); }
				
				//if specific set, append title & description
				if(showSet && set == item.id){
					$('#main-content #gallery-title')
					.append('<h2>'+item.title._content+'</h2>')
					.append('<p class="loading">Loading images...<br /><img src="images/loadingAnimation.gif" alt="Loading..." /></p>');
					
					$('#main-content #gallery-description')
					.append('<p>'+item.description._content+'</p>')
				}
			});
			
			if(!showSet){ menuPaginate(); }
			
			Cufon.replace('#main-content :header, #sub-nav a', { fontFamily: 'Gill Sans', hover:true });
		}
	);*/
	
	
}

function menuPaginate(){
	var page = 0;
	var perpage = 6;
	if($.trim($(document).getUrlParam("page")) != '' || $(document).getUrlParam("page") == null){
		page = Number($.trim($(document).getUrlParam("page")));
	}
	
	setupPagination('#sub-nav', 'li', page, perpage);
	$('#sub-nav li').each(function(){
		var i = $('#sub-nav li').index(this);
		var p = Math.floor(i/perpage);
		var href = $(this).find('a').attr('href');
		$(this).find('a').attr('href', href+'&page='+p);
	});	
}

//initialize gallery
function initGallery(){
	
	//remove loading
	$('#main-content #gallery-title p.loading').remove();
	
	//paginate menu
	menuPaginate();
	
	//fade in
	$('#gallery-container')
	.find('ul').attr('id','thumbnails').addClass('clearfix').end()
	.find('a').attr('rel', 'photoSet')
	.append('<img class="overlay" src="images/content/gallery_thumbnail_overlay.gif" alt="" />').end()
	.fadeIn(700);
	
	//setup fancybox
	$("#thumbnails a").fancybox({
		zoomSpeedIn: 800,
		zoomSpeedOut: 300,
		zoomSpeedChange: 500,
		easingIn:'easeOutQuart',
		easingOut:'easeInQuart',
		easingChange:'easeOutQuart',
		overlayOpacity: 0.7
	}); 
}

//initialize gallery
function initMiniGallery(){
	
	//fade in
	$('.mini_gallery')
	.find('a').attr('rel', 'photoSet')
	.append('<img class="overlay" src="images/content/gallery_thumbnail_overlay.gif" alt="" />').end()
	.fadeIn(700);
	
	//setup fancybox
	$(".mini_gallery a").fancybox({
		zoomSpeedIn: 800,
		zoomSpeedOut: 800,
		zoomSpeedChange: 500,
		easingIn:'easeOutQuart',
		easingOut:'easeInQuart',
		easingChange:'easeOutQuart',
		overlayOpacity: 0.7
	}); 
}

function setupPagination(wrapperId, elementClass, currentPage, numPerPage, pagerPosition){
		
	$(wrapperId).each(function() {
	
		var $listing = $(this);
		
		$listing.bind('repaginate', function() {	
			
			var n = currentPage * numPerPage;
			var x = ((currentPage + 1) * numPerPage) - 1;
										
			$listing.find(elementClass).show();
			$listing.find(elementClass+':lt('+n+')').hide().end();
			$listing.find(elementClass+':gt('+x+')').hide().end();
		});
	
		var numRows = $listing.find(elementClass).length;			
		var numPages = Math.ceil(numRows / numPerPage);			
		
		var $pager = $('<p class="pager"><b>Page:</b></p>');
		var $pager2 = $pager.clone(true);
		
		for (var page = 0; page < numPages; page++) {			
			$('<a href="#" class="page-number">' + (page + 1) + '</a>')
			.bind('click', {'newPage': page}, function(event) {
				currentPage = event.data['newPage'];
				$listing.trigger('repaginate');
				
				$('.pager').find('a:eq('+eval(currentPage)+')').addClass('active').siblings().removeClass('active');
				$(this).trigger('blur');
				return false;
			})
			.appendTo($pager).addClass('clickable')
			.clone(true).appendTo($pager2);
		}
		$pager.find('a.page-number:eq('+currentPage+')').addClass('active');
		$pager2.find('a.page-number:eq('+currentPage+')').addClass('active');
		
		if(pagerPosition == 'before'){
			$pager.insertBefore($listing);
		} else if(pagerPosition == 'both'){
			$pager.insertBefore($listing);
			$pager2.insertAfter($listing);
		} else {
			$pager.insertAfter($listing);
		}
		
		$listing.trigger('repaginate');
	});	
}


/* INITIALIZATION */
$(document).ready(function(){
	setupPage();
});
