<cfcomponent displayname="User Functions" hint="I Return User Information" output="false">

	<cffunction name="init" displayname="Initialize Component" access="public" returntype="User" hint="I initialize and return the User object.">
		<cfreturn this>
	</cffunction>

	<cffunction name="LoadUserInfo" returntype="any" access="public" output="false" hint="I return the information of a particular user.">
		<cfargument required="yes" type="string" name="username">	
        <cfargument required="yes" type="string" name="password">	
		<cftry>
			 <cfquery name="GetUserInfo" datasource="#Application.DataSrc#">
					SELECT Employee.*,lu_locations.Agy_ID,lu_locations.Agy_Name FROM  #Request.prefix_db_lookup#.Employee 
					JOIN lu_locations ON lu_locations.Loc_ID = Employee.Loc_ID
					WHERE Employee.Username = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.username#">
                    AND  Employee.Password = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.password#">
                    AND  Employee.Status = <cfqueryparam cfsqltype="cf_sql_integer" value="1">
				</cfquery>
			<cfcatch type="any">		
			</cfcatch>	
		</cftry>		
		<cfreturn GetUserInfo>
	</cffunction>

	<cffunction name="SetCFID_Token" displayname="Set CFID and Token" access="public" hint="I Set The CFID and CFToken" output="no">
		<cfargument required="yes" type="string" name="CFID" displayname="CF ID" hint="I am the CFID" />
		<cfargument required="yes" type="string" name="CFToken" displayname="CF Token" hint="I am the CFToken" />
		<cfargument required="yes" type="numeric" name="Emp_ID" displayname="Emp_ID" hint="I am the Emp_ID" />

		<cfset var qrySetCFIDToken = "" />
		<cfset var DoCommit = "Yes" />
		<cfset LOCAL.eventInfo = "">
		<cfset LOCAL.performedFunction = "Update">
		<cfset LOCAL.dataSubject = "User/SetCFID_Token">
		<cftransaction action="begin">
            <cftry>
				<cfquery name="qrySetCFIDToken" datasource="#Application.DataSrc#">
					UPDATE #Request.prefix_db_lookup#.Employee
					SET cfid_token = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.CFID#:#arguments.CFToken#">
					WHERE Emp_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.Emp_ID#">
				</cfquery>
				<cfcatch type="database">
					<cfset DoCommit = "No">
					<cfset LOCAL.eventInfo = "Error">
					<cftransaction action="rollback" />
				</cfcatch>
			</cftry>

			<cfif CompareNoCase(DoCommit,"Yes") EQ 0>
				<cfset LOCAL.eventInfo = "Success">
				<cftransaction action="commit" />
			</cfif>

		</cftransaction>
		<cfif CompareNoCase(DoCommit,"Yes") EQ 0>
			<cfreturn 1>
		<cfelse>
			<cfreturn 0>
		</cfif>
	</cffunction>

	<cffunction name="ClearCFID_Token" displayname="Clear CFID and Token" access="public" hint="I Clear The CFID and CFToken" output="no">
		<cfargument required="yes" type="numeric" name="Emp_ID" displayname="Emp_ID" hint="I am the Emp_ID" />

		<cfset var qryClearCFIDToken = "" />
		<cfset var DoCommit = "Yes" />
		<cfset LOCAL.eventInfo = "">
		<cfset LOCAL.performedFunction = "Update">
		<cfset LOCAL.dataSubject = "User/ClearCFID_Token">

		<cftransaction action="begin">
            <cftry>
				<cfquery name="qryClearCFIDToken" datasource="#Application.DataSrc#">
					UPDATE #Request.prefix_db_lookup#.Employee
					SET cfid_token = ''
					WHERE Emp_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.Emp_ID#">
				</cfquery>
				<cfcatch type="database">
					<cfset DoCommit = "No">
					<cfset LOCAL.eventInfo = "Error">
					<cftransaction action="rollback" />
				</cfcatch>
			</cftry>

			<cfif CompareNoCase(DoCommit,"Yes") EQ 0>
				<cfset LOCAL.eventInfo = "Success">
				<cftransaction action="commit" />
			</cfif>

		</cftransaction>
		<cfif CompareNoCase(DoCommit,"Yes") EQ 0>
			<cfreturn 1>
		<cfelse>
			<cfreturn 0>
		</cfif>
	</cffunction>

                
	<cffunction name="IsLoggedIn" access="public" displayname="Is Logged In" hint="Checks If User Is Logged In" output="false">
		<cfargument required="no" type="string" name="Emp_ID" default="0">
		<cfset var strIsLoggedIn = 1>

		<cfif StructKeyExists(client,'Emp_ID')>
			<cfset arguments.UserAuthID = client.Emp_ID>
		</cfif>
		<cfif NOT StructKeyExists(client,"Emp_ID") OR LEN(TRIM(arguments.Emp_ID)) EQ 0 OR arguments.Emp_ID EQ 0>
			<cfset strIsLoggedIn = 0>
		</cfif>
         <cfreturn strIsLoggedIn>
	</cffunction>	


	<cffunction name="DeleteClientVariables" displayname="Delete All Client Variables" access="public" output="false">
		<cftry>
		<cfset var ClientVariablesList = GetClientVariablesList()>
		<cfcatch type="any">
		<cfset  ClientVariablesList ="">
		</cfcatch>
		</cftry>
		<cfloop list="#ClientVariablesList#" index="request.variable">
			<cfif StructKeyExists(client, request.variable)>
				<cftry>
					<cfset temp1 = DeleteClientVariable(request.variable)>

					<cfcatch type="any"><!--- do nothing ---></cfcatch>
				</cftry>

				<cftry>
					<cfset temp2 = StructDelete(client, request.variable, true)>

					<cfcatch type="any"><!--- do nothing ---></cfcatch>
				</cftry>
			</cfif>
		</cfloop>
	</cffunction>

</cfcomponent>