
/** @type {Object} неймспейс проекта */
USM = function() {

    var ajaxURI = '/json/';
    var ajaxCounter = 0;

    var sessionId = '';
    if (window.location.toString().match(/SESS_ID=(\d+)/))
        sessionId = RegExp.$1;

    var orderString = Cookies.get('order') || '';

    var $orderContent;

    return {
        initAjax : function() {
            var $body = $(document.body);
            function waitingState(state) {
                if (state) {
                    $body.addClass('waiting');
                } else {
                    $body.removeClass('waiting');
                }
            }

            $(document)
                .ajaxStart(function() {
                    ajaxCounter++;
                    waitingState(true);
                })
                .ajaxStop(function() {
                    ajaxCounter--;
                    if (ajaxCounter == 0) {
                        waitingState(false);
                    }
                })
                .ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
                    alert('Произошла ошибка при загрузки данных. Поробуйте перезагрузить страницу.');
                    ajaxCounter = 0;
                    waitingState(false);
                });
        },

        initOrderForm : function() {
            $orderContent = $('form textarea[name="order_content"]');
            if ($orderContent.length) {
                if (!$orderContent.val()) {
                    $orderContent.val(orderString);
                }

                $(window).unload(function() {
                    Cookies.set('order', $orderContent.val(), 0, '/');
                });

            }
        },


        /**
         * Выполняет Ajax запрос с JSON-ответом
         * @param {Object} data Данные
         * @param {Function} handler Обработчик
         */
        getJSON : function(data, handler) {
            if (sessionId)
                data['SESS_ID'] = sessionId;
            $.post(ajaxURI, data, handler, 'json');
        },

        addToOrder : function(string) {
            orderString += string + "\n";
            $orderContent.val(orderString);
        },

        fboxParams : {
            animation : true,
            showOverlay : true,
            overlayOpacity : .2,
            overlayClickClose : true,
            navigationButtons : true,
            useLoaderAnimation : true,
            loaderParams : {
                animationLength : 60,
                animationStep : 5
            },
            constraints : {
                minWidth : 300,
                minHeight : 300,
                maxWidth : 800,
                maxHeight : 800,
                offsetTop : 20,
                offsetLeft : 0
            }
        }
    };
}();

