﻿(function($) {
    $.ssnSubscription = function(options) {
        var defaults = {
            NameID: 'subscribeName',
            NameHiddenID: '',
            EmailID: 'subscribeEmail',
            EmailHiddenID: '',
            TextNameMissing: 'Navn skal skrivast.',
            TextEmailMissing: 'Teldupostur skal skrivast.',
            SubscribeID: 'subscribe',
            UnsubscribeID: 'unsubscribe',
            SubscribeProc: function() { },
            UnsubscribeProc: function() { },
            NameValue: {
                fo: 'Navn',
                da: 'Navn',
                en: 'Name'
            },
            EmailValue: {
                fo: 'Teldupostur',
                da: 'E-mail',
                en: 'E-mail'
            }
        };
        _options = $.extend(defaults, options);

        bindEvents();
    };
    var _options;
    function bindEvents() {
        var NameIDAndEmailID = $('#' + _options.NameID + ',#' + _options.EmailID);

        NameIDAndEmailID.each(function() {
            onDeselecting(this);
        }).focus(function() {
            onSelecting(this);
        }).blur(function() {
            onDeselecting(this);
        });

        // bind subcribe click
        $('#' + _options.SubscribeID).click(function() {
            if (validate()) _options.SubscribeProc();
        });

        $('#' + _options.UnsubscribeID).click(function() {
            if (validate()) _options.UnsubscribeProc();
        });
    }
    function onSelecting(e) {
        if ($(e).val() == getCurrentValue(e)) $(e).val("");
    }
    function onDeselecting(e) {
        if ($(e).val() == "") $(e).val(getCurrentValue(e));
    }
    function getCurrentValue(e) {
        if (e.id == _options.NameID)
            return getText(_options.NameValue);

        return getText(_options.EmailValue);
    }
    function validate() {
        var name = $('#' + _options.NameID);
        var email = $('#' + _options.EmailID);

        if (isEmptyOrHasDefaultValue(name)) {
            alert(_options.TextNameMissing);
            return false;
        } else if (isEmptyOrHasDefaultValue(email)) {
            alert(_options.TextEmailMissing);
            return false;
        } else {
            $('#' + _options.NameHiddenID).val(name.val());
            $('#' + _options.EmailHiddenID).val(email.val());
            return true;
        }
    }
    function isEmptyOrHasDefaultValue(elem) {
        var value = elem.val();
        if (value == '' || value == getCurrentValue(elem.get(0)))
            return true;
        return false;
    }
    function getText(obj) {
        return eval('(obj.' + getLanguage() + ')');
    }
    function getLanguage() {
        return "fo"; // Missing a way to find current language
    }
})(jQuery);
