﻿document.addEvent('domready', function() { Cadogan.Setup(); });
window.addEvent('scroll', function() { Cadogan.scroll(); });

function initialize() {
    var myLatlng = new google.maps.LatLng(51.492553, -0.176897);
    var myOptions = {
        zoom: 15,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("gmap"), myOptions);

    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map,
        title: "Cadogan Contemporary"
    }); 
}

var Cadogan = {
scroll: function() {
    var preview = $('artistimages');
    if (window.getScroll().y > $('contentinner').getPosition().y) {
        preview.tween('top', window.getScroll().y + 20 - $('contentinner').getPosition().y);
    }
    else {
        preview.tween('top', '0');
    }

},
    Setup: function() {
        if ($('fullgallery') != null)
            Cadogan.Gallery();

        if ($('artistlist') != null)
            Cadogan.ArtistList();

        /*  if ($('newsnav') != null)
        Cadogan.NewsNav();*/

        if ($$('.artistgallery').length > 0)
            Cadogan.ArtistGallery();

        if ($('gmap') != null)
            Cadogan.SetupGMap();

        $$('.exhibitioncover').each(function(z) {
            var y = z.getElement('img');
            var tAsset = Asset.image(y.get('src'), { onLoad: function(a) {
                var h = (199 - y.getSize().y) / 2;
                y.setStyle('top', h + 'px');
            }
            });
        });

        $$('.pageimage').each(function(y) {
            var img = y.getElements('img');
            img.setStyles({ 'opacity': '0', 'display': 'block' });
            var currentImage = 0;
            var nextImage = function() {
                img[currentImage].fade(0);
                currentImage++;
                if (currentImage >= img.length)
                    currentImage = 0;
                img[currentImage].fade(1);
                nextImage.delay(5000);
            };
            img[currentImage].fade(1);
            nextImage.delay(5000);
        });
    },
    SetupGMap: function() {




        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize";
        document.body.appendChild(script);

    },
    Scroller: function(outer, inner) {
        var scrollTimer = null;

        var scroll = 0;
        var al = $(outer);
        var all = $(inner);
        var scrolltime = 10;
        var twn = new Fx.Tween(all, { 'duration': scrolltime, transition: Fx.Transitions.Linear });
        var _doScrollDown = function(x, a) {
            var y = 2;
            if (a != null)
                y = a;
            var nt = all.getPosition(al).y - y;
            var max = -(all.getSize().y - al.getSize().y);
            if (nt < max)
                nt = max;
            twn.start('top', nt);
            if (a == null)
                scrollTimer = _doScrollDown.delay(scrolltime);
        };
        var _doScrollUp = function(x, a) {
            var y = 2;
            if (a != null)
                y = a;
            var nt = all.getPosition(al).y + y;
            if (nt > 0)
                nt = 0;
            twn.start('top', nt);
            if (a == null)
                scrollTimer = _doScrollUp.delay(scrolltime);

        };

        $('scrolldown').addEvent('mouseenter', function() { _doScrollDown(); });
        $('scrollup').addEvent('mouseenter', function() { _doScrollUp(); });
        var _cancel = function() { twn.cancel(); if (scrollTimer != null) window.clearTimeout(scrollTimer); };
        $$('#scrolldown,#scrollup').addEvent('mouseleave', _cancel);
        $(outer).addEvent('mouseleave', _cancel);
        al.addEvent('mousewheel', function(e) {
            if (e.wheel < 0) {
                _doScrollDown(null, 50 * e.wheel * -1);
            }
            else {
                _doScrollUp(null, 50 * e.wheel);
            }
        });

    },
    NewsNav: function() {

        Cadogan.Scroller('news', 'newsinner');
    },
    ArtistList: function() {
        // Cadogan.Scroller('artistlist', $$('#artistlist ul')[0]);


        var images = $$('#artistimages a');
        images.setStyles({ 'display': 'block', 'opacity': 0 });
        var items = $$('#artistlist li');
        items.addEvent('mouseenter', function(y) {
            var i = 0;
            var id = null;
            images.fade(0);
            items.each(function(x) {
                if (x.getElement('a') == y.target)
                    id = i;
                i++;
            });

            if (images[id] != null) {
                images[id].fade(1);
            }
        });
        images[0].fade(1);
    },
    Gallery: function() {
        var currentSlide = 0;
        var slides = $$('#fullgallery .galleryitem');
        var numSlides = slides.length;
        slides.setStyles({ 'opacity': 0, 'display': 'block' });
        $$('.galleryinfo').setStyle('left', -250);

        var doRotate;

        var _setCaption = function() {
            if ($('gallerycaption') != null) {

                $('gallerycaption').set('text', slides[currentSlide].getElement('.galleryimages img').get('alt'));
            }
        }
        var _showSlide = function(change, newId) {
            slides[currentSlide].fade(0);
            if (newId != null)
                currentSlide = newId;
            else
                currentSlide += change;
            if (currentSlide < 0)
                currentSlide = numSlides - 1;
            if (currentSlide >= numSlides)
                currentSlide = 0;
            slides[currentSlide].fade(1);

            _setCaption();

            if ($$('.thumbnails').length > 0) {

                var to = $$('.thumbnailouter')[0];
                var lo = $$('.thumbnailouter ul')[0];
                var twn = new Fx.Tween(lo, { 'duration': 1000, transition: Fx.Transitions.Sine.easeOut });
                var curThumb = $$('.thumbnails li')[currentSlide];
                var curLeft = curThumb.getPosition(to).x;
                var curRight = curLeft + curThumb.getSize().x;
                if (curLeft < 0) {
                    var newLeft = lo.getPosition(to).x - curLeft;
                    twn.start('left', newLeft);
                }
                if (curRight > to.getSize().x) {

                    var newLeft = to.getSize().x - curThumb.getPosition(lo).x - curThumb.getSize().x;
                    twn.start('left', newLeft);
                }
            }
        }

        var open = function() {
            $$('.galleryinfo').tween('left', '0');
            $$('#moreinfo,#galleryprevious').fade(0);
            $('hideinfo').morph({ 'left': 210, 'opacity': 1 });
        }

        $('galleryprevious').addEvent('click', function(y) {
            y.stop();
            if (doRotate != null)
                $clear(doRotate);

            _showSlide(-1);
        });
        $('gallerynext').addEvent('click', function(y) {
            y.stop();
            if (doRotate != null)
                $clear(doRotate);
            _showSlide(1);
        });
        $('moreinfo').addEvent('click', function(y) {
            y.stop();
            open();
        });
        $('hideinfo').setStyles({ 'opacity': '0', 'display': 'block', 'left': -40 });
        $('hideinfo').addEvent('click', function(y) {
            y.stop();
            $('hideinfo').morph({ 'opacity': 0, 'left': -40 });
            $$('.galleryinfo').tween('left', -250);
            $$('#moreinfo,#galleryprevious').fade(1);
        });

        if ($('fullgallery').hasClass('open'))
            open.delay(2000);

        slides[currentSlide].fade(1);
        _setCaption();

        if ($('fullgallery').hasClass('rotate')) {
            doRotate = _showSlide.periodical(7000, this, 1);
        }

        if ($$('.thumbnails').length > 0) {

            var displaySlide = function() { };
            var setCurrent = function(id) { _showSlide(null, id); };

            Cadogan.Thumbs(displaySlide, setCurrent);
        }
    },
    Thumbs: function(displaySlide, setCurrent) {

        $$('.thumbnails').setOpacity(0);
        var thumbHolders = $$('.thumbnails li');

        var thumbImages = $$('.thumbnails li img').get('src');

        var tAsset = Asset.images(thumbImages, { onComplete: function() {

            var k = 0;
            thumbHolders.each(function(x) {
                x.setStyle('left', k + 'px');
                k += x.getSize().x;
            });

            $$('.thumbnails ul').setStyle('width', k + 'px');

            $$('.thumbnails').fade(1);

            var thumbs = $$('.thumbnails li a');


            thumbs.addEvent('click', function(y) {
                y.stop();
            });
            thumbs.addEvent('mouseenter', function(y) {
                var z = y.target;
                while (z.get('tag') != 'a')
                    z = z.getParent();
                var i = 0;
                var id;
                thumbs.each(function(x) {
                    if (x == z)
                        id = i;
                    i++;
                });

                setCurrent(id);



                displaySlide();
            });



            var scrollTimer = null;

            var outer = $$('.thumbnailouter')[0];
            var inner = $$('.thumbnailouter ul')[0];

            var scroll = 0;
            var al = $(outer);
            var all = $(inner);
            var scrolltime = 10;
            var twn = new Fx.Tween(all, { 'duration': scrolltime, transition: Fx.Transitions.Linear });
            var _doScrollRight = function(y, a) {
                var x = 2;
                if (a != null)
                    x = a;



                var nt = all.getPosition(al).x - x;

                var max = -(all.getSize().x - al.getSize().x);

                if (nt < max) {
                    nt = max;
                }

                twn.start('left', nt + "px");
                if (a == null)
                    scrollTimer = _doScrollRight.delay(scrolltime);
            };
            var _doScrollLeft = function(y, a) {
                var x = 2;
                if (a != null)
                    x = a;
                var nt = all.getPosition(al).x + x;

                if (nt > 0)
                    nt = 0;
                twn.start('left', nt + "px");
                if (a == null)
                    scrollTimer = _doScrollLeft.delay(scrolltime);

            };

            $('previous').addEvent('mouseenter', function() { _doScrollLeft(); });
            $('next').addEvent('mouseenter', function() { _doScrollRight(); });
            var _cancel = function() { twn.cancel(); if (scrollTimer != null) window.clearTimeout(scrollTimer); };
            $$('#previous,#next').addEvent('mouseleave', _cancel);
            $(outer).addEvent('mouseleave', _cancel);
            al.addEvent('mousewheel', function(e) {
                if (e.wheel < 0) {
                    _doScrollRight(null, 50 * e.wheel * -1);
                }
                else {
                    _doScrollLeft(null, 50 * e.wheel);
                }
            });
        }
        });
    },
    ArtistGallery: function() {
        var currentSlide = 0;
        var slides = $$('.artistgallery .gallery div');
        var numSlides = slides.length;
        slides.setStyles({ 'opacity': 0, 'display': 'block' });



        var displaySlide = function() {
            // set the slide width


            var sl = slides[currentSlide].getElement('img');

            var myImage = Asset.image(sl.get('src'), {
                onLoad: function(x) {
                    var iw = slides[currentSlide].getElement('img').getSize().x;
                    if (slides[currentSlide].getElement('p') != null) {
                        var pw = slides[currentSlide].getElement('p').getSize().x;
                        if (pw > iw)
                            iw = pw;
                    }
                    slides[currentSlide].setStyle('width', iw + 'px');
                    var gw = $$('.gallery')[0].getSize().x;
                    slides[currentSlide].setStyle('left', ((gw - iw) / 2) + "px");

                    slides[currentSlide].fade(1);
                }
            });


        }

        var setCurrent = function(id) {
            slides[currentSlide].fade(0);
            currentSlide = id;
        }

        displaySlide();

        Cadogan.Thumbs(displaySlide, setCurrent);


    }
}
