// zooloo framework
function ZoolooFramework() {
    this.zfBlockUI = function(blockMsg) {
        var options = {
            css:{padding:0,margin:0,border:0,backgroundColor:'transparent',cursor:'wait',fontSize:'40px',color:'#00abff',fontWeight:'bold'},
            overlayCSS:{backgroundColor:'#00abff',opacity:'0.1'},
            baseZ:10000,
            applyPlatformOpacityRules: false
        };
        if(blockMsg) { options.message = blockMsg; }
        else blockMsg = '<img src="/images/processing.png" />';
        $.blockUI(options);
    };
    this.tooltip = function(selector,additionalOptions) {
        (additionalOptions instanceof Object) ? $(selector).tooltip(additionalOptions) : $(selector).tooltip();
    };
    this.zfUnblockUI = function() { $.unblockUI(); };
    this.zfAjaxPost = function(postUrl, postData, preventInteractions, postSuccessCallback, postErrorCallback, additionalOptions) {
        preventInteractions = (preventInteractions===true) ? true : false;

        if(!(postSuccessCallback instanceof Function)) {
            postSuccessCallback = function(response) {
                try {
                    if(response.status!=1) {
                        var errMsg = response.error;
                        if(errMsg) { alert(errMsg); }
                    }
                }
                catch(err) {}
            };
        }
        if(!(postErrorCallback instanceof Function)) { postErrorCallback = function() {}; }
        
        ajaxOptions = {
            type:'POST',
            url:postUrl,
            data:postData,
            timeout:30000,
            beforeSend:function() { if(preventInteractions) { ZFramework.zfBlockUI('<img src="/images/processing.png" />'); } },
            complete:function() { if(preventInteractions) { ZFramework.zfUnblockUI(); } },
            success:function(response) {
                try {
                    if(preventInteractions) { ZFramework.zfUnblockUI(); }
                    response = JSON.parse(response);
                    if(!(response instanceof Object)) { throw('JSON.parse'); }
                    if(!response.data) { response.data = {}; }
                    if(postSuccessCallback instanceof Function) { postSuccessCallback(response); }
                }
                catch(err) {
                    if(preventInteractions) alert('Sorry, an error has occurred, please try again',null,function(){ if(err.message!='JSON.parse') window.location.reload(); });
                }
            },
            error:function() {
                if(preventInteractions) { ZFramework.zfUnblockUI(); }
                if(postErrorCallback instanceof Function) { postErrorCallback(); }
            }
        };

        if(additionalOptions instanceof Object) {
            for(var i in additionalOptions) {
                if(additionalOptions[i]) { ajaxOptions[i] = additionalOptions[i]; }
            }
        }

        $.ajax(ajaxOptions);
    };
}

var ZFramework = new ZoolooFramework();