<%@ WebHandler Language="VB" Class="Handler" %>

Public Class Handler
	Implements IHttpHandler

	ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
		Get
			Return True
		End Get
	End Property
    
	Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
		' Set up the response settings
		context.Response.ContentType = "image/jpeg"
		context.Response.Cache.SetCacheability(HttpCacheability.Public)
		context.Response.BufferOutput = False
		' Setup the Size Parameter
		Dim size As PhotoSize = PhotoSize.Original
		Select Case context.Request.QueryString("Size")
			Case "S"
				size = PhotoSize.Small
			Case "M"
				size = PhotoSize.Medium
			Case "L"
				size = PhotoSize.Large
			Case Else
				size = PhotoSize.Original
		End Select
		' Setup the PhotoID Parameter
		Dim id As Int32 = 1
		Dim stream As IO.Stream = Nothing
		If ((Not (context.Request.QueryString("PhotoID")) Is Nothing) _
		   AndAlso (context.Request.QueryString("PhotoID") <> "")) Then
			id = [Convert].ToInt32(context.Request.QueryString("PhotoID"))
			stream = PhotoManager.GetPhoto(id, size)
		Else
			id = [Convert].ToInt32(context.Request.QueryString("AlbumID"))
			stream = PhotoManager.GetFirstPhoto(id, size)
		End If
		' Get the photo from the database, if nothing is returned, get the default "placeholder" photo
		If (stream Is Nothing) Then
			stream = PhotoManager.GetPhoto(size)
		End If
		' Write image stream to the response stream
		Dim buffersize As Integer = (1024 * 16)
		Dim buffer() As Byte = New Byte((buffersize) - 1) {}
		Dim count As Integer = stream.Read(buffer, 0, buffersize)
        
		Do While (count > 0)
			context.Response.OutputStream.Write(buffer, 0, count)
			count = stream.Read(buffer, 0, buffersize)
            
		Loop
	End Sub
	
End Class