﻿/// <reference path="intellisense/intellisense.js" />

/******************************************************************************
**      Desc: Contains the client-side functionality for PageHeader UserControl
**		Auth: Aleksey Fomichenko
**		Date: 02/20/2008
*******************************************************************************
**		Change History
*******************************************************************************
**		Date:		Author:		Description:
**		-----------	-----------	-----------------------------------------------
**		02/20/2008	Aleksey F.	File created.
*******************************************************************************/


//*************************************************************************
// Namespaces Registration
//*************************************************************************
Type.registerNamespace("Fidelity.Scripts.UserControls");


/******************************************************************************
	Fidelity.Scripts.UserControls.PageHeader static class
******************************************************************************/

Fidelity.Scripts.UserControls.PageHeader = function () { throw Error.notImplemented(); };

Fidelity.Scripts.UserControls.PageHeader.prototype = 
{
	// --- Page Lifecycle Methods -----------------------------------------------------------------------------------------------
	
	initialize : function ()
	{
		/// <summary>Initalizes client-side functionality for the Template page.</summary>
		
		this._setupElements();
		this._setupDelegates();
		this._addEventHandlers();
		this._initialized = true;
	},
	
	dispose : function ()
	{
		/// <summary>Disposes of the resources associated with the Template page.</summary>
		
		this._clearEventHandlers();
	},

	// --- Private Fields --------------------------------------------------------------------------------------------
	
	_initialized	: false,
	_elements		: null,
	_delegates		: null,
	
	
	// --- Public Methods --------------------------------------------------------------------------------------------
	// ...
	
	
	
	// --- Private Methods -----------------------------------------------------------------------------------------------
	
	_setupElements : function ()
	{
		/// <summary>Sets up the collection of element Ids used for client-side functionality.</summary>
		
		this._elements = 
		{
			anonymousContent	: "header_anonymous",
			signedInContent		: "header_signedIn",
			signInButton		: "header_signIn",
			signUpButton		: "header_signUp",
			signOutButton		: "header_signOut",
			signingOutMessage	: "header_SigningOut"
		};
	},
	
	_setupDelegates : function ()
	{
		/// <summary>Sets up the collection of function delegates.</summary>
		
		this._delegates =
		{
			onLogoutComplete : Function.createDelegate(this, function (result, userContext, methodName)
			{
				chGlobal.User = result;
				
				// raise the global event and notify all of the subscribers of a successful logout...
				$eventsManager.raise_logout();
			}),
			
			onLogoutError : Function.createDelegate(this, function (error, userContext, methodName)
			{
				this._updatePageElements();
			}),
			
			updatePageElements : Function.createDelegate(this, this._updatePageElements)
		};
	},
	
	_addEventHandlers : function ()
	{
		$addHandlers(
			$get(this._elements.signInButton),
			{
				click : function (evt) { Fidelity.Scripts.PopupsManager.showLoginPopup(); }
			},
			this);
			
		$addHandlers(
			$get(this._elements.signOutButton),
			{
				click : function (evt) { this._logout(); }
			},
			this);
			
		$addHandlers(
			$get(this._elements.signUpButton),
			{
				click : function (evt) { Fidelity.Scripts.PopupsManager.showCreateAccountPopup(); }
			},
			this);
			
			
		// subscribe to global events ------------------------------------------------------
		$eventsManager.add_login(this._delegates.updatePageElements);
		$eventsManager.add_logout(this._delegates.updatePageElements);
	},
	
	_clearEventHandlers : function ()
	{
		var e = this._elements;
		if (!e) return;
		$clearHandlers($get(e.signInButton));
		$clearHandlers($get(e.signOutButton));
		$clearHandlers($get(e.signUpButton));
	},
	
	_logout : function ()
	{
		// show the "Signing out..." message
		$hide(this._elements.signOutButton);
		$show(this._elements.signingOutMessage);
		
		// call the webservice
		Fidelity.Cyberhomes.AjaxService.Logout(
			this._delegates.onLogoutComplete,
			this._delegates.onLogoutError);
	},
	
	_updatePageElements : function ()
	{
		if (chGlobal.User.IsLoggedIn)
		{
			$hide(this._elements.anonymousContent);
			$hide(this._elements.signingOutMessage);
			$show(this._elements.signedInContent);
			$show(this._elements.signOutButton);
		}
		else
		{
			$hide(this._elements.signedInContent);
			$show(this._elements.anonymousContent);
		}
	},
	
	// --- Public Properties -----------------------------------------------------------------------------------------
	
	get_isInitialized : function () { return this._initialized; }
	
};

// register the class
Fidelity.Scripts.UserControls.PageHeader.registerStaticClass("Fidelity.Scripts.UserControls.PageHeader");


// Notify ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();