﻿
/**
 * Lib
 *
 * @copyright Copyright (c) 2010, ecto.lt
 * @author    Benas Valančius <benas@ecto.lt>
 * @package   Framework
 *
 * $Id: lib.js 382 2010-02-21 20:45:36Z 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);
        var async = (options.async   === undefined ? true           : options.async);
        var async = false;

        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,
            async    : async,
            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...');
        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');
        }
    }
};