var pill =
{
    slide_speed: 500,
    
    init: function() {
        var pills = $('.pill');
        var pill_id = '';
        
        var bits = document.location.href.split('#');
        if (typeof(bits[1]) != 'undefined') {
            pill_id = bits[1];
        }
        
        if (pills.length > 0) {
            pills.click(pill.toggle_pill);
            if (pill_id.length > 0) {
                pill.close_pill(pills.not('#' + pill_id), true);
            }
            else if ($('.start-open').length > 0) {
                pill.close_pill(pills.not('.start-open'), true);
            }
            else {
                pill.close_pill(pills.not(':first'), true);
            }
        }
    },
    
    toggle_pill: function(e) {
        if ($(this).hasClass('off')) {
            pill.close_pill($('.pill'));
            pill.open_pill($(this));
        }
        else {
            pill.close_pill($(this), false);
        }
        
        e.preventDefault();
    },
    
    close_pill: function(jQ, instant) {
        jQ.each(function(index, Element) {
            var pl = $(this);
            if (instant) {
                pl.next().hide();
                pl.addClass('off');
            }
            else {
                pl.next().slideUp(pill.slide_speed, function() {
                    pl.addClass('off');
                });
            }
        });
    },
    
    open_pill: function(jQ) {
        jQ.each(function(index, Element) {
            $(this).removeClass('off');
            $(this).next().slideDown(pill.slide_speed);
        });
    }
};

var placeholder =
{
    init: function() {
        var texts = $('input[type="text"]');
        
        if (texts.length > 0) {
            texts.focusin(placeholder.focus);
            texts.focusout(placeholder.unfocus);
            placeholder.set_placeholder(texts);
        }
    },
    
    focus: function(e) {
        placeholder.unset_placeholder($(this));
    },
    
    unfocus: function(e) {
        placeholder.set_placeholder($(this));
    },
    
    set_placeholder: function(jQ) {
        jQ.each(function(index, Element) {
            var title = $(this).attr('title');
            if ($(this).val().length < 1 && title.length > 0) {
                $(this).val(title);
            }
        });
    },
    
    unset_placeholder: function(jQ) {
        jQ.each(function(index, Element) {
            if ($(this).val() == $(this).attr('title')) {
                $(this).val('');
            }
        });
    }
};

var flickr =
{
	scroll_time: 333,
	position: 0,
	per_view: 2,
	scroll_width: 112 * 2, // per_view, again
	
	init: function() {
	    if ($('#flickrGalleryNav').length > 0) {
	        $('#flickrGalleryNav .next').click(flickr.nextEvent);
    		$('#flickrGalleryNav .prev').click(flickr.previousEvent);
    		flickr.galleryNavLinks();
	    }
	},
	
	nextEvent: function(e){
		flickr.scrollEvent('-');
		e.preventDefault();
	},
	
	previousEvent: function(e){
		flickr.scrollEvent('+');
		e.preventDefault();
	},
	
	scrollEvent: function(direction){
		
		// scroll one li in specified direction
		$('#flickrGallery ul').animate(
			{ left: direction + '=' + flickr.scroll_width },
			flickr.scroll_time
		);
		
		// decrement offset - since direction relates to the origin point of the gallery ul, the heading index goes in the opposite direction
		// a plus direction represents a scroll to the left (previous) direction, but a decrement in the index of the event heading
		if (direction == '-'){
			flickr.position += 1;
		} else {
			flickr.position -= 1;
		}
		
		// enable/disable Next/Previous links based on offset index
		flickr.galleryNavLinks();
		
	},
	
	galleryNavLinks: function(){
		var items = Math.ceil($('#flickrGallery ul > li').size() / flickr.per_view);
		var nextLink = $('#flickrGalleryNav .next');
		var prevLink = $('#flickrGalleryNav .prev');
		
		if (flickr.position == 0 && items == 1) {
			nextLink.hide();
			prevLink.hide();
		} else if (flickr.position == 0){
			nextLink.css('display', 'block');
			prevLink.hide();
		} else if (flickr.position == (items-1)) {
			nextLink.hide();
			prevLink.css('display', 'block');
		} else {
			nextLink.css('display', 'block');
			prevLink.css('display', 'block');
		}
	}
};

var autolinker =
{
    href: '/',
    
    init: function() {
        var links = $('.autolink a');
        
        
        if (links.length > 0) {
            autolinker.href = links.first().attr('href');
            setTimeout("autolinker.go()", 1500);
        }
    },
    
    go: function() {
        document.location.href = autolinker.href;
    }
};

var events = 
{
	init: function(){
		$('.event-cal').each(function(){
			
			var container = $(this);
			var calendar = container.find('.annualCalendar');
			var links = calendar.find('td a');
			var yearLinks = container.find('.year-nav a');
			
			events.bind_event_links(container);
			yearLinks.live('click', events.changeYear);
			
		});
		
	},
	
	bind_event_links: function(container){
		var links = container.find('.annualCalendar td a');
		
		if (links.length > 0){
			links.live('click', function(e){
				link = $(this);
				calendar = container.find('.annualCalendar');
				
			    calendar.animate({opacity: '0.3'}, 100);

				var id = link.attr('data-event-id');

				container.append('<div class="calendar-event-detail"></div>');
				container.find('.calendar-event-detail').hide().load('/events/detail/'+id, function(){

					// set min height on detail view to match height of annual table - nicer!
					var minHeight = parseInt(calendar.height());
					if ($.support.boxModel){
						minHeight = minHeight - 41; // take account of padding and border in detail view
					}
					calendar.find('.event-detail').attr('style', 'min-height: '+ minHeight +'px;');

					calendar.hide();
					container.find('.calendar-event-detail').fadeIn(100);

					container.find('.calendar-event-detail .back a').click(function(e){
						events.showYear(container);
						e.preventDefault();
					});

				});

				e.preventDefault();
			});
		}
	},
	
	showYear: function(container){
		container.find('.calendar-event-detail').animate({opacity: '0.3'}, 100, 'swing', function(){
		    container.find('.calendar-event-detail').remove();
		    container.find('.annualCalendar').show().animate({opacity: '1'}, 100, 'swing');
		});
		
	},
	
	changeYear: function(e){
		var link = $(this);
		var year = link.attr('data-target-year');
		var calendars = link.attr('data-target-calendars');
		var container = link.parents('.event-cal').first();
		var calendar = container.find('.annualCalendar');

		calendar.animate({opacity: '0.3'}, 100);
		container.load('/events/ajax_year/' + calendars + '/' + year);
		
		e.preventDefault();
		
	}
}

$(document).ready(function(){
    pill.init();
    flickr.init();
    placeholder.init();
    autolinker.init();
	events.init();
});
