﻿window.addEvent('domready', function() { Common.Setup() });

var Common = {
    Loading: false,
    Animating: false,
    LatestPage: null,
    Setup: function() {
        $$('.page').setStyle('display', 'none');
        var dd = new Dropdown();
        $('ajaxloading').setOpacity(0);
        $$('#navigation a,#footer_links a').addEvent('click', function(y) {
            y.stop();
            Common.NavClick(y.target);
        });

        $$('#header a').addEvent('click', function(y) {
            y.stop();
            var href = '/';
            //var z = $$('#navigation a')[0];
            location.href = '#' + href; // z.get('href');
            //Common.LastClick = z;
            //Common.SetEnabled(z);
            Common.LoadPage(href); //z.get('href'));
            $$('#navigation a,#footer_links a,#navigation li,#footer_links li').removeClass('open').removeClass('active').removeClass('selected');
            $$('#navigation div,#footer_links div').setStyle('display', 'none');
        });

        Common.FadeFX = new Fx.Tween('content_details', { onComplete: Common.ContentFade });
        var loadURL = Common.GetURL();
        // work out the last click URL
        $$('#navigation a,#footer_links a').each(function(y) {
            if (y.get('href') == loadURL) {
                Common.LastClick = y;
                var par = Common.SetEnabled(y);
                if (par != null)
                    par.addClass('open');
            }
        });
        Common.LoadPage(loadURL);

    },
    NavClick: function(x) {
        if (!Common.Animating) {

            var hr = x.get('href');

            location.href = '#' + hr;

            Common.LastClick = x;
            Common.SetEnabled(x);

            Common.LoadPage(hr);
        }
    },
    GetURL: function() {
        var href = top.location.href;
        var pos = href.indexOf('#') + 1;
        return (pos) ? href.substr(pos) : '';
    },
    LoadPage: function(url) {
        if (!Common.Loading) {

            $('ajaxloading').fade(1);
            var req = new Request.JSON({ 'url': url + '?ajax=1', onComplete: Common.ShowPage });
            req.send();
            Common.Loading = true;
            if (pageTracker != null) {
                pageTracker._trackPageview(url);
            }
        }
    },
    SetExtraNav: function(page) {
        var c = page.getElements('.content');
        var x = page.retrieve('page');
        var a = page.retrieve('a');
        var b = page.retrieve('b');
        if (x == 0) {
            a.addClass('hidden');
        }
        else {
            a.removeClass('hidden');
        }
        if (x >= c.length - 1) {
            b.addClass('hidden');
        }
        else {
            b.removeClass('hidden');
        }
    },
    SetupPrevButton: function(page) {
        var p = page.retrieve('page');
        var c = page.getElements('.content');
        c[p].fade(0);
        p = p - 1;
        if (p <= 0) {
            p = 0;
        }
        c[p].setOpacity(0);
        c[p].removeClass('hidden').fade(1);
        page.store('page', p);

        Common.SetExtraNav(page);
    },
    SetupNextButton: function(page) {
        var p = page.retrieve('page');
        var c = page.getElements('.content');
        c[p].fade(0);
        p = p + 1;
        if (p >= c.length) {
            p = c.length - 1;
        }

        c[p].setOpacity(0);
        c[p].removeClass('hidden').fade(1);
        page.store('page', p);

        Common.SetExtraNav(page);
    },
    ContentFade: function(x) {

        $('content_details').set('html', '');
        var left = 0;
        var img = new Array();
        var i = 0;

        if (Common.LatestPage.Pages != null) {


            Common.LatestPage.Pages.each(function(z) {

                var page = new Element('div');
                page.addClass('page');
                page.inject('content_details');
                page.setStyle('left', left + 'px');
                page.store('page', 0);
                left += page.getSize().x;

                if (z.PageType == -1) {
                    page.set('html', z.PageContent);
                    if (z.Javascript.length > 0) {
                        var myScript = new Asset.javascript(z.Javascript, { id: z.Javascript });
                    }

                    if ($$('.extranav').length > 0) {
                        var prev = page.getElements('.extranav a.prev')[0];
                        if (prev != null) {
                            page.store('a', prev);
                            prev.addEvent('click', function(pn) {
                                Common.SetupPrevButton(page);
                                pn.stop();
                            });
                        }
                        var next = page.getElements('.extranav a.next')[0];
                        if (next != null) {
                            next.addEvent('click', function(pn) {
                                Common.SetupNextButton(page);
                                pn.stop();
                            });
                            page.store('b', next);
                        }
                    }
                }
                else {

                    var content = new Element('div');
                    content.addClass('content');
                    content.inject(page);

                    switch (z.PageType) {
                        case 1:
                            content.set('html', '');
                            break;
                        case 2:
                        case 3:
                        case 4:
                            content.set('html', z.PageContent);
                            break;
                    }

                    if (z.IncludeReservationLink) {
                        var res = new Element('div');
                        res.addClass('reservationLink');
                        res.inject(page);
                        res.set('html', 'Make Reservation');
                        res.addEvent('click', function(x) {
                            var loadURL = '/reservations/';
                            // work out the last click URL

                            $$('#navigation a,#footer_links a').each(function(y) {
                                if (y.get('href') == loadURL) {
                                    Common.LastClick = y;
                                    var par = Common.SetEnabled(y);
                                    if (par != null)
                                        par.addClass('open');
                                }
                            });

                            Common.LoadPage(loadURL);
                        });
                    }

                    if (z.Extras.length > 0) {
                        var nav = new Element('div', { 'class': 'extranav' });
                        nav.inject(page);

                        var a = new Element('a', { 'href': '#' });
                        a.inject(nav);
                        a.set('html', 'Previous');
                        a.set('class', 'prev');

                        a.addEvent('click', function(pn) {
                            Common.SetupPrevButton(page);
                            pn.stop();
                        });
                        page.store('a', a);

                        var b = new Element('a', { 'href': '#' });
                        b.inject(nav);
                        b.set('html', 'Next');
                        b.set('class', 'next');
                        b.addEvent('click', function(pn) {
                            Common.SetupNextButton(page);
                            pn.stop();
                        });
                        page.store('b', b);


                    }

                    z.Extras.each(function(y) {
                        content = new Element('div');
                        content.addClass('content hidden');
                        content.inject(page);
                        content.set('html', y.PageText);
                    });

                    page.getElements('.content').set('tween', { onComplete: function(e) {
                        if (e.getStyle('opacity') == 0) {
                            e.addClass('hidden');
                        }
                    }
                    });


                    switch (z.PageType) {
                        case 1:

                            page.addClass('introimages');
                            break;
                        case 2:
                            page.addClass('wideimages');
                            break;
                        case 3:
                            page.addClass('thinimages');
                            break;
                        case 4:
                            page.addClass('textonly');
                            break;

                    }
                    if (z.PageType != 4) {
                        var imageHolder = new Element('div');
                        imageHolder.addClass('imageholder');


                        imageHolder.inject(page);



                        z.Images.each(function(y) {
                            img[i] = y.URL;
                            var im = new Element('img', { src: y.URL, title: y.Caption, alt: y.Caption });
                            im.inject(imageHolder);
                            i++;
                        });
                        if (z.Images.length > 0) {

                            var s = new SlideShow(page);
                        }
                    }

                }
            });
        }


        var startLeft = Common.GetStartLeft();


        $('content_details').set('tween', { 'duration': '1500', onStart: function(x) { Common.Animating = true; }, onComplete: function(x) { Common.Animating = false; } });
        $('content_details').setStyles({ 'width': left + 'px', 'left': -startLeft });

        if (img.length > 0) {

            var imgLoad = new Asset.images(img, { onComplete: function(x) {

                $('content_details').fade(1);
                Common.Loading = false;

            }
            });
        }
        else {
            $('content_details').fade(1);
            Common.Loading = false;
        }



    },
    GetStartLeft: function() {
        var x = 0;
        if (Common.LastClick != null) {
            var a = Common.LastClick;
            var par = a;
            while (!par.hasClass('top'))
                par = par.getParent();

            var i = 0;
            par.getElements('a').each(function(z) {
                if (z == a) {
                    if ($$('#content_details .page')[i] != null) {
                        x = ($$('#content_details .page')[i].getPosition('content_details').x);
                    }
                }
                i++;
            });

            return x;
        }
        else {

        }
        return x;
    },
    ShowPage: function(page) {
        
        if (Common.LatestPage == null) {

            Common.FadeFX.start('opacity', '0');
            Common.LatestPage = page;
        }
        else if (Common.LatestPage.Page_ID != page.Page_ID) {

            Common.FadeFX.start('opacity', '0');
            Common.LatestPage = page;
        }
        else {

            var x = Common.GetStartLeft();
            $('content_details').setStyle('left', -x + "px");

            Common.Loading = false;
        }
        $('ajaxloading').fade(0);
    },
    SetEnabled: function(link) {
        var parent = null;
        $$('#navigation li,#navigation li a,#footer_links li,#footer_links li a').removeClass('active').removeClass('selected');
        $$('#navigation a,#footer_links a').each(function(y) {
            if (y == link) {
                y.addClass('selected');

                var div = y.getParent().getParent().getParent().getParent();
                if (div.get('tag') == 'li') {
                    div.addClass('active');
                    div.getElement('a').addClass('selected');
                    parent = div;
                }
            }

        });
        return parent;
    }
}

var SlideShow = new Class({
    CurrentImage: 0,
    Images: null,
    Holder: null,
    initialize: function(page) {
        var t = this;
        t.Holder = page.getElement('.imageholder');
        t.Images = t.Holder.getElements('img');
        t.Images.set('tween', { duration: 2000 });
        var i = 0;
        t.Images.each(function(y) {

            if (i != t.CurrentImage) {
                t.Images[i].setStyle('opacity', 0);
            }
            i++;
        });

        t.NextImage.delay(4500, t);
    },
    NextImage: function() {
        var t = this;
        var next = t.CurrentImage + 1;
        if (next >= t.Images.length)
            next = 0;

        if (t.Images.length > 1) {
            //t.Images[next].setStyle('z-index', '10');
            // t.Images[next].set('tween', { duration: '1000', onComplete: function() {
            //   t.Images[next].setStyle('z-index', '0');
            t.Images[t.CurrentImage].fade(0); //.setStyle('left', t.Holder.getSize().x + 'px');
            t.CurrentImage = next;
            // }
            // });

            t.Images[next].fade(1);
            t.NextImage.delay(6000, t);
        }
    }
});

var Dropdown = new Class({
    initialize: function() {
        this.Dropdowns = $$('#navigation a,#footer_links a');
        var y = this.OpenMenu.bind(this);
        var x = this.StartClose.bind(this);
        this.Dropdowns.each(function(e) {
            e.addEvent('click', y.pass(e));
            //e.addEvent('mouseout', x.pass(e));
        });
        var z = this.HoldOpen.bind(this);
        /* $$('#navigation div').each(function(e) {
        e.addEvent('mouseover', z.pass(e));
        e.addEvent('mouseout', x.pass(e));
        });*/
    },
    HoldOpen: function(e) {
        $clear(this.timeout);
    },
    OpenMenu: function(e) {

        $clear(this.timeout);
        var o = e;
        e = new Element(e);

        var e = e.getParent();
        var parent = e.getParent();

        var topParent = parent;
        while (topParent.get('id') == null)
            topParent = topParent.getParent();

        if (topParent.get('id') == 'navigation') {
            $$('#footer_links div').setStyle('display', 'none');
            $$('#footer_links li').removeClass('open');
        }

        if (topParent.get('id') == 'footer_links') {
            $$('#navigation div').setStyle('display', 'none');
            $$('#navigation li').removeClass('open');
        }

        parent.getElements('li').each(function(k) {

            if (k.hasClass('open') && k != e) {

                k.removeClass('open');
                k.getParent().getElements('div').each(function(i) {
                    i.setStyle('display', 'none');
                });
            }
        });

        if (!e.hasClass('open')) {
            e.addClass('open');

            if (e.getChildren().length > 1) {

                var div = e.getElements('div')[0];


                var width = 0;
                if (div != null) {

                    div.setOpacity(0).setStyles({ 'display': 'block' });

                    var left = e.getPosition($$('#navigation ul')[0]).x;
                    var w = (e.getSize().x / 2) + left;
                    var tw = div.getSize().x;
                    left = (w - tw / 2);
                    if (left < 0)
                        left = 0;
                    var li = $$('#navigation li.top');
                    var navWidth = li[li.length - 1].getPosition($$('#navigation ul')[0]).x +li[li.length - 1].getSize().x;
                    
                    if (left + tw > navWidth)
                       left = navWidth - tw -5;
                    div.setStyles({ 'left': left + 'px' });
                    div.fade(1);


                }
            }
        }
        Common.NavClick(o);
    },
    StartClose: function(e) {
        $clear(this.timeout);
        this.timeout = this.CloseMenu.delay(1500);
    },
    CloseMenu: function() {
        $clear(this.timeout);

        $$('#navigation li,#footerlinks li').each(function(i) {
            if (i.hasClass('active')) {
                if (!i.hasClass('open')) {
                    var d = i.getElements('div');
                    d.setOpacity(0);
                    d.setStyle('display', 'block');
                    d.fade(1);
                    i.addClass('open');
                }
            }
            else {
                i.getElements('div').fade(0);
                i.removeClass('open');
            }
        });


    }
});
