
var loginServiceUrl;
var loginViewUrl;
var loginPromptUrl;
var callbackFunction;
var modalPrompt = true;

function toggleAuthenticationStatus(authenticated)
{
	if(authenticated == 'false')
	{
		$('.logged-in').toggle();
		$('#content-frame').contents().find('.logged-in').toggle();
	}
	else
	{
		$('.logged-out').toggle();
		$('#content-frame').contents().find('.logged-out').toggle();
	}
}
//----- initialization ----- //
function initLogin(authenticated)
{
	loginServiceUrl = CONTEXT_ROOT + "/Login";
	loginViewUrl = CONTEXT_ROOT + "/home/login.jsf";
	loginPromptUrl = CONTEXT_ROOT + "/home/loginPrompt.jsf";
	toggleAuthenticationStatus(authenticated);
	initLoginFields();	
}

function initLoginFields()
{
	initKeyPress($("input#login-userfield"), doLogin);
	initKeyPress($("input#login-pwfield"), doLogin);
	initRememberMe($("input#login-userfield"), $('#login-rememberme'));
	if($('input#login-userfield').val() != ''){
		$("span#login-userhelp").css('display', 'none');	
	}
	initPasswordHelp($("input#login-userfield"), $("span#login-userhelp"));
	initPasswordHelp($("input#login-pwfield"), $("span#login-pwhelp"));
	
}

function initLoginPromptFields(isModal)
{
	initKeyPress($('input#loginprompt-userfield'), doLoginFromPrompt);
	initKeyPress($('input#loginprompt-pwfield'), doLoginFromPrompt);
	
	
	initPasswordHelp($('input#loginprompt-pwfield'), $('span#loginprompt-pwhelp'));
	initRememberMe($('input#loginprompt-userfield'));
	if($('input#loginprompt-userfield').val() != ''){
		$("span#loginprompt-userhelp").css('display', 'none');	
	}
	initPasswordHelp($("input#loginprompt-userfield"), $("span#loginprompt-userhelp"));
	
	if(typeof isModal != 'undefined') modalPrompt = isModal;
}

function initKeyPress(inputField, loginFunction)
{
	inputField.keypress(function(event) { if (event.keyCode == '13') loginFunction(); });
}

function initPasswordHelp(passwordField, passwordHelp)
{
	passwordHelp.click( function() { passwordField.focus();});
	passwordField.focus( function(eventObject) {passwordHelp.hide()});
	passwordField.focusout( function(eventObject) {if(jQuery.trim(passwordField.val()) == ''){passwordHelp.show();}});
}

function initRememberMe(usernameField, rememberMeBox)
{
	var usernameVal = readCookie("sis_username");
	if(usernameVal != null && jQuery.trim(usernameVal) != '')
	{
		usernameField.val(usernameVal);
		if(rememberMeBox != null) rememberMeBox.css("background-image", "url(\"./home/images/login/checkbox-checked.gif\")");
	}
}

// ----- REMEMBER ME FUNCTIONS ------//
function doRememberMe()
{
	var rememberMeImage = $('#login-rememberme');
	
	var checked = "url(\"./home/images/login/checkbox-checked.gif\")";
	var unchecked = "url(\"./home/images/login/checkbox.gif\")";
	
	var imageSrc = rememberMeImage.css("background-image");
	var usernameVal = readCookie("sis_username");
	if(rememberMe())
	{
		//TOGGLE TO DO NOT REMEMBER ME
		rememberMeImage.css("background-image", unchecked);
		eraseCookie("sis_username");
	}
	else
	{
		//TOGGLE TO REMEMBER ME
		rememberMeImage.css("background-image", checked);
		createCookie("sis_username", $("input#login-userfield").val(), 365);
	}
}

function rememberMe()
{
	var imageSrc = $('#login-rememberme').css("background-image");
	return imageSrc.indexOf('checkbox-checked.gif', 0) > 0
}

// ----- LOGIN / LOGOUT FUNCTIONS ----- //
function doLogin()
{
	var username = jQuery.trim($('input#login-userfield').val());
	var pw = jQuery.trim($('input#login-pwfield').val());
	
	if(username == '')
	{
		showLoginMsgDialog("Login Error", "Please check your user name and password and try again.");
	}
	else
	{
		$.ajax({
			type: 'POST',
  			url: loginServiceUrl,
  			data: { username: username, password: pw, action: "login"},
  			success: function(data){
				if(data.status != 'AUTHENTICATED')
				{
					if(data.contentID != null)
					{
						loadLink(data.contentID);
					}
					else
					{
						showLoginMsgDialog("Login Error", data.errorMessage, function() { highlightLoginFields($("#login-userfield"), $("#login-pwfield")); });
					}
				}
				else
				{
					if(rememberMe()) createCookie("sis_username", $("input#login-userfield").val(), 365);
					handleRefreshLogin(data, $('.logged-out'), $('.logged-in'));
				}
  			},
  			async: false,
  			dataType: 'json',
  			cache: false
		});
	}
}

function doLoginFromPrompt()
{
	var username = jQuery.trim($('div#login-prompt').find('input#loginprompt-userfield').val());
	var pw = jQuery.trim($('div#login-prompt').find('input#loginprompt-pwfield').val());
	if(username == '')
	{
		$('#login-prompt > #loginprompt-error').html("You must enter a username to log into the system.");
	}
	else
	{
	
		$.post(loginServiceUrl,{username: username, password: pw, action: "login"}, 
			function(data){
				if(data.status != 'AUTHENTICATED')
				{
					if(data.contentID != null)
					{
						loadLink(data.contentID);
						$("#login-prompt").dialog("destroy");
					}
					else
					{
						$( "#loginprompt-error" ).html(data.errorMessage);
						highlightLoginFields($("#loginprompt-userfield"), $("#loginprompt-pwfield"));
					}
					
				}
				else
				{
					$("#login-prompt").dialog("destroy");
					handleRefreshLogin(data, $('.logged-out'), $('.logged-in'));
					callbackFunction();
				}
			}, 
			"json");
	}
}

function doLogout()
{
	$.ajax({
			type: 'POST',
  			url: loginServiceUrl,
  			data: { action: "logout"},
  			success: function(data){
				handleRefreshLogin("", $('.logged-in'), $('.logged-out'), CONTEXT_ROOT + '/?load=home');
			    initRememberMe($('input#login-userfield'));
			    if($('input#login-userfield').val() != ''){
					$("span#login-userhelp").css('display', 'none');	
				}
			  
			    initRememberMe($('input#loginprompt-userfield'));
				resetSearch();  /*depends on search.js*/
  			},
  			async: false,
  			cache: false
		});
		resetSearch();  //depends on search.js
}

function highlightLoginFields(usernameField, passwordField)
{
	var passwordVal = passwordField.val();
	if(jQuery.trim(passwordVal) != '') {passwordField.select();}
	else {usernameField.select();}
}

function handleRefreshLogin(data, fout, fin, contentUrl)
{
	fout.fadeOut(0, function()
	{
		fin.css('visibility','visible').hide().fadeIn(0);
		
		//reset login fields
		$("input.login-input").val('').focusout();
		$("span#login-pwhelp").show();
		$('#login-teacherinfo, #login-studentname, #login-orgname').html('');
		
		if(data.status == 'AUTHENTICATED')
		{	
			if(data.userInfo){
				var teacherInfo = "<span class='login-userIcon'>";
				if(data.role == "CRD" && data.approved == "true"){
					
					teacherInfo += "<span id='starImage'>";
					teacherInfo += "<img src='" + CONTEXT_ROOT + "/home/images/sprites-homepage.png' border='0' alt='star' title='Coordinator'/>";
					teacherInfo += "</span>";
				}
				else if(data.trusted == "true"){
					teacherInfo += "<span id='trustedImage'>";
					teacherInfo += "<img src='" + CONTEXT_ROOT + "/home/images/sprites-homepage.png' border='0' alt='key' title='Answer Keys Enabled'/>";
					teacherInfo += "</span>";
				}
				teacherInfo += "</span>";
				$('#login-teacherinfo').html(teacherInfo+"<a href=\"javascript:openProfileWindow();\" class=\"login-link\" title=\"Manage account\">" + data.userInfo + "</a>");
					
			}	
			$('#login-studentname').html(data.studentName);
			$('#login-orgname').html(data.orgName);
		}
	});
	
			
	if(data.errorMessage != null && jQuery.trim(data.errorMessage) != '') { showLoginMsgDialog("Login Warning", data.errorMessage); };
	
	authStatus = data.status == 'AUTHENTICATED' ? data.status : 'UNAUTHENTICATED';
	if(typeof loadUrl != 'undefined') loadUrl(contentUrl, {"authStatus" : authStatus});
}

function showLoginMsgDialog(title, message, callback)
{
	var t = $('div#header').offset().top + $('div#header').outerHeight();
	var l = $('div#header').offset().left + $('div#header').outerWidth() - 365;
	showMessageDialog({"title": title, "text": message, "left" : l, "top" : t, "msgClass":"loginErrorMessage", "height":"150"}, callback);
	$('.ui-dialog :button').focus();

}


function showLoginForm(callback)
{
    $('input#loginprompt-pwfield').val('');
    $('input#loginprompt-pwfield').focusout();
    initRememberMe($('input#loginprompt-userfield'));
    $('#loginprompt-error').html('');
	callbackFunction = callback;
	showFormDialog({"divid": "login-prompt", "url" : loginPromptUrl, "title":"Login Prompt", "width":430, "data":"", "modal":modalPrompt, "dialogClass":"dialog-no-title"}, 'input#loginprompt-userfield');
}
