$('html').addClass('js');

//----------- Functions ----//

//------ Equal height columns

/*function equalize(columns){
	var tallest;
	columns.each(function(i){
		var h = $(this).height();
		if(i === 0){
			tallest = h;
		}else{
			if($(this).height() > tallest){
				tallest = h;
			}
		}
		return tallest;
	});
	columns.css('minHeight', tallest);
}*/

function equalize(columns){
	var tallest, elem, newHeight;
	
	for(var i = 0; i < columns.length; i++){
		if(i === 0){
			elem = columns.eq(i);
			tallest = elem.innerHeight();
		}else{
			if(columns.eq(i).innerHeight() > tallest){
				elem = columns.eq(i);
				tallest = elem.innerHeight();
			}
		}
	}
	
	
	newHeight = elem.innerHeight();
	
	columns.each(function(){
		var context = $(this),
		padding = context.innerHeight() - context.height();
		context.css('minHeight', newHeight - padding);
	});	
}



$(function(){
	if($('section.features div.wrap, #feed div.wrap').length){
		equalize($('section.features div.wrap, #feed div.wrap'));
	}
	if($('#home div.banner div.wrap, #home div.social ul.wrap').length){
		equalize($('#home div.banner div.wrap, #home div.social ul.wrap'));
	}
	
});


$(function(){
	$('#filters ul.dropdown ul').masonry({
		itemSelector : 'ul.dropdown ul li',
		columnWidth : 160
	});
	
	typeof(showResults) != 'undefined' && $('html,body').animate({scrollTop:$('#results').offset().top}, {duration: 'slow'});
});

//------ Slideshows
// Handles slideshows site-wide
$(function(){
	// Declare variables
	var slideshow = $('#slideshow'), 
	container = slideshow.find('div.slides'),
	ul = container.find('ul'),
	li = container.find('li'),
	curr = ul.find('li.selected'),
	caption = slideshow.find('p.caption'),
	prev = slideshow.find('a.prev'),
	next = slideshow.find('a.next'),
	w, tw, num, caption, clones = 0, spacing = 0, pos = 0;
		
	// Set variables
	switch (slideshow.attr('class')){
		case 'main':				
		w = 953;
		break;
		
		case 'detail':
		w = 750;
		spacing = 97;
		clones = li.slice(0, 1);
		clones.clone().appendTo(ul); // for the sake of continuity, repeat and append
		break;
		
		case 'double':
		w = 332;
		spacing = 97;
		clones = li.slice(0, 2);
		clones.clone().appendTo(ul);			
		break;
		
		case 'single':
		w = 423;
		clones = li.slice(0, 1);
		clones.clone().appendTo(ul);			
		break;
		
		default:
		w = 953;
	}
	
	if(clones.length){li = container.find('li');} // update li cache
	m = li.length;
	tw = m*w;
	ul.width(tw+(spacing*(m-1)));
	
	// Process to do checks. don't break.
	function slideProcess(num, rev){
		if(pos < tw){
			doSlide(num, rev);
		}
	}
	pos=container.scrollLeft();
	
	// num is passed directly to doSlide if there
	// is a paginated slideshow
	function doSlide(num, rev){
		if(!num){
			if(!rev){ // Going forward
				// reset ?
				if((pos+w)+(spacing*(m-1)) >= tw){
					container.scrollLeft(0)
				}
				container.stop(true, false).animate({
					scrollLeft: container.scrollLeft()+(w+spacing)
				}, function(){
					pos=container.scrollLeft(); // update position
				});
			}else{ // Going backwards
				// reset ?
				if(pos-w < 0){
					container.scrollLeft(tw)
				}
				container.stop(true, false).animate({
					scrollLeft: container.scrollLeft()-(w+spacing)
				}, function(){
					pos=container.scrollLeft(); // update position
				});				
			}
		}else{
			container.stop(true, false).animate({
				scrollLeft: (w*num)-w
			}, function(){
				pos=container.scrollLeft(); // update position 
			});

			// for changing captions
			if(caption.length){
				caption.html(li.eq(num-1).find('span').html());
			}
		}
	}

	// Switching based on pagination
	slideshow.find('div.controls li a').bind('click', function(){
		var context = $(this),
		num = context.text();
		
		context.closest('ul').find('li.selected').removeClass('selected');
		context.parent().addClass('selected');
		
		// No need to go through slide process, we know this won't break
		// ... In theory.
		doSlide(num);
		return false;
	});
	
	
	// Binary switching
	prev.bind('click', function(){
		slideProcess(0, true);
		return false
	});
	
	next.bind('click', function(){
		slideProcess();
		return false;
	});	
});
	


//------ Navigation 
$(function(){
	var  nav = $('#nav'),
	links = nav.find('li a'),
	current = nav.find('a.selected'),
	caption = nav.find('div.caption p'),
	defaultMessage = 'Championing contemporary printmaking';
	
	
	// default to current
	function resetCaption(){
		current.length > 0 ? caption.text(current.attr('title')) : caption.text(defaultMessage);
	};
	resetCaption();
	
	links.bind('mouseover', function(){
		var context = $(this);
		caption.text(context.attr('title'));
	}).bind('mouseout', function(){
		resetCaption();
	});
});


//------ Social media feeds 
$(function(){
	$('#feed ul.feeds li a').bind('click', function(){
		var context = $(this),
		container = context.closest('div');
		
		context.closest('ul').find('li.selected').removeClass('selected');
		context.parent().addClass('selected');
		
		container.find('article:not(.off)').fadeOut(function(){
			$(this).addClass('off');
			container.find('article.' + context.attr('rel')).hide().removeClass('off').fadeIn();
		});
		return false;
	});
});

//------ Sticky elements 
$(function(){
	var elem = $('#sticky');
	if(elem.length){
		var offset = elem.offset().top, scroll, flag;
		$(document).bind('scroll', function(){
			
			if($(this).scrollTop() > offset){
				if(flag !== true){
					elem.addClass('stick');
					flag = true;
				}
			}else{
				elem.removeClass('stick');
				flag = false;
			}
			
			//if(offset+elem.height()>=$('#footer').offset().top){
				
			//}
			
			
			
			
		});
	}	
});


//------ Add to favourites

$(function(){
	var button = $('#fave-button a'),
	elem = $('<p class="hoverText off">'+button.attr('title')+'</p>');
	
	elem.prependTo(button.parent());
	
	
	button.bind('mouseover', function(){
		elem.removeClass('off');
	}).bind('mouseout', function(){
		elem.addClass('off');
	}).bind('click', function(){
		var context = $(this);
		context.toggleClass('selected');
		if(context.hasClass('selected')){
			context.attr('title', 'Remove from your favourites');
		}else{
			context.attr('title', 'Add to your favourites');
		}
		elem.text(context.attr('title'));
		return false;
	});
	
});


//------ Form replacements 
$(function(){
	//------ Dropdown replacements 
	var dList = $('form select.dropdown').next();

	dList.each(function(){
		$(this).find('li:first').append('<ul class="ns off"></ul>');
	});
	

	dList.prev().each(function(i){
		var context = $(this).find('option');
		context.each(function(x){
			var option=context.eq(x),
			def=false;
			if($(this).is(':selected')){
				option.parent().next().find('li.selected a:first').text(option.text());
				$(this).val() === 'default' ? def = true:null;
			}
			//def === false &&
			option.parent().next().find('ul').append('<li class="opt-' + option.val() + (def ? ' off' : '') + '"><a href="#">' + option.text() + '</a></li>');
		});
	});
	
	function revealList(){
		var context = $(this),
			sub=context.parent().find('ul:first'),
			active = dList.find('ul:not(.off)');
			
		if(active.length){
			active.stop(true, false).slideUp(300, function(){
				active.addClass('off');
			}).delay(300);
		}
		if(sub.hasClass('off')){
			context.parent().css('zIndex', '9999')
			sub.hide().removeClass('off')
			active.length && sub.delay(300);
			sub.stop(true, false).slideDown(300);
		}else{
			sub.slideUp(function(){
				context.parent().css('zIndex', '500')
				$(this).addClass('off');
			});
		}
		
		return false;
	}
	
	dList.find('li:first a:first').bind('click', revealList);
	
	dList.find('ul li a').bind('click', function(e){
		var context=$(this);
		var select = context.parent().parent().parent().parent().prev();
		var selection=select.find('option[title="' + context.text() + '"]').attr('selected', 'selected');
		
		select.next().find('li:first a:first').text(context.text());
		if(select.next().hasClass('auto-click')){
			select.next().next().click();
		}
		context.parent().parent().slideUp(function(){
			$(this).addClass('off')
			selection.val() === 'default' ? context.parent().addClass('off') : context.parent().parent().find('.off').removeClass('off')
		});
		e.stopPropagation();
		return false;
	});
});


//------ Tiny Labels
$(function(){
	var label = $('form label.tiny');
	label.each(function(){
		var lbl=$(this), inp=lbl.next();
		!lbl.hasClass('static') ? lbl.css('display', 'none') : null;
		inp.bind('focus', function(){
			var txt=$(this);
			txt.val() === lbl.text() ? txt.val('') : null;
		});
		inp.bind('blur', function(){
			var txt=$(this); 
			txt.val() === lbl.text() || txt.val() === '' ? txt.val(lbl.text()) : null;
		});
		inp.val() === lbl.text() || inp.val() === '' ? inp.val(lbl.text()) : null;
	});
});

