﻿
Partial Class UserControls_ETG_ETGShareFriend
    Inherits System.Web.UI.UserControl

    'Variables.
    Private mblnIsValid As Boolean
    Private mstrEmailSubject As String
    Private mstrEmailToAddress As String
    Private mstrEmailFromName As String
    Private mstrEmailFromAddress As String

    Private mstrWebsiteName As String

    Private mstrThankYouPage As String

    Private mstrPage As String
    Private mstrLink As String

    <System.ComponentModel.Browsable(True)> _
   <System.ComponentModel.Category("Behavior")> _
   Public Property EmailSubject() As String

        Get

            'Check property.
            If mstrEmailSubject = "" Then
                mstrEmailSubject = ""
            End If

            'Get property.
            Return mstrEmailSubject

        End Get

        Set(ByVal value As String)

            'Set property.
            mstrEmailSubject = value

        End Set

    End Property

    <System.ComponentModel.Browsable(True)> _
  <System.ComponentModel.Category("Behavior")> _
  Public Property EmailFromAddress() As String

        Get

            'Get property.
            Return mstrEmailFromAddress

        End Get

        Set(ByVal value As String)

            'Set property.
            mstrEmailFromAddress = value

        End Set

    End Property

    <System.ComponentModel.Browsable(True)> _
  <System.ComponentModel.Category("Behavior")> _
  Public Property EmailFromName() As String

        Get

            'Get property.
            Return mstrEmailFromName

        End Get

        Set(ByVal value As String)

            'Set property.
            mstrEmailFromName = value

        End Set

    End Property

    <System.ComponentModel.Browsable(True)> _
    <System.ComponentModel.Category("Behavior")> _
    Public Property ThankYouPage() As String

        Get

            'Get property.
            Return mstrThankYouPage

        End Get

        Set(ByVal value As String)

            'Set property.
            mstrThankYouPage = value

        End Set

    End Property

    <System.ComponentModel.Browsable(True)> _
 <System.ComponentModel.Category("Behavior")> _
 Public Property WebsiteName() As String

        Get

            'Check property.
            If mstrWebsiteName = "" Then
                mstrWebsiteName = ""
            End If

            'Get property.
            Return mstrWebsiteName

        End Get

        Set(ByVal value As String)

            'Set property.
            mstrWebsiteName = value

        End Set

    End Property

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Check for post back.
        If Me.IsPostBack = False Then
            InitializePage()
        End If

        'Create default button.
        CreateDefaultButton()

        'Set focus.
        txtName.Focus()

    End Sub

    Private Sub InitializePage()

        'Get query string data.
        GetQueryStringData()

        'Set error messages invisible.
        tblErrorMessage1.Visible = False

        'Set page controls.
        SetPageControls()

        'Show page 1.
        ShowPage(page:=1)

    End Sub

    Private Sub ProcessForm(ByVal page As Integer)

        'Check for sitefinity.
        If Request("cmspagemode") <> "" Then
            Exit Sub
        End If

        'Validate form.
        Me.Validate(page:=page)

        'Exit sub if form is not valid.
        If Me.IsValid = False Then
            Exit Sub
        End If

        'Process appropriate page.
        Select Case page
            Case 1
                ProcessForm1()
        End Select

    End Sub

    Private Sub ProcessForm1()

        'Send email message.
        'SendEmailMessage()

        'Show page 2.
        If Me.ThankYouPage <> "" Then
            Response.Redirect(Me.ThankYouPage)
        Else
            ShowPage(page:=2)
        End If

    End Sub

    Private Sub ShowPage(ByVal page As Integer)

        'Set tables invisible.
        tblPage1.Visible = False
        tblPage2.Visible = False

        'Show appropriate page.
        Select Case page
            Case 1
                tblPage1.Visible = True
            Case 2
                tblPage2.Visible = True
        End Select

    End Sub

    Public Shadows Sub Validate(ByVal page As Integer)

        'Validate appropriate page.
        Select Case page
            Case 1
                ValidatePage1()
        End Select

    End Sub

    Public Shadows ReadOnly Property IsValid() As Boolean

        Get

            'Return IsValid property.
            Return mblnIsValid

        End Get

    End Property

    Public Shadows Sub ValidatePage1()

        Dim blnIsValid As Boolean
        Dim strErrorText As String

        'Initialize variable.
        blnIsValid = True

        'Check name.
        If Trim(txtName.Text) = "" Then
            strErrorText = strErrorText & "Please enter your Name, "
            blnIsValid = False
        End If

        'Check email.
        If Trim(txtEmailAddress.Text) = "" Then
            strErrorText = strErrorText & "Please enter your Email, "
            blnIsValid = False
        End If

        'Check name.
        If Trim(txtFriendName.Text) = "" Then
            strErrorText = strErrorText & "Please enter your Friend's Name, "
            blnIsValid = False
        End If

        'Check email.
        If Trim(txtFriendEmailAddress.Text) = "" Then
            strErrorText = strErrorText & "Please enter your Friend's Email, "
            blnIsValid = False
        End If

        'Check for errors.
        If blnIsValid = False Then
            lblErrors1.Text = Microsoft.VisualBasic.Left(strErrorText, Len(strErrorText) - 2)
            tblErrorMessage1.Visible = True
        Else
            tblErrorMessage1.Visible = False
        End If

        'Set property.
        mblnIsValid = blnIsValid

    End Sub

    Private Sub SetPageControls()

        'Check page.
        If mstrPage = "" Then
            mstrPage = Me.WebsiteName
            mstrLink = ConvertRelativeUrlToAbsoluteUrl(relativeUrl:="/")
        End If

        'Set controls.
        lnkLink.InnerText = mstrPage
        lnkLink.HRef = mstrLink
        lnkLink2.InnerText = mstrPage
        lnkLink2.HRef = mstrLink
        lnkLink3.HRef = mstrLink

    End Sub

    Private Sub GetQueryStringData()
        On Error Resume Next

        'Get query string data.
        mstrPage = System.Web.HttpUtility.UrlDecode(Request.QueryString("Page"))
        mstrLink = ConvertRelativeUrlToAbsoluteUrl(relativeUrl:=Request.QueryString("Url"))

    End Sub

    Private Function ConvertRelativeUrlToAbsoluteUrl(ByVal relativeUrl As String) As String

        If (Request.IsSecureConnection) Then
            Return "https://" & Request.Url.Host & Page.ResolveUrl(relativeUrl:=relativeUrl)
        Else
            Return "http://" & Request.Url.Host & Page.ResolveUrl(relativeUrl:=relativeUrl)
        End If

    End Function

    Private Sub SendEmailMessage()

        Dim strSubject As String
        Dim strRecipient As String
        Dim strMessage As String
        Dim strFromAddress As String
        Dim strFromName As String

        'Get the details.
        strSubject = Me.EmailSubject
        strRecipient = Trim(txtFriendEmailAddress.Text)

        'Check from address.
        If Me.EmailFromAddress = "" Then
            strFromAddress = Trim(txtEmailAddress.Text)
        Else
            strFromAddress = Me.EmailFromAddress
        End If

        'Check from name.
        If Me.EmailFromName = "" Then
            strFromName = Trim(txtName.Text)
        Else
            strFromName = Me.EmailFromName
        End If

        'Build the email message.
        strMessage = BuildEmailMessage(template:=Trim(litTemplate.Text))

        'Send email.
        SendEmail(from:=strFromName, fromAddress:=strFromAddress, to:=strRecipient, subject:=strSubject, message:=strMessage)

    End Sub

    Private Function BuildEmailMessage(ByVal template As String) As String

        Dim objXmlDocument As System.Xml.XmlDocument
        Dim objXmlNode As System.Xml.XmlNode
        Dim objXslTransform As System.Xml.Xsl.XslTransform
        Dim objMemoryStream As IO.MemoryStream
        Dim objStreamReader As IO.StreamReader
        Dim strFileName As String
        Dim strMessage As String

        'Instantiate objects.
        objXmlDocument = New System.Xml.XmlDocument
        objXslTransform = New System.Xml.Xsl.XslTransform
        objMemoryStream = New IO.MemoryStream

        'Create root node.
        objXmlNode = objXmlDocument.CreateNode(type:=System.Xml.XmlNodeType.Element, name:="root", namespaceURI:="")
        objXmlDocument.AppendChild(newChild:=objXmlNode)

        'Create XML document.
        AddXmlNode(name:="Date", value:=FormatDateTime(Today(), DateFormat.ShortDate), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="Time", value:=Format(Now(), "h:mm tt"), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="Name", value:=Trim(txtName.Text), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="EmailAddress", value:=Trim(txtEmailAddress.Text), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="FriendName", value:=Trim(txtFriendName.Text), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="FriendEmailAddress", value:=Trim(txtFriendEmailAddress.Text), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="Question", value:=Replace(Trim(txtQuestion.Text), vbCrLf, "<br>"), xmlElement:=objXmlDocument.DocumentElement)

        AddXmlNode(name:="WebsiteName", value:=Trim(Me.WebsiteName), xmlElement:=objXmlDocument.DocumentElement)

        AddXmlNode(name:="Link", value:=Trim(lnkLink.HRef), xmlElement:=objXmlDocument.DocumentElement)
        AddXmlNode(name:="Page", value:=Trim(lnkLink.InnerText), xmlElement:=objXmlDocument.DocumentElement)

        'Replace first line breaks.
        Do Until Left(template, 2) <> vbCrLf
            template = Replace(template, vbCrLf, "")
        Loop

        'Load XSLT.
        objXslTransform.Load(New System.Xml.XmlTextReader(New System.IO.StringReader(template)))

        'Transform XML.
        objXslTransform.Transform(input:=objXmlDocument, args:=Nothing, output:=objMemoryStream, resolver:=Nothing)

        'Get stream reader.
        objMemoryStream.Position = 0
        objStreamReader = New IO.StreamReader(stream:=objMemoryStream)

        'Get message.
        strMessage = objStreamReader.ReadToEnd()

        'Close streams.
        objMemoryStream.Close()
        objStreamReader.Close()

        'Set function return.
        Return strMessage

    End Function

    Private Function AddXmlNode(ByVal name As String, ByVal value As String, ByVal xmlElement As System.Xml.XmlElement) As System.Xml.XmlNode

        Dim objXmlNode As System.Xml.XmlNode

        'Create Xml node.
        objXmlNode = xmlElement.OwnerDocument.CreateNode(type:=System.Xml.XmlNodeType.Element, name:=name, namespaceURI:="")
        objXmlNode.InnerText = value

        'Append node.
        xmlElement.AppendChild(newChild:=objXmlNode)

        'Set function return.
        Return objXmlNode

    End Function

    Private Sub SendEmail(ByVal from As String, ByVal fromAddress As String, ByVal [to] As String, ByVal subject As String, ByVal message As String, Optional ByVal cc As String = "", Optional ByVal attachment As String = "")

        Dim objMailMessage As System.Net.Mail.MailMessage
        Dim objAttachment As System.Net.Mail.Attachment
        Dim objSmtpClient As System.Net.Mail.SmtpClient
        Dim strTo() As String
        Dim I As Integer

        'Split the to addresses.
        strTo = Split([to], ";")

        'Instantiate objects.
        objMailMessage = New System.Net.Mail.MailMessage(from:=from & "<" & fromAddress & ">", to:=strTo(0))
        objSmtpClient = New System.Net.Mail.SmtpClient

        'Add additional recipients.
        If strTo.Length > 1 Then
            For I = 1 To strTo.Length - 1
                objMailMessage.To.Add(New System.Net.Mail.MailAddress(strTo(I)))
            Next
        End If

        'Set message properties.
        With objMailMessage
            .Subject = subject
            .Body = message
            .IsBodyHtml = True
        End With

        'Add attachment.
        If attachment <> "" Then
            objAttachment = New System.Net.Mail.Attachment(fileName:=attachment)
            objMailMessage.Attachments.Add(item:=objAttachment)
        End If

        'Add cc.
        If cc <> "" Then
            objMailMessage.CC.Add(addresses:=cc)
        End If

        'SMTP host and port.
        If System.Configuration.ConfigurationSettings.AppSettings("SMTPServer") <> "" Then
            objSmtpClient.Host = System.Configuration.ConfigurationSettings.AppSettings("SMTPServer")
        Else
            objSmtpClient.Host = "localhost"
        End If
        If System.Configuration.ConfigurationSettings.AppSettings("SMTPPort") <> "" Then
            objSmtpClient.Port = System.Configuration.ConfigurationSettings.AppSettings("SMTPPort")
        Else
            objSmtpClient.Port = "25"
        End If

        Try

            'Send the email.
            objSmtpClient.Send(message:=objMailMessage)

        Catch

        End Try

        'Release the attachment.
        If Not objAttachment Is Nothing Then
            objAttachment.Dispose()
        End If

        'Release the message.
        objMailMessage.Dispose()

    End Sub

    Private Sub CreateDefaultButton()

        'Set default button.
        Page.Form.DefaultButton = btnSend.UniqueID

    End Sub

    Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

        'Process form.
        ProcessForm(page:=1)

    End Sub

End Class
