function showErrorSections() {
    var selector = $("[id$=-settings]");
    selector.each(function(i) {
        var el = $(this);
        var errors = el.find(".errors");
        if (errors.length > 0) {
            el.show();
            $(window).scrollTop(errors.position().top);
        }
    });
}

function setConfigureMailServerListener() {
    var configMailServer = $("#configureMailServer");
    configMailServer.click(function(event){
        setMailServerInputReadonly();
    });
    
    var msRequiresAuth = $("#msRequiresAuth");
    msRequiresAuth.click(function(event){
        setMsAuthenticationFieldsReadonly($(this));
    });
}

function setEnableSystemEmailsListener() {
    var enableSystemEmails = $("#enableSystemEmail");
    enableSystemEmails.click(function(event){
        setSystemFromEmailReadonly();
    });
}

function setPodcastAutoSmartblockReadonly() {
    var disablePodcastAutomSmartblock = $("#podcastAutoSmartblock-0");
    var enablePodcastAutomSmartblock = $("#podcastAutoSmartblock-1");
    var podcastOverride = $("#podcastAlbumOverride-1");
    if ($(podcastOverride).is(':checked')) {
        enablePodcastAutomSmartblock.removeAttr("readonly");
    } else {
        disablePodcastAutomSmartblock.prop("checked", true);
        disablePodcastAutomSmartblock.attr("readonly","readonly");
        enablePodcastAutomSmartblock.attr("readonly","readonly");
    }
}

function setSystemFromEmailReadonly() {
    var enableSystemEmails = $("#enableSystemEmail");
    var systemFromEmail = $("#systemEmail");
    if ($(enableSystemEmails).is(':checked')) {
        systemFromEmail.removeAttr("readonly");
    } else {
        systemFromEmail.attr("readonly", "readonly");
    }
}

function setMailServerInputReadonly() {
    var configMailServer = $("#configureMailServer");
    var mailServer = $("#mailServer");
    var port = $("#port");
    var requiresAuthCB = $("#msRequiresAuth");
    
    if (configMailServer.is(':checked')) {
        mailServer.removeAttr("readonly");
        port.removeAttr("readonly");
        requiresAuthCB.parent().show();
    } else {
        mailServer.attr("readonly", "readonly");
        port.attr("readonly", "readonly");
        requiresAuthCB.parent().hide();
    }
    
    setMsAuthenticationFieldsReadonly(requiresAuthCB);
}

function setTuneInSettingsListener() {
    var enableTunein = $("#enable_tunein");
    enableTunein.click(function(event){
        setTuneInSettingsReadonly();
    });
}

function setTuneInSettingsReadonly() {
    var enableTunein = $("#enable_tunein");
    var stationId = $("#tunein_station_id");
    var partnerKey = $("#tunein_partner_key");
    var partnerId = $("#tunein_partner_id");

    if (enableTunein.is(':checked')) {
        stationId.removeAttr("readonly");
        partnerKey.removeAttr("readonly");
        partnerId.removeAttr("readonly");
    } else {
        stationId.attr("readonly", "readonly");
        partnerKey.attr("readonly", "readonly");
        partnerId.attr("readonly", "readonly");
    }
}

/*
 * Enable/disable mail server authentication fields
 */
function setMsAuthenticationFieldsReadonly(ele) {
    var email = $("#email");
    var password = $("#ms_password");
    var configureMailServer = $("#configureMailServer");
    
    if (ele.is(':checked') && configureMailServer.is(':checked')) {
        email.removeAttr("readonly");
        password.removeAttr("readonly");
    } else if (ele.not(':checked') || configureMailServer.not(':checked')) {
        email.attr("readonly", "readonly");
        password.attr("readonly", "readonly");
    }
}

function removeLogo() {
    $.post(baseUrl+'preference/remove-logo', {'csrf_token' : $('#csrf').val()}, function(json){
        // Reload without resubmitting the form
        location.href = location.href.replace(location.hash,"");
    });
}

function deleteAllFiles() {
    var resp = confirm($.i18n._("Are you sure you want to delete all the tracks in your library?"))
    if (resp) {
        $.post(baseUrl+'preference/delete-all-files', {'csrf_token' : $('#csrf').val()}, function(json){
            location.reload();
        });
    }
}

$(document).ready(function() {

    $('.collapsible-header').live('click',function() {
        $(this).next().toggle('fast');
        $(this).toggleClass("closed");
        return false;
    });

    if ($("#tunein-settings").find(".errors").length > 0) {
        $(".collapsible-content#tunein-settings").show();
    }

    /* No longer using AJAX for this form. Zend + our code makes it needlessly hard to deal with. -- Albert
    $('#pref_save').live('click', function() {
        var data = $('#pref_form').serialize();
        var url = baseUrl+'Preference/index';
        
        $.post(url, {format: "json", data: data}, function(json){
            $('#content').empty().append(json.html);
            setTimeout(removeSuccessMsg, 5000);
            showErrorSections();
            setMailServerInputReadonly();
            setConfigureMailServerListener();
            setEnableSystemEmailsListener();
        });
    });*/

    // when an image is uploaded, preview it to the user
    var logo = $("#stationLogo"),
        preview = $("#logo-img");
    logo.change(function(e) {
        if (this.files && this.files[0]) {
            preview.show();
            var reader = new FileReader(); // browser compatibility?
            reader.onload = function (e) {
                console.log("Reader loaded");
                preview.attr('src', e.target.result);
            };

            // check image size so we don't crash the page trying to render
            if (validateImage(this.files[0], logo)) {
                // read the image data as though it were a data URI
                reader.readAsDataURL(this.files[0]);
            } else {
                // remove the file element data
                $(this).val('').replaceWith($(this).clone(true));
                preview.hide();
            }
        } else {
            preview.hide();
        }
    });

    if (preview.attr('src').indexOf('images/') > -1) {
        $("#logo-remove-btn").hide();
    }

    showErrorSections();
    
    setMailServerInputReadonly();
    setPodcastAutoSmartblockReadonly();
    setSystemFromEmailReadonly();
    setConfigureMailServerListener();
    setEnableSystemEmailsListener();
    setTuneInSettingsReadonly();
    setTuneInSettingsListener();
});
