
var FSE = window.FSE || {};

FSE.Main = (function($) {
	
	var Search = {
		text: 'Search FSE',
		
		init: function() {
			$('#SearchForm_SearchForm_Search')
				.focus(function() {
					if ($(this).val() == Search.text) {
						$(this).val('');
					}
				})
				.blur(function() {
					if ($(this).val() == '') {
						$(this).val(Search.text);
					}
				})
				.blur();
		}
	}
	
	function initSlider() {
		$('.gallery .default')
			.anythingSlider({
				autoPlay: false,
				buildNavigation: false,
				forwardText: '&raquo;',
				backText: '&laquo;'
			});
			
		$('.gallery .auto')
			.anythingSlider({
				autoPlay: true,
				delay: 4000,
				buildNavigation: false,
				forwardText: '&raquo;',
				backText: '&laquo;'
			});
	}
	
	function initFonts() {
		Cufon.replace('.scala', {textShadow: '#fff 0 1px'});
		Cufon.replace('.scala-h', {textShadow: '#fff 0 1px', hover: true});
		Cufon.replace('.scala-ns');
	}
	
	var Team = {
		init: function() {

			$('#team-members')
				.find('select')
					.change(function() {
						Team.reload();
					})
				.end()
				.find('.pagination:eq(0) a')
					.live('click', function() {
						page = Utility.getQueryParamByName($(this).attr('href'), 'start');
						Team.reload(page);
						
						$('html, body').animate({scrollTop: $('#team-members').offset().top}, 'slow');
						return false;
					});
		},
		reload: function(page) {
			page = page || '';
			
			var start = '&start=' + page;
			var form = $('#team-members form');
			var url = form.attr('action') + 'ajax?' + form.serialize() + start;
			
			$('#team-members .content-wrap:eq(0)').load(url, Team.init);
		}
	}
	
	var Events = {
		init: function() {
			$('#events')
				.find('select')
					.change(function() {
						Events.reload();
					})
				.end()
				.find('ul.months:eq(0) a')
					.click(function() {
						$(this).parents('ul.months').find('li').removeClass('current');
						$(this).parent().addClass('current');
						
						Events.reload(null, $(this).attr('rel'));
						return false;
					})
				.end()
				.find('.pagination:eq(0) a')
					.live('click', function() {
						page = Utility.getQueryParamByName($(this).attr('href'), 'start');
						Events.reload(page);
						return false;
					})
				.end()
				.find('.listing a')
					.live('click', function() {
						$.fancybox({
							href: this.href.indexOf('?') == -1 ? this.href + '?ajax=1' : '&ajax=1',
							padding: 60
						});
						
						return false;
					});
		},
		reload: function(page, month) {
			var start = page ? '&start=' + page : '';
			var month = month ? '&month=' + month : '';
			var form = $('#events form');
			var url = form.attr('action') + 'ajax?' + form.serialize() + start + month;
			
			$('#events #listing-wrap').load(url);
		}
	}
	
	var Schedule = {
		scrollpane: false,
		isGadget: false,
		
		init: function() {
			Schedule.isGadget = $('#schedule-gadget').length;
			Schedule.setupScrollpane();
			
			$('.schedule')
				.find('select')
					.change(function() {
						Schedule.reload();
					})
				.end()
				.find('ul.days:eq(0) a')
					.click(function() {
						$(this).parents('ul.days').find('li').removeClass('current');
						$(this).parent().addClass('current');
						
						Schedule.reload(null, $(this).attr('rel'));
						return false;
					})
				.end()
				.find('.pagination:eq(0) a')
					.live('click', function() {
						page = Utility.getQueryParamByName($(this).attr('href'), 'start');
						Schedule.reload(page);
						return false;
					})
				.end()
				.find('.listing .title a, .listing .trainer a')
					.live('click', function() {

						$.fancybox({
							href: this.href + 'ajax?id=' + $(this).attr('rel'),
							padding: 60,
							width: 500,
							autoScale: false,
							autoDimensions: false
						});
						return false;
					});
		},
		setupScrollpane: function() {
			if (Schedule.isGadget) {
				Schedule.scrollpane = $('#schedule-gadget #loader').jScrollPane({
					maintainPosition: false
				}).data('jsp');
			}
		},
		reload: function(page, day) {
			var start = page ? '&start=' + page : '';
			var day = day ? '&day=' + day : '&day=' + $('.schedule ul.days li.current a:eq(0)').attr('rel');
			var form = $('div.schedule form');
			var url = form.attr('action') + 'ajax?' + form.serialize() + start + day;
			var scheduleListing = Schedule.isGadget ? Schedule.scrollpane.getContentPane() : $('.schedule #listing-wrap');
			
			scheduleListing
				.fadeOut('slow')
				.slideUp('fast');
				
			$('#loader').addClass('loading');
			
			$.get(url, function(data) {	
				scheduleListing.html(data);
				$('#loader').removeClass('loading')

				scheduleListing
					.parents('.schedule:eq(0)')
						.find('.today:eq(0)')
							.html(scheduleListing.find('#schedule-date').text())
						.end()
					.end()
					.slideDown('fast')
					.fadeIn('fast', function() {
						if (Schedule.isGadget) {
							Schedule.scrollpane.reinitialise();
						}
					});
			});
		}
	}
	
	var Gallery = {
		speed: 8000,
		duration: 1000,
		_intervalID: false,
		_lineSepHeight: 304,
		
		init: function() {
			$('#gallery li:gt(0), #gallery-thumbs li .arrow:gt(0)').hide().removeClass('hidden');
			
			$('#gallery-thumbs a').click(function() {
				var item = $(this).attr('rel');
				
				Gallery.stop();
				Gallery.show(item);
				
				return false;
			});
			
			if ($('#gallery li').length < 2) return;
			
			Gallery.start();
		},
		start: function() {
			Gallery._intervalID = setInterval(function() {
				Gallery.show();
			}, Gallery.speed);
		},
		stop: function() {
			clearInterval(Gallery._intervalID);
		},
		show: function(position) {
			var current = $('#gallery li.current:eq(0)');
			var next = position ? $('#gallery li.pos-' + position) : current.next();
				next = next.length ? next : $('#gallery li:eq(0)');

			
			var currentThumb = $('#gallery-thumbs li.current:eq(0)');
			var nextThumb = position ? $('#gallery-thumbs a[rel=' + position + ']').parent() : currentThumb.next();
				nextThumb = nextThumb.length ? nextThumb : $('#gallery-thumbs li:eq(0)');

			currentThumb
				.removeClass('current')
				.find('.arrow')
					.fadeOut(Gallery.duration);
			
			current
				.fadeOut(Gallery.duration, function() {
					current.removeClass('current');
					
					next
						.addClass('current')
						.fadeIn(Gallery.duration);
					
					nextThumb
						.addClass('current')
						.find('.arrow')
							.fadeIn(Gallery.duration);
				});
		}
	}
	
	var Utility = {
		getQueryParamByName: function(url, name) {
		  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		  var regexS = "[\\?&]"+name+"=([^&#]*)";
		  var regex = new RegExp( regexS );
		  var results = regex.exec(url);
		  if( results == null )
		    return "";
		  else
		    return decodeURIComponent(results[1].replace(/\+/g, " "));
		}
	}
	
	var Forms = {
		init: function() {
			$('form .field .watermark').live('click', function() {
				$(this).parent().find('input[type=password]').focus();
			});
			$('form .field input[type=password]')
				.live('blur', function() {
					var text = Forms.getLabelText($(this));
					$(this).after('<div class="watermark hidden">' + text + '</div>');
					
					var watermark = $(this).parent().find('.watermark:eq(0)')
					watermark.css('line-height', $(this).outerHeight() + 'px');
					
					if ($(this).val() == '') {	
						watermark.removeClass('hidden');
					} else {
						watermark.addClass('hidden');
					}
				})
				.live('focus', function() {
					$(this).parent().find('.watermark:eq(0)').addClass('hidden');
				}).blur();
			
			$('form .field input[type=text]')
				.live('blur', function() {
					var text = Forms.getLabelText($(this));
					if ($(this).val() == '') {
						$(this).addClass('default').val(text);
					}
				})
				.live('focus', function() {
					var text = Forms.getLabelText($(this));
					if ($(this).val() == text) {
						$(this).val('');
					}
					$(this).removeClass('default');
				})
				.blur();
			
			Forms.CreateBlogDropdowns();

		},
		getLabelText: function(el) {
			return el.parents('.field:eq(0)').find('label').addClass('hidden').text();
		},
		CreateBlogDropdowns: function() {
			$('.BlogCentersWidget, .ArchiveWidget').each(function() {
				var html = '<select><option value="">' + $(this).find('h3').text() + '</option>';
				
				$(this).find('li a').each(function() {
					html += '<option value="' + $(this).attr('href') + '">' + $(this).text() + '</option>';
				});
				
				html += '</select>';
				$(this).html(html)
					.find('select')
						.change(function() {
							var url = $(this).val();
							if (url) {
								document.location = url;
							}
						});
			});
		},
	}
	
	var Lightbox = {
		init: function() {
			$('.fancybox').click(function() {
				var options = {
					onComplete: Lightbox.onComplete,
					padding: 60
				};
				
				if ($(this).hasClass('ajax')) {
					options['href'] = this.href + 'ajax';
				}
				$.fancybox(options);
				
				return false;
			});
		},
		onComplete: function() {
			$('#fancybox-wrap form .field input[type=text]').blur();
		}
	}
	
	var Newsletter = {
		init: function() {
			Newsletter.validation();
		},
		validation: function() {
			$('.newsletter form').live('submit', function() {
				var email = $(this).find('input[name=Email]');
				var emailCheck = /^([a-zA-Z0-9_+\.\x27-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
				
				if (!email.val().match(emailCheck)) {
					Newsletter.validationError(email, 'Please enter a valid email address.');
					return false;
				}
				if ($('#newsletter-ajax').length > 0) {
					var form = $(this);
					$.post(form.attr('action'), form.serialize(), function(data) {
						$('#newsletter-ajax .newsletter:eq(0)').html(data);
					});
					return false;
				}
			});
		},
		validationError: function(element, message) {
			var field = element.parents('.field:eq(0)');
			var html = '<span class="message validation">' + message + '</span>';
			field
				.find('span.message')
					.remove()
				.end()
				.append(html);
		}
	}
	
	return {
		init: function() {
			initFonts();
			
			$(function() {
				$('html').addClass('js');
				Search.init();
				initSlider();
				Team.init();
				Events.init();	
				Schedule.init();
				Gallery.init();
				Forms.init();
				Lightbox.init();
				Newsletter.init();
			});
		}
	}
})(jQuery).init();
