﻿
/**
 * Lib
 *
 * @copyright Copyright (c) 2009, inaction.lt
 * @author    Benas Valančius <benas@inaction.lt>
 * @package   Framework
 *
 * $Id: lib.js 205 2009-02-08 12:27:23Z noen $
 */

/**
 * Class
 */
var Ajax = {
    /**
     * Ajax request
     *
     * @param string url     - url
     * @param array  options - options
     */
    Post: function(options)
    {
        var url  = (options.url  === undefined ? location.href : options.url);
        var type = (options.type === undefined ? 'post'        : options.type);
        var data = (options.data === undefined ? null          : options.data);
        var json = (options.json === undefined || !options.json ? false : 'json');
        var lmsg = (options.loading === undefined ? true : options.loading);

        if(data === null)
            type = 'get';

        if(options.success === undefined)
        {
            var success = function()
            {
                loading.hide();
            };
        }
        else
        {
            var success = function(data)
            {
                options.success(data);
                loading.hide();
            };
        }
        var error = (options.error === undefined ? function(){loading.error();} : options.error);

        if(lmsg)
            loading.show();

        $.ajax({
            url      : url,
            type     : type,
            data     : data,
            dataType : json,
            success  : success,
            error    : error
        });
    }
};


/**
 * Loading message controls
 */
var loading = {
    obj   : false,
    count : 0,
    show : function()
    {
        loading.count++;

        if(loading.obj) return;

        loading.obj = document.createElement('div');
        loading.obj.innerHTML = _('loading_msg');
        loading.obj.id = 'ajaxLoading';
        document.body.appendChild( loading.obj );
    },
    hide: function()
    {
        if(loading.obj)
        {
            loading.count--;
            if(loading.count <= 0)
            {
                loading.obj.parentNode.removeChild( loading.obj );
                loading.obj = false;
            }
        }
    },
    error: function()
    {
        if(loading.obj)
        {
            loading.count--;
            $('#ajaxLoading').html('error:ajax');
        }
    }
};
