sessionemanager.htc



<!-- ---------------------------------------------------------------------
//
//  Copyright 2001 Chordiant Software.  All Rights Reserved.
//
//  File:         sessionemanager.htc
//
//	Auther:				Ryan Carroll
//	Created:			13/11/2001
//
//  Description:  Implements a manager for user session settings.
//
//	Changes log:
//-------------------------------------------------------------------- -->

<PUBLIC:COMPONENT tagname="sessionmanager" lightWeight="true">

<!-- Public Properties -->    

<!-- Public Methods -->    
<METHOD   NAME="setSessionSetting"				/>
<METHOD   NAME="getSessionSetting"				/>
<METHOD   NAME="removeSessionSetting"				/>
<METHOD   NAME="clearSessionSettings"			/>
<METHOD   NAME="getAllSessionSettings"			/>


<!-- Public Events -->    
<EVENT    NAME="onError"  						ID="error"		  />
<EVENT    NAME="onSessionSettingChanged" 			ID="sessionSettingChanged" />

    
<!-- Private Event Listeners -->
<ATTACH   EVENT="ondocumentready" HANDLER="setDefaults" />
// { start - performance fix
<ATTACH   EVENT="ondetach"          HANDLER="cleanUp"       />
// } end - performance fix

</PUBLIC:COMPONENT>

<SCRIPT LANGUAGE="jscript">

//+----------------------------------------------------------------------------
//
//  Global Variables
//
//-----------------------------------------------------------------------------
var sessionSettings = new Array();

// { start - performance fix
// Detach event handlers. This should always be done for event handlers that was attached with the attachEvent method.
function cleanUp() {
  if (window)
    window.detachEvent("onbeforeunload", cleanUp);
	sessionSettings = null;
}
// } end - performance fix

function sessionSettingObject(sSessionSettingName, sSessionSettingValue)
{
	this.sessionSettingName = sSessionSettingName;
	this.sessionSettingValue = sSessionSettingValue;
}

////////////////////////////////////////////////////////////////////////////////
//	Methods Section																										        // 
////////////////////////////////////////////////////////////////////////////////

//+----------------------------------------------------------------------------
//
//  Public Methods
//
//-----------------------------------------------------------------------------


//+----------------------------------------------------------------------------
//
//  Function:       setSessionSetting
//
//  Description:    
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function setSessionSetting( sSessionSettingName, sSessionSettingValue ) {
	var oSessionSetting;
	var oEvent;

	try {
    	for(var i=0; i < sessionSettings.length; i++){
    		if(sessionSettings[i].sessionSettingName == sSessionSettingName){
    			oSessionSetting = sessionSettings[i];
    			oSessionSetting.sessionSettingValue = sSessionSettingValue;
    			break;
    		}
    	}
    	
    	if(oSessionSetting == null){
    		oSessionSetting = new sessionSettingObject(sSessionSettingName, sSessionSettingValue);
    		sessionSettings[sessionSettings.length] = oSessionSetting;
    	} 
    
    	oEvent = createEventObject();
        oEvent.setAttribute("sessionSettingData", oSessionSetting);
        sessionSettingChanged.fire(oEvent);
	} catch(e) {
	  	returnError(e.toString());
	} finally {
		oSessionSetting = null;
		oEvent = null;
		sSessionSettingName = null;
		sSessionSettingValue = null;
	}	
}


//+----------------------------------------------------------------------------
//
//  Function:       getSessionSetting
//
//  Description:    
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function getSessionSetting( sSessionSettingName ) {
	try {
    	for(var i=0; i < sessionSettings.length; i++){
    		if(sessionSettings[i].sessionSettingName == sSessionSettingName){
    			return sessionSettings[i].sessionSettingValue;
    		}
    	}
    	
    	return null;
	} catch(e) {
	  	returnError(e.toString());
		return null;
	} finally {
		sSessionSettingName = null;
	}	
}


//+----------------------------------------------------------------------------
//
//  Function:       removeSessionSetting
//
//  Description:    
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function removeSessionSetting(sSessionSettingName) {
	var oRemovedSessionSetting;

	try {
    	for(var i=0; i < sessionSettings.length; i++){
    		if(sessionSettings[i].sessionSettingName == sSessionSettingName){
    			oRemovedSessionSetting = sessionSettings.splice(i,1);
    			return oRemovedSessionSetting;
    		}
    	}
    	
    	return null;
	} catch(e) {
	  	returnError(e.toString());
		return null;
	} finally {
	  	oRemovedSessionSetting = null;
		sSessionSettingName = null;
	}	
}



//+----------------------------------------------------------------------------
//
//  Function:       clearSessionSettings
//
//  Description:    
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function clearSessionSettings() {
	var oRemovedSessionSettings;

	try {
		oRemovedSessionSettings = sessionSettings.splice(0,sessionSettings.length);
	} catch(e) {
	  	returnError(e.toString());
	} finally {
	  	oRemovedSessionSettings = null;
	}	
}



//+----------------------------------------------------------------------------
//
//  Function:       getAllSessionSettings
//  Description:    
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function getAllSessionSettings() {
	var oAllSessionSettings;
	
	try {	
    	oAllSessionSettings = new Array;
    	for(var i=0; i < sessionSettings.length; i++){
    		oAllSessionSettings[oAllSessionSettings.length] = sessionSettings[i]; 
    	}
    	
    	return oAllSessionSettings;
	} catch(e) {
	  	returnError(e.toString());
		return null;
	} finally {
	  	oAllSessionSettings = null;
	}	
}


//+----------------------------------------------------------------------------
//
//  Private Methods
//
//-----------------------------------------------------------------------------


//+----------------------------------------------------------------------------
//
//  Function:       setDefaults
//
//  Description:    Called during the initialization of the behavior.  Sets
//                  the required default settings, and attaches the 
//                  onpropertychange event (not done in the header to prevent 
//                  firing the event during initialization).
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function setDefaults()
{ 
	if(element.document.media != "print") {
		//  Attach the onpropertychange event
		attachEvent("onpropertychange", doPropChange);
	}
// { start - performance fix
  window.attachEvent("onbeforeunload", cleanUp);				
// } end - performance fix
}


//+----------------------------------------------------------------------------
//
//  Function:       doPropChange
//
//  Description:    Runs on the onpropertychange event and calls the necessary
//                  functions to correctly handle the property that was just
//                  changed.
//
//  Arguments:      none
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function doPropChange()
{
 	var propertyName;
	
 	try {
         propertyName = window.event.propertyName;
     
         //  Handle CSS property changes by calling necessary functions, setting
         //  variables, and/or setting styles
         //
         if (propertyName.substring(0,5) == "style")
         {
     	   // Handle Style changes
            // switch(propertyName)
            // {
            //     case "style.zIndex"             :
            //         break;                
            // }
         }
         else
         {
             //
             //  Detach the onpropertychange event to prevent it from firing while
             //  the changes are handled
             //
             detachEvent("onpropertychange", doPropChange);
             
             // Handle Property changes
             switch(propertyName)
             {
                 //case "leftBoundary" :
                 //		leftBoundary = parseInt(leftBoundary);
                 //		setLeftBoundary(leftBoundary);
                 //    break;
                   						    
                 default :
                     returnError(propertyName + " not a valid property");
                     break;
             }
             
             //  Re-attach the onpropertychange event
             attachEvent("onpropertychange", doPropChange);
         }
	} catch(e) {
	  	returnError(e.toString());
	} finally {
	  	propertyName = null;
	}	
}


//+----------------------------------------------------------------------------
//
//  Function:       returnError
//
//  Description:    Fires the error event, along with a descriptive text
//                  message.
//
//  Arguments:      sMsg - descriptive text message
//
//  Returns:        nothing
//
//-----------------------------------------------------------------------------

function returnError(sMsg)
{
	var oEvent;
 	try {
        oEvent = createEventObject();
        oEvent.setAttribute("error", sMsg);
        error.fire(oEvent);
    	//alert(sMsg);
	} finally {
	  	oEvent = null;
		sMsg = null;
	}
}


</SCRIPT>