// here we go

$(function() {
	// Set up vars and initiating hides for fade effect
	var status = {
		front: true,
		stage: 'open',
		info: 'closed',
		music: 'paused',
		track: 0,
		snap: 0
	};
	var loading;
	$.easing.def = 'easeInOutQuad';
	$('#snaps').css('background-image', 'url('+snaps[0]+')');
	
	$('#snaps-nav .hide').hide().css('opacity', 0).removeClass('hide');
	$('.hide').hide().removeClass('hide');
	
	// reference functions
	function checkHeight() {
		if ($(window).height() < 759) {
			$('body').css('overflow-y', 'visible');
		} else  {
			$('body').css('overflow-y', 'hidden');
		}
	}
	
	function loadSnaps() {
		$('<img>').attr('src', window.path + '/uploads/images/loading.gif');
		for(var i = 0; i <= snaps.length-1; i++) {
			$('<img>').attr('src', snaps[i]);
		}
	}
	
	function slideStage() {
		if (status.info == 'open') {
			$('#info').hide();
			status.info == 'closed';
		}
		$('#content').slideToggle(500);
		$('#controls').toggleClass('closed');
		status.stage = (status.stage == 'open') ? 'closed' : 'open';
	}
	
	function toggleInfo() {
		var $info = $('#info');
		if (status.info == 'closed') {
			$info.fadeIn(350);
			status.info = 'open';
		} else {
			$info.fadeOut(150);
			status.info = 'closed';
		}
	}
	
	function getTrackName() {
		var u = media[status.track];
		u = u + '/';
		a = u.split('/');
		var t = a[a.length-2];
		t = t.substr(3);
		t = t.substr(0, (t.length-4));
		t = t.replace(/_/g, " ");
		return t;
	}
	
	function flashTrack() {
		$('.track').find('span').text(getTrackName());
		$('.track').fadeIn(450, function() {
			var trackTime = setTimeout(function() { $('.track').fadeOut(450); }, 2000);
		});
	}
	
	function initHome() {
		$('#quotes').css({height: 'auto', overflow: 'visible', visibility: 'visible'});
		$('#quotes').tabs({
			fx: {opacity: 'toggle', height: 'toggle', duration: 500}
		}).tabs('rotate', 7500);
		
		$('#listen a').toggle(function() {
			flashTrack();
			$(this).attr('title', 'Pause').parent().addClass('active');
			status.music = 'play';
			$('#player').play();
		}, function() {
			$(this).attr('title', 'Listen Now').parent().removeClass('active');
			status.music = 'paused';
			$('#player').pause();
		});
	}
	
	function checkPaginator() {
		var $paginate = $('#paginated').tabs({ fx: {opacity: 'toggle', duration: 250} });
		$('#paginate div:visible:first').addClass('active');
		$('#paginate .counter .nextlink').click(function() {
			$('#paginate').fadeOut({
				duration: 350,
				easing: 'easeInOutQuad',
				complete: function() {
					var $d = $(this).find('div.active').hide().removeClass('active');
					if ($d.next('div:not(.counter)').length > 0) {
						$d.next().show().addClass('active');
						$('#paginate .prevlink').show();
						if ($d.next('div').next(':not(.counter)').length <= 0) $('#paginate .nextlink').hide();
					}
					$(this).fadeIn(350, 'easeInOutQuad');
				}
			});
			return false;
		});
		$('#paginate .counter .prevlink').click(function() {
			$('#paginate').fadeOut({
				duration: 350,
				easing: 'easeInOutQuad',
				complete: function() {
					var $d = $(this).find('div.active').hide().removeClass('active');
					$d.prev().show().addClass('active');
					if ($d.prev('div').prev().length <= 0) {
						$('#paginate .counter .prevlink').hide();
					} else {
						$('#paginate .counter .nextlink').show();
					}
					$(this).fadeIn(350, 'easeInOutQuad');
				}
			})
			return false;
		});
		// recordings player
		if ($('.recordingcontent').length > 0) {
			var $t = $('<div id="trackplay"/>').appendTo($('.recordingcontent'));
			$t.jPlayer({swfPath: 'uploads/scripts'});
		}
		$('.recordingcontent ol li').each(function() {
			if ($(this).attr('rel') != '') {
				$(this).addClass('trackplay').click(function() {
					if (status.music == 'play') {
						$('#player').pause();
						status.music = 'paused';
					}
					if ($(this).hasClass('active')) {
						$('#trackplay').stop();
						$(this).removeClass('active');
					} else {
						var u = window.path + '/uploads/media/tracks/' + $(this).attr('rel');
						$('#trackplay').setFile(u).play();
						$(this).siblings().removeClass('active').end().addClass('active');
					}
				});
			}
		});
	}
	
	function killTrack() {
		$('#trackplay').stop();
		$('.recordingcontent ol li.active').removeClass('active');
	}
	
	function loadContent(href) {
		if (status.stage == 'closed') slideStage();
		$('.navigation').find('li').removeClass('active').end().find('a[href="'+href+'"]').parent().addClass('active');
		if (status.front) $('#quotes').tabs('destroy').hide();
		if ($.browser.msie) $('#content h1').add('.ui-tabs').add('.homeevents').fadeOut(350);
		
		$('.loading').remove();
		loading = setTimeout(function() {
			$('#content').prepend($('<div class="loading"/>'));
		}, 3000);
		
		$('#content').find('.fade').animate({ opacity: 0 }, 350, 'easeInOutQuad', function() {
			$('#content').animate({ width: '735px', 'backgroundColor': '#ffffff' }, 450, 'easeInOutQuad')
				.load(href + ' #content > .fade', {}, function(r, res) {
					if (res == 'success' || res == 'notmodified') {
						clearTimeout(loading);
						$('.loading').remove();
						Cufon.refresh();
						$('#content > .fade').hide().fadeIn(350);
						$('body').removeClass('home');
						checkPaginator();
					}
				});
		});
	}
	
	function restoreHome() {
		$('.navigation .active').removeClass('active');
		if ($.browser.msie) $('#content h1').fadeOut(350);
		$('#content').find('.fade').animate({ opacity: 0 }, 350, 'easeInOutQuad', function() {
			$('#content').animate({ width: '490px', 'backgroundColor': '#000000' }, 450, 'easeInOutQuad')
				.load(window.path + ' #content > .fade', {}, function(r, res) {
					if (res == 'success') {
						Cufon.refresh();
						initHome();
						$('#content > .fade').hide().fadeIn(350);
						$('body').addClass('home');
					}
				});
		});
	}
	
	function switchSnap(direction, timeOut) {
		setTimeout(function() {
			if ((status.snap + direction) > (snaps.length - 1)) {
				status.snap = 0;
			} else if (status.snap + direction < 0) {
				status.snap = snaps.length - 1;
			} else {
				status.snap = status.snap + direction;
			}
			var src = snaps[status.snap];
			$('#snaps > .fade').hide().fadeIn(500, function() {
				$(this).parent().css('backgroundImage', 'url('+src+')').end().fadeOut(500);
			});
		}, timeOut);
	}
	
	function initPlayer() {
		var $li = $('<li>');
		var $playerPanel = $('<div class="player">');
		$playerPanel.append($('<a>').attr({'href': '#', 'id': 'player-prev'}));
		$playerPanel.append($('<a>').attr({'href': '#', 'id': 'player-eq'}));
		$playerPanel.append($('<a>').attr({'href': '#', 'id': 'player-next'}));
		$li.append($playerPanel);
		$('.navigation ul').append($li);
		var $track = $('<div class="track">').append($('<span>')).appendTo($('.navigation'));
		
		$("#player").jPlayer({
			ready: function () {
				$track.find('span').text(getTrackName());
				$(this).setFile(media[0]);
			},
			swfPath: 'uploads/scripts'
		}).onSoundComplete(function() {
			if (status.track == media.length-1) {
				status.track = 0;
			} else {
				status.track++;
			}
			$('#player').setFile(media[status.track]).play();
			flashTrack();
		});
	}
	
	function loadPage(hash) {
		if (hash) {
			var href = $(".navigation a[rel='" + hash + "']").attr('href');
			loadContent(href);
		} else if (!status.front) {
			status.front = true;
			restoreHome();
		}
	}
	
	// events
	$(window).resize(function() {
		checkHeight();
	});
	
	$('.navigation a').click(function() {
		status.front = false;
		$.history.load($(this).attr('rel'));
		return false;
	});
	
	$('#snaps-nav .hoverstate-left').hover(function() {
		var fto = 1;
		if ($.browser.msie) fto = .7;
		$(this).find('.prev').show().fadeTo(250, fto);
	}, function() {
		$(this).find('.prev').fadeTo(250, 0, function() { $(this).hide(); });
	}).click(function() {
		var timeOut = 0;
		if (status.stage == 'open') {
			slideStage();
			timeOut = 250;
		}
		switchSnap(-1, timeOut);
		return false;
	});
	
	$('#snaps-nav .hoverstate-right').hover(function() {
		var fto = 1;
		if ($.browser.msie) fto = .7;
		$(this).find('.next').show().fadeTo(250, fto);
	}, function() {
		$(this).find('.next').fadeTo(250, 0, function() { $(this).hide(); });
	}).click(function() {
		var timeOut = 0;
		if (status.stage == 'open') {
			slideStage();
			timeOut = 250;
		}
		switchSnap(1, timeOut);
		return false;
	});
	
	$('#toggleStage').click(function() {
		slideStage();
		return false;
	});
	
	$('#info div').hide();
	var firstInfo = $('#info > ul a:first').addClass('active').attr('href');
	$('#info').find(firstInfo).addClass('active').show();
	$('#info > ul a').click(function() {
		var el = $(this).attr('href');
		$('#info div.active').fadeOut(250, function() {
			$('#info').find('div').removeClass('active').end()
				.find(el).addClass('active').fadeIn(250);
		});
		$('#info > ul a').removeClass('active');
		$(this).addClass('active')
		return false;
	});
	
	$('#toggleInfo').click(function() {
		toggleInfo();
		return false;
	});
	
	$('#info .close').click(function() {
		toggleInfo();
		return false;
	});
	
	// live listeners
	$('.sidemenu a').live('click', function() {
		var href = $(this).attr('href');
		$('.sidemenu li.active').removeClass('active');
		$(this).parent('li').addClass('active');
		$('.content-right').addClass('temp').fadeOut(250, function() {
			$(this).load(href + ' #content .content-right', {}, function(r, res) {
				if (res == 'success') {
					Cufon.refresh();
					$('.temp > .content-right').hide().replaceAll('.temp').fadeIn(250);
					checkPaginator();
				}
			});
		});
		return false;
	});
	
	$('#contact form').livequery('submit', function() {
		var $form = $(this);
		$.ajax({
			type: 'POST',
			data: $form.serialize(),
			url: $form.attr('action') + '&showtemplate=false',
			beforeSend: function() {
				$form.fadeOut(250, function() {
					var contact = $(this).parent().html();
					$(this).parent().html('<div class="sending">Sending...</div>');
				});
			},
			success: function(data, textStatus) {
				if (textStatus == 'success') {
					$('#contact').html('<h2>Form Sent</h2><div class="after">Thank you!</div>');
				} else {
					var prompt = $('<div>Oops! There seems to have been a problem sending the form. Please try sending it again. Thank you!</div>');
					$('#contact').html(prompt + contact);
				}
			}
		});
		return false;
	});
	
	$('.News .counter a').live('click', function() {
		var target = $(this).attr('href');
		target = target + '&showtemplate=false';
		target = target.replace('/amp;/g','');
		$('.News').load(target);
		return false;
	});
	
	$('.events .counter a').live('click', function() {
		var target = $(this).attr('href');
		target = target + '&showtemplate=false';
		target = target.replace('/amp;/g','');
		$('.events').load(target);
		return false;
	});
	
	$('.homeevents a').live('click', function() {
		var target = $(this).attr('href');
		target = target + '&showtemplate=false';
		target = target.replace('/amp;/g','');
		$('.homeevents').load(target, {}, function() {
			Cufon.refresh();
		});
		return false;
	});
	
	$('#player-eq').live('mouseover', function() {
		$('.track').fadeIn(150);
	}).live('mouseout', function() {
		$('.track').fadeOut(150);
	}).live('click', function() {
		if (status.music == 'paused') {
			killTrack();
			$('#listen').addClass('active').find('a').attr('title', 'Pause');
			status.music = 'play';
			$('#player').play();
		} else {
			$('#listen').removeClass('active').find('a').attr('title', 'Listen Now');
			status.music = 'paused';
			$('#player').pause();
		}
		return false;
	});
	
	$('#player-next').live('click', function() {
		if (status.music == 'paused') {
			killTrack();
			status.music = 'play';
			$('#player').play();
		} else {
			if (status.track != media.length-1) {
				status.track++;
				$('#player').setFile(media[status.track]).play();
				flashTrack();
			} else {
				// do nothing
			}
		}
		return false;
	});
	
	$('#player-prev').live('click', function() {
		if (status.music == 'paused') {
			killTrack();
			status.music = 'play';
			$('#player').play();
		} else {
			if (status.track != 0) {
				status.track--;
				$('#player').setFile(media[status.track]).play();
				flashTrack();
			} else {
				// do nothing
			}
		}
		return false;
	});
	
	// init calls go last
	$.history.init(loadPage);
	loadSnaps();
	checkHeight();
	initPlayer();
	initHome();
	checkPaginator();
});