var _txtOperation = ""; 

$(document).ready(function(){
    initializeAjax();
});

function statusDiv()
{
	var el = $("#statusdiv");
	if(el == undefined || 0 == el.length)
	{
		el = $(document.createElement("div"));
		el.attr("id", "statusdiv");
		el.addClass("status");
		el.appendTo('body');
		el.hide();
	}
	return el;
}

function setStatus(txtStatus)
{
	el = statusDiv();
	if(txtStatus)
	{
		el.text(_txtOperation + " (" +txtStatus + ")");
		el.show();
	} else {
		el.hide();
	}
}

function setOperation(txtOperation)
{
	_txtOperation = txtOperation;
}

function initializeAjax(){

	statusDiv().ajaxStart(function(){
	    //Set cursor to hourglass
		document.body.style.cursor = "wait";
		statusDiv().removeClass('success');
		statusDiv().removeClass('error'); 
		setStatus("connecting"); 
	});
	statusDiv().ajaxSend(function(){ setStatus("waiting for server..."); });
	statusDiv().ajaxSuccess(function(){
		statusDiv().addClass('success'); 
		setStatus("success"); 
	});
	statusDiv().ajaxError(function(){ 
		statusDiv().addClass('error');
		setStatus("error");
	});
 	statusDiv().ajaxComplete(function(){ 
		//Turn hourglass off
		document.body.style.cursor = "default";
 		setStatus("complete"); 
 		statusDiv().fadeOut();
 	});
 	
 	$.ajaxSetup({
 		type: "POST"
 	});
	
}

//TODO: generalize this function, eg. name of function?
var AjaxStatusController = function(){

    this.onCompleteRequest = function (mData) {
        //empty first
        $('.content-flash-messages').html('');
        if(mData.bSuccess){
            //error and status
            for(sKey in mData.asError){
                setFlashMessage(mData.asError[sKey]);
            }
            for(sKey in mData.asStatus){
                setFlashMessage(mData.asStatus[sKey]);
            }
            //redirect
            if(typeof(mData.sRedirectUrl) != 'undefined'){
                window.location.href = mData.sRedirectUrl;
            }
            //content
            if(typeof(mData.asContent) != 'undefined'){
                for(sKey in mData.asContent){
                    $('#'+sKey).html(mData.asContent[sKey]);
                }
            }
        } else {
            //error
            for(sKey in mData.asError){
                setFlashMessage(mData.asError[sKey]);
            }
            //content
            if(typeof(mData.asContent) != 'undefined'){
                for(sKey in mData.asContent){
                    $('#'+sKey).html(mData.asContent[sKey]);
                }
            }
        }
    }

    function setFlashMessage(sMessage){
        el = $(document.createElement('li'));
        el.addClass('content-flash-message');
        el.html(sMessage);
        el.appendTo('.content-flash-messages');
        $('#flashmessage-container').css('top', '-150px').animate({top: '+=150'}, 1500);
    }
}

var AjaxStatus = new AjaxStatusController();