jQuery.noConflict();

var plauditSite = (function($){
	
	var uiElements = {
		
		init: function() {
			uiElements.defaultMethods();
			uiElements.externalPlugins.init();
			uiElements.customElements.init();
		},
		
		defaultMethods: function() {
			$("body").addClass("jsEnabled");
			
			$(".searchForm input#query").focus(function(){ $(this).select(); });

			$("a[href*=.pdf]").click(function(){
				$(this).attr("target","_blank");
			});
		},
		
		externalPlugins: {
			
			init: function() {
				this.gallerySlider();
				this.galleryOverlay();
			},
			
			gallerySlider: function() {
				$("#gallery").scrollable({
					size: 1,
					clickable: false,
					next: "#next",
					prev: "#prev"
				});
			},
			
			galleryOverlay: function(){
				
				var options = {
					animationSpeed: 'normal',
					allowresize: false,
					showTitle: false,
					theme: 'light_rounded'
				};
				
				$("a[rel^='lightbox']").prettyPhoto(options);
			
			}
			
		},
		
		customElements: {
			
			init: function() {
				this.mainNavHover();
				this.toolTip();
				this.calendar();
			},
			
			mainNavHover: function() {
				
				$("#mainNav > li").hover(
					function(){
						$(this).addClass("hover");
					}, function(){
						$(this).removeClass("hover");
					}
				);
				
			}, // mainNavHover
			
			toolTip: function() {
				
				var toolTip = $("#toolTip");
				var toolTipContent = $("#toolTipContent");
				var adjustYOffset = 5;
				var adjustXOffset = 260;
				var loadingIcon = '<span class="loading"/>';
				var documentSize;
				var toolTipWidth = 260;
				var toolTipX;
				var toolTipY;
				
				$("#calendarInner a").live("mouseover", function(){
					var $this = $(this) // cache this
					var offset = $this.offset(); //get the offset of the current link
					documentSize = $(window).width();
					toolTipX = offset.left - adjustXOffset;
					toolTipY = offset.top - adjustYOffset;
					
					toolTipContent.html(loadingIcon);
					
					if ( offset.left - toolTipWidth <= 0 ) {
						toolTip.stop().css({
							top:  toolTipY,
							left: offset.left + 30
						});
						toolTip.addClass("reversed");
					} else {
						toolTip.stop().css({
							top:  toolTipY,
							left: toolTipX
						});
						toolTip.removeClass("reversed");
					}
					
					if ($.support.opacity) {
						toolTip.fadeTo(350, 1);
					} else {
						toolTip.show();
					}
					
					
					$.ajax({
						url: $(this).attr("rel"),
						success: function(data){
							var eventList = $(data).filter("ul");
							toolTipContent.html(eventList);
						}
					});
					
				}).live("mouseout", function(){
					toolTip.hide();
				});
				
			}, // toolTip	
			
			calendar: function() {
				var calendar = $("#calendarListing");
				
				var previousCalendarControl = $("#previous", $("#calendar"));
				var nextCalendarControl = $("#next", $("#calendar"));
				
				var previousCalendar;
				var nextCalendar;
				var currentCalendar;
				
				function updateClassNames() {
					$(".calGroup", calendar).each(function(i){
						if (i === 0){
							$(this).attr("class","calGroup group calGroupPrevious");
						} else if (i === 1){
							$(this).attr("class","calGroup group calGroupCurrent");
						} else if (i === 2){
							$(this).attr("class","calGroup group calGroupNext");
						}
						$(this).removeAttr("style");
					});
				}
				
				function updateAnchors(p, n){
					previousCalendarControl.attr("href", p.text());
					nextCalendarControl.attr("href", n.text());
				}
				
				function slideCalendar(direction, data){
					previousCalendar = $(".calGroupPrevious",calendar); 
					nextCalendar = $(".calGroupNext",calendar); 
					currentCalendar = $(".calGroupCurrent",calendar); 
					
					if ( direction === "previous") {
						data.appendTo(previousCalendar);
						
						previousCalendar.stop().animate({ left: "960px"});
						
						currentCalendar.stop().animate({ left: "1920px"}, function(){
							nextCalendar.prependTo(calendar);
						
							currentCalendar.empty();
							
							updateClassNames();
						});
					} 
					
					if ( direction === "next") {
						data.appendTo(nextCalendar);
						
						nextCalendar.stop().animate({ left: "960px"});
						
						currentCalendar.stop().animate({ left: "0"}, function(){
						
							previousCalendar.appendTo(calendar);
							
							currentCalendar.empty();
							
							updateClassNames();
						});
					}
					
				}
				
				$(".calendarControls", $("#calendar")).click(function(e){
					e.preventDefault();
					var id = $(this).attr("id");
					var href = $(this).attr("href");
					
					$.ajax({
						url: 'calendar/single-calendar.html?' + href,
						success: function(data){
							$("#toolTip").hide();
							var table = $(data).filter("table");
							var previousCalendar = $(data).filter("#previousCalendar");
							var nextCalendar = $(data).filter("#nextCalendar");
							slideCalendar(id,table);
							updateAnchors(previousCalendar,nextCalendar);
						}
					});
				});
				
			} // calendar
			
		} // customElements
	};
	
	return {
		setup: uiElements.init()
	}
})(jQuery);

jQuery(function(){ plauditSite.setup });