function LoginView(
		settings,
		player)
{
	var loginView= this;
	var loginDiv= $('#'+settings.loginDiv);
	$(".forgotpwd", loginDiv).bind("click", function(e) {
		// navigate to the url...
		window.open(settings.forgotPwdLink);
        return false;
	});
	$(".signup", loginDiv).bind("click", function(e) {
		window.open(settings.signupLink);
        return false;
	});
	
	$(".login", loginDiv).bind("click", function(e) {
		$(".idle", loginDiv).hide();
		$(".login-form", loginDiv).show();
		$(".loginfailure", loginDiv).hide();
		// show the login-form, hide this, hide .logged-in
	});
	
	$(".xButton", loginDiv).bind("click", function() {
		// show the .login, hide this, hide .logged-in
		$(".login-form", loginDiv).hide();
		$(".idle", loginDiv).show();
	});
	
	$("form", loginDiv).bind("submit", function() {
		// actual login code.
		$(".loginfailure", loginDiv).hide();
		player.WebService.Authenticate(
			$("input[type=text]:not(.fake)", loginDiv).val(),
			$("input[type=password]:not(.fake)", loginDiv).val(),
			function(statusCode, json) {
				if(json.valid) {
					$(".login-form", loginDiv).hide();
					$(".name", loginDiv).text("Welcome, "+json.customerName+"!");
					$(".logged-in", loginDiv).show();

					Utilities.setCookie("name", $("input[type=text]:not(.fake)", loginDiv).val());
					Utilities.setCookie("password", $("input[type=password]:not(.fake)", loginDiv).val());
					Utilities.setCookie("loggedIn", "true");

//					player.CreatePlayer();
					player.ReloadAll(true); // categories could change
				} else {
					$(".loginfailure", loginDiv).show();
				}
			}
		)
		return false;
	});

	$(".loginBtn", loginDiv).bind("click", function() {
		$("form", loginDiv).submit();
		return false;
	});
	
	$(".signout", loginDiv).bind("click", function() {
		player.WebService.Logout(function(statusCode, json) {
			// hide .logged-in, show .login
			$("input[type=password]", loginDiv).val("");
			
			$(".logged-in", loginDiv).hide();
			$(".idle", loginDiv).show();
			
			Utilities.clearCookie("name");
			Utilities.clearCookie("password");

			player.ReloadAll(true); // categories could change
		});
	});

	$("input.fake", loginDiv).focus(function() {
		$(this).hide();
		if($(this).val()=="username") {
			$("input[type=text]:not(.fake)", loginDiv).show().focus();
		} else {
			$("input[type=password]:not(.fake)", loginDiv).show().focus();
		}
	});
/*
	$("input.fake", loginDiv).bind("click", function() {
		$(this).hide();
		if($(this).val()=="username") {
			$("input[type=text]:not(.fake)", loginDiv).show().focus();
		} else {
			$("input[type=password]:not(.fake)", loginDiv).show().focus();
		}
	});
*/

	$(".login-form", loginDiv).hide();
	$(".logged-in", loginDiv).hide();

	// really should return based on the callback proc...
	this.ValidAutologin= function() {
		// autologin if we should.
		var userName= Utilities.getCookie("name");
		var password= Utilities.getCookie("password");
		if(userName != null && password != null) {
			// behave as if we clicked login...		
			$(".idle", loginDiv).hide();
			$(".login-form", loginDiv).show();
			$(".loginfailure", loginDiv).hide();
	
			// set the values
			$("input[type=text]:not(.fake)", loginDiv).val(userName);
			$("input[type=password]:not(.fake)", loginDiv).val(password);
			
			// and submit
			$("form", loginDiv).submit();

			return true;
		}
		
		return false;
	};
	
	this.AttemptSCORMLogin= function() {
	    var attempted= false;

		if(getQueryVariable('orgId') !=null
			&& getQueryVariable('studentId') != null
			&& getQueryVariable('courseCode') != null
			&& getQueryVariable('scoId') != null)
		{
		    attempted= true;
			player.WebService.SCORMAuthenticate(
				getQueryVariable('orgId'),
				getQueryVariable('studentId'),
				getQueryVariable('courseCode'),
				getQueryVariable('scoId'),
				getQueryVariable('CBIcourseCode'),
				getQueryVariable('CBIscoId'),
				function(statusCode, json) {
				if(json.valid)
				{
					$(".idle", loginDiv).hide();
					$(".login-form", loginDiv).hide();
					$(".name", loginDiv).text("Welcome, "+json.customerName+"!");
					$(".logged-in", loginDiv).show();

					var courseCode= getQueryVariable('CBIcourseCode');
					if(settings.companyCode=='CBI')
					{
						courseCode= courseCode.substring(4); // skip the SPM_
					}
					player.ReleaseModel.SetSingleEpisodeShowCode(courseCode);
					player.ReloadAll(true); // categories could change
				} else {
					$(".loginfailure", loginDiv).show();
				}
			});
		}

		return attempted;
	};
	
	this.AttemptOEMLogin= function() {
	    var attempted= false;
	    
	    if(getQueryVariable('fn') != null 
	       && getQueryVariable('ln') != null 
		   && getQueryVariable('cc') != null 
	       && getQueryVariable('s') != null
	       && getQueryVariable('t') != null 
	       && getQueryVariable('h') != null)
	    {
		    var fullURL= parent.document.URL;
	    	var loginString= fullURL.substring(fullURL.indexOf('?')+1, fullURL.length);
	    
	    	attempted= true;
	    	
	        // now make the call...
		    player.WebService.OEMAuthenticate(loginString, 
		    	function(statusCode, json) {
					if(json.valid) {
						$(".idle", loginDiv).hide();
						$(".login-form", loginDiv).hide();
						$(".name", loginDiv).text("Welcome, "+json.customerName+"!");
						$(".logged-in", loginDiv).show();
	
						player.ReloadAll(true); // categories could change
					} else {
						$(".loginfailure", loginDiv).show();
					}
				}
			);
		}
		
		return attempted;
	};
}
