﻿
/// <reference path="TranceSoft.js" />
/// <reference path="../jquery-1.4.2-vsdoc.js" />

TranceSoft.BasketManager = function ()
{
    var module = {};

    var isAction = false;

    var settings =
    {
        hideDelay: 3000,
        selectors: {
            pager: '.pagination',
            total: '.summary',
            content: '.x-panel-inner .content',
            current: '.active',
            slider: '.x-panel-inner'
        },
        urls: {
            sumup: '/profile/basketactions/sumup',
            content: '/profile/basketslider/basketpage',
            slider: '/profile/basketslider/basketcontent'
        }
    };

    var timeout;

    function ApplySlider(html, status, jqXhr)
    {
        if (status == 'success' && html)
        {
            $(settings.selectors.slider).replaceWith(html);
            $(settings.selectors.pager + ' a').click(module.Page);
            if (!isAction)
            {
                ManagePanel();
                HidePanel();
            }
            isAction = false;
        }
    }

    function ApplyPage(html, status, jqXhr)
    {
        if (status == 'success')
        {
            $(settings.selectors.content).html(html);
        }
    }

    function ApplyTotal(data, status, jqXhr)
    {
        if (status == 'success' && data.Success)
        {
            $(settings.selectors.total).html(data.Sum);
            ManagePanel();
            HidePanel();
        }
    }

    function StopHide()
    {
        clearTimeout(timeout);
    }

    function HidePanel()
    {
        timeout = setTimeout(function ()
        {
            var $panel = $('#left-user-panel');
            var $el = $panel.find('.x-panel-container');

            if ($el.css('display') != 'none')
            {
                $panel.animate({ width: '32px' });
                $panel.unbind("mouseleave", HidePanel);
                $el.hide();
            }
        }, settings.hideDelay);
    };

    function ManagePanel()
    {
        var $panel = $('#left-user-panel');
        var $el = $panel.find('.x-panel-container');

        if ($el.css('display') == 'none')
        {
            $panel.animate({ width: '170px' });
            $el.show();
            $panel.bind("mouseleave", HidePanel);
        }
        else
        {
            if (!isAction)
            {
                $panel.animate({ width: '32px' });
                $panel.unbind("mouseleave", HidePanel);
                $el.hide();
            }
        }
    }

    function Refresh()
    {
        $.get(settings.urls.slider + '?ticks=' + new Date().getTime(), {}, ApplySlider);
    };

    function Init()
    {/**
         * init panels
         */
        $('.x-panel').each(function ()
        {
            var $panel = $(this);

            var $panelName = $('.label', $panel);

            $panelName.html('<span>' + $panelName.text().split('').join('</span><span>') + '</span>');

            $panel.click(ManagePanel);
            $panel.mouseenter(StopHide);
        });
        $(settings.selectors.pager + ' a').click(module.Page);
        TranceSoft.Forms.AddCallback(Refresh);
    }

    $(document).ready(Init);

    module.Update = function ()
    {
        $.get(settings.urls.slider, {}, ApplySlider);
    };
    module.Freeze = function ()
    {
        isAction = true;
    }
    module.Page = function (e)
    {
        var $item = $(e.target);
        var classs = settings.selectors.current.substr(1);
        if (!$item.hasClass(classs))
        {
            $item.siblings().each(function () { $(this).removeClass(classs); });
            $item.addClass(classs);
            var number = e.target.rel;
            $.get(settings.urls.content, { number: number }, ApplyPage);
        }
        return false;
    };
    module.Refresh = function () { Refresh(); };
    return module;
} ();

TranceSoft.BasketManager.BeforeQuantityUpdate = function (context, trigger)
{
    var val = $(trigger).siblings('input').val();
    var url = context.get_request().get_url();

    context.get_request().set_url(url + "&quantity=" + val);
}

TranceSoft.Orders = function ()
{
    var panels = {};
    var isAction = false;

    var settings =
    {
        selectors: {
            total: '#form-paycheck-total',
            buttonConfirm: '#link-confirm',
            checkboxTA: '.terms-and-conditions',
            confirmHeader: '.order-sumup',
            checkboxInvoice: '.invoice',
            areaNote: '.note'
        },
        urls: {
            sumup: '/profile/basketactions/sumupcurrent',
            complete: '/profile/basketactions/completness',
            terms: '/profile/basketactions/updatetermsandconditions',
            invoice: '/profile/basketactions/updateinvoiceclaim',
            note: '/profile/basketactions/updatenote'
        }
    };

    var completnessModule = function ()
    {
        var settings =
        {
            selectors: {
                container: '#order_completion',
                overlay: '#overlay_order',
                accept: '.row-accept'
            },
            urls: {
                completion: '/profile/basketactions/ordercompletion'
            }
        };

        function update(content)
        {
            if (content.Success)
            {
                $(settings.selectors.container + ' .order-status-text').text(content.Info.Completness + '%');
                var $graph = $(settings.selectors.container + ' .order-status-graph');
                var width = (150 * content.Info.Completness / 100);
                $graph.animate({ width: width });
                if (content.Info.Completness == 100)
                {
                    $graph.addClass('order-status-ok');
                }
                else
                {
                    $graph.removeClass('order-status-ok');
                }
                $(settings.selectors.container + ' li').each(function (index, elem)
                {
                    var step = content.Info.Steps[index];
                    if (step.Completed)
                    {
                        $(elem).addClass('order-step-ok').attr('title', '');
                    }
                    else
                    {
                        $(elem).removeClass('order-step-ok').attr('title', step.Description);
                    }
                });
                var $overlaylist = $(settings.selectors.overlay + ' ul').empty();
                for (i in content.Info.Steps)
                {
                    var step = content.Info.Steps[i];
                    if (step.Key == "profile")
                    {
                        if (step.Completed)
                        {
                            $(settings.selectors.accept).slideDown(500);
                        }
                        else { $(settings.selectors.accept).slideUp(500); }
                    }
                    if (!step.Completed)
                    {
                        $overlaylist.append($('<li>').html('<b>' + step.Name + '</b> - ' + step.Description));
                    }
                }
            }
        }

        function refresh()
        {
            $.get(settings.urls.completion + '?ticks=' + new Date().getTime(), {}, update);
        }

        function init()
        {
            TranceSoft.Forms.AddCallback(refresh);
            refresh();
        }

        $(document).ready(init);
        var innerMod = {};
        innerMod.refresh = function () { refresh(); }
        return innerMod;
    } ();

    function OnUpdate(content, context)
    {
        $(settings.selectors.total).text(content.Sum);
    }

    function OnCompleteChecked(content, context)
    {
        if (content.Success)
        {
            if (content.Complete)
            {
                var confButton = $(settings.selectors.buttonConfirm).removeClass('inactive').addClass('important');
                if (content.Url)
                {
                    confButton.attr('href', '' + content.Url);
                }
                confButton.attr('onclick', '');
                $(settings.selectors.confirmHeader).removeClass('orange-header').addClass('green-header');
            }
            else
            {
                var confButton = $(settings.selectors.buttonConfirm).addClass('inactive').removeClass('important');
                if (confButton)
                {
                    confButton.attr('href', '#');
                    confButton.attr('onclick', 'return false;');
                }
                $(settings.selectors.confirmHeader).removeClass('green-header').addClass('orange-header');
            }
            completnessModule.refresh();
        }
    }

    function OnRefresh()
    {
        $.get(settings.urls.sumup + '?ticks=' + new Date().getTime(), {}, OnUpdate);
        $.get(settings.urls.complete + '?ticks=' + new Date().getTime(), {}, OnCompleteChecked);
    }

    function Init()
    {
        TranceSoft.Forms.AddCallback(OnRefresh);
        $(settings.selectors.checkboxTA).live('click', function () { $.get(settings.urls.terms + "/?status=" + this.checked + '&ticks=' + new Date().getTime(), {}, OnCompleteChecked); });
        $(settings.selectors.checkboxInvoice).click(function () { $.get(settings.urls.invoice + "/?status=" + this.checked + '&ticks=' + new Date().getTime(), {}, OnCompleteChecked); });
        $(settings.selectors.areaNote).live('blur', function ()
        {
            $.post(settings.urls.note + "/?ticks=" + new Date().getTime(), { note: '' + this.value }, OnCompleteChecked);
        });
        $(settings.selectors.buttonConfirm + '.important').live('click', function (e)
        {
            $(e.target).hide();
            TranceSoft.Utils.AjaxMask.force();
        });
    }

    $(document).ready(Init);

    var module = {};
    TranceSoft.Orders.Instance = module;
    module.addPanel = function (panel) { panels[panel.id()] = panel; };
    module.panel = function (id) { return panels[id]; };
    return module;
};
