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){    
    event.stopPropagation();
    event.preventDefault();    
    var $this = $(this);    
    var actions = $this.parent(".actions")     
    $this
      .hide()
      .after($('<div class="confirmation"><span class="warning">Er du sikker? </span><a href="" class="yes">ja</a> / <a href="" class="no">nei</a></div>'))    
    $('.yes', actions).bind('click', yes);
    $('.no', actions).bind('click', no);
}

function yes(event){
    event.stopPropagation();
    event.preventDefault();
    var $this = $(this);
    var topic = $this.parents('li.topic');
    var request = {
      operation: 'deleteElement', 
      serial: topic.attr('ztm:serial')
    }
    jQuery.postJSON({ url: window.location.href, 
                 data: request,
                 success: function(){
                   topic.fadeOut(200, function () {
                       topic.remove()
                   });
                   var counter = $('.count' ,$this.parents('.task'));
                   var count = parseInt(counter.text())-1;
                   
                   if(count > 0){
                     counter.text(count);
                   }
                 },                 
                 error: function(){
                   humanMsg.displayMsg('An error occurred while communicating with the server.');
                   $('.confirmation', topic).remove();
                   $('.deleter', topic).show();
                 }
                 })
}

function failure(result, context) {    
    
    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 no(event){
    event.stopPropagation();
    event.preventDefault();
    $this = $(this);
    var actions = $this.parents(".actions");    
    $(".deleter", actions).show();
    $(".confirmation", actions).remove();    
}


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

$(document).ready(initialize);


