function loadJson(aUrl, callback) {
    jQuery.ajax(aUrl, {
        success: function(data, jqXHR, textStatus) {
            callback(data);
        },
        dataType: "json"
    });
}

function loadHtml(aUrl, callback) {
    jQuery.ajax(aUrl, {
        success: function(data, jqXHR, textStatus) {
            callback(data);
        },
        dataType: "html"
    });
}

function postJson(data, aUrl, callback) {
    jQuery.ajax(aUrl, {
        type: 'POST',
        success: function(data, jqXHR, textStatus) {
            callback(data);
        },
        data: data,
        dataType: "json"
    });
}

function putJson(data, aUrl, callback) {
    jQuery.ajax(aUrl, {
        type: 'PUT',
        success: function(data, jqXHR, textStatus) {
            callback(data);
        },
        data: data,
        dataType: "json"
    });
}

function deleteJson(data, aUrl, callback) {
    jQuery.ajax(aUrl, {
        type: 'DELETE',
        success: function(data, jqXHR, textStatus) {
            callback(data);
        },
        data: data,
        dataType: "json"
    });
}

function ajaxImageUpload(target) {
    var dlg = $("#imageDialog").clone();

    dlg.find("#imageForm").ajaxForm();
        
    dlg.find("#submit").click(function() {
        dlg.find("#imageForm").ajaxSubmit({
            dataType: 'json',
            success: function(result, statusText, xhr, form) {
                var url = result.image.image_url;
                var medium = result.image.medium_image_url;
                var small = result.image.small_image_url;

                var selected = dlg.find("input[@name=size]:checked").val();

                if (selected == "small") {
                    target.execCommand("insertimage", medium, null, null);
                } else if (selected == "medium") {
                    target.execCommand("insertimage", small, null, null);
                } else {
                    target.execCommand("insertimage", url, null, null);
                }

            }
        });
        dlg.dialog("close");
    });

    dlg.find("#cancel").click(function() {
        dlg.dialog("close"); 
    });

    dlg.dialog({
        modal: true 
    });
}

// FIXME: violates the DRY principle
function ajaxImageUpload_ID(callback) {
    var dlg = $("#imageDialog").clone();

    dlg.find("#imageForm").ajaxForm();
        
    dlg.find("#submit").click(function() {
        dlg.find("#imageForm").ajaxSubmit({
            dataType: 'json',
            success: function(result, statusText, xhr, form) {
                callback(result.image.id);
            }
        });
        dlg.dialog("close");
    });

    dlg.find("#cancel").click(function() {
        dlg.dialog("close"); 
    });

    dlg.dialog({
        modal: true 
    });
}

$(function() {
    $.cleditor.buttons.image.hook = function() { ajaxImageUpload(this); };
    $(".wysiwyg").cleditor({ width: "90%", height: "800px" });

    $("#headerImage").click(function() {
        window.location.href = '/';
    });
});


$(document).ajaxSend(function(e, xhr, options) {
    var token = $("meta[name='csrf-token']").attr("content");
    xhr.setRequestHeader("X-CSRF-Token", token);
});

/* adapted to jQuery from rails.js */
$(function() {
    $("a[data-method]").click(function() {
        var method = $(this).attr('data-method');
        var url = $(this).attr('href')
        var form = $('<form />');
        var csrf_param = $("meta[name='csrf-param']").attr("content");
        var csrf_token = $("meta[name='csrf-token']").attr("content");

        form.attr('method', 'POST');
        form.attr('action', url);
        form.hide( );

        if (method !== 'post') {
            var field = $('<input type="hidden" name="_method" />');
            field.val(method);
            form.append(field);
        }

        if (csrf_token) {
            var field = $('<input type="hidden" />');
            field.attr('name', csrf_param);
            field.attr('value', csrf_token);
        }
        
        form.submit();
        return false;
    });
});

