$.fn.reverse = [].reverse;


$(function() {
    $.extend($.fn.disableTextSelect = function() {
        return this.each(function() {
            if($.browser.mozilla){ // Firefox
                $(this).css('MozUserSelect','none');
            } else if($.browser.msie) { // IE
                $(this).bind('selectstart',function() { return false; });
            } else { // Opera, etc.
                $(this).mousedown(function(){ return false; });
            }
        });
    });
});

function accepts_cookies() {
    document.cookie = "__verify=1";
    var accepts = document.cookie.length > 1 &&
                  document.cookie.indexOf("__verify=1") > -1;
    var past = new Date(1976, 8, 16);
    document.cookie = "__verify=1;expires=" + past.toUTCString();
    return accepts;
}


(function($) {
    $.fn.extend({
        modalPanel: function() {
            // Create overlay object
            //var overlay = $("<div id='first-visit'></div>");
            var overlay = $("#first-visit");
            return this.each(function() {
                // Listen for clicks on objects passed to the plugin
                $(this).click(function(e) {
                    /*// Append the overlay to the document body
                    $("body").append(overlay.click(function() {
                        modalHide();
                    }));*/
                    $("#first-visit-button img").click(function() {
                        modalHide();
                    });
                    // Set the css and fade in our overlay
                    //overlay.css("opacity", 0.8);
                    overlay.fadeIn(150);
                    // Prevent the anchor link from loading
                    e.preventDefault();
                    // Activate a listener
                    $(document).keydown(handleEscape);
                });
            });

            // Function for hiding the modalbox
            function modalHide() {
                $(document).unbind("keydown", handleEscape)
                var remove = function() {
                    $(this).remove();
                }
                overlay.fadeOut(remove);
                // Resume the main teaser slide
                $('ul#main-teasers').cycle('resume');
            }

            /*$("#first-visit-button img").unbind().click(function() {
                modalHide();
                return false;
            });*/

            // Function that listens for escape key.
            function handleEscape(e) {
                if (e.keyCode == 27) {
                    modalHide();
                }
            }
        }
    });
})(jQuery);


$(document).ready(function() {
    // -----------------------------------------------------------------------
    //  Overall
    // -----------------------------------------------------------------------

    // Apply tabs on videos sets
    $('div.video-set').tabs();

    // Apply infinite carousel on image sets
    if($('#image-set #viewport ul li').length > 3) {
        $('#image-set #viewport').carousel(
            '#image-set-control-prev',
            '#image-set-control-next'
        );
    }

    /*
    // Apply fancybox on images
    $('a.fancybox-image').fancybox({
        'hideOnContentClick': false
    });
    */

    // Apply colorbox on images
    $("a[rel='image-set-link']").colorbox({
        // transition: 'none',
        //current: '{current} / {total}',
        current: '',
        scalePhotos: false,
        initialWidth: 750,
        initialHeight: 500
    });

    // Render filter with selectmenu plugin, submit form on change
    $('#filter select').selectmenu({
        'style': 'dropdown',
        'change': function(e, ui) {
            if(parseInt(ui.value) > 0) {
                $('#filter form').submit();
            }
        }
    });

    $('#locale-switcher select').selectmenu({
        'style': 'dropdown',
        'change': function(e, ui) {
            if(parseInt(ui.value) > 0) {
                $('#filter form').submit();
            }
        }
    });

    // Disable text selection
    $('.no-select').disableTextSelect();

    // Dropdown Menu
    function dropdownHoverOn() {
        $(this).children('ul.level-2').show();
    }
    function dropdownHoverOff() {
        $(this).children('ul.level-2').hide();
    }
    var dropdownConfig = {
        over: dropdownHoverOn,
        out: dropdownHoverOff,
        timeout: 300 // number = milliseconds delay before onMouseOut
    };
    $('#nav-main-container ul.level-1 li').hoverIntent(dropdownConfig);

    // -----------------------------------------------------------------------
    //  Pages
    // -----------------------------------------------------------------------

    if($('body#page-index').length) {

        /*if(!$('#myCanvas').tagcanvas({
            textColour : '#ffffff',
            outlineThickness : 1,
            maxSpeed : 0.03,
            depth : 0.75
        })) {
            // TagCanvas failed to load
            $('#myCanvasContainer').hide();
        }*/

        // --- Main teaser ---

        // Apply infinite carousel on main teaser
        $('a.main-teaser-control').show(); /* disabled in css */
        $('ul#main-teasers').cycle({
            fx: 'fade',
            speed: 750,
            timeout: 6000,
            next: '#main-teaser-next',
            prev: '#main-teaser-prev',
            before: function() {
                $('.main-teaser-desc').css('left', main_teaser_desc_offset_horiz);
            }
        });
        $('ul#main-teasers').hover(function() {
            $('ul#main-teasers').cycle('pause');
            //$('#main-teaser-pause').stop().show().fadeOut(2000);
        }, function() {
            $('ul#main-teasers').cycle('resume');
            //$('#main-teaser-pause').hide();
        });

        /* Slide in main teaser description overlay */
        var main_teaser_desc_offset_horiz = -($('.main-teaser-desc').innerWidth() + $('.main-teaser-control').innerWidth());
        //var main_teaser_desc_offset_horiz = -$('.main-teaser-desc').innerWidth();
        $('.main-teaser-desc').css('left', main_teaser_desc_offset_horiz);

        //$('.main-teaser-desc').hide();

        // From Top
        /*
        var main_teaser_desc_offset_vert = -$('.main-teaser-desc').innerHeight();
        $('.main-teaser-desc').css('top', main_teaser_desc_offset_vert);
        */

        /*
        $('#main-teasers-container').hover(function() {
            $('.main-teaser-desc', this).stop().animate({
                left: '0px' }, 100
            );
            //$('.main-teaser-desc', this).stop().fadeIn();
            //$('.main-teaser-desc').show();
        }, function() {
            $('.main-teaser-desc', this).stop().animate({
                left: main_teaser_desc_offset_horiz }, 100
            );
            //$('.main-teaser-desc', this).stop().fadeOut();
            //$('.main-teaser-desc').hide();
        });
        */

        /* Less jumpy variant. Overlay fades out only when a control is
           clicked. */
        $('#main-teasers-container').mouseover(function() {
            $('.main-teaser-desc', this).stop().animate({
                left: '0px' }, 100
            );
        });
        $('a.main-teaser-control').click(function() {
            $('.main-teaser-desc').stop().animate({
                left: main_teaser_desc_offset_horiz }, 100
            );
        });

        /*
        var slideInMainTeaserHandler = function() {
            $('.main-teaser-desc').stop().animate({
                left: '0px' }, 100
            );
        }
        $('#main-teasers-container').bind('mouseover', slideInMainTeaserHandler);
        $('#main-teasers-container').mouseout(function() {
            $('#main-teasers-container').bind('mouseover', slideInMainTeaserHandler);
        });

        $('.main-teaser-desc').click(function() {
            $('#main-teasers-container').unbind('mouseover', slideInMainTeaserHandler);
            $('.main-teaser-desc').hide();
            return false;
        });
        */

        /*
        var main_teaser_desc_offset_horiz = -$('.main-teaser-desc').innerWidth();
        var main_teaser_desc_offset_vert = -$('.main-teaser-desc').innerHeight();

        // Guess from where the mouse is moved in (top or bottom)
        function mouse_moved_from(elem, e) {
            if($(elem).innerHeight() - e.pageY > 0) {
                return 'top';
            }
            return 'bottom';
        }

        // Position main teaser description outside the viewport
        function initMainTeaserDescPosition() {
            $('.main-teaser-desc').css('left', main_teaser_desc_offset_horiz);
            $('.main-teaser-desc').css('bottom', main_teaser_desc_offset_vert);
        }
        initMainTeaserDescPosition();

        $('#main-teasers-container').hover(function(e) {
            mouse_from = mouse_moved_from('#main-teasers-container', e);
            //initMainTeaserDescPosition();
            if(mouse_from == 'top') {
                //console.log('top in');
                $('.main-teaser-desc', this).stop().animate({ left: '0px', top: '0px' }, 100);

            } else {
                //console.log('bottom in');
                $('.main-teaser-desc', this).stop().animate({ left: '0px', bottom: '0px' }, 100);
            }
        }, function(e) {
            mouse_from = mouse_moved_from('#main-teasers-container', e);
            if(mouse_from == 'top') {
                //console.log('top out');
                $('.main-teaser-desc', this).stop().animate({ left: main_teaser_desc_offset_horiz, top: main_teaser_desc_offset_vert },
                100);
            } else {
                //console.log('bottom out');
                $('.main-teaser-desc', this).stop().animate({ left: main_teaser_desc_offset_horiz, bottom: main_teaser_desc_offset_vert }, 100);
            }
        });
        */

        /*
        // React on direction mouse moved in
        var main_teaser_desc_offset_vert = -$('.main-teaser-desc').innerHeight();

        // Guess from where the mouse is moved in (top or bottom)
        function mouse_moved_from(elem, e) {
            if($(elem).innerHeight() - e.pageY > 0) {
                return 'top';
            }
            return 'bottom';
        }

        // Position main teaser description outside the viewport
        function initMainTeaserDescPosition() {
            $('.main-teaser-desc').css('bottom', main_teaser_desc_offset_vert);
        }
        initMainTeaserDescPosition();

        $('#main-teasers-container').hover(function(e) {
            mouse_from = mouse_moved_from('#main-teasers-container', e);
            initMainTeaserDescPosition();
            anim_opts = {};
            if(mouse_from == 'top') {
                //console.log('top in');
                anim_opts = { top: '0px' };
            } else {
                //console.log('bottom in');
                anim_opts ={ bottom: '0px' };
            }
            $('.main-teaser-desc', this).stop().animate(anim_opts, 100);
        }, function(e) {
            mouse_from = mouse_moved_from('#main-teasers-container', e);
            if(mouse_from == 'top') {
                //console.log('top out');
                anim_opts = { top: main_teaser_desc_offset_vert };
            } else {
                //console.log('bottom out');
                anim_opts = { bottom: main_teaser_desc_offset_vert };
            }
            $('.main-teaser-desc', this).stop().animate(anim_opts, 100);
        });
        */

        // --- News teaser ---

        // Apply infinite carousel on news teaser
        if($('#viewport ul li').length > 2) {
            $('#viewport').carousel(
                '#news-teaser-set-control-prev',
                '#news-teaser-set-control-next'
            );
        }

        // --- First Visit Popup ---

        if(accepts_cookies() && first_visit) {
            $.ajax({
                url: '/first_visit/',
                success: function(data) {
                    $('#first-visit-viewport').append(data);
                    if($('body#page-index #first-visit'.length)) {
                        $('body#page-index #stage').hide();
                        // Pause the main teaser slide
                        $('ul#main-teasers').cycle('pause');
                        $('body#page-index').modalPanel().click().unbind('click');
                        $('body#page-index #stage').show();
                    }
                }
            });
        }
    }

    if($('body#page-uber-uns').length) {
        //$('div.cj_image_flipbox_block').cjImageFlipBox({});

        /* Team image animation */
        /*
        $.ajax({
            url: '/agency/team_animations/',
            success: function(data) {
                //alert(data);
                $('#team-image-canvas').html(data);

            }
        });*/
        // Disable alt "tooltip" in IE
        if($.browser.msie) {
            $('div.team-member-images img').attr('alt', '');
        }

        var timers = {};
        //var first_img_srcs = {};
        var contact_imgs = {};
        var contact_imgs_reversed = {};

        function set_contact_img_src(img, src) {
            $(img).attr('src', src);
        }
        function get_contact_member_id(el) {
            return $(el).parent().parent().attr('id');
        }

        $('.team-member-ajax-indicator').ajaxStart(function(){
            $(this).show();
        });
        $('.team-member-ajax-indicator').ajaxStop(function(){
            $(this).hide();
        });

        $('div.team-member').each(function() {


            var username = $(this).attr('id').replace('team-member-', '');
            var $viewport = $(this).find('.team-member-images');
            $.ajax({
                url: '/agency/team_animation/' + username,
                success: function(data) {
                    $viewport.append(data);

                    // Remember the original image set by team member
                    $('div.team-member-images').each(function() {
                        var member_id = get_contact_member_id(this);
                        contact_imgs[member_id] = [];
                        $(this).find('img').each(function() {
                            contact_imgs[member_id].push($(this).attr('src'));
                        });
                        // ... and in reversed order
                        contact_imgs_reversed[member_id] = contact_imgs[member_id].reverse();
                    });

                    // Register mouseover/mouseout events.
                    $('div.team-member-images').hover(function() {
                        var member_id = get_contact_member_id(this);
                        clearTimeout(timers[member_id]);
                        var $contact_imgs = $(this).find('img');

                        // Iterate forward in the initial image set.
                        $contact_imgs.each(function(i) {
                            var $cur_img = $(this);
                            timers[member_id] = setTimeout(function() {
                                set_contact_img_src($contact_imgs[0], $cur_img.attr('src'));
                            }, 50*i);
                        });
                    }, function() {
                        var member_id = get_contact_member_id(this);
                        clearTimeout(timers[member_id]);
                        var $contact_imgs = $(this).find('img');

                        // Iterate backward in the initial image set and take the current
                        // position as starting point.
                        var current_img_src = $($contact_imgs[0]).attr('src');
                        var revert = false;
                        $.each(contact_imgs_reversed[member_id], function(i, v) {
                            if(v == current_img_src) {
                                revert = true;
                            }
                            if(revert) {
                                timers[member_id] = setTimeout(function() {
                                    set_contact_img_src($contact_imgs[0], v);
                                }, 50*i);
                            }
                        });
                    });

                    $('a#team-members-wake-up').click(function() {
                        $('div.team-member-images').each(function() {
                            var $contact_imgs = $(this).find('img');
                            var member_id = get_contact_member_id(this);
                            // Iterate forward in the initial image set.
                            $contact_imgs.each(function(i) {
                                var $cur_img = $(this);
                                timers[member_id] = setTimeout(function() {
                                    set_contact_img_src($contact_imgs[0], $cur_img.attr('src'));
                                }, 50*i);
                            });
                        });
                    });

                    /*
                    $('div.team-member-images img').click(function() {
                        $(this).hide('explode', { pieces: 32 }, 1000);
                    });
                    */
                }
            });
        });

    }

    if($('body#page-kontakt').length) {
        // Init Google Map
        if(GBrowserIsCompatible()) {
            var map = new GMap2(document.getElementById('google-map-canvas'));
            // Original Geocode for:
            // "Hanauer Landstraße 188, 60314 Frankfurt am Main, Germany"
            //var nmyLatLng = new GLatLng(50.1134650, 8.7180590)
            // Custom geocode for:
            // "Hanauer Landstraße 188, 60314 Frankfurt am Main, Germany"
            var nmyLatLng = new GLatLng(50.1142416424101, 8.722834065556526);
            map.setCenter(nmyLatLng, 13);
            map.addControl(new GLargeMapControl);
            // map.addControl(new GSmallZoomControl());
            map.addControl(new GOverviewMapControl());
            // Add Marker
            var bounds = map.getBounds();
            var marker = new GMarker(nmyLatLng);

            GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml("<div style='color:#333'><p><strong style='color:black;'>NewMedia Yuppies GmbH</strong><br />Kreativagentur für Neue Kommunikation</p><p>Hanauer Landstraße 188<br />60314 Frankfurt am Main</p><p><a href='http://maps.google.de/maps?f=d&source=s_d&saddr=&daddr=Hanauer+Landstra%C3%9Fe+188,+60314+Frankfurt+(New+Media+Yuppies+GmbH)&hl=de&geocode=&mra=ls&sll=50.1134650,8.7180590&sspn=0.020116,0.027552&ie=UTF8&z=15'>Route berechnen</a></p></div>");
            })
            map.addOverlay(marker);
        }

        $(window).unload(function() {
            GUnload();
        });
    }

    /*
    if($('body#page-event-info').length) {
        // Slide in video
        $('div#event-info-video object').css('margin-left', '-2000px');
        $('div#event-info-video object').animate({ marginLeft: '0px'}, 1000);
    }
    */

    if($('body#page-event-subscribe').length) {
        // Nest
        $('div#field_id_subscribe div ul li:eq(0)').after('<li></li>');
        $('div#field_id_subscribe div ul li:eq(1)').append($('div#field_id_assistance'));
        $('div#field_id_subscribe div ul li:eq(0)').after('<li></li>');
        $('div#field_id_subscribe div ul li:eq(1)').append($('div#field_id_time'));

        // Cosmetics
        $('div#field_id_assistance label.field').hide();
        $('div#field_id_time label.field').hide();
    }

    if($('body#page-contact-form').length) {
        //$('#avatar img').hide();
        $('form#contact-form select').selectmenu({
            style: 'dropdown'
        });
        /*
        $('form select').selectmenu({
            select: function() {
                $.ajax({
                    style: 'dropdown',
                    url: '/accounts/avatar/' + $(this).val()*//*,
                    success: function(data) {
                        //$('#avatar img').hide();
                        //$('#avatar img').attr('src', data);
                        console.log(data);
                        $('#id_message').css('background', '#1F212A');
                        $('#id_message').css('background', '#1F212A url('+data+') 100% 0 no-repeat');
                    },
                    error: function(data) {
                        // $('#avatar img').attr('src', '');
                        $('#id_message').css('background', '#1F212A');
                    }*/
                /*});
            }
        });*/
    }

    if($('body#page-partners').length) {
        var orig_img_scr = '';
        $('table#partner img').hover(function() {
            orig_img_scr = $(this).attr('src');
            $(this).attr('src', $(this).attr('src').replace('-grey', ''));
        }, function() {
            $(this).attr('src', orig_img_scr);
        });
    }

    /*
    if($('body#page-event-info').length) {
        // Panel Slider
        $.fn.imageSlide = function(options) {
            var images = this.find('img').get(),
                container = this,
                settings = $.extend({
                    speed: 400,
                    styles : [{},{},{}]
                }, options),
                animating = false;
            function slide(direction) {
                animating = true;
                var left = direction.toLowerCase() === 'left';

                $(images).each(function(i){
                    $(images[i]).animate(settings.styles[left ? (i == 0 ? 2 : i - 1) : (i == 2 ? 0 : i + 1)], settings.speed);
                });
                setTimeout(function(){
                    $(images[0]).css({zIndex: left ? 1 : 2});
                    $(images[1]).css({zIndex: 1});
                    $(images[2]).css({zIndex: left ? 2 : 1});
                }, settings.speed / 2);
                setTimeout(function(){
                    var old = images;
                    images = [];
                    images[0] = old[left ? 1 : 2];
                    images[1] = old[left ? 2 : 0];
                    images[2] = old[left ? 0 : 1];
                    animating = false;
                }, settings.speed);

            }
            $(container).click(function(e){
                if(animating) {return;}
                if(e.target === images[0]) {slide('right')}
                else {slide('left')}
            })
            return this;
        };

        $('div#panel-slider img').css('cursor','pointer');
        $('div#panel-slider').imageSlide({
            // Higher = slower
            speed: 400,
            // Set each image's dimensions here:
            styles: [
                {width: 300, top: 80, left: 0},
                {width: 478, left: 84, top: 0},
                {width: 300, top: 80, left: 345}
            ]
        });
    }
    */

    /*if($('body#page-members-list').length) {
        $(function () {
            $("#member-file-tree").jstree({
                "themes" : {
                    "theme" : "nmy",
                    "dots" : false,
                    "icons" : false
                },
                "json_data": {
                    "ajax": {
                        "url": "/members/member/filetree/"
                    }
                },
                "types": {
                    "default": {
                        clickable: false,
                        renameable: false,
                        deletable: false,
                        creatable: false,
                        draggable: false
                    },
                    "folder": {
                        clickable: false,
                        icon : {
                            image: false
                        }
                    },
                    "file": {
                        clickable: true,
                        max_children: 0,
                        max_depth: 0,
                        valid_children: "none",
                        icon: {
                            image: "/media/js/jquery.tree/themes/nmy/file.png"
                        }
                    }
                },
                "callback": {
                    // FIXME: Doesn't seem to fire anymore, deprecated in 1.0?
                    "onchange": function(NODE) {
                        // Restore default onclick behaviour (trigger
                        // download)
                        window.location.href = $(NODE).find("a").attr("href");
                    },
                    "ondata": function(DATA, TREE_OBJ) {
                        // Only display the quick download container if the
                        // filetree view returned any data. It is disabled in
                        // the css.
                        if(DATA) {
                            $("#quick-downloads").show();
                        }
                        return DATA;
                    }
                },
                "plugins": ["themes", "json_data"]
            });
        });
    }*/

    /*
    // Make content links glow on hover
    // FIXME: In latest safari the glow increases the link size when hovered.
    //        This results in unwanted side effects like scroll bars being
    //        added to the tabs on the index page.
    $('div#content a').addGlow({
        textColor: 'white',
        haloColor: '#aaa',
        radius: 100
    });
    */
    /*
    $('#nav-main-container ul.level-1 a').addGlow({
        textColor: 'white',
        haloColor: '#aaa',
        radius: 150
    });
    */
});

