﻿; function NewsletterSubscribeRequest(email, userName, targetAudienceId, organization, interests, subscriptionType, complexSubscriptionAction, subscriptionContainer) {

    this.userName = this.processArgument(userName);
    this.email = this.processArgument(email);
    this.targetAudienceId = this.processArgument(targetAudienceId);
    this.organization = this.processArgument(organization);
    this.interests = this.processArgument(interests);
    this.subscriptionType = this.processArgument(subscriptionType);
    this.complexSubscriptionAction = this.processArgument(complexSubscriptionAction);
    this.subscriptionContainer = this.processArgument(subscriptionContainer);
}

jQuery.extend(NewsletterSubscribeRequest.prototype, {
  processArgument : function (argument) {
        if (!argument || argument == 'undefined') {
            return '';
        }

        return argument;
    }
});

; function Newsletter() {
}
jQuery.extend(Newsletter.prototype, {
    constants: {
        newsletterSubscriptionHandlerUrl: "/layouts/Newsletter/NewsletterSubscription.ashx?ue=##email##&un=##username##&si=##targetAudienceId##&o=##organization##&il=##interests##&st=##subscriptionType##&csa=##complexSubscriptionAction##",

        userNameParameter: "##username##",
        emailParameter: "##email##",
        targetAudienceIdParameter: "##targetAudienceId##",
        organizationParameter: "##organization##",
        interestsParameter: "##interests##",
        subscriptionTypeParameter: "##subscriptionType##",
        complexSubscriptionActionParameter: "##complexSubscriptionAction##"
    },

    subscribe: function (email, userName, targetAudienceId, box) {
        var request = new NewsletterSubscribeRequest(email, userName, targetAudienceId, '', '', 'Simple', '', box);
        var subscriptionLink = this.constructSubscribeUrl(request);

        this.sendNewsletterSubscribeRequest(subscriptionLink, request);
    },

    submitComplexSubscription: function (request) {
        var subscriptionLink = this.constructSubscribeUrl(request);
        this.sendNewsletterSubscribeRequest(subscriptionLink, request);
    },

    onSubscriptionCompleted: function (msg, request) {
        var subscriptionResponse = eval('(' + msg + ')');
        var subscribeBox = request.subscriptionContainer;

        if (subscriptionResponse.Status == 'error') {
            var errorMessageContainer = subscribeBox.find('span.subscriptionErrorMessage');

            if (errorMessageContainer.length) {
                errorMessageContainer.html(subscriptionResponse.ErrorMessage);
                errorMessageContainer.show();
            }

            subscribeBox.find('.okHeader').hide();
            subscribeBox.find('.errorHeader').show();
        }
        else {
            subscribeBox.html(subscriptionResponse.SucceedHtml);
        }

    },

    constructSubscribeUrl: function (subscribeRequest) {
        var url = this.constants.newsletterSubscriptionHandlerUrl.replace(this.constants.userNameParameter, subscribeRequest.userName);
        url = url.replace(this.constants.emailParameter, subscribeRequest.email);
        url = url.replace(this.constants.targetAudienceIdParameter, subscribeRequest.targetAudienceId);

        url = url.replace(this.constants.organizationParameter, subscribeRequest.organization);
        url = url.replace(this.constants.interestsParameter, subscribeRequest.interests);
        url = url.replace(this.constants.subscriptionTypeParameter, subscribeRequest.subscriptionType);
        url = url.replace(this.constants.complexSubscriptionActionParameter, subscribeRequest.complexSubscriptionAction);

        return url;
    },

    sendNewsletterSubscribeRequest: function (handlerUrl, request) {
        jQuery.ajax({
            type: "POST",
            url: handlerUrl,
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            dataType: "text",
            success: function (msg) {
                newsletter.onSubscriptionCompleted(msg, request);
            }
        });
    }
});

var newsletter = new Newsletter();
