function WelcomeMap(options) {
    this.options = options;
    this.current_page = 1;
}
WelcomeMap.prototype = {
    init: function() {
        this.get_next_page();
        this.get_prev_page();
        this.show_add_image_popup();
        this.show_browse_image_popup();
        this.remove_photo();
        this.scroll_fixed_map();
    },
    get_next_page: function() {
        var _this = this;

        $('a.next').click(function(e) {
            e.preventDefault();
            $current_page = $('ul.slider-images .current');
            $next_page = $current_page.next();

            if ($next_page.length == 1) {
                $current_page.removeClass('current').hide();
                $next_page.addClass('current').show();

                var current_page_number = $current_page.data('page');
                var next_page_number = $next_page.data('page');

                $('section.form .page-' + current_page_number).hide();
                $('section.form .page-' + next_page_number).show();

                _this.current_page++;
                _this.update_paginator();

                if ($next_page.hasClass('last')) {
                    $('a.next').css('visibility', 'hidden');
                } else {
                    $('a.prev').css('visibility', 'visible');
                }
            }
        });
    },
    get_prev_page: function() {
        var _this = this;

        $('a.prev').click(function(e) {
            e.preventDefault();
            $current_page = $('ul.slider-images .current');
            $prev_page = $current_page.prev();

            if ($prev_page.length == 1) {
                $current_page.removeClass('current').hide();
                $prev_page.addClass('current').show();

                var current_page_number = $current_page.data('page');
                var prev_page_number = $prev_page.data('page');

                $('section.form .page-' + current_page_number).hide();
                $('section.form .page-' + prev_page_number).show();

                _this.current_page--;
                _this.update_paginator();

                if ($prev_page.hasClass('first')) {
                    $('a.prev').css('visibility', 'hidden');
                } else {
                    $('a.next').css('visibility', 'visible');
                }
            }
        });
    },
    update_paginator: function() {
        $('.controls span.current-page').text(this.current_page);
    },
    show_add_image_popup: function() {
        var _this = this;
        $('.formRight.photo').delegate('a.add-button', 'click', function(e) {
            e.preventDefault();
            $(this).closest('div.photo').addClass('in-progress');

            window.open(
                _this.options.add_photos_url,
                'Add Photos',
                'status=0'
            );
        });
    },
    show_browse_image_popup: function() {
        var _this = this;
        $('.formRight.photo').delegate('a.browse-button', 'click', function(e) {
            e.preventDefault();
            $(this).closest('div.photo').addClass('in-progress');

            window.open(
                _this.options.browse_photos_url,
                'Browse Photos',
                'status=0'
            );
        });
    },
    select_photo: function() {
        var _this = this;
        $('.field.select a').live('click', function(e) {
            e.preventDefault();
            var photo_id = $(this).data('id');
            window.close();
            window.opener.welcome_map.set_photo(photo_id);
        });
    },
    set_photo: function(photo_id) {
        $.get(this.options.get_thumb_url, {'photo_id': photo_id}, function(response) {
            if (response.status == 'success') {
                $field_wrapper = $('div.photo.in-progress');
                $('input[type="hidden"]', $field_wrapper).val(photo_id);
                $('img', $field_wrapper).remove();
                $('<img src="' + response.url + '">').insertAfter($('input[type="hidden"]', $field_wrapper));
                $('<a class="photo-remove" href="#">Remove Photo</a>').insertAfter($('img', $field_wrapper));
                $field_wrapper.removeClass('in-progress');
            }
        });
    },
    remove_photo: function() {
        $('.formRight.photo').delegate('a.photo-remove', 'click', function(e) {
            e.preventDefault();
            $field_wrapper = $(this).closest('div.formRight.photo');
            $('input[type="hidden"]', $field_wrapper).val('');
            $('img', $field_wrapper).remove();
            $('a.photo-remove', $field_wrapper).remove();
        });
    },
    scroll_fixed_map: function() {
        var sidebarOffsetTop = $('section.slider').offset().top;
        var sidebarHeight = $('section.slider').height();

        $(window).scroll(function(){

            var y = $(window).scrollTop();
            var pageHeight = $(window).height();
            var windowBelow = (sidebarHeight + sidebarOffsetTop + y) - ($('#container').offset().top + $('#container').height() + 120);
            if (windowBelow < 0) windowBelow = 0;

            if (y > sidebarOffsetTop) {
                $('section.slider').removeClass('absolute').addClass('fixed');
            } else {
                $('section.slider').removeClass('fixed').addClass('absolute');
            }
        });
    }
};

function Favorites(options) {
    this.options = options;
}
Favorites.prototype = {
    init: function() {
        this.toggle_favorites();
    },
    toggle_favorites: function() {
        // Required data:
        //    data-classname=""
        //    data-object_id=""

        var _this = this;
        $('.add-to-favorite').live('click', function(e) {
            e.preventDefault();
            var $favorite_button = $(this);
            var content_type_id = $(this).data('content_type_id');
            var object_id = $(this).data('object_id');
            var url = _this.options.toggle_favorite_url;

            if (content_type_id && object_id) {
                data = {
                    'content_type_id': content_type_id,
                    'object_id': object_id,
                    csrfmiddlewaretoken: _this.options.csrf_token
                };
                $.post(url, data, function(response) {
                    if (response === 'success') {
                        if ($favorite_button.hasClass('added')) {
                            $favorite_button
                                .text('ADD TO FAVORITES')
                                .removeClass('added');

                        } else {
                            $favorite_button
                                .text('REMOVE FROM FAVORITES')
                                .addClass('added');
                        }
                    } else {
                        console.log('Error');
                    }
                });
            }
        });
    }
};

