﻿$jQuery(document).ready(function () {
    $jQuery.fn.showInfo = function (options) {
        var settings = $jQuery.extend({
              message: ''
          }, options);

          $jQuery('<div class="ui-widget">' + settings.message + '</div>').appendTo(this);

          return this.fadeIn(250);
      }

    var givenName = $jQuery('#contactName'),
					email = $jQuery('#contactEmail'),
					subscribe = $jQuery('#subscribe').button().attr("disabled", "disabled"),
					message = $jQuery('#status-message'),
					db = $jQuery('#contact-databases'),
					services = new mailMonitor.sdk.services({
					    userID: '4292B40B-0108-4033-ABDE-7F42055EDDBA',
					    level: 'mailbox',
					    url: 'http://web.mailmonitor.dk/WebServices/ContactValidationService.svc'
					});

    // retrieve available contact databases
    services.getContactDatabases({
        id: '4A00CE6E-C54C-4B15-BDEE-8271E1AEA5CF', // entry point for (parent) contact database (should also support path)
        success: function (json) {
            var ul = $jQuery("<ul/>");

            $jQuery.each(json.data, function () {
                ul.append($jQuery("<li/>")
							.append(
								$jQuery("<input type='checkbox' name='contact-database-id' checked='checked' />").prop("value", this.id)
							)
							.append(
								$jQuery("<span />").html(this.name)
							)
						);
            });

            db.find(".options").append(ul).show();
        },
        error: function () {
            alert("An error occured while invoking the remote service.");
        }
    });

    email.change(function () {
        subscribe.attr("disabled", "disabled");
        message = message.empty();

        var value = $jQuery(this).val();
        var icon = $jQuery("#icon").hide();

        if (value) {
            message.showInfo({
                message: "Validerer emailadressen '<strong>" + value + "'</strong>."
            });

            db.hide();

            services.validateEmail({
                email: value,
                success: function (json) {
                    if (json.success) {
                        db.show();
                        icon.fadeIn(250); // show validated icon
                        message.fadeOut(250, function () { $jQuery(this).empty(); }); // fade out and empty contents
                        subscribe.removeAttr("disabled"); // enable form submission
                    } else {
                        message.empty().showInfo({
                            message: "Kunne ikke validere emailadressen '<strong>" + value + "</strong>'."
                        });
                    }
                },
                error: function () {
                    message.empty().showInfo({
                        message: "Kunne ikke validere emailadressen. Fejl fra den eksterne service '<strong>" + value + "</strong>'."
                    });
                }
            });
        }
    });

    subscribe.click(function () {
        var checked = db.find("input[type=checkbox]:checked").map(function (i, e) {
            return $jQuery(e).val();
        });

        if (checked.length == 0) {
            message.empty().showInfo({
                message: "Vælg et nyhedsbrev."
            });

            return;
        }

        services.createContact({
            email: email.val(),
            givenName: givenName.val(),
            fields: [],
            databases: checked.get(),
            success: function (json) {
                if (json.success) {
                    $jQuery(".NewsletterSignUp").fadeOut(250);
                    message.empty().showInfo({
                        message: "Tak for din tilmelding. Husk at verificere din tilmelding ved at gøre det som står i mailen du modtager."
                    });
                } else {
                    message.empty().showInfo({
                        message: "Der er allerede et abnnement med denne email '<strong>" + email.val() + "</strong>'."
                    });
                }
            }
        });
    });
});

