(function($) {

	var $logo = $('#dtv-logo');
	var $pageContainer = $('#page-container');

	var $logoutBox = $('.logout-box');
	var $loginInputs = $('#login-username, #login-password');
	var $loginBox = $('.login-box');
	var $logoutLink = $('.user-loged-in-box .nav-logout');
	var $userLoggedInBox = $('.user-logged-in-box');
	var $loginButton = $('#login-button');
	var $logoutButton = $('#logout');
	var $spinner = $('#login-spinner');
	var $errorField = $('#top-center-tab div.login-box div.login-error');
	var $usernameField = $('#login-username');
	var $passwordField = $('#login-password');

//	var $forgotPassword = $('.forgot-password');
//	log('$forgotPassword', $forgotPassword);

	var $header = $('header');
	var $headerTools = $('#top-center-tab, #user-nav', 'header');
	var $content = $('.vertical-center');
	var $footer = $('#footer');

	var post_url = '/api/login/user';
	var forgot_url = '/api/school/forgot';

	$loginButton.click(submitAdminLoginForm);
	$loginInputs.keypress(function(e) {
		if (e.which == 13) {
			submitAdminLoginForm();
		}
	});

//	$forgotPassword.click(showForgotPasswordForm);
	$('body').delegate('#recover-password #btn-user-password', 'click', sendUserPassword);

	//set up forgot password links for the user login tool and also for the link on the tab that has to load
	$('body').delegate('.forgot-password', 'click', showForgotPasswordForm);

	function sendUserPassword() {
		$('#recover-password-success').text('');
		$('#recover-password-error').text('');
		var email = encodeURIComponent($('#user-email').val());
		$.getJSON(forgot_url + '/' + email)
		.success(onForgotSuccess)
		.error(onForgotError);
	}

	function onForgotSuccess(data) {
		log(data);
		$('#recover-password-success').text(data.message);
		_.delay($.fancybox.close, 1000);
	}

	function onForgotError(xhr, status, error) {
		var data = JSON.parse(xhr.responseText);
		log(data, data.message, xhr, status, error);
		$('#recover-password-error').text(data.message);
	}

//	$logoutLink.click(onLogout);

	function onLogout(e) {
		e.preventDefault();
		$.d4s.unloadSite();
	}

	/**
	 * The page starts out with the body hidden via css class 'invisible'
	 * From there, hide the header items, home callout, and footer.
	 * Display the logo, animate it, and then bring in the other items
	 */
	function initialPageAnimation() {
		// don't animate admin pages
		
		var headerDelay = 500;
		var footerDelay = 1000;
		var path = window.location.pathname;
		// start size of logo, container width, container height, destination width x height and y position, duration, delay before animating logo
		var w = 350, h = 305, cw = $pageContainer.width(), ch = $pageContainer.height(), dw = 173, dh = 151, dy = parseInt($('header').css('padding-top')), dur = 1000, delay = 1500;
		log('cw', cw, 'ch', ch);
		if ($.d4s.enableAnimation && !$.d4s.getSiteLoaded()) {
			$logo.center({against:'parent', topPercentage: 100, updateOnResize:false});
			$logo.width(w).height(h).find('img').width(w).height(h);
//			$logo.css({left: (cw - w) / 2, top: (ch - h) / 2});
			$([$headerTools, $content, $footer]).setVisibility(false);
			// change header background image position
			$header.css('background-position', "720px -155px");
			// bring the logo back in
			$logo.hide().setVisibility(true);
			$('body').removeClass('invisible');
			// fade up the logo first, after a small delay
			_.delay(function() {
				$logo.fadeIn(dur / 2);
			}, 750);
			// then animate the logo
			_.delay(function() {
				$logo.animate({top: dy, left: 0, width: dw, height: dh}, dur, 'easeInOutQuad', function() {
					// the footer
					$footer.css('bottom', -135).setVisibility().delay(footerDelay).animate({bottom: 0}, dur/2, 'easeOutExpo');
				}).find('img').animate({width: dw, height: dh}, dur);
				// and animate other elements in
				_.delay(function() {
					// the nav area
					$headerTools.hide().setVisibility(true).fadeIn();
					$content.hide().setVisibility(true).fadeIn();
					_.delay(function() {
						// the books image behind the header
						$header.setVisibility().animate({backgroundPosition: "(720px 25px)"}, dur, 'easeOutBounce', $.d4s.triggerSiteAnimComplete);
					}, 500);
				}, 750);
			}, 2000);
		} else {
			log('siteAnim skipped');
			$logo.height(dh);
			$logo.width(dw);
			$logo.find('img').width(dw).height(dh);
			$header.css('background-position', "720px 25px");
			$([$headerTools,$header, $footer]).setVisibility();
			$('body').hide().removeClass('invisible').fadeIn($.d4s.bodyAnimSpeed, $.d4s.triggerSiteAnimComplete);
		}
	}

	/**
	 * Display the forgot password form
	 * @param e
	 */
	function showForgotPasswordForm(e) {
		e.preventDefault();
		log($.d4s.fancyBoxOpts);
		var content = '<div id="recover-password">';
		content += '<table>';
		content += '<tbody>';
		content += '<tr>';
		content += '<td>';
		content += '<input id="user-email" name="user-email" placeholder="Enter email" title="Enter your email to receive the login credentials">';
		content += '<input type="button" id="btn-user-password" name="btn-user-password" value="Retrieve School Code and PIN">';
		content += '<div class="error" id="recover-password-error"></div>';
		content += '<div class="success" id="recover-password-success"></div>';
		content += '</td></tr></tbody></table></div>';
		$.fancybox(_.extend($.d4s.fancyBoxOpts, {height: 140, content: content, hideOnContentClick: false}));

	}
	/**
	 * Handles the process of submitting the login form.
	 */
	function submitAdminLoginForm() {
		log('submit login form');
		clearAdminLoginFormError();
		showAdminLoginFormBusy();
		doLogin();
	}

	/**
	 * Trigger ajax login task
	 */
	function doLogin() {
		var data = {school_code: $usernameField.val(), pin: $passwordField.val()};
		log('credentials', data);
		$.post(post_url, data)
		.success(onSuccess)
		.error(onError);
	}

	function onSuccess(data) {
		log('logged in', data);
		showAdminLoginFormNotBusy();
		// also animate the login box down after removing the hidden class. Set the top position of it to -120px to hide it before sliding it down
		$loginBox.animate({
			top: -60,
			opacity: 0
		}, 1000, function() {
			$.d4s.redirect('/login');
		});
		$userLoggedInBox.css('top', '-120px').removeClass('hidden').animate({
			top: 0,
			opacity: 1
		}, 1000);
	}

	function onError(xhr, status, error) {
		var data = JSON.parse(xhr.responseText);
		if (xhr.status == 401) {
			log('login failed', xhr, status, error);
		}
		showAdminLoginFormError(data.message);
	}

	/**
	 * Shows an error for the admin form.
	 */
	function showAdminLoginFormError(errorMsg) {
		$errorField.html(errorMsg);
		$errorField.fadeIn('slow');
		showAdminLoginFormNotBusy();
	}

	/**
	 * Hides errors for the admin form.
	 */
	function clearAdminLoginFormError() {
		$errorField.fadeOut('slow');
	}

	/**
	 * Removes the login button, shows the loading icon
	 */
	function showAdminLoginFormBusy() {
		$loginButton.hide();
		$spinner.show();
	}

	/**
	 * Shows the login button, hides the loading icon
	 */
	function showAdminLoginFormNotBusy() {
		$spinner.hide();
		$loginButton.show();
	}

	initialPageAnimation();
	$.d4s.setSiteLoaded();
})(jQuery);

