﻿//Declare Messaging Namespace
Salem.RegisterNamespace("Ajax.Messaging");
Salem.Ajax.Messaging = {

    WaitPanel: null,
    MessagePanel: null,
    NewMessagesNotice: null,
    Url: 'WebServices/Messaging.asmx/',

    OpenMessageWindow: function(FromUserID, ToUserID, MessageType, ToOverrideName, ToOverrideEmail)
    {
        Salem.Ajax.Messaging.WaitContainer().show();
        var form = Salem.String.Format('ToUserID={0}&FromUserID={1}&MessageType={2}&ToOverrideName={3}&ToOverrideEmail={4}', ToUserID, FromUserID, MessageType, ToOverrideName, ToOverrideEmail);
        Salem.Ajax.Messaging.Call("OpenMessageWindow", form, Salem.Ajax.Messaging.OpenMessageWindowReturn);
    },

    OpenSendToFriendWindow: function(FromUserID, MessageType)
    {
        Salem.Ajax.Messaging.WaitContainer().show();
        var form = Salem.String.Format('FromUserID={0}&MessageType={1}', FromUserID, MessageType);
        Salem.Ajax.Messaging.Call("OpenSendToFriendWindow", form, Salem.Ajax.Messaging.OpenMessageWindowReturn, ['InsertHREF']);
    },

    OpenSendToSalesPersonWindow: function(MessageType)
    {
        Salem.Ajax.Messaging.WaitContainer().show();
        var form = Salem.String.Format('FromUserID={0}&MessageType={1}', Salem.WebProfile.UserID, MessageType);
        Salem.Ajax.Messaging.Call("OpenSendToSalesPersonWindow", form, Salem.Ajax.Messaging.OpenMessageWindowReturn, ['InsertHREF']);
    },

    OpenSendResumeToAssociateWindow: function(FromUserID, MessageType, ResumeID)
    {
        Salem.Ajax.Messaging.WaitContainer().show();
        var form = Salem.String.Format('FromUserID={0}&MessageType={1}&ResumeIDs={2}', FromUserID, MessageType, ResumeID);
        Salem.Ajax.Messaging.Call("OpenSendResumeToAssociateWindow", form, Salem.Ajax.Messaging.OpenMessageWindowReturn, ['InsertHREF']);
    },

    OpenMessageWindowReturn: function(ret, args)
    {
        var FocusEmail = false;
        if (args != null && args.length > 0)
        {
            if (args[0].toString() == "InsertHREF")
            {
                ret = Salem.String.Format(ret, document.location.href);
                FocusEmail = true;
            }
        }
        Salem.Ajax.Messaging.WaitContainer().hide();
        Salem.Ajax.Messaging.NewMessagePanel(ret);
        Salem.Ajax.Messaging.MessagePanel.center();
        Salem.Ajax.Messaging.MessagePanel.show();
        if (FocusEmail)
        {
            setTimeout("Salem.Ajax.Messaging.SetFocusToEmailAddress();", 500);
        } else
        {
            setTimeout("Salem.Ajax.Messaging.SetFocusToMessageText();", 500);
        }
    },

    SetFocusToMessageText: function()
    {
        var post = document.getElementById('_Messaging_MessagePost');
        if (post != null)
        {
            if (post.setSelectionRange)
            {
                post.setSelectionRange(0, 0);
                post.focus();
            }
        }
    },

    SetFocusToEmailAddress: function()
    {
        var email = document.getElementById('_Messaging_ToName');
        email.select();
    },

    SendMessage: function(toID, fromID, subject, message, type, boolCC, toOverrideName, toOverrideEmail)
    {
        if (Salem.String.IsNullOrEmpty(subject, message))
        {
            alert("Please enter a subject and message."); return;
        }
        Salem.Ajax.Messaging.MessagePanel.cfg.setProperty("effect", [{ effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.5 }, { effect: YAHOO.widget.ContainerEffect.SLIDE, duration: 0.5}]);
        Salem.Ajax.Messaging.MessagePanel.hide();
        var form = Salem.String.Format("ToUserID={0}&FromUserID={1}&Subject={2}&MessageText={3}&MessageType={4}&CopySender={5}&ToOverrideName={6}&ToOverrideEmail={7}", toID, fromID, subject, message, type, boolCC, toOverrideName, toOverrideEmail);
        Salem.Ajax.Messaging.Call("SendNewMessage", form, Salem.Ajax.Messaging.ConfirmMessageSent);
    },

    SendPageToFriend: function(fromEmail, toEmail, subject, message, ccSender, type, handle)
    {
        if (Salem.String.IsNullOrEmpty(fromEmail))
        {
            alert("You must logged in as a registered user to use this feature."); return;
        }
        if (Salem.String.IsNullOrEmpty(subject, message))
        {
            alert("Please enter a subject and message."); return;
        }
        if (toEmail == "to@email.com" || (!Salem.Utils.IsValidEmail(toEmail)))
        {
            alert("Please enter a valid email for the recipient."); return;
        }
        Salem.Ajax.Messaging.MessagePanel.cfg.setProperty("effect", [{ effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.5 }, { effect: YAHOO.widget.ContainerEffect.SLIDE, duration: 0.5}]);
        Salem.Ajax.Messaging.MessagePanel.hide();
        var form = Salem.String.Format("FromEmail={0}&ToEmail={1}&Subject={2}&MessageText={3}&CopySender={4}&MessageType={5}&MessageHandle={6}&ReferralPageUrl={7}", fromEmail, toEmail, subject, message.replace(/\r|\n|\r\n/g, "<br/>"), ccSender, type, handle, document.location.href);
        Salem.Ajax.Messaging.Call("SendPageToFriend", form, Salem.Ajax.Messaging.ConfirmMessageSent);
    },

    SendSalesPersonEmail: function(fromEmail, toEmail, subject, message, ccSender, type, handle)
    {
        if (Salem.String.IsNullOrEmpty(fromEmail))
        {
            alert("A from email is required to use this feature."); return;
        }
        if (Salem.String.IsNullOrEmpty(subject, message))
        {
            alert("Please enter a subject and message."); return;
        }
        if (!Salem.Utils.IsValidEmail(toEmail))
        {
            alert("Please enter a valid email for the recipient."); return;
        }
        Salem.Ajax.Messaging.MessagePanel.cfg.setProperty("effect", [{ effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.5 }, { effect: YAHOO.widget.ContainerEffect.SLIDE, duration: 0.5}]);
        Salem.Ajax.Messaging.MessagePanel.hide();
        var form = Salem.String.Format("FromEmail={0}&ToEmail={1}&Subject={2}&MessageText={3}&CopySender={4}&MessageType={5}&MessageHandle={6}", fromEmail, toEmail, subject, message.replace(/\r|\n|\r\n/g, "<br/>"), ccSender, type, handle);
        Salem.Ajax.Messaging.Call("SendEmailToSalesPerson", form, Salem.Ajax.Messaging.ConfirmMessageSent);
    },

    SendResumeToAssociate: function(fromEmail, toEmail, subject, message, ccSender, type, resumeId, handle)
    {
        if (Salem.String.IsNullOrEmpty(fromEmail))
        {
            alert("You must logged in as a registered user to use this feature."); return;
        }
        if (Salem.String.IsNullOrEmpty(subject, message))
        {
            alert("Please enter a subject and message."); return;
        }
        if (toEmail == "to@email.com" || (!Salem.Utils.IsValidEmail(toEmail)))
        {
            alert("Please enter a valid email for the recipient."); return;
        }
        Salem.Ajax.Messaging.MessagePanel.cfg.setProperty("effect", [{ effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.5 }, { effect: YAHOO.widget.ContainerEffect.SLIDE, duration: 0.5}]);
        Salem.Ajax.Messaging.MessagePanel.hide();
        var form = Salem.String.Format("FromEmail={0}&ToEmail={1}&Subject={2}&MessageText={3}&CopySender={4}&MessageType={5}&ResumeIDs={6}&ReferralPageUrl={7}&MessageHandle={8}", fromEmail, toEmail, subject, message.replace(/\r|\n|\r\n/g, "<br/>"), ccSender, type, resumeId, document.location.href, handle);
        Salem.Ajax.Messaging.Call("SendResumeToAssociate", form, Salem.Ajax.Messaging.ConfirmMessageSent);
    },

    ConfirmMessageSent: function(ret, args)
    {
        if (ret.toString() == "true")
        {
            Salem.Sounds.Play('http://media.salemwebnetwork.com/ChurchStaffing/Sounds/mail-sent.wav');
        } else
        {
            setTimeout("alert('ERROR: Your message was not sent. Please try again.');", 500);
        }
    },

    CancelNewMessage: function()
    {
        if (confirm("Are you sure you want to discard this message?"))
        {
            this.MessagePanel.cfg.setProperty("effect", { effect: YAHOO.widget.ContainerEffect.FADE, duration: 1 });
            this.MessagePanel.hide();
            Salem.Sounds.Play('http://media.salemwebnetwork.com/ChurchStaffing/Sounds/emptytrash.wav');
        }
    },

    WaitContainer: function()
    {
        if (this.WaitPanel == null)
        {
            this.WaitPanel = new YAHOO.widget.Panel("waitPanel",
                                                    { width: "240px",
                                                        constraintoviewport: true,
                                                        fixedcenter: true,
                                                        close: true,
                                                        draggable: false,
                                                        zindex: 4,
                                                        modal: true,
                                                        visible: false
                                                    }
                                                );
        }
        this.WaitPanel.setHeader("Loading, please wait...");
        this.WaitPanel.setBody("<img src=\"http://media.salemwebnetwork.com/ChurchStaffing/images/loading.gif\"/>");
        this.WaitPanel.render(document.body);
        return this.WaitPanel;
    },

    NewMessagePanel: function(body)
    {
        if (this.MessagePanel == null)
        {
            this.MessagePanel = new YAHOO.widget.Panel("GlobalMessagePanel",
                                                    { width: "600px",
                                                        height: "500px",
                                                        constraintoviewport: true,
                                                        close: false,
                                                        draggable: true,
                                                        zindex: 4,
                                                        modal: false,
                                                        visible: false,
                                                        fixedcenter: false,
                                                        effect: { effect: YAHOO.widget.ContainerEffect.SLIDE, duration: 0.5 }
                                                    }
                                                );
        }
        this.MessagePanel.hideEvent.subscribe(Salem.Ajax.Messaging.DestroyMessagePanel);
        this.MessagePanel.setHeader("New Message");
        this.MessagePanel.setBody('<div style="height:456px; overflow:hidden;">' + body + '</div>');
        this.MessagePanel.render(document.body);
        return this.MessagePanel;
    },

    CheckForNewMessages: function(UserID)
    {
        if (!isNaN(UserID) && UserID > 0)
        {
            var form = Salem.String.Format("UserID={0}", UserID);
            Salem.Ajax.Messaging.Call("CheckForNewMessages", form, Salem.Ajax.Messaging.ShowMailMessagePanel);
        }
    },

    ShowMailMessagePanel: function(count)
    {
        if (this.NewMessagesNotice == null)
        {
            this.NewMessagesNotice = new YAHOO.Animation.Util(document.getElementById("__Messaging_NewMessagesPanel"), 30, 233, 0, 300, .5, null);
        }
        if ((count > 0) && (document.location.href.indexOf('WebMail.aspx') == -1))
        {
            var div = document.getElementById("__Messaging_NewMessagesPanel");
            if (div != null)
            {
                div.innerHTML = Salem.String.Format('<a href="{0}WebMail.aspx" class="NewMessagesLink">You have {1} unread messages.</a>', Salem.Global.BaseUrl, count);
            }
            this.NewMessagesNotice.Show();
            this.NewMessagesNotice.MyAnimation.onComplete.subscribe(function() { setTimeout("Salem.Ajax.Messaging.ShowMailMessagePanel(0)", 10000); });
        } else
        {
            this.NewMessagesNotice.Hide();
        }
    },

    DestroyMessagePanel: function()
    {
        if (Salem.Ajax.Messaging.MessagePanel != null) { Salem.Ajax.Messaging.MessagePanel.destroy(); Salem.Ajax.Messaging.MessagePanel = null; }
    },

    Return: {
        Success: function(o)
        {
            //Make sure we got a valid XML response
            if (!o.responseXML.documentElement.firstChild) { return; }
            var data = '';
            //Lets Append all XML data into a single response value
            for (var i = 0; i < o.responseXML.documentElement.childNodes.length; i++)
            {
                data += o.responseXML.documentElement.childNodes[i].nodeValue;
            }
            //Send the Return Data and the Passback Arguments to the Return Function
            o.argument[0](data, o.argument[1]);
        },
        Failure: function(o) { /*alert('Failure');*/ }
    },

    Call: function(webmethod, parameters, returnmethod, returnArguments)
    {
        //Let create a Global callback
        var Callback = {
            success: Salem.Ajax.Messaging.Return.Success,
            failure: Salem.Ajax.Messaging.Return.Failure,
            scope: Salem.Ajax.Messaging.Return,
            argument: [returnmethod, returnArguments]
        }
        // Calling URL
        var url = Salem.Global.BaseUrl + Salem.Ajax.Messaging.Url + webmethod;
        //alert(url);
        //Send the current request
        YAHOO.util.Connect.asyncRequest('POST', url, Callback, parameters);
    }

}