jQuery.postJSON = function (options) {
    
    options = jQuery.extend( options
                           , { 'type': 'POST'
                             , 'contentType': 'application/json'
                             , 'processData': false 
                             , 'timeout': 5000
                             , 'dataType': 'json'
                             });
    
    options.data = JSON.stringify(options.data);
    options._error = options.error
    options.error = function (event) {
        //TODO: Handle other HTTP error codes like redirect.
        if (event.readyState === 0) {
            // Timeout
            //console.log('Timeout', event);
            if (options.timeoutError)
                options.timeoutError(event, options.context);
            else if (options._error)
                options._error(event, options.context);
        } else if (event.status === 0) {
            //console.log('No answer', event);
            if (options.noreplyError) 
                options.noreplyError(event, options.context);
            else if (options._error)
                options._error(event, options.context);
        } else if (event.status === 404) {
            // Topic has been deleted
            //console.log('404', event);
            humanMsg.displayMsg('Error: The topic has been deleted.');
            if (options._error)
                options._error(event, options.context);
        } else if (event.status >= 500) {
            //console.log('error', event, options._error);
            if (options._error)
                options._error(event, options.context);
        }
        delete options.context
        return false;
    };
    options._success = options.success
    options.success = function (event) {
        options._success(event, options.context)
        delete options.context
    }
    
    //TODO: Support difference between TIMEOUT, UNREACHABLE and SERVER ERROR
    //TODO: Use object literal as input.
    jQuery.ajax(options);
};

function deleteConfirmation(event){
    var target = $(event.currentTarget);
    orig = target.text();
    target.empty()
    $('<span class="warning">Er du sikker? </span><a href="" class="yes">ja</a> / <a href="" class="no">nei</a>').appendTo(target);
    target.find('a.yes').click(yes);
    target.find('a.no').click(no);
    event.stopPropagation();
    event.preventDefault()
}

function yes(event){
    var topic = $(event.currentTarget).parents('li.topic');
    var request = {operation: 'deleteElement', serial: topic.attr('ztm:serial')}
    jQuery.postJSON({ url: window.location.href, 
                 data: request,
                 success: success,
                 error: failure,
                 context: topic
                 })
}

function failure(result, context) {    
    humanMsg.displayMsg('An error occurred while communicating with the server.');
    context.find('span.deleter').empty().text('<a href="#">Slett</a>')
}

//function dd(index, element) {
//   element.fadeOut(200, function () {element.remove()}); 
//}


//function removeFromDrafts(serial){
//    var count = $('#my-drafts span.count');
//    var v = (parseInt(count.text())-1)+'';
//    count.text(v);    
//    var lines = $('#my-drafts ul.topiclist li')   
//    lines.each(function (index, element){ if (${element}.attr("ztm:serial")==serial){ ${element}.remove() }})
//    lines.each(dd)
    //t.fadeOut(200, function () {t.remove()});    
//}

function success(result, context){
    var element = this.context;
    //var serial = element.attr('ztm:serial');
    //removeFromDrafts(serial);

    //var count = $('#my-drafts span.count');
    //var v = (parseInt(count.text())-1)+'';
    //count.text(v);
    
    element.fadeOut(200, function () {element.remove()});
}

function no(event){
    var target = $(event.currentTarget).parents('span.deleter').empty();
    $('<a href="#">Slett</a>').appendTo(target);
    event.stopPropagation();
    event.preventDefault()
}


function initialize() {
    $('#worklists div.actions span.deleter').click(deleteConfirmation);
    $('#results div.actions span.deleter').click(deleteConfirmation);
}

$(document).ready(initialize);


