/******************************************************************************************************************
*									N R T   N A M E S P A C E   
*******************************************************************************************************************/

// Constuctor
var NRTLP = window.NRTLP || {};

/*==================================================================================
	Method		: namespace
	Summary		: Returns the namespace specified and creates it if it doesn't exist.
	Author		: Brian Touisignant
	Create Date	: 8/02/2006
====================================================================================*/
NRTLP.namespace = function( sNameSpace ) {

    if (!sNameSpace || !sNameSpace.length) {
        return null;
    }

    var levels = sNameSpace.split('.');

    var currentNS = NRTLP;

    // NRT is implied, so it is ignored if it is included
    for (var i=(levels[0] == 'NRTLP') ? 1 : 0; i<levels.length; ++i) {
        currentNS[levels[i]] = currentNS[levels[i]] || {};
        currentNS = currentNS[levels[i]];
    }

    return currentNS;
};



NRTLP.namespace('ErrorHandler');
/* ##########################################################################################################################

	Namespace : NRTLP.ErrorHandler
	Classes   : ErrorHandler
	Summary	  : Contains all the scripts to handle the error handling functionality.
	Copyright : (c) 2006 NRT Inc. All rights reserved.

	RevisionHistory: 
	-------------------------------------------------------------------------------------------------------------------------
	Date		Name		Description
	-------------------------------------------------------------------------------------------------------------------------
	11/30/2006	tanderson	Initial Creation

###########################################################################################################################*/

// Global Variables
var _oErrorHandler;
var ISDEBUG = true;

NRTLP.ErrorHandler = function()
{
	return{
		/**********************************************************************************	
		*			S T A T I C   T E X T   F O R   E R R O R   M E S S A G E S 
		**********************************************************************************/	
	    //eTypes
		ERRORTYPE_JS :					'JS',
		ERRORTYPE_AJAX :				'AJAX',
		ERRORTYPE_AJAX_RESPONSE :		'AJAX_RESPONSE',
		ERRORTYPE_VBCODE :				'VBCODE',
		ERRORTYPE_VBDATA :				'VBDATA',

		//messages
		ERRORTYPE_JS_MESSAGE :			'Javascript has acted up!',
		ERRORTYPE_AJAX_MESSAGE :		'An AJAX call acted up!',
		ERRORTYPE_AJAX_RESPONSE_MESSAGE:'The AJAX call had trouble in the response.',
		ERRORTYPE_VBCODE_MESSAGE :		'A problem occured in VB!',
		ERRORTYPE_VBDATA_MESSAGE :		'The Data has an issue!',
		ERRORTYPE_DEFAULT_MESSAGE :		'Oops!?!',

		//debug messages
		ERROR_DEBUG_HEADER :			'A problem occurred in ',
		ERROR_DEBUG_MESSAGE_LABEL :		'  Error Message is:  ',
		ERROR_DEBUG_SOURCE_LABEL :		'  Error Source is:   ',
		ERROR_DEBUG_NAME_LABEL :		'  Error Name:        ',
		ERROR_DEBUG_DESCRIPTION_LABEL :	'  Error Description: ',
		ERROR_DEBUG_RESPONSE_LABEL :	'  Response was:      ',
		ERROR_DEBUG_REQUEST_LABEL :		'  Request was:       ',

		ERROR_DASHLINE :				'-----------------------------------------------------------------',
		
		//friendly messages
		ERROR_FRIENDLY_HEADER :			'An Error has occurred:',
		ERROR_FRIENDLY_FOOTER :			'Please try again by refreshing this page in your browser.',

		// Initialize members
		_isDebug :						ISDEBUG,


		/**********************************************************************************
		*									P U B L I C   M E T H O D S
		***********************************************************************************/
		/*==================================================================================
			Method		: Error
			Summary		: Logs and displays the Error message to the user.
						  The output depends on whether debug mode is turned on or not.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/						
		Error : function(sFunctionName, eErrorType, oError)
		{
			try
			{
				var sErrorMessage = '';
				
				if(oError != null && oError != 'undefined')
				{
					sErrorMessage += 'JavaScript Error:' + 'source:' + oError.source + ', name:' + oError.name + ', message:' + oError.message;
					
					//send the error to be logged
					this._logError(sErrorMessage);
					
					//show the message
					if(this._isDebug)
					{
						//debug mode message
						this._development_Message(eErrorType, sFunctionName, oError);

					}else{
						//friendly message
						this._friendly_Message(eErrorType);
					}//end else

				
				}//end if				
				return;
			}
			catch(err)
			{
				//throw err;
			}
		},

		/*==================================================================================
			Method		: IsDebug
			Summary		: Returns the IsDebug flag.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/				
		IsDebug : function()
		{
			try
			{
				return this._isDebug;
			}
			catch(err)
			{
				//throw err;
			}
		},		

		/*==================================================================================
			Method		: ResponseError
			Summary		: Logs and Displays the response error message.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/						
		ResponseError : function(sFunctionName, oResponse)
		{
			try
			{
				
				if(oResponse != null && oResponse != 'undefined')
				{
					//debug message
					var sErrorMessage = '';
					//create an Error Object for the mimicing error from response
					var oError = new Object();
					oError.source = sFunctionName;
					oError.name = oResponse.error.name;
					oError.message = this.ERROR_DEBUG_MESSAGE_LABEL + oResponse.error.message + '\n';
					oError.message += this.ERROR_DEBUG_REQUEST_LABEL + oResponse.request.responseText + '\n';
					
					sErrorMessage += 'JavaScript Error:' + 'source:' + oError.source + ', name:' + oError.name + ', message:' + oError.message;
					
					//send the error to be logged
					this._logError(sErrorMessage);

					//show the message
					if(this._isDebug)
					{
						//show the message
						this._development_Message(this.ERRORTYPE_AJAX_RESPONSE, sFunctionName, oError);
					
					}else{
						//friendly message
						this._friendly_Message(this.ERRORTYPE_AJAX_RESPONSE);
						
					}//end else
				}//end if
			
				return;
				
			}
			catch(err)
			{
				//throw err;
			}
		},
		
		/*==================================================================================
			Method		: ShowDebug
			Summary		: Sets the IsDebug flag.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/						
		ShowDebug : function(bShowDebug)
		{
			try
			{
				this._isDebug = bShowDebug;
				return;
			}
			catch(err)
			{
				//throw err;
			}
		},
		
		
		/*********************************************************************************
		*									P R I V A T E   M E T H O D S
		***********************************************************************************/		
		/*==================================================================================
			Method		: _development_Message
			Summary		: Displays a the debug error message to the developer.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/				
		_development_Message : function(eType, sFunctionName, oError)
		{
			try
			{
				var sDebugErrorMessage;
				
				sDebugErrorMessage = this.ERROR_DEBUG_HEADER + sFunctionName + '\n';
				sDebugErrorMessage += this.ERROR_DASHLINE + '\n';
				sDebugErrorMessage += this.ERROR_DEBUG_SOURCE_LABEL + oError.source + '\n';
				sDebugErrorMessage += this.ERROR_DEBUG_NAME_LABEL + oError.name + '\n';
				sDebugErrorMessage += this.ERROR_DEBUG_MESSAGE_LABEL + oError.message + '\n';

				//show the debug error message
				alert(sDebugErrorMessage);
				return;
			}
			catch(err)
			{
				//throw err;
			}
		},
		
		/*==================================================================================
			Method		: _friendly_Message
			Summary		: Displays a friendly error message to the user.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/			
		_friendly_Message : function(eType)
		{
			try
			{
				var sFriendlyMessage = '';
				
				sFriendlyMessage = this.ERROR_FRIENDLY_HEADER + '\n';
				sFriendlyMessage += this.ERROR_DASHLINE + '\n';

				switch(eType)
				{
					case this.ERRORTYPE_JS:
						sFriendlyMessage += '    ' + this.ERRORTYPE_JS_MESSAGE + '\n';
						break;
					
					case this.ERRORTYPE_AJAX:
						sFriendlyMessage += '    ' + this.ERRORTYPE_AJAX_MESSAGE + '\n';
						break;
						
					case this.ERRORTYPE_AJAX_RESPONSE:
						sFriendlyMessage += '    ' + this.ERRORTYPE_AJAX_RESPONSE_MESSAGE + '\n';
						break;
					
					case this.ERRORTYPE_VBCODE:
						sFriendlyMessage += '    ' + this.ERRORTYPE_VBCODE_MESSAGE + '\n';
						break;
						
					case this.ERRORTYPE_VBDATA:
						sFriendlyMessage += '    ' + this.ERRORTYPE_VBDATA_MESSAGE + '\n';
						break;
						
					default:
						sFriendlyMessage += '    ' + this.ERRORTYPE_DEFAULT_MESSAGE + '\n';
						break;
				
				}
			
				sFriendlyMessage += '    ' + this.ERROR_FRIENDLY_FOOTER + '\n';
			
				//show the friendly message
				alert(sFriendlyMessage);
				return;
			}
			catch(err)
			{
				//throw err;
			}
		},
		
		/*==================================================================================
			Method		: _init
			Summary		: Initializes the error handler object.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/		
		_init : function()
		{
			try
			{
				this._isDebug = ISDEBUG;
			}
			catch(err)
			{
				//throw err;
			}
		},

		/*==================================================================================
			Method		: _logError
			Summary		: Sends error message to the application ASP.Net error handler to log.
			Author		: Tyler Anderson
			Create Date	: 11/30/2006
		====================================================================================*/		
		_logError : function(strError)
		{
			try
			{
				var sResult;
				
				if(this._isDebug)
				{
					alert('If you were in production mode, this error would have been logged to the database.');
				}else{
					SearchUIController.LogClientError(strError);
				}
				
				return;
			}
			catch(err)
			{
				//throw err;
			}
		}	
	};
}();

_oErrorHandler = NRTLP.ErrorHandler;
_oErrorHandler._init();



NRTLP.namespace('Utility');
/* #########################################################################################################

	Namespace : NRT.Utility
	Classes   : Utility
	Summary	  : Contains a variety of commonly used functions.
	Copyright : (c) 2006 NRT Inc. All rights reserved.

	RevisionHistory: 
	--------------------------------------------------------------------------------------------------------
	Date				Name							Description
	--------------------------------------------------------------------------------------------------------
	08/09/2006	ksundar, btousignant, 		Created

###########################################################################################################*/

// Global Variables
var _oLP_Utility;

NRTLP.Utility = function()
{	    
    return {   			
		/******************************************************************************************************************
		*									P U B L I C   M E T H O D S
		*******************************************************************************************************************/
		/*==================================================================================
			Method		: browserType
			Summary		: Returns the windows browser type.
			Author		: Dale Lalwess
			Create Date	: 08/02/2006
		====================================================================================*/
		browserType: function()
		{
			try
			{
				var m_spm_sBrowser;
				if (m_spm_sBrowser == null)
				{
					var agt=navigator.userAgent.toLowerCase();

					if (agt.toLowerCase().indexOf('konqueror') != -1) 
						m_spm_sBrowser = 'kq';
					else if (agt.toLowerCase().indexOf('opera') != -1) 
						m_spm_sBrowser = 'op';
					else if (agt.toLowerCase().indexOf('netscape') != -1) 
						m_spm_sBrowser = 'ns';
					else if (agt.toLowerCase().indexOf('msie') != -1)
						m_spm_sBrowser = 'ie';
					else if (agt.toLowerCase().indexOf('safari') != -1)
						m_spm_sBrowser = 'safari';
				  
					if (m_spm_sBrowser == null)
						m_spm_sBrowser = 'mo';  
				}
				return m_spm_sBrowser;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.browserType', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 				
		}, 

		/*==================================================================================
			Method		: closeLayeredPage
			Summary		: This method will close a layered window.
			Author		: Kumuran Sundar
			Create Date	: 08/22/2006
		====================================================================================*/				      			 		
		closeLayeredPage: function() 
		{
			try
			{
				Dialog.closeInfo();
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.closeLayeredPage', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 								
		},
		
		/*==================================================================================
			Method		: createCollection
			Summary		: Used to create a javascript collection object.
			Author		: Dale Lalwess
			Create Date	: 08/02/2006
		====================================================================================*/
		createCollection: function(className) 
		{
			try
			{
				var obj = new Array();
				eval('var t = new '+className+'()');
				for(_item in t)
					{
						eval('obj.'+_item+'=t.'+_item);
					}
				return obj;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.createCollection', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 			
		},

		/*==================================================================================
			Method		: disableAnchor
			Summary		: Enables or disabled an anchor tag.
			Author		: Dale Lalwess
			Create Date	: 08/22/2006
		====================================================================================*/				      			 		
		disableAnchor : function (obj, disable)	
		{
			try
			{
				if (disable)
				{
					var href = obj.getAttribute("href");
					if(href && href != "" && href != null)
						obj.setAttribute('href_bak', href);
					obj.removeAttribute('href');
					obj.style.color="blue";
				}
				else
				{
					obj.setAttribute('href', obj.attributes['href_bak'].nodeValue);
					obj.style.color="gray";
				}	
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.disableAnchor', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 					
		},
		
				getElementByTagNameAndID: function(sID, sTagName)
		{
			try
			{		
				var arrElements = document.getElementsByTagName(sTagName);
				
				if(arrElements.length > 0)
				{
					for(var i=0; i < arrElements.length; i++)
					{
						if(arrElements[i].id.indexOf(sID) > -1)
						{
							var objElement = eval(document.getElementById(arrElements[i].id));
							if(objElement != null && objElement != 'undefined')
							{
								return objElement;
							}
						}
					}
				}
				//default
				return null;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getElementByTagNameAndID', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}			
		},

		/*==================================================================================
			Method		: getElementByTagNameAndID
			Summary		: Returns the object for the requested TagName and ID
			Author		: Dale Lawless
			Create Date	: 12/28/2006
		====================================================================================*/																				
		getElementByTagNameAndID: function(sID, sTagName)
		{
			try
			{		
				var arrElements = document.getElementsByTagName(sTagName);
				
				if(arrElements.length > 0)
				{
					for(var i=0; i < arrElements.length; i++)
					{
						if(arrElements[i].id.indexOf(sID) > -1)
						{
							var objElement = eval(document.getElementById(arrElements[i].id));
							if(objElement != null && objElement != 'undefined')
							{
								return objElement;
							}
						}
					}
				}
				//default
				return null;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getElementByTagNameAndID', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}			
		},


        /*==================================================================================
			Method		: getElementsByTagNameAndID
			Summary		: Returns the an array of objects matching the requested TagName and ID
			Author		: TSA
			Create Date	: 2007.04.23
		====================================================================================*/																				
		getElementsByTagNameAndID: function(sID, sTagName)
		{
			try
			{		
				var arrElements = document.getElementsByTagName(sTagName);
				var arrCleanupElements = new Array();
				
				if(arrElements!=null && arrElements!='undefined' && arrElements.length > 0)
				{
					for(var i=0; i < arrElements.length; i++)
					{
						if(arrElements[i].id.indexOf(sID) > -1)
						{
						    arrCleanupElements.push(arrElements[i]);
						}
					}
					return arrCleanupElements;
				}else{
				    //nothing found
				    return null;
				}
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getElementsByTagNameAndID', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}			
		},

		/*==================================================================================
			Method		: getEventSource
			Summary		: Returns the controls event source for the control passed to 
						  this fuction.
			Author		: Dale Lalwess
			Create Date	: 08/02/2006
		====================================================================================*/				      			 		
		getEventSource: function(evt)
		{
			try
			{
				var ctrlSource;	

				evt = (parent.event) ? parent.event : evt;
				
				if(evt.srcElement)
					ctrlSource = evt.srcElement;
				else
				{
					ctrlSource = evt.target;
					
					if(ctrlSource.nodeType == 3)
						ctrlSource = ctrlSource.parentNode.previousSibling;			
				}
				return ctrlSource;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getEventSource', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 					
		},	

		/*==================================================================================
			Method		: getSelectedDetails
			Summary		: Returns the selected value from a list.
			Author		: Dale Lalwess
			Create Date	: 08/02/2006
		====================================================================================*/				      			 		
		getSelectedDetails: function(ctrl)
		{
			try
			{
				var strTemp = '';
				if (ctrl != null)
				{
					for(var i = 0;i < ctrl.length;i++)
					{
						if(ctrl.options[0].selected == true && i > 0 && ctrl.options[i].selected == true)
						{
							ctrl.options[0].selected = false;
							break;
						}
					}
					for(var i = 0;i < ctrl.length;i++)
					{
						if(ctrl.options[i].selected == true)
						{
							strTemp += ctrl.options[i].value + ',';
						}
					}

					if (strTemp.substring(strTemp.length - 1) == ',')
					{
						strTemp = strTemp.substring(0,strTemp.length - 1);
					}
				}
				return strTemp;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getSelectedDetails', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 			
		},
		
		getSelectedText: function(ctrl)
		{
			try
			{
				var strTemp = '';
				if (ctrl != null)
				{
					for(var i = 0;i < ctrl.length;i++)
					{
						if(ctrl.options[0].selected == true && i > 0 && ctrl.options[i].selected == true)
						{
							ctrl.options[0].selected = false;
							break;
						}
					}
					for(var i = 0;i < ctrl.length;i++)
					{
						if(ctrl.options[i].selected == true)
						{
							strTemp += ctrl.options[i].text + ',';
						}
					}

					if (strTemp.substring(strTemp.length - 1) == ',')
					{
						strTemp = strTemp.substring(0,strTemp.length - 1);
					}
				}
				return strTemp;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getSelectedDetails', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 			
		},
		/*==================================================================================
			Method		: getTextValue
			Summary		: Returns the text value for a selected item from the control
						  that is passed to this fuction.
			Author		: Dale Lalwess
			Create Date	: 08/02/2006
		====================================================================================*/				      			 		
		getTextValue: function(ctrl)
		{	
			try
			{
				var aTextValue = new Array(2);
				
				switch(ctrl.type)
				{
					case 'checkbox':
					{		
						aTextValue[0] = ctrl.parentNode.childNodes[1].innerHTML;
						aTextValue[1] = ctrl.id.substring(ctrl.id.lastIndexOf('_')+1);			
						
						break;
					}
					case 'radio':
					{
						if(this.browserType() == 'ie')
						{
							aTextValue[0] = ctrl.parentElement.children[1].innerText;
							aTextValue[1] = ctrl.value;				
						}
						else
						{
							aTextValue[0] = ctrl.parentNode.childNodes[1].innerHTML;
							aTextValue[1] = ctrl.value;				
						}
						
						break;
					}
					case 'select-one':
					{
						aTextValue[0] = ctrl.options[ctrl.selectedIndex].text;
						aTextValue[1] = ctrl.value;
									
						break;
					}
					case 'text':
					{
						if(ctrl.value.length == 0)
							return null;
													
						aTextValue[0] = ctrl.value;
						aTextValue[1] = ctrl.value;			
								
						break;
					}
				}
				return aTextValue;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.getTextValue', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			} 					
		},

		/*==================================================================================
			Method		: isNumeric
			Summary		: This method will check for a numeric value.
			Author		: Dale Lalwess
			Create Date	: 08/02/2006
		====================================================================================*/				      			 		
		isNumeric : function (sText) 
		{
			try
			{
				// Determines if a text string is a valid number
				var ValidChars = '0123456789.';
				var IsNumber=true;
				var Char;
					
				for (i = 0; i < sText.length && IsNumber == true; i++) 
					{ 
					Char = sText.charAt(i); 
					if (ValidChars.indexOf(Char) == -1) 
						{
						IsNumber = false;
						}
					}
					
				return IsNumber;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.isNumeric', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}		
		},
				
		/*==================================================================================
			Method		: showLayeredPage
			Summary		: This method will show an aspx page on a layered window.
			Author		: Kumuran Sundar
			Create Date	: 08/22/2006
		====================================================================================*/				      			 		
		showLayeredPage: function(queryString, width, height, title)
		{	
			try
			{
				var defWidth = width != null ? width : 540;
				var defHeight = height != null ? height : 380;
				var defTitle = title != null ? title : "&nbsp;";
						
				Dialog.info({url:'host.aspx?' + queryString, options: {method: 'get'}}
					, {windowParameters: {className: 'alphacube', width:defWidth, height:defHeight, title:defTitle}, showProgress:false});				
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.showLayeredPage', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}					
		},
			
		/*==================================================================================
			Method		: showMessage
			Summary		: Displays a message in an alert window.
			Author		: Dale Lawless
			Create Date	: 09/22/2006
		====================================================================================*/				      			 						
		showMessage:function(msg) 
		{
			try
			{
				alert(msg);
				return;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.showMessage', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}				
		},

		/*==================================================================================
			Method		: showNewWindow
			Summary		: This method will display a popup window.
			Author		: Kumuran Sundar
			Create Date	: 08/22/2006
		====================================================================================*/				      			 				
		showNewWindow:function(url, name, width, height) 
		{
			try
			{
				var oWin = window.open(url, name, 'height=' + height + ',width=' + width + ',resizable=yes,scrollbars=yes,menubar=no,toolbar=no,status=no,titlebar=yes', true);
				return;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.showNewWindow', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}				
		},
		
		/*==================================================================================
			Method		: xreplace
			Summary		: Java script replace only replaces the first instance.  
						  This function replaces all instances without going into a 
						  endless loop replacing the same 'toberep' and 'repwith'.
			Author		: Kumuran Sundar
			Create Date	: 08/22/2006
		====================================================================================*/				      			 		
		xreplace : function (checkMe,toberep,repwith) 
		{
			try
			{
				var temp = checkMe;
				var i = temp.indexOf(toberep);
				while(i > -1)
				{
					temp = temp.replace(toberep, repwith);
					i = temp.indexOf(toberep, i + repwith.length + 1);
				}
				return temp;
			}
			catch(err)
			{
				_oErrorHandler.Error('NRT.Utility.xreplace', _oErrorHandler.ERRORTYPE_JS, err);
				return;
			}					
		}		
    };
}();

_oLP_Utility = NRTLP.Utility;