﻿SetupNamespaces("EZLandlordForms");

EZLandlordForms.DocumentEmailing = {
    Wizard: function(_userID, _documentID, _builtID, _leaseID, _documentName) { 
        var private = {
            userID: _userID, 
            documentID: _documentID, 
            builtID: _builtID, 
            leaseID: _leaseID, 
            documentName: _documentName, 
            curtainElem: null, 
            dialogElem: null, 
            contentArea: null, 
            loadingImage: new Image(),
            positionInterval: null, 
            emailAddresses: [], 
            
            DisplayDialog: function() { 
                var dropbox = Get("ElementDropBox");
                var pageHeight = ((document.height) ? document.height : document.body.offsetHeight) + 20;
                var pageWidth = ((document.width) ? document.width : document.body.offsetWidth);
                
                if (document.documentElement.clientHeight > pageHeight) 
                    pageHeight = document.documentElement.clientHeight;
                
                private.curtainElem = Elem("div");
                private.curtainElem.style.display = "block";
                private.curtainElem.style.position = "absolute";
                private.curtainElem.style.top = "0px";
                private.curtainElem.style.left = "0px";
                private.curtainElem.style.backgroundColor = "#000000";
	            private.curtainElem.style.opacity = 0.8;
	            private.curtainElem.style.filter  = "alpha(opacity=80)";
                private.curtainElem.style.height = Math.ceil(pageHeight) + "px";
                private.curtainElem.style.width = Math.ceil(pageWidth) + "px";
                private.curtainElem.style.margin = "0px auto";
                private.curtainElem.style.zIndex = 175;
	            private.curtainElem.appendChild(document.createTextNode(" "));
            
                private.dialogElem = Elem("div");
	            private.dialogElem.className = "Dialog";
	            private.dialogElem.style.width = "500px";
	            private.dialogElem.style.height = "500px";
	            private.dialogElem.style.zIndex = 3000;
	            
	            var closeButton = Elem("a");
	            var closeButtonImg = Elem("img");
	            
	            closeButton.href = "#";
	            closeButton.style.display = "block";
	            closeButton.style.margin = "0 -10px 0 0";
	            closeButton.style.position = "relative";
                if (typeof(closeButton.style.cssFloat) != "undefined") closeButton.style.cssFloat = "right";
                else closeButton.style.styleFloat = "right";
                closeButton.onclick = function() { private.HideDialog(); return false; };
                
                closeButtonImg.src = "/images/layout2009/curtain_close.gif";
	            closeButtonImg.width = 26;
	            closeButtonImg.height = 26;
	            closeButtonImg.alt = "Close";
                closeButton.appendChild(closeButtonImg);
                private.dialogElem.appendChild(closeButton);
                
                var dialogHeader = Elem("h1");
	            dialogHeader.appendChild(Text("Email: " + private.documentName));
	            private.dialogElem.appendChild(dialogHeader);
	            
                private.contentArea = Elem("div");
	            private.contentArea.style.position = "relative";
	            private.dialogElem.appendChild(private.contentArea);
	            
	            private.PositionDialog();
	            private.positionInterval = setInterval(function() { private.PositionDialog(); }, 500);
	            
	            dropbox.appendChild(private.curtainElem);
	            dropbox.appendChild(private.dialogElem);
	            
	            dropbox = null;
            }, 
            
            HideDialog: function() { 
                clearInterval(private.positionInterval);
                
                var dropbox = Get("ElementDropBox");
                dropbox.removeChild(private.curtainElem);
                dropbox.removeChild(private.dialogElem);
                dropbox = null;
            }, 
            
            PositionDialog: function() { 
	            private.dialogElem.style.top = Pliner.Util.Display.FindScreenCenteredY(560) + "px";
	            private.dialogElem.style.left = Pliner.Util.Display.FindScreenCenteredX(560) + "px";
            }, 
            
            ShowLoadingImage: function(msg) { 
                ClearElem(private.contentArea);
                
                if (!msg)
                    msg = "Loading";
                
                var loadingMessage = Elem("div");
                loadingMessage.style.position = "absolute";
                loadingMessage.style.zIndex = 180;
                loadingMessage.style.top = "180px";
                loadingMessage.style.left = "185px";
                loadingMessage.style.padding = "0 0 0 40px";
                loadingMessage.style.fontSize = "18px";
                loadingMessage.style.lineHeight = "32px";
                loadingMessage.style.color = "#171553";
                loadingMessage.style.background = "transparent url(" + private.loadingImage.src + ") no-repeat scroll center left";
                loadingMessage.appendChild(Text(msg + "&hellip;", true));
                
                private.contentArea.appendChild(loadingMessage);
            }, 
            
            ShowErrorMessage: function() { 
                ClearElem(private.contentArea);
                
                var errorMessage = Elem("div");
                errorMessage.style.margin = "180px auto 0 auto";
                errorMessage.style.fontSize = "18px";
                errorMessage.style.lineHeight = "32px";
                errorMessage.style.color = "#B81818";
                errorMessage.style.textAlign = "center";
                errorMessage.appendChild(Text("Error Contacting The Server"));
                
                var errorLink = Elem("a");
                errorLink.style.display = "block";
                errorLink.style.margin = "10px auto 0 auto";
                errorLink.style.fontSize = "12px";
                errorLink.style.textAlign = "center";
                errorLink.href = "#";
                errorLink.onclick = function() { private.HideDialog(); public.StartWizard(); return false; };
                errorLink.appendChild(Text("Try Again"));
                
                private.contentArea.appendChild(errorMessage);
                private.contentArea.appendChild(errorLink);
            }, 
            
            LoadEmailOptionsStep: function() { 
                private.ShowLoadingImage();
                
                var msg = new Pliner.Util.Ajax.Message("/wizards/ajax/loademailsettings.aspx", 0);
                msg.AddPostDataKey("leaseID", private.leaseID);
                msg.AddOnCompletedEvent(function(msg) { private.EmailOptionsStepLoaded(msg.responseText); });
                msg.AddOnErrorEvent(function(msg) { private.ShowErrorMessage(); });
                ajaxConnection.AddToQueue(msg);
            }, 
            
            EmailOptionsStepLoaded: function(data) { 
                tenants = [];
                tenantsData = data.split("[break]");
                tenantsData.sort(); // name is the first data field so this is equivalent to sorting by name
                
                for (var t=0; t < tenantsData.length; t++) { 
                    var tenantsDataParts = tenantsData[t].split("[split]");
                    
                    if (tenantsDataParts.length == 3) { 
                        var tenant = new Object();
                        tenant.Name = tenantsDataParts[0];
                        tenant.Email = tenantsDataParts[1];
                        tenant.IsOnDocument = tenantsDataParts[2].toLowerCase() == "true";
                        tenants.push(tenant);
                    }
                }
                
                ClearElem(private.contentArea);
                
                var selectedList = Elem("div");
                
                // display the e-mail input
                var emailInputHeader = Elem("h2");
                //emailInputHeader.style.fontWeight = "bold";
                emailInputHeader.appendChild(Text("Add Recipients"));
                private.contentArea.appendChild(emailInputHeader);
                private.contentArea.appendChild(Text(
                    "Select the recipients from your tenants with e-mail addresses on file, or enter other e-mail addresses."));
                
                var emailInputTenants = Elem("div");
                emailInputTenants.style.marginTop = "10px";
                var emailInputTenantsLabel = Elem("div");
                if (typeof(emailInputTenantsLabel.style.cssFloat) != "undefined") emailInputTenantsLabel.style.cssFloat = "left";
                else emailInputTenantsLabel.style.styleFloat = "left";
                emailInputTenantsLabel.style.width = "80px";
                emailInputTenantsLabel.appendChild(Text("Your Tenants: "))
                var tenantsDropDown = Elem("select");
                tenantsDropDown.style.width = "206px";
                for (var t=0; t < tenants.length; t++)
                    tenantsDropDown.options[tenantsDropDown.length] = 
                        new Option(tenants[t].Name + " (" + tenants[t].Email + ")", tenants[t].Name + " <" + tenants[t].Email + ">");
                var tenantsAddButton = Elem("input");
                tenantsAddButton.type = "button";
                tenantsAddButton.className = "Button";
                tenantsAddButton.value = "Add Tenant";
                tenantsAddButton.style.padding = "3px";
                tenantsAddButton.style.width = "80px";
                tenantsAddButton.style.marginLeft = "5px";
                tenantsAddButton.onclick = function() { 
                    private.emailAddresses.push(tenantsDropDown.options[tenantsDropDown.selectedIndex].value);
                    private.DisplaySelectedEmails(selectedList);
                    return false;
                };
                emailInputTenants.appendChild(emailInputTenantsLabel);
                emailInputTenants.appendChild(tenantsDropDown);
                emailInputTenants.appendChild(tenantsAddButton);
                private.contentArea.appendChild(emailInputTenants);
                
                var emailInputOther = Elem("div");
                emailInputOther.style.marginTop = "2px";
                var emailInputOtherLabel = Elem("div");
                if (typeof(emailInputOtherLabel.style.cssFloat) != "undefined") emailInputOtherLabel.style.cssFloat = "left";
                else emailInputOtherLabel.style.styleFloat = "left";
                emailInputOtherLabel.style.width = "80px";
                emailInputOtherLabel.appendChild(Text("Other: "));
                var otherText = Elem("input");
                otherText.type = "text";
                otherText.maxlength = 128;
                otherText.style.width = "200px";
                var otherAddButton = Elem("input");
                otherAddButton.type = "button";
                otherAddButton.className = "Button";
                otherAddButton.value = "Add E-mail";
                otherAddButton.style.padding = "3px";
                otherAddButton.style.width = "80px";
                otherAddButton.style.marginLeft = "5px";
                otherAddButton.onclick = function() { 
                    if (otherText.value.length > 0)
                        private.emailAddresses.push(otherText.value);
                    otherText.value = "";
                    private.DisplaySelectedEmails(selectedList);
                    return false;
                };
                emailInputOther.appendChild(emailInputOtherLabel);
                emailInputOther.appendChild(otherText);
                emailInputOther.appendChild(otherAddButton);
                private.contentArea.appendChild(emailInputOther);
                
                // display the list of current recipients
                var emailListHeader = Elem("h2");
                emailListHeader.appendChild(Text("Selected Recipients"));
                emailListHeader.style.marginTop = "10px";
                private.contentArea.appendChild(emailListHeader);
                private.contentArea.appendChild(selectedList);
                
                for (var t=0; t < tenants.length; t++)
                    if (tenants[t].IsOnDocument)
                        private.emailAddresses.push(tenants[t].Name + " <" + tenants[t].Email + ">");
                
                private.DisplaySelectedEmails(selectedList);
                
                // display the input for a custom message, and the read receipt selection
                var optionsHeader = Elem("h2");
                optionsHeader.style.marginTop = "10px";
                optionsHeader.appendChild(Text("Options"));
                private.contentArea.appendChild(optionsHeader);
                
                var customMessageLabel = Elem("div");
                customMessageLabel.appendChild(Text("Include a Custom Message:"));
                var customMessageInput = Elem("textarea");
                customMessageInput.style.width = "500px";
                customMessageInput.rows = 3;
                customMessageInput.value = "Add an optional message to your document notification e-mails here.";
                customMessageInput.style.color = "#969696";
                customMessageInput.style.marginBottom = "10px";
                customMessageInput.onfocus = function() { ClearDefaultText(customMessageInput, "Add an optional message to your document notification e-mails here."); };
                customMessageInput.onblur = function() { SetupDefaultText(customMessageInput, "Add an optional message to your document notification e-mails here."); };
                private.contentArea.appendChild(customMessageLabel);
                private.contentArea.appendChild(customMessageInput);
                
                var readReceiptContainer = Elem("div");
                var readReceiptInput = Elem("input");
                readReceiptInput.id = "InputReadReceipt";
                readReceiptInput.type = "checkbox";
                var readReceiptLabel = Elem("label");
                readReceiptLabel.htmlFor = "InputReadReceipt";
                readReceiptLabel.appendChild(Text("Notify me by e-mail when tenants read documents e-mailed to them."));
                readReceiptContainer.appendChild(readReceiptInput);
                readReceiptContainer.appendChild(readReceiptLabel);
                private.contentArea.appendChild(readReceiptContainer);
                
                // add the submit button
                var submitContainer = Elem("div");
                submitContainer.style.textAlign = "center";
                submitContainer.style.marginTop = "10px";
                var submitButton = Elem("input");
                submitButton.type = "button";
                submitButton.className = "Button";
                submitButton.value = "Send E-mails";
                submitButton.onclick = function() { 
                        if (private.emailAddresses.length <= 0)
                            alert("You have not selected any recipients yet!  Please select recipients for the documents first.");
                        else 
                            private.SendEmails(customMessageInput.value, readReceiptInput.checked);
                            
                        return false; 
                    };
                submitContainer.appendChild(submitButton);
                private.contentArea.appendChild(submitContainer);
                
                setTimeout(function() { readReceiptInput.checked = true; }, 1);
            }, 
            
            DisplaySelectedEmails: function(container) { 
                // sort the list alphabetically
                private.emailAddresses.sort();
                
                // filter duplicate e-mails
                for (var e=1; e < private.emailAddresses.length; e++) { 
                    if (private.emailAddresses[e].toLowerCase() == private.emailAddresses[e - 1].toLowerCase()) { 
                        private.emailAddresses.splice(e, 1);
                        e--;
                    }
                }
                
                // display the list
                ClearElem(container);
                
                for (var e=0; e < private.emailAddresses.length; e++) { 
                    var emailContainer = Elem("div");
                    var deleteLink = Elem("a");
                    var deleteImage = Elem("img");
                    
                    deleteLink.style.textDecoration = "none";
                    deleteLink.href = "#";
                    deleteLink.onclick = function(removeIndex) { return function() { 
                            private.emailAddresses.splice(removeIndex, 1);
                            private.DisplaySelectedEmails(container);
                            return false; 
                        }; }(e);
                    
                    deleteImage.src = "/images/delete_icon.gif";
                    deleteImage.width = 16;
                    deleteImage.height = 16;
                    deleteImage.alt = "Remove this e-mail from the list";
                    deleteImage.style.verticalAlign = "middle";
                    deleteImage.style.marginRight = "3px";
                    
                    deleteLink.appendChild(deleteImage);
                    emailContainer.appendChild(deleteLink);
                    emailContainer.appendChild(Text(private.emailAddresses[e]));
                    container.appendChild(emailContainer);
                }
                
                if (private.emailAddresses.length <= 0)
                    container.appendChild(Text("No recipients selected yet."));
                
                // add a scroll bar if the list is too long
                container.style.height = "115px";
                container.style.overflow = "auto";
                container.style.border = "1px solid #E5E5E5";
                container.style.padding = "5px 8px";
            }, 
            
            SendEmails: function(customMessage, haveReadReceipt) { 
                private.ShowLoadingImage("Sending");
                
                var msg = new Pliner.Util.Ajax.Message("/wizards/ajax/senddocumentemails.aspx", 0);
                msg.AddPostDataKey("builtID", private.builtID);
                msg.AddPostDataKey("documentID", private.documentID);
                msg.AddPostDataKey("leaseID", private.leaseID);
                msg.AddPostDataKey("customMessage", customMessage);
                msg.AddPostDataKey("haveReadReceipt", haveReadReceipt);
                msg.AddPostDataKey("emailsCount", private.emailAddresses.length);
                
                for (var e=0; e < private.emailAddresses.length; e++)
                    msg.AddPostDataKey("email" + e, private.emailAddresses[e]);
                
                msg.AddOnCompletedEvent(function(msg) { private.EmailsSent(msg.responseText); });
                msg.AddOnErrorEvent(function(msg) { private.ShowErrorMessage(); });
                ajaxConnection.AddToQueue(msg);
            }, 
            
            EmailsSent: function(response) { 
                ClearElem(private.contentArea);
                
                var confirmHeader = Elem("h2");
                confirmHeader.appendChild(Text(private.emailAddresses.length + " E-mail" + (private.emailAddresses.length != 1 ? "s" : "") + " Sent"));
                private.contentArea.appendChild(confirmHeader);
                
                var printPageLink = Elem("a");
                printPageLink.href = "/members/documents/";
                printPageLink.appendChild(Text("Print"));
                private.contentArea.appendChild(Text("Your document has been e-mailed to the selected recipients. "));
                private.contentArea.appendChild(Text("You can check the status of each e-mailed copy by visiting the "));
                private.contentArea.appendChild(printPageLink);
                private.contentArea.appendChild(Text(" page."));
                
                var closeContainer = Elem("div");
                closeContainer.style.textAlign = "center";
                closeContainer.style.marginTop = "20px";
                var closeLink = Elem("a");
                closeLink.href = "#";
                closeLink.onclick = function() { private.HideDialog(); return false; };
                closeLink.appendChild(Text("Close the E-mail Wizard"));
                closeContainer.appendChild(closeLink);
                private.contentArea.appendChild(closeContainer);
            }
        };
        
        var public = {
            StartWizard: function() { 
                private.DisplayDialog();
                private.LoadEmailOptionsStep();
            }
        };
        
        private.loadingImage.src = "/images/ajax-loader.gif";
        
        return public;
    }
};