﻿/// <reference path="~/Scripts/jquery-1.5.js"/>

$(document).ready(function () {
    $.ajaxSetup({ cache: false });

    PhotoModule.bindHoverHandlers('#photo-content ul.photos li');
});

var PhotoModule = (function () {

    var addReaction = function (reaction) {
        $('#reactionTemplate').tmpl(reaction).appendTo('#photo-content .reactions');
        toggleReactionButton();
        clearReactionFields();
    };


    var loadSectionData = function (url, extraData, callback, preinsertCallback) {
        extraData = $.extend({}, extraData);

        $.get(url, extraData, function (html) {
            if ($.isFunction(preinsertCallback))
                preinsertCallback();

            $('#section').html(html);

            if ($.isFunction(callback))
                callback(html);
        });
    }

    var init = function () {
        $('#sideBar .group .ajaxLink').live('click', function (e) {
            e.preventDefault();

            loadPhotos.call(this, true);
        });

        $('#sideBar .group').live('click', function (e) {
            e.preventDefault();

            var link = $(this).find('.group-label a');
            if (link[0]) {
                document.location = link.attr('href');
            }
        });

        $('.load-more').live('click', function (e) {
            e.preventDefault();
            var url = this.href;

            $.ajax(url, {}).success(function (html) {
                var $html = $('<div></div>').append(html);

                var $target = $('.photos-wrapper:last');
                $html.find('.photos-wrapper').insertAfter($target);


                var elements = $('.photos li', $('.photos-wrapper:last'));
                bindHoverHandlers(elements);

                var loadMore = $html.find('.load-more');
                if (loadMore[0]) {
                    $('.load-more').attr('href', loadMore.attr('href'));
                } else {
                    $('.load-more').remove();
                }
            });
        });

        //Launch the overlay
        $('#photo-content .photo-enlargement a[rel=overlay]').live('click', function (e) {
            e.preventDefault();

            if ($.fn.photoStyle) {
                var rev = $(this).attr('rev');
                $('#photo-content ul.photos a').photoStyle();
                $('' + rev).trigger('click');
            }
        });

        $('#sideBar .times td').live('click', function (e) {
            $(this).toggleClass('selected');

            var times = new Array();
            var elements = $('#sideBar .times td.selected');
            for (var i = 0; i < elements.length; i++) {
                times.push(parseInt(elements[i].getAttribute('data-time')));
            }

            //loadPhotos(false);
        })

        $('#SelectedFormatId').live('change', function (e) {
            var $el = $(this);
            var data = {
                selectedFormatId: $el.val(),
                id: $el.attr('data-id')
            };
            $.ajax($el.attr('data-ajaxurl'), {
                data: data,
                type: 'post',
                dataType: 'json'
            }).success(function (json) {
                var options = '';
                for (var i = 0; i < json.length; i++) {
                    options += '<option value=\'' + json[i].Value + '\'>' + json[i].Text + '</option>';
                }
                $('#NumberOfPhotosToOrder').html(options);
            });
        });
    }

    var bindHoverHandlers = function (elements) {
        $(elements).hoverIntent(function () {
            var $this = $(this);
            var enlargement = $this.find('.photo-enlargement')

            //Fix for a known IE z-index issue, caused by an absolute positioned  child element
            if ($.browser.msie && $.browser.version <= 7) {
                $this.css('z-index', 20);
            }

            var width = $this.width();
            var height = $this.height();
            var pos = $this.offset();

            enlargement.hide().css({
                position: 'absolute',
                left: '0pt',
                top: '0pt',
                marginLeft: -(enlargement.width() - width) / 2
            }).fadeIn('fast');
        }, function () {
            if ($.browser.msie && $.browser.version <= 7) {
                $(this).css('z-index', 0);
            }

            $(this).find('.photo-enlargement').hide();
        });
        if ($.fn.photoStyle)
            $('.photo-enlargement a[rel=photostyle]').photoStyle();
    };


    var loadPhotos = function (clearHandlers) {
        var url = $(this).attr('href');
        var width = $('#photo-content').innerWidth();

        var data = { screenWidth: width };

        loadSectionData(url, data, function () {
            bindHoverHandlers('.photos li');
        }, function () {
            //Unbind HoverIntent handlers
            if (clearHandlers)
                $('.photos li').unbind();
        });
    }

    var loadPhoto = function () {
        var $el = $(this);
        var url = $el.attr('href');

        var img = $el.find('img');
        $.ajax(url, {
            cache: false,
            data: {
                width: img.width(),
                height: img.height()
            }
        }).success(function (html) {
        });
    }

    var toggleReactionButton = function () {
        var button = $('#photo-content #reaction input[type=submit]');
        if (button.attr('disabled')) {
            button.removeAttr('disabled');
        } else {
            button.attr('disabled', 'disabled');
        }
    };

    var clearReactionFields = function () {
        $('#photo-content #reaction input[type=text], #photo-content #reaction textarea').val('');
    };

    var showOverlay = function (element) {
    }

    //no need to wait for Document.Ready to init live handlers.
    init();

    return {
        addReaction: addReaction,
        bindHoverHandlers: bindHoverHandlers,
        toggleReactionButton: toggleReactionButton,
        clearReactionFields: clearReactionFields,
        showOverlay: showOverlay
    }
})();
