//var window, jQuery, document;

(function ($) {
    'use strict';
    var commentScrollHandlerActivated = true;
    $.extend({
        xaxosScrollHandler: function () {
            var viewportWidth = jQuery(window).width(),
                viewportHeight = jQuery(window).height(),
                documentScrollTop = jQuery(document).scrollTop(),
                documentScrollLeft = jQuery(document).scrollLeft(),
                minTop = documentScrollTop,
                maxTop = documentScrollTop + viewportHeight,
                minLeft = documentScrollLeft,
                maxLeft = documentScrollLeft + viewportWidth,
                comments = $('#comments'),
                elementOffset = comments.offset();
            if ($('#commentform').length === 0) {
                if (comments.length > 0) {
                    if ((elementOffset.top > minTop && elementOffset.top < maxTop) && (elementOffset.left > minLeft && elementOffset.left < maxLeft) && (commentScrollHandlerActivated)) {
                        commentScrollHandlerActivated = false;
                        $('#comments:not(.expanded)').find('.toggle-comments.ajax-control').click();
                    }
                }
            }
        },
        xaxosControllerHandler: function (content) {
            var title,
                $target = content,
                $form = $target.find('form.ajax-validate'),
                $formAction = $form.attr('action'),
                commentMainLink = $('#comments .toggle-comments.ajax-control'),
                reloadDialog = function ($_content, $_url) {
                    $.ajax({
                        'url': $_url,
                        'dataType': 'html',
                        'type': 'GET',
                        'success': function (data) {
                            $_content.html(data);
                            $.xaxosControllerHandler($_content);
                        }
                    });
                };
            var _gaq = _gaq || [];
            // common handler
            $target.find('.ajax-link').click(function (e) {
                e.preventDefault();
                var $this = $(this);
                reloadDialog($this.closest('.ui-dialog-content'), $this.attr('href'));
            });
            $target.find('a.ajax-control').xaxosController();
            if ($form.length === 0) { if ($target.hasClass('ajax-validate')) { $form = $target; }}
            $form.xaxosValidate({
                success: function (responseText, statusText, jqXHR) {
                    var contentType = jqXHR.getResponseHeader('Content-Type');
                    if (contentType.indexOf('json') === -1) {
                        $form.html($(responseText).find('form.ajax-validate > *'));
                        $.xaxosControllerHandler($form.parent());
                    } else {
                        $.xaxosControllerAction(responseText);
                    }
                    _gaq.push(['_trackPageview', $formAction]);
                }
            });
            // dialog handler
            if (($target.hasClass('ui-dialog-content')) || ($target.closest('.ui-dialog-content').length > 0)) {
                title = $target.find('.title:first').remove().text();
                $target.closest('.ui-dialog').find('.ui-dialog-title').text(title);
            }
            // startpage:
            $target.find('a.sliderlink').click(function (e) {
                e.preventDefault();
                var url = $(this).closest('#main').find('.slider-content  a.call-to-action').attr('href');
                document.location.href = url;
            });
            // carousel
            $target.find('#slider-menu').xaxosCarousel({
                selectors: {
                    sliderHeaderImg: '.slider-image-container img',
                    sliderContent: '#slider .slider-content .slide'
                }
            });
            // profile
            $target.find('#profile-navigation li')
                .hover(
                    function () { $(this).addClass('hover'); },
                    function () { $(this).removeClass('hover'); }
                )
                .click(function (e) {
                    var $thisLiA = $(this).find('a');
                    if ($thisLiA.hasClass('ajax-control')) {
                        e.preventDefault();
                        $thisLiA.xaxosController('load');
                    } else {
                        window.location.href = $thisLiA.attr('href');
                    }
                    e.preventDefault();
                });
            // message to bubble
/*            var messages = $('.message');
            if (messages.length > 0) {
                say(messages);
                $('#bubble').remove();
                var newBubble = $('<div id="bubble" class="ajax-bubble"><div>hier</div></div>');
                var msg = messages.eq(0);
                newBubble.append(msg.children());
                newBubble.prependTo('#header');
                msg.remove();
            } else {
                $('#bubble.ajax-bubble').remove();
            }
*/
            // rating
            $target.find('.rating').xaxosRating();
            // comment links (alle nicht ajax-controlligen Links sollen den untersten Link aufrufen)
            $target.find('.toggle-comments:not(.ajax-control)').each(function () {
                $(this).click(function () {
                    commentMainLink.click();
                });
            });
        }
    });

    $.widget("ui.xaxosRating", {
        _create: function () {
            //say('create xaxosRating');
            var $this = this,
                $caption = this.element.find('.rating-caption'),
                $stars = this.element.find('.ui-stars-star');
            $stars
                .hover(
                    function () {
                        var $thisStar = $(this);
                        $caption.data('current', $caption.text());
                        $caption.text($thisStar.find('a').attr('title'));
                        $thisStar.addClass('ui-stars-star-hover');
                        $thisStar.prevAll().addClass('ui-stars-star-hover');
                    },
                    function () {
                        $stars.removeClass('ui-stars-star-hover');
                        $caption.text($caption.data('current'));
                    }
                )
                .each(function () {
                    var $link = $(this).find('a');
                    $link.data('ajax', { rating: $link.text() });
                });
        }
    });

    $(document).ready(function () {
        //say('control.init');
        $.xaxosControllerHandler($('body'));
        $(window).scroll(function () {
            $.xaxosScrollHandler();
        });
        var $loading = $('#loading');
        $('#profile-image').append($loading.clone().attr('id', 'profile-loading'));
        $('#loading, #profile-loading')
            .ajaxStart(function () {
                $(this).show();
            })
            .ajaxStop(function () {
                $(this).delay(600).hide();
            });
    });
}(jQuery));

