﻿/// <reference path="/Scripts/jquery-1.4.1-vsdoc.js"/>
/// <reference path="/Scripts/Aumio.js"/>
/// <reference path="/Views/Shared/Aumio.Master"/>

Aumio.Index = function () {
    // fields.
    var _DEFAULT_COUNT = 5;
    var _PROGRESS = '<div class=progress></div>';
    var _status = 0; // 0 locked, 1 unlocked
    var _page = 1;
    var _helpers = new Aumio.Helpers();
    var _countdown = new Aumio.Countdown();

    this.Initialize = function () {
        _countdown.Start();

        // bindings.
        $('#deal-locked').click(ShowLocked);
        $('#deal-unlocked').click(ShowUnlocked);
        $('#deal-more').live('click', ShowMore);
        $('#sidebar-login').live('click', LoginFromSidebar);
        $('.deal-login').live('click', LoginFromDeal);
        $('.deal-login').live('mouseover', ShowLogin);
        $('.deal-login').live('mouseout', ShowShare);
        $('.deal-recommend').live('click', Share);
        $('#sidebar-logout').live('click', Logout);
    };

    var RenderOffers = function (status, count, page, rerender, success) {
        $.get(['/Home/Index?status=', status, '&count=', count, '&page=', page].join(''), function (data) {
            var offers = $(data).html();
            count = $('.deal-content', data).length; // reuse count.

            // rerender?
            if (rerender == true) {
                $('#deal-wrapper').html(offers);
            } else {
                $('#deal-wrapper').append(offers);
            }

            // start countdown?
            if (status == 0) {
                _countdown.Start();
            } else {
                _countdown.Stop();
            }

            // show more?
            if (count > 0 && (count % _DEFAULT_COUNT) == 0) {
                $('#deal-more').show(0);
            } else {
                $('#deal-more').hide(0);
            }

            success();
        });
    };

    var ShowLocked = function () {
        if (_status == 1) {
            $(this).addClass('button-tab-selected');
            $('#deal-unlocked').removeClass('button-tab-selected');
            $('#deals-nipple').removeClass('nipple-unlocked').addClass('nipple-locked');

            // show progress.
            $('#deal-wrapper').hide(0).parent().append(_PROGRESS);
            $('#deal-more').hide(0);

            _status = 0;
            _page = 1;
            RenderOffers(_status, _DEFAULT_COUNT, _page, true, function () {
                // hide progress.
                $('#deal-wrapper').show(0).parent().find('.progress').remove();
            });
        }

        return false;
    };

    var ShowUnlocked = function () {
        if (_status == 0) {
            $('#deal-locked').removeClass('button-tab-selected');
            $(this).addClass('button-tab-selected');
            $('#deals-nipple').removeClass('nipple-locked').addClass('nipple-unlocked');

            // show progress.
            $('#deal-wrapper').hide(0).parent().append(_PROGRESS);
            $('#deal-more').hide(0);

            _status = 1;
            _page = 1;
            RenderOffers(_status, _DEFAULT_COUNT, _page, true, function () {
                // hide progress.
                $('#deal-wrapper').show(0).parent().find('.progress').remove();
            });
        }

        return false;
    };

    var ShowMore = function () {
        // show progress.
        $(this).hide(0).parent().append(_PROGRESS);

        _page++;
        RenderOffers(_status, _DEFAULT_COUNT, _page, false, function () {
            // hide progress.
            $('#deal-more').parent().find('.progress').remove();
        });

        return false;
    };

    var LoginFromSidebar = function () {
        if (!_facebook.Initialized) {
            _helpers.Notify('Aumio is loading -please wait for it to complete.');
            return false;
        }

        _facebook.Login(function () {
            // show progress.
            $('#sidebar-login').hide(0).parent().append(_PROGRESS);

            $.post('/Account/Login', function (response) {
                if (response.status == 'success') {
                    RenderOffers(_status, _page * _DEFAULT_COUNT, 1, true, function () {
                        $.get('/Home/Sidebar', function (data) {
                            $('#sidebar').replaceWith(data);
                        });
                    });
                } else {
                    // hide progress.
                    $('#sidebar-login').show(0).parent().find('.progress').remove();

                    if (response.data.errorCode == 300) {
                        _helpers.Notify('Oops! Facebook returned an error -please refresh your browser and try again.');

                    } else {
                        _helpers.Notify('Oops! We could not log you in -please try again.');
                    }
                }
            });
        });

        return false;
    };

    var LoginFromDeal = function () {
        if (!_facebook.Initialized) {
            _helpers.Notify('Aumio is loading -please wait for it to complete.');
            return false;
        }

        var current = this;

        _facebook.Login(function () {
            // show progress.
            $(current).hide(0).parent().append(_PROGRESS);

            $.post('/Account/Login', function (response) {
                if (response.status == 'success') {
                    $.get('/Home/Sidebar', function (data) {
                        $('#sidebar').replaceWith(data);

                        RenderOffers(_status, _page * _DEFAULT_COUNT, 1, true, function () {
                            _helpers.Notify('You are logged in! Please click again to share the deal.');
                        });
                    });
                } else {
                    // hide progress.
                    $(current).show(0).parent().find('.progress').remove();

                    if (response.data.errorCode == 300) {
                        _helpers.Notify('Oops! Facebook returned an error -please refresh your browser and try again.');

                    } else {
                        _helpers.Notify('Oops! We could not log you in -please try again.');
                    }
                }
            });
        });

        return false;
    };

    var ShowLogin = function () {
        $('span', this).html('Please login');
    };

    var ShowShare = function () {
        $('span', this).html('Share');
    };

    var Share = function () {
        var current = this;

        // show progress.
        $(current).hide(0).parent().append(_PROGRESS);

        $.post('/Deals/Share?offerID=' + $(current).attr('rel'), function (response) {
            if (response.status == 'success') {
                $.get('/Home/Sidebar', function (data) {
                    var now = $('#sidebar-badges li').length;
                    var then = $('#sidebar-badges li', data).length;
                    $('#sidebar').replaceWith(data);

                    $.get('/Deals/Small?offerID=' + $(current).attr('rel'), function (data) {
                        $(current).parents('.deal-content').replaceWith(data);
                        _countdown.Start();

                        // unlocked? notify.
                        var unlocked = $('.deal-controls', data).length == 0;
                        if (unlocked == true) {
                            _helpers.Notify('Congrats! You unlocked this deal -click on it to redeem.');
                        } else {
                            _helpers.Notify('Posted to your wall -now wait for others to share it and unlock it!');
                        }

                        // new badges? notify.
                        if (then > now) {
                            var message = (then - now == 1) ? 'You won a new badge!' : 'You won new badges!';
                            _helpers.Notify(message);
                        }
                    });
                });
            }
            else if (response.status == 'error') {
                // hide progress.
                $(current).show(0).parent().find('.progress').remove();

                if (response.data.errorCode == 203) {
                    _helpers.Notify('Oops! This deal is over.');

                } else if (response.data.errorCode == 204) {
                    _helpers.Notify('Oops! You already shared this deal.');

                } else if (response.data.errorCode == 206) {
                    $(current).parents('.deal-controls').hide(0);
                    _helpers.Notify('Congrats! This deal was unlocked -click on it to redeem.');

                } else if (response.data.errorCode == 300) {
                    _helpers.Notify('Oops! Facebook returned an error -please refresh your browser and try again.');

                } else {
                    _helpers.Notify('Oops! Something went wrong -please try again.');
                }
            }
            else {
                // hide progress.
                $(current).show(0).parent().find('.progress').remove();

                _helpers.Notify('Oops! Your session expired -please refresh your browser and login again.');
            }
        });

        return false;
    };

    var Logout = function () {
        if (!_facebook.Initialized) {
            _helpers.Notify('Aumio is loading -please wait for it to complete.');
            return false;
        }

        // show progress.
        $(this).hide(0).parent().append(_PROGRESS);

        _facebook.Logout(function () {
            $.post('/Account/Logout', function (response) {
                if (response.status == 'success' || response.status == 'unauthorized') {
                    RenderOffers(_status, _page * _DEFAULT_COUNT, 1, true, function () {
                        $.get('/Home/Sidebar', function (data) {
                            $('#sidebar').replaceWith(data);
                        });
                    });
                } else {
                    // show progress.
                    $('#sidebar-logout').show(0).parent().find('.progress').remove();

                    _helpers.Notify('Oops! We could not log you out -please try again.');
                }
            });
        });

        return false;
    };
};

