(function($){$(document).ready(function(){

    var currentZIndex = 10;

    function Box( $node ){
        var self = {};

        var $header = $( $node.find( '.hd' )[ 0 ] );
        var $closeLink = $( $node.find( '.close' )[ 0 ] );
        var $navLink = get_nav_link( );
        var $navImages = $navLink.find( 'img' );

        // safari has a bug with "display: none" nodes.
        $node.css( 'display', 'none' );
        $node.css( 'visibility', 'visible' );

        $navLink.click( show );
        $closeLink.click( close );
        $header.click( show );

        $node.draggable( {
            handle: $header,
            start: function( ) {
                currentZIndex = currentZIndex + 1;
                $node.css( 'z-index', currentZIndex );
            },
            drag: function( e, ui ) {
                if( ui.position.top < 1 ){
                    ui.position.top = 1;
                }
                if( ui.position.left < 1 ) {
                    ui.position.left = 1;
                }
            }
        } );

        function show( ){
            currentZIndex = currentZIndex + 1;
            $node.css( 'z-index', currentZIndex );
            setMenuActive( );
            if( $node.css( 'display' ) != 'block' || $node.css( 'opacity' ) == 0 ){
                $node.css( 'opacity', 0 );
                $node.css( 'display', 'block' );
                $node.fadeTo( 'normal', 1 );
            }
        }
        function close( ){
            $node.fadeTo( 'normal', 0 );
            $node.css( 'display', 'none' );
            setMenuInActive( );
            return false;
        }
        function setMenuActive( ) {
            if( !$navLink.hasClass( 'active' ) ) {
                $navLink.addClass( 'active' );
                $navImages.each( function( i, img ) {
                    $img = $( img );
                    var src = $img.attr( 'src' );
                    if( !src.indexOf( '_active' ) != -1 ){
                        src = src.replace( /\.jpg/, "_active.jpg" );
                    }
                    $img.attr( 'src', src );
                } );
            }
        }
        function setMenuInActive( ) {
            $navLink.removeClass( 'active' );
            $navImages.each( function( i, img ) {
                $img = $( img );
                var src = $img.attr( 'src' );
                src = src.replace( /_active\.jpg/, '.jpg' );
                $img.attr( 'src', src );
            } );
        }
        function get_nav_link( ){
            var name = $node.find( 'a' ).attr( 'name' );
            return $( 'a[href="#' + name + '"]' );
        }

        return self;
    }

    function Collection( ) {
        var self = {};
        imagesRendered = false;
        var $node = $( '#collection' );

        var maxWidths = {
            '#collectionContent2007' : ((318*11) - 60) - 873,
            '#collectionContent2008' : ((318*16) + 40) - 873,
            '#collectionContent2009_2' : ((318*17) - 20) - 873,
            '#collectionContent2009_1' : ((318*18) + 280) - 873
        };
        var $content = $( '#collectionContent2009_2' );
        var maxWidth = maxWidths[ '#collectionContent2009_2' ];
        var maxLeft = 873 - 125;

        var $slideKnob = $( '.slideKnob', $node );
        $slideKnob.draggable( {
            drag: function( e, ui ) {
                ui.position.top = 0;
                if( ui.position.left < 0 ){
                    ui.position.left = 0;
                }
                if( ui.position.left > maxLeft ){
                    ui.position.left = maxLeft;
                }
                var percentage = 100 / maxLeft * ui.position.left;
                var left = maxWidth / 100 * percentage;
                $content.css( 'left', 0-left );
            }
        } );

        function switchTo( collection ) {
            $content.css( 'display', 'none' );
            $content = $( collection );
            $content.css( 'display', 'block' );
            $content.css( 'left', 0 );
            $slideKnob.css( 'left', 0 );
            maxWidth = maxWidths[ collection ];
        }

        self.renderImages = function( ) {
            if( !imagesRendered ) {
                imagesRendered = true;
                $( [
                    '/gumpendorf/static/kollektion/09/Web1/La_2681-2-8bit.jpg',
                    '/gumpendorf/static/kollektion/09/Web1/La_2787-8bit.jpg',
                    '/gumpendorf/static/kollektion/09/Web1/La_2842-2-8bit.jpg',
                    '/gumpendorf/static/kollektion/09/Web1/La_2904-8bit.jpg',
                    '/gumpendorf/static/kollektion/09/Web2/hannes_01.jpg',
                    '/gumpendorf/static/kollektion/09/Web2/hannes_02.jpg',
                    '/gumpendorf/static/kollektion/09/Web2/hannes_03.jpg',
                    '/gumpendorf/static/kollektion/09/Web2/hannes_04.jpg',
                    '/gumpendorf/static/kollektion/09/Web3/damen2009:1RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web3/damen2009:2RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web3/damen2009:3RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web3/damen2009:4RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web4/thom_H_01.jpg',
                    '/gumpendorf/static/kollektion/09/Web4/thom_H_02.jpg',
                    '/gumpendorf/static/kollektion/09/Web4/thom_H_03.jpg',
                    '/gumpendorf/static/kollektion/09/Web4/thom_H_04.jpg'
                ] ).each( function( i, src ) {
                    $( '<img src="' + src + '" />' ).appendTo( $( '#collectionContent2009_2' ) );
                } );

                $( [
                    '/gumpendorf/static/kollektion/09/Web6/alex_H_01_b.jpg',
                    '/gumpendorf/static/kollektion/09/Web6/alex_H_02_a.jpg',
                    '/gumpendorf/static/kollektion/09/Web6/alex_H_03.jpg',
                    '/gumpendorf/static/kollektion/09/Web6/alex_H_04.jpg',
                    '/gumpendorf/static/kollektion/09/Web5/thom_D_01.jpg',
                    '/gumpendorf/static/kollektion/09/Web5/thom_D_02.jpg',
                    '/gumpendorf/static/kollektion/09/Web5/thom_D_03.jpg',
                    '/gumpendorf/static/kollektion/09/Web5/thom_D_04.jpg',
                    '/gumpendorf/static/kollektion/09/Web7/avantgarde2009:1RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web7/avantgarde2009:2RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web7/avantgarde2009:3RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web7/avantgarde2009:4RGB.jpg',
                    '/gumpendorf/static/kollektion/09/Web8/laura_01.jpg',
                    '/gumpendorf/static/kollektion/09/Web8/laura_02.jpg',
                    '/gumpendorf/static/kollektion/09/Web8/laura_03.jpg',
                    '/gumpendorf/static/kollektion/09/Web8/laura_04.jpg'
                ] ).each( function( i, src ) {
                    $( '<img src="' + src + '" />' ).appendTo( $( '#collectionContent2009_1' ) );
                } );

                $( [
                    "/gumpendorf/static/kollektion/08/a_lim_01.jpg",
                    "/gumpendorf/static/kollektion/08/a_lim_02.jpg",
                    "/gumpendorf/static/kollektion/08/a_lim_03.jpg",
                    "/gumpendorf/static/kollektion/08/a_lim_04.jpg",
                    "/gumpendorf/static/kollektion/08/lim_h2.jpg",
                    "/gumpendorf/static/kollektion/08/lim_h3.jpg",
                    "/gumpendorf/static/kollektion/08/lim_h4.jpg",
                    "/gumpendorf/static/kollektion/08/lim_h5.jpg",
                    "/gumpendorf/static/kollektion/08/t_d_lim_01.jpg",
                    "/gumpendorf/static/kollektion/08/t_d_lim_02.jpg",
                    "/gumpendorf/static/kollektion/08/t_d_lim_03.jpg",
                    "/gumpendorf/static/kollektion/08/t_d_lim_04.jpg",
                    "/gumpendorf/static/kollektion/08/t_h_lim_01.jpg",
                    "/gumpendorf/static/kollektion/08/t_h_lim_02.jpg",
                    "/gumpendorf/static/kollektion/08/t_h_lim_03.jpg",
                    "/gumpendorf/static/kollektion/08/t_h_lim_04.jpg"
                ] ).each( function( i, src ) {
                    $( '<img src="' + src + '" />' ).appendTo( $( '#collectionContent2008' ) );
                } );

                $( [
                    "/gumpendorf/static/kollektion/k1.jpg",
                    "/gumpendorf/static/kollektion/k2.jpg",
                    "/gumpendorf/static/kollektion/k3.jpg",
                    "/gumpendorf/static/kollektion/k4.jpg",
                    "/gumpendorf/static/kollektion/k5.jpg",
                    "/gumpendorf/static/kollektion/k6.jpg",
                    "/gumpendorf/static/kollektion/k7.jpg",
                    "/gumpendorf/static/kollektion/k8.jpg",
                    "/gumpendorf/static/kollektion/k9.jpg",
                    "/gumpendorf/static/kollektion/k91.jpg",
                    "/gumpendorf/static/kollektion/k92.jpg"
                ] ).each( function( i, src ) {
                    $( '<img src="' + src + '" />' ).appendTo( $( '#collectionContent2007' ) );
                } );
            }
        }

        $.each( [ '2007', '2008', '2009_1', '2009_2' ], function( _i, e ) {
            $( '#collectionLink' + e ).click( function( ) {
                switchTo( '#collectionContent' + e );
                return false;
            } );
        } );

        return self;
    }

    function PressGallery( ) {
        var self = {};
        var $node = $( '#press' );
        var $content = $( '#pressContent' );
        var $title = $( '<div class="tooltip"></div>' ).appendTo( 'body' );

        var maxWidths = {
            '2010' : 890,
            '2009' : 9214,
            '2008' : (( 204 * 48 ) - 145) - 600,
            '2007' : (( 204 * 5 ) - 20) - 600,
            '2006' : (( 204 * 5 ) + 45) - 600,
            '2005' : (( 204 * 1 ) - 1) - 600
        };
        var maxWidth = maxWidths[ '2010' ];
        var maxLeft = 600 - 125;

        var $slideKnob = $( '.slideKnob', $node );
        $slideKnob.draggable( {
            drag: function( e, ui ) {
                ui.position.top = 0;
                if( ui.position.left < 0 ){
                    ui.position.left = 0;
                }
                if( ui.position.left > maxLeft ){
                    ui.position.left = maxLeft;
                }
                var percentage = 100 / maxLeft * ui.position.left;
                var left = maxWidth / 100 * percentage;
                $content.css( 'left', 0-left );
            }
        } );

        function renderEntries( entries ) {
            $content.html( '' );
            
            $( entries ).each( function( i, item ) {
                var $img = $(
                    '<img src="/gumpendorf/static/new_press_images/thumbnails/' + item.thumbnail + '" />'
                ).appendTo( $content );
                $img.mouseover( function( e ) {
                    $title.html( item.title );
                    $title.css( 'left', e.pageX + 2 );
                    $title.css( 'top', e.pageY + 5 );
                    $title.css( 'display', 'block' );
                } );
                $img.mousemove( function( e ) {
                    $title.css( 'left', e.pageX + 2 );
                    $title.css( 'top', e.pageY + 5 )
                } );
                $img.mouseout( function( e ) {
                    $title.css( 'display', 'none' );
                } );
                $img.click( function( ) {
                    if( item.pdf ){
                        var url = '/gumpendorf/static/new_press_images/pdfs/' + item.pdf;
                    } else {
                        var url = item.url;
                    }
                    window.open( url );
                    return false;
                } );
            } );
        }

        function reload( year ) {
            var y = year || 2010;
            maxWidth = maxWidths[ '' + y + '' ];
            $.getJSON( '/gumpendorf/press_entries/', { year: y }, renderEntries );
            $content.css( 'left', 0 );
            $slideKnob.css( 'left', 0 );
        }

        reload( );

        $.each( [ 2010, 2009, 2008, 2007, 2006, 2005 ], function( _i, e ) {
            $( '#pressLink' + e ).click( function( ) {
                reload( e );
                return false;
            } );
        } );

        return self;
    }

    function FriendGroup( $header, $content ) {
        $content.css( 'display', 'none' );
        $content.find( 'a' ).attr( 'target', 'blank_' );
        $header.click( function( ) {
            $content.slideToggle( );
        } );
    }

    function Friends( ) {
        var self = {};
        var $node = $( '#friends' ).find( '.bd' );
        $node.find( 'h3' ).each( function( i, header ) {
            $header = $( header );
            $content = $header.next( 'ul' );
            FriendGroup( $header, $content );
        } );
        return self;
    }

    function Pictures( ) {
        var self = {};
        var $node = $( '#pictures' );
        var $content = $node.find( '.content' );
        var maxHeight = 1607 - 400;
        var maxBottom = 395 - 125;
        var offset = 5;

        var $slideKnob = $node.find( '.slideKnob' );
        $slideKnob.draggable( {
            drag: function( e, ui ) {
                ui.position.left = 0;
                if( ui.position.top < 0 ){
                    ui.position.top = 0;
                }
                if( ui.position.top > maxBottom ){
                    ui.position.top = maxBottom;
                }
                var percentage = 100 / maxBottom * ui.position.top;
                var top = maxHeight / 100 * percentage;
                $content.css( 'top', 0-top+offset );
            }
        } );

        return self;
    }

    function init( ) {
        $nav = $( '#nav' );
        $switch_german = $( '#switch_german' );
        $switch_english = $( '#switch_english' );
        $english = $( '.english' );
        $german = $( '.german' );

        var collection = Collection( );
        Friends( );
        Pictures( );
        $( '.box' ).each( function( i, node ) {
            Box( $( node ) );
        } );
        $switch_german.click( function( ) {
            $nav.css( 'left', 210 );
            $switch_english.removeClass( 'active' );
            $switch_german.addClass( 'active' );
            $english.css( 'display', 'none' );
            $german.css( 'display', 'inline' );
            $switch_german.find( 'img' ).attr( 'src', '/gumpendorf/static/images/german_active.jpg' );
            $switch_english.find( 'img' ).attr( 'src', '/gumpendorf/static/images/english.jpg' );
            return false;
        } );
        $switch_english.click( function( ) {
            $nav.css( 'left', 219 );
            $switch_german.removeClass( 'active' );
            $switch_english.addClass( 'active' );
            $german.css( 'display', 'none' );
            $english.css( 'display', 'inline' );
            $switch_german.find( 'img' ).attr( 'src', '/gumpendorf/static/images/german.jpg' );
            $switch_english.find( 'img' ).attr( 'src', '/gumpendorf/static/images/english_active.jpg' );
            return false;
        } );
        PressGallery( );

        $( '[href=#collection]' ).click( function( ) {
            collection.renderImages( );
        } );
    }
    init( );

})})(jQuery);
