﻿/// <reference path="TranceSoft.js" />
/// <reference path="../jquery-1.4.2-vsdoc.js" />
/// <reference path="../jquery.cross-slide.js" />

TranceSoft.Utils = function ()
{
    settings =
    {
        AnimationLast: 500,
        CssClassActive: 'active',
        CssClassTab: 'tab-normal',
        CssClassTabActive: 'tab-orange'
    };

    return {
        Version: "1.0 Beta 1",
        ContentFadeOut: function (context)
        {
            $(context.get_updateTarget()).hide(); // (settings.AnimationLast);
        },
        ContentFadeIn: function (context)
        {
            $(context.get_updateTarget()).fadeIn(settings.AnimationLast);
        },
        TabSetActive: function (e)
        {
            $target = $(e.target);
            if ($target.hasClass(settings.CssClassTab))
            {
                $target.siblings().removeClass(settings.CssClassTabActive);
                $target.addClass(settings.CssClassTabActive);
            }
        }
    }
} ();
TranceSoft.Utils.CollapsiblePanel = function (userContext)
{
    var context = userContext;

    var texts =
    {
        Show: userContext.textShow || "Pokaż",
        Hide: userContext.textHide || "Ukryj"
    };

    var selectorCommand = userContext.selectorCommand || ('#' + userContext.Id + ' .command');
    var selectorContent = userContext.selectorContent || ('#' + userContext.Id + ' .content');

    function ActionCollapse(e, context)
    {
        $(selectorContent).slideUp(500);
        $(selectorCommand).text(texts.Show);
    }

    function ActionExpand(e, context)
    {
        $(selectorContent).slideDown(500);
        $(selectorCommand).text(texts.Hide);
    }

    function Init()
    {
        $(selectorCommand).toggle(ActionCollapse, ActionExpand);
    }

    $(document).ready(Init);

    var mod = {};
    mod.toggle = function ()
    {
        $(document).ready(function () { $(selectorCommand).click(); });
    };
    mod.show = function ()
    {
        ActionExpand();
    };
    mod.hide = function ()
    {
        ActionCollapse();
    };
    mod.id = function () { return context.Id; }
    return mod;
};
TranceSoft.Utils.Tabs = function (userContext)
{
    var module = {};
    var context = userContext;
    var selector = '#' + userContext.ContainerId + ' ';

    function Init()
    {
        $(selector + context.SelectorTabs).tabs(selector + context.SelectorContent,
        {
            effect: userContext.Effect,
            fadeInSpeed: 500,
            fadeOutSpeed: 0,
            current: userContext.CssActiveTab
        });
    }

    $(window).load(Init);

    module.ForceInit = function() { Init(); };
    return module;
};
TranceSoft.Utils.HeaderAnimationItem = function ()
{
    var src = '';
    var alt = '';
    var from = '';
    var to = '';
    var time = 0;
    return this;
};
TranceSoft.Utils.HeaderAnimation = function (userContext)
{
    var settings = userContext;

    function OnTransition(idx, img, idxOut, imgOut)
    {
        var elem = settings.items[idx];
        if (idxOut == undefined)
        {
            // starting single image phase, put up caption
            $('#' + settings.holderId + ' .intro').text(elem.Caption).fadeIn();
            $('#' + settings.holderId + ' .slogan').text(elem.Hint).fadeIn();
            $('#' + settings.elemId).attr('href', elem.url);
            $('#' + settings.linkId).attr('href', elem.url);
        }
        else
        {
            // starting cross-fade phase, take out caption
            $('#' + settings.holderId + ' .intro').fadeOut(function () { $('#' + settings.holderId + ' .intro').text(''); })
            $('#' + settings.holderId + ' .slogan').fadeOut(function () { $('#' + settings.holderId + ' .slogan').text(''); })
        }
    };

    function Init()
    {
        $('#' + settings.elemId).
            crossSlide(
            {
                sleep: settings.timeSleep,
                fade: settings.timeFade
            },
            settings.items,
             OnTransition);
    };

    $(window).load(Init);

    var module = {};
    return module;
};
TranceSoft.Utils.DisplayOnOver = function (userContext)
{
    var context = userContext;
    //{ electorSource: '#tab-equipment li',  SelectorTarget: 'div.photo' }

    function OnLoad()
    {
        $newImage = $(this);
        $newImage.hide();
        var $old = $(context.selectorTarget);
        $old.fadeOut(500).replaceWith($newImage);
        $newImage.fadeIn(500);
    }

    function Show(e)
    {
        var $item = $(e.target);
        url = $item.attr('rel');

        $item.addClass('bolder pointed').siblings().removeClass('bolder pointed');

        var img = new Image();
        img.onload = OnLoad;
        img.src = url;
    }


    function Init()
    {
        $(context.selectorSource).bind('mouseover', Show);
    }

    $(window).load(Init)

    return {};
};
TranceSoft.Utils.PostManager = function ()
{
    var manager = {};
    var settings = {};
    var initDone = false;
    var posts = {};

    PostProcessor = function ($)
    {
        ///<summary>Contains common and widely used methods.</summary>
        function CreatePost(path, params, target)
        {
            ///<summary>Form object ready to be attached to document and post.</summary>
            ///<param name="path" type="String" />
            ///<param name="params" type="Array" />
            ///<returns type="Element" />
            var $form = $('<form></form>').attr('action', path).attr('method', 'POST');
            if (target)
            {
                $form.attr('target', target);
            }

            for (var key in params)
            {
                var $hidden = $('<input></input>').
                attr('type', 'hidden').
                attr('name', key).
                attr('value', params[key]);
                $form.append($hidden);
            }

            return $form;
        }

        function AttachFormAndPost(form)
        {
            ///<param name="form" type="jQuery" />
            $(document.body).append(form);
            form.submit();
        }

        return {
            MakePost: function (url, json)
            {
                ///<summary>Dynamically creates and submits a post.</summary>
                ///<param name="url" type="String">Uri address where post should be adrressed to.</param>
                ///<param name="json" type="Object">Object which will be translated to form values.</param>
                var post = CreatePost(url, json);
                AttachFormAndPost(post);
                return false;
            }
        }
    } (jQuery);

    function Process(e)
    {
        var postContext = posts[e.target.id];
        PostProcessor.MakePost(postContext.Url, postContext.Data, '');
        return false;
    };

    function Bind(id, postContext)
    {
        if (postContext.Timeout)
        {
            setTimeout(function ()
            {
                PostProcessor.MakePost(postContext.Url, postContext.Data, postContext.Target);
            }, postContext.Timeout);
        }
        $('#' + id).click(Process);
    }

    function Init()
    {
        initDone = true;
        for (i in posts)
        {
            var postContext = posts[i];
            Bind(i, postContext);
        }
    }

    $(document).ready(Init);

    manager.Hit = function (e) { Process(e); return false; }
    manager.Register = function (id, userContext)
    {
        posts[id] = userContext;
        if (initDone)
        {
            Bind(id, userContext);
        }
    }
    return manager;
} ();
TranceSoft.Utils.FeaturedList = function (userContext)
{
    var module = {};
    var items = {};
    var current;

    var settings = userContext;
    if (!settings)
    {
        settings =
        {
            fadeDelay: 500,
            selectors: {
                image: '.pagination'
            }
        };
    }

    function Init()
    {
        $(".homepage-banner-padding").scrollable({
            vertical: true, circular: true
        }).navigator(".navi").autoscroll({ interval: 6000, autoplay: true });
        $(".homepage-banner .navi li").first().addClass("active");
    }

    module.MenuRequest = function (name)
    {
        var result = false;
        if (name = current) { result = true; }
        else
        {
            current = name;
            var product = items[name];
            $('#' + settings.selectors.image).src = product.imageUrl;
        }
        return result;
    }

    module.Add = function (name, product)
    {
        items[name] = product;
    }

    $(document).ready(Init);
    return module;
}
TranceSoft.Utils.StockState = function ()
{
    var module = {};
    var settings =
    {
        minWidth: 15,
        maxWidth: 150,
        full: 30,
        state: -1,
        selectors: {
            indicator: '.product-status-graph'
        },
        urls: {
            updater: 'profile/basketactions/productstate'
        }
    };

    function Calculate(state)
    {
        var step = (settings.maxWidth - settings.minWidth) / settings.full;
        var addWidth = Math.ceil(15 + state * step);
        return Math.min(addWidth, 150);
    }

    function Set()
    {
        var $indicator = $(settings.selectors.indicator);
        var stockState = settings.state > -1 ?
            settings.state : parseInt($indicator.children('div').html(), 10);
        var newWidth = Calculate(stockState);
        $indicator.animate({ 'width': newWidth }, 1000);
        TranceSoft.Forms.AddCallback(Update);
    }

    function Update(content, context)
    {

    }

    module.SetState = function (state)
    {
        ///<summary>Sets number of items which are available for sell.</summary>
        ///<param name="state" type="Number" >Product count</param>
        settings.state = state;
    }

    $(window).load(Set);
    return module;
} ();
TranceSoft.Utils.AjaxMask = function ()
{
    var config =
    {
        selectors: { mask: '.mask', loader: '.loader' }
    };

    var $mask, $loader;

    function start()
    {
        console.log('start');
        $mask = $('.mask');
        if ($mask.length == 0)
        {
            $mask = $('<div>').addClass('mask').appendTo('body');
        }

        $loader = $('.loader');
        if ($loader.length == 0)
        {
            $loader = $('<div>').addClass('loader').appendTo('body');
        }

        $mask.width($(window).width());
        $mask.height($(document).height());

        $mask.fadeTo(300, 0.6, function () { $loader.show(); });
    }

    function finish()
    {
        console.log('finish');
        $loader.hide();
        $mask.stop().fadeOut(200);
    }

    function init()
    {
        Sys.Net.WebRequestManager.add_invokingRequest(start);
        Sys.Net.WebRequestManager.add_completedRequest(finish);
    }

    $(document).ready(init);
    var module = {};
    module.force = function () { start(); }
    return module;
} ();
