<cfcomponent output="false">


	<cffunction name="init" output="false" access="public">
		<cfargument name="ServerRoot"   type="String"/>
		<cfargument name="ResourceRoot" type="String" default="/resources"/>
		<cfargument name="ImageRoot"    type="String" required="false"/>
		<cfargument name="StyleRoot"    type="String" required="false"/>
		<cfargument name="ScriptRoot"   type="String" required="false"/>
		<cfargument name="rewrite"      type="Boolean" default="false"/>

		<cfset Variables.ServerRoot = Arguments.ServerRoot />

		<cfset Variables.ResourceRoot = Arguments.ResourceRoot />

		<cfif StructKeyExists(Arguments,'ImageRoot')>
			<cfset Variables.ImageRoot = Arguments.ImageRoot />
		<cfelse>
			<cfset Variables.ImageRoot = Variables.ResourceRoot & '/images' />
		</cfif>

		<cfif StructKeyExists(Arguments,'StyleRoot')>
			<cfset Variables.StyleRoot = Arguments.StyleRoot />
		<cfelse>
			<cfset Variables.StyleRoot = Variables.ResourceRoot & '/styles' />
		</cfif>

		<cfif StructKeyExists(Arguments,'ScriptRoot')>
			<cfset Variables.ScriptRoot = Arguments.ScriptRoot />
		<cfelse>
			<cfset Variables.ScriptRoot = Variables.ResourceRoot & '/scripts' />
		</cfif>

		<cfset Variables.rewrite = Arguments.rewrite/>

		<cfreturn This/>
	</cffunction>



	<cffunction name="Resource" returntype="String" output="false" access="public">

		<cfset var ResourceType = ListLast(Arguments[1],'.')/>
		<cfset var ResourceName = Arguments[1]/>
		<cfset var ResourcePath = 0/>

		<cfswitch expression="#ResourceType#">
			<cfcase value="css">
				<cfset ResourcePath = Variables.StyleRoot & '/' & ResourceName />
			</cfcase>
			<cfcase value="js">
				<cfset ResourcePath = Variables.ScriptRoot & '/' & ResourceName />
			</cfcase>
			<cfcase value="png,jpg,gif">
				<cfset ResourcePath = Variables.ImageRoot & '/' & ResourceName />
			</cfcase>
			<cfcase value="htc">
				<cfset ResourcePath = Variables.ScriptRoot & '/' & ResourceName />
			</cfcase>
			<cfdefaultcase>
				<cfset ResourcePath =  Variables.ResourceRoot & '/' &  ResourceName/>
			</cfdefaultcase>
		</cfswitch>

		<cfif StructKeyExists(Arguments,'Link') OR StructKeyExists(Arguments,'Head')>
			<cfswitch expression="#ResourceType#">
				<cfcase value="css">
					<cfsavecontent variable="Result"><cfoutput><link rel="stylesheet" type="text/css" href="#ResourcePath#"/></cfoutput></cfsavecontent>
				</cfcase>
				<cfcase value="js">
					<cfsavecontent variable="Result"><cfoutput><script type="text/javascript" src="#ResourcePath#"></script></cfoutput></cfsavecontent>
				</cfcase>

				<cfdefaultcase>
					<cfsavecontent variable="Result"><cfoutput>#ResourcePath#</cfoutput></cfsavecontent>
				</cfdefaultcase>
			</cfswitch>

			<cfif StructKeyExists(Arguments,'Head')>
				<cfhtmlhead text="#Result#"/>
				<cfreturn ""/>
			<cfelse>
				<cfreturn Result/>
			</cfif>

		<cfelse>
			<cfreturn ResourcePath />
		</cfif>
	</cffunction>



	<cffunction name="Link" returntype="String" output="false" access="public">

		<cfif ListFirst(Arguments[1],'.') EQ 'hosting'>
			<cfset var LinkRoot = '//hosting.' & ListRest(Variables.ServerRoot,'.')/>
		<cfelseif ListFirst(Variables.ServerRoot,'./') EQ 'hybridchill'>
			<cfset var LinkRoot = replace( Variables.ServerRoot , '//' , '//www.' ) />
		<cfelse>
			<cfset var LinkRoot = '//www.' & ListRest(Variables.ServerRoot,'.')/>
		</cfif>

		<cfif StructKeyExists(Arguments,'Download')>
			<cfreturn LinkRoot & '/downloads/'&Arguments[1] />
		<cfelseif Variables.rewrite>
			<cfif Arguments[1] EQ 'main.home'><cfreturn LinkRoot /></cfif>
			<cfswitch expression="#ListFirst(Arguments[1],'.')#">
				<cfcase value="projects">
					<cfreturn LinkRoot & "/projects/#ListRest(Arguments[1],'.')#.html"/>
				</cfcase>
				<cfcase value="main,hosting">
					<cfreturn LinkRoot & "/#ListRest(Arguments[1],'.')#.html"/>
				</cfcase>
				<cfdefaultcase>
					<cfreturn LinkRoot & '/' & replace(Arguments[1],'.','-') & ".html" />
				</cfdefaultcase>
			</cfswitch>
		<cfelse>
			<cfreturn LinkRoot & '/?fuseaction='&Arguments[1] />
		</cfif>
	</cffunction>



</cfcomponent>