
var Config = {
    Eestairs4BaseDir: "../html/eestairs4/",
    Eestairs4ScriptDir: "../html/eestairs4/scripts/",
    SearchFieldAutoSubmitDelay: 2000,
    DetailsSlideShowDelay: 5000,
    MenuToggleKeyEnabled: true
}

/*
*	Login
*/
var LoginController = Class.create(function() {
    var loggedIn = false, self;

    function setLoginStatus(bool) {
        loggedIn = bool;
    }

    function parseLoginResponse(transport) {
        return (transport.responseText === 'true');
    }

    function setEeNetButton(result) {
        $('subMenuBottom').childElements().each(function(n) {
            if(n.tagName != 'UL') return;

            n.childElements().each(function(n) {
                if(n.tagName != 'LI' || !n.firstChild) return;

                var anchor = n.firstChild;
                var textContent = anchor.innerText || anchor.textContent;
                if(textContent.match('EeNet')) {
                    var mouseoverText;
                    if(result.LoggedIn) {
                        mouseoverText = 'EeNet | Sign out';
                        anchor.href = '#';
                        anchor.observe('click', self.LogoutUser);
                    } else {
                        mouseoverText = 'EeNet | Sign in';
                    }

                    n.observe('mouseover', function() {
                        if(anchor.innerText)
                        anchor.innerText = mouseoverText;
                        else
                        anchor.textContent = mouseoverText;
                    });
                    n.observe('mouseout', function() {
                        if(anchor.innerText)
                        anchor.innerText = 'EeNet';
                        else
                        anchor.textContent = 'EeNet';
                    });
                }
            });
        });
    }

    return {
        initialize: function() {
            this.CheckLogin(setEeNetButton);

            var loginBtn = $('eenet_login_btn');
            if(loginBtn)
            loginBtn.observe('click', this.LoginUser.bind(this));
            self = this;
        },

        LoginStatus: function() {
            return loggedIn;
        },

        LoginUser: function() {
            var username = $F($('username')),
            password = $F($('password')),
            storeflag = Boolean($F($('store')));

            new Ajax.Request(sprintf("%sdivs/div_login.htm?username=%s&password=%s&store=%s&r=21583",
            Config.Eestairs4ScriptDir, username, password, storeflag),
            {
                evalScripts: true,
                onSuccess: function(transport) {
                    setLoginStatus(parseLoginResponse(transport));
                    if(self.LoginStatus())
                    window.location = baseDocumentUrl() + '1_Home.htm';
                    else
                    $('password').value = $('username').value = "";
                }
            });
        },

        LogoutUser: function() {
            new Ajax.Request(Config.Eestairs4ScriptDir + "pages/main.htm?&r=2183",
            {
                evalScripts: true,
                parameters: 'do_logout=true',
                onSuccess: function(transport) {
                    setLoginStatus(false);
                    window.location = baseDocumentUrl() + '1_Home.htm';
                }
            });
        },

        CheckLogin: function(onComplete) {
            new Ajax.Request(sprintf("%sdivs/div_login.htm?username=t&password=x&store=true&r=12&logincheck=true",
            Config.Eestairs4ScriptDir),
            {
                evalScripts: false,
                onSuccess: function(transport) {
                    setLoginStatus(parseLoginResponse(transport));
                    onComplete({ ActionSuccess: true, Transport: transport, LoggedIn: loggedIn });
                }
            });

        }
    }
}());

/** End login **/

/**
* Main menu
*/
var MainMenuController = Class.create(function() {
    var view, menuTimer;

    return {
        initialize: function() {
            view = new MainMenuView();

            // Setup events
            view.AddEventListener('click', view.Hide, 'MainMenuNode');
            view.AddEventListener('click', view.Toggle.bind(view), 'TopMenuNode');
            //view.AddEventListener('mouseover', view.RemoveEventListener('click', view.Hide, 'MainMenuNode'), 'FirstMainMenuItem');
            //view.AddEventListener('mouseover', view.RemoveEventListener('click', view.Toggle.bind(view)), 'FirstMainMenuItem');
            document.observe('keyup', function(event) { if(getKeyCodeFromEvent(event) === this.MenuToggleKey && Config.MenuToggleKeyEnabled) { view.Toggle(); } }.bind(this));
        },
        MenuDelay: 300,
        MenuToggleKey: 32
    }
}());

var MainMenuView = Class.create(function() {
    var topMenuNode, mainMenuNode, threeItemNode, firstMainMenuItem, topMenuLiCollection,
    visible = false;

    return {
        initialize: function() {
            mainMenuNode = $('mainMenu');
	        topMenuNode = $('topMenu');
	        threeItemNode = $('threeItems');
	        firstMainMenuItem = $('firstMainMenuItem');
	        topMenuLiCollection = $$('#topMenu li ul li');

	        mainMenuNode.hide();
	        mainMenuNode.setOpacity(0);
	        mainMenuNode.setStyle({position: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%'});
	        threeItemNode.hide();
	        threeItemNode.setOpacity(0);
	        threeItemNode.setStyle({position: 'absolute', left: '50%', margin: '0px 0px 0px -410px', top: '250px' });
	        topMenuLiCollection.each(function(element) {
	            element.setStyle({backgroundColor: 'transparent'});
	            element.fade({ duration: 0, from: 0, to: 0 });
	        });
        },
        AddEventListener: function(event, func, nodeName) {
            var node = null;
            switch(nodeName) {
                case 'MainMenuNode':
                node = mainMenuNode; break;
                case 'FirstMainMenuItem':
                node = firstMainMenuItem; break;
                case 'TopMenuNode':
                default:
                node = topMenuNode;
            }

            node.observe(event, func);
        },
        RemoveEventListener: function(event, func, nodeName) {
            var node = null;
            switch(nodeName) {
                case 'MainMenuNode':
                node = mainMenuNode; break;
                case 'firstMainMenuItem':
                node = firstMainMenuItem; break;
                case 'TopNode':
                default:
                node = topMenuNode;
            }

            node.stopObserving(event, func);
        },
        Hide: function() {
            if(!visible) return;

            mainMenuNode.fade({ duration: 0.3, from: 0.7, to: 0 });
            threeItemNode.fade({ duration: 0.3, from: 1, to: 0 });
            topMenuLiCollection.each(function(element){ element.fade({ duration: 0.3, from: 1, to: 0 }); });

            visible = false;
        },
        Show: function() {
            if(visible) return;

            mainMenuNode.appear({ duration: 0, from: 0.7, to: 0.7 });
            threeItemNode.appear({ duration: 0, from: 1, to: 1 });
            topMenuLiCollection.each(function(element){ element.appear({ duration: 0, from: 1, to: 1 }); });

            visible = true;
        },
        Toggle: function() {
            if(this.IsVisible())
            this.Hide();
            else
            this.Show();
        },
        IsVisible: function() {
            return visible;
        }
    }
}());
/** End main menu **/


/**
*	Photo album
*/

var AlbumController = Class.create(function() {
    var albumOverviewModel;

    return {
        initialize: function(album) {
            album = album || 1;

            albumOverviewModel = this.albumOverviewModel = new AlbumPhotoOverviewModel(album);
            this.DetailsPanel = new AlbumPhotoDetailsPanel(this);
            this.OverviewPanel = new AlbumPhotoOverviewPanel(this,albumOverviewModel);
            this.SearchPanel = new AlbumOverviewSearchCriteriaPanel(this, albumOverviewModel, album);
            this.SearchFieldControl = new AlbumOverviewSearchFieldController(this, albumOverviewModel);
            this.FavouritePanel = new AlbumFavouritePanel(this);

            //if(!Heino.Cookie.Value('albumExplanationDisabled') && location.hash.blank()) {
                //this.OverviewPanel.Hide();
                //this.SearchPanel.Hide();
            //}

            this.FavouritePanel.Show();
        }
    }
}());

var AlbumOverviewSearchCriteriaPanel = Class.create(function() {
    var parent, model, containerDiv, visible,
    categories, selectedAlbum, balustradeOptions;

    function criteriaFormToHash() {
        if(!document.form_toolbar2) return $H({ select_function: '', select_shape: '', select_structure: '', select_material: '' });

        var formEl, len = document.form_toolbar2.length,
        hash = new Hash();
        for (var optionCounter = 0; optionCounter < len; optionCounter++) {
            formEl = document.form_toolbar2.elements[optionCounter];

            // Ugly, ugly..
            if(parent.albumOverviewModel.SelectedAlbum() == 2){
                hash.set(formEl.name, ((formEl.value != "") ? parseInt(formEl.value)+3 : ""));
                // store possible settings for balustrade options
                if (balustradeOptions){
                    hash.set('balustradeOptions', balustradeOptions.innerHTML);
                }
            }else
            hash.set(formEl.name, ((formEl.value != "") ? parseInt(formEl.value)-1 : ""));
        }
        return hash;
    }

    function setupCriteraForm(transport) {
        containerDiv.innerHTML = transport.responseText;

        var formEl = $('form_toolbar2'), index,
        searchOptions, searchOptionValues;

        var hashCategories = new Array(),
        hashValues = new Array(),
        hashString = location.hash.replace(/ /, '%20');
        hashContents = (hashString.indexOf('%20') === -1) ? new Array(hashString.substr(1)) : hashString.substr(1).split('%20');

        hashContents.each(function(value) {
            if(value.indexOf(':') != -1) {
                hashCategories.push(value.split(':')[0]);
                hashValues.push(value.split(':')[1]);
            }
        });

        searchOptions = formEl.childElements().findAll(function(e) { return e.hasClassName('searchOption'); });
        for(var i = 0; i < searchOptions.length; i++) {
            searchOptionValues = searchOptions[i].childElements().findAll(function(e) {
                return e.tagName == 'DIV' && (e.innerText || e.textContent) != '|' && !e.hasClassName('first');
            });

            // hide all balustrade-options elements
            formEl.childElements()[1].childElements().each(function(e) {
                e.childElements().each(function(e){
                    e.observe('click', function() {
                        this.adjacent('span').each(function(e) {
                            e.removeClassName('selected');
                        });
                        this.addClassName('selected');
                        balustradeOptions=this;
                        model.SetCategories.bind(model, criteriaFormToHash())();
                    });
                });
                e.hide();
            });

            for(var j = 0; j < searchOptionValues.length; j++) {
                index = hashCategories.indexOf(categories[i]);
                if(index != -1 && hashValues[index] == j) {
                    searchOptionValues[j].addClassName('selected');
                    searchOptionValues[0].removeClassName('selected');
                    $('optionValue' + (i+1)).value = (j+1 === 1) ? "" : j+1;
                }

                // set onclick handlers for search criteria options
                searchOptionValues[j].observe('click', function(rowIndex, optionIndex, optionElements) {
                    if(this.hasClassName('selected')) return;
                    parent.OverviewPanel.ResetActivePage();

                    $('optionValue' + rowIndex).value = (optionIndex === 1) ? "" : optionIndex;
                    balustradeOptions=null;
                    model.SetCategories.bind(model, criteriaFormToHash())();
                    optionElements.each(function(el) { el.removeClassName('selected'); });
                    this.addClassName('selected');
                    parent.SearchFieldControl.Clear();

                    // Ugly code.
                    if(parent.albumOverviewModel.SelectedAlbum() == 2){
                        formEl.childElements()[1].childElements().each(function(element) { element.hide(); });

                        if (($('optionValue' + rowIndex).value-2)>=0){
                            formEl.childElements()[1].childElements()[$('optionValue' + rowIndex).value-2].childElements().each(function(element) {  element.removeClassName('selected'); });
                            formEl.childElements()[1].childElements()[$('optionValue' + rowIndex).value-2].show();
                        }
                    }
                }.curry(i+1,j+1, searchOptionValues));

				// Ugly code.
                if(parent.albumOverviewModel.SelectedAlbum() == 2){
                    formEl.childElements()[1].childElements().each(function(element) { element.hide(); });

                    if (($('optionValue' + (i+1)).value-2)>=0){
                        formEl.childElements()[1].childElements()[$('optionValue' + (i+1)).value-2].childElements().each(function(element) {  element.removeClassName('selected'); });
                        formEl.childElements()[1].childElements()[$('optionValue' + (i+1)).value-2].show();
                    }
                }
            }
        }

        model.SetCategories.bind(model, criteriaFormToHash())();

        $('accordion-toggle-search').observe('click', function() {
            if(!parent.OverviewPanel.Minified() && !parent.DetailsPanel.Visible()) {
                parent.SearchPanel.ToggleVisibility.bind(parent.SearchPanel)();
            } else {
                if(!parent.SearchPanel.Visible()) parent.SearchPanel.Show();
                if(parent.OverviewPanel.Minified()) parent.OverviewPanel.Maximize();
                if(parent.DetailsPanel.Visible()) parent.DetailsPanel.Hide();
            }
        });
    }

    return {
        initialize: function(parentController, overviewModel, album) {
            parent = parentController;
            model = overviewModel;
            selectedAlbum = album || 1;

            containerDiv = $('accordion-content-search');

            if (selectedAlbum == 3){
                categories = new Array();
            }else if(selectedAlbum == 2){
                categories = new Array("select_balust_category");    
            }else{
                categories = new Array("select_shape", "select_function", "select_structure", "select_material");
            } 
            //categories = (selectedAlbum == 1) ? new Array("select_shape", "select_function", "select_structure", "select_material") : new Array("select_balust_category");
            visible = true;

            // Load criteria form
            new Ajax.Request(sprintf("%sdivs/div_toolbar2.htm?r=34234&select_box_one=%s&languageId=%s", Config.Eestairs4ScriptDir, selectedAlbum,
            ($('languageId').innerText || $('languageId').textContent)), {evalScripts: true, onSuccess: setupCriteraForm });
        },
        Hide: function() {
            Heino.Effect.VerticalResizeTo(containerDiv, 0, 0.5);
            visible = false;
            $$('#accordion-toggle-search .tglArrow')[0].removeClassName('tglOpen');
        },
        Show: function() {
            var goalHeight = 90;
            if (selectedAlbum == 2){
            	goalHeight = 45;
            }
            if (selectedAlbum == 3){
            	goalHeight = 0;
            }
            Heino.Effect.VerticalResizeTo(containerDiv, goalHeight, 0.5);
            visible = true;
            $$('#accordion-toggle-search .tglArrow')[0].addClassName('tglOpen');
        },
        ToggleVisibility: function() {
            if(this.Visible())
            this.Hide();
            else
            this.Show();
        },
        Visible: function() {
            return visible;
        },
        SetSelectedAlbum: function(a) {
            selectedAlbum = a;					// Ugly, refactor function out.
            this.initialize(parent, model);
        },
        Reset: function(suppressUpdate) {
            var formEl = $('form_toolbar2'),
            searchOptions, searchOptionValues;

            suppressUpdate = suppressUpdate || false;

            searchOptions = formEl.childElements().findAll(function(e) { return e.hasClassName('searchOption'); });
            for(var i = 0; i < searchOptions.length; i++) {
                searchOptionValues = searchOptions[i].childElements().findAll(function(e) {
                    return e.tagName == 'DIV' && (e.innerText || e.textContent) != '|' && !e.hasClassName('first'); });
                    searchOptionValues[0].addClassName('selected');
                    $('optionValue' + (i+1)).value = "";
                    for(var j = 1; j < searchOptionValues.length; j++)
                    searchOptionValues[j].removeClassName('selected');
            }

            model.SetCategories.bind(model, criteriaFormToHash(), suppressUpdate)();
        }
    }
}());

var AlbumOverviewSearchFieldController = Class.create(function() {
    var parent, model, searchField, submitWaitTimer;

    function checkKeyDown(e) {
        var keyCode = getKeyCodeFromEvent(e);

        // If key is enter
        if(keyCode == 13) {
            if(submitWaitTimer) clearTimeout(submitWaitTimer);
            submitSearch();
        } else {
            clearTimeout(submitWaitTimer);
            if(!$F(searchField).strip().blank())
            submitWaitTimer = setTimeout(submitSearch, Config.SearchFieldAutoSubmitDelay);
        }
    }

    function submitSearch() {
        var searchText = $F(searchField);

        parent.SearchPanel.Reset(true);
        parent.OverviewPanel.ResetActivePage();

        if(searchField.hasClassName('catalog_page')) {
            model.SetSearchTextFilter.bind(model, searchText)();
            window.location = location.href.split('#')[0] + '#' + php_urlencode(searchText);
            // Close details
        }
    }

    return {
        initialize: function(par, overviewModel) {
            parent = par;
            model = overviewModel;
            searchField = $('freetext_field');

            searchField = $('freetext_field');
            if(!location.hash.blank() && location.hash.indexOf(':') === -1)
            searchField.value = location.hash.substr(1);

            searchField.observe('focus', function() { Config.MenuToggleKeyEnabled = false; });
            searchField.observe('blur', function() { Config.MenuToggleKeyEnabled = true; });

            searchField.observe('keydown', checkKeyDown);
            searchField.observe('click', function(e) { e.stop(); });	// Stop click from propagating
        },
        Clear: function(suppressUpdate) {
            suppressUpdate = suppressUpdate || false;
            model.SetSearchTextFilter.bind(model, "", suppressUpdate)();
            searchField.value = "";
            location.hash = "";
        }
    }
}());

var AlbumPhotoOverviewPanel = Class.create(function() {
    var inAnimation, parent, model, preloader,
    activePage, pageTotal, activePictureId,
    containerDiv, navContainerDiv,
    minimized, visible, self;

    function loadNavData(onComplete) {
        function setupNavigationDOM(transport) {
            navContainerDiv.innerHTML = transport.responseText;

            var node;
            if((node = $('photo-album-overview-nav-home'))) node.observe('click', this.ShowNextPage.bind(this, this.PageDirectionLeftHome));
            if((node = $('photo-album-overview-nav-prev'))) node.observe('click', this.ShowNextPage.bind(this, this.PageDirectionLeft));
            if((node = $('photo-album-overview-nav-next'))) node.observe('click', this.ShowNextPage.bind(this, this.PageDirectionRight));
            if((node = $('photo-album-overview-nav-end'))) node.observe('click', this.ShowNextPage.bind(this, this.PageDirectionRightEnd));
            pageTotal = (node) ? parseInt(node.title) : activePage;

            if(onComplete) onComplete();
        }

        new Ajax.Request(sprintf('%sdivs/div_toolbar1.htm?pages_active=%d&languageId=%s&r=88564', Config.Eestairs4ScriptDir, activePage, $('languageId').innerHTML), { onSuccess: setupNavigationDOM.bind(this) });
    }

    function scrollToNextPage(direction, callback, transport) {
        loadNavData.bind(this)();

        containerDiv.insert({ bottom: sprintf("<div id='resultPhotosNew'>%s</div>", transport.responseText) });

        switch(direction) {
            case this.PageDirectionLeft:
            case this.PageDirectionLeftHome:
            $('resultPhotos').setStyle({float: 'right'});
            $('resultPhotosNew').setStyle({float: 'right'});
            $$('#resultPhotos .resultPhotosContainer').each(function(element){ element.setStyle({position: 'absolute', left: '0px', right: 'auto'}); });
            $$('#resultPhotosNew .resultPhotosContainer').each(function(element){ element.setStyle({position: 'absolute', left: 'auto', right: '0px'}); });
            break;
            case this.PageDirectionRight:
            case this.PageDirectionRightEnd:
            $('resultPhotos').setStyle({float: 'left'});
            $('resultPhotosNew').setStyle({float: 'left'});
            $$('#resultPhotos .resultPhotosContainer').each(function(element){ element.setStyle({position: 'absolute', left: 'auto', right: '0px'}); });
            $$('#resultPhotosNew .resultPhotosContainer').each(function(element){ element.setStyle({position: 'absolute', left: '0px', right: 'auto' }); });
            break;
            default:
            return;
        }

        function setWidthStyle(p) { this.setStyle({width: p+'px'}); };
        new Effect.Tween('resultPhotos', 540, 0, { delay: 0.3, duration: 0.8 }, setWidthStyle);
        new Effect.Tween('resultPhotosNew', 0, 540,
        {
            delay: 0.3,
            duration: 0.8,
            afterFinish: function() {
                $('resultPhotos').remove();
                $('resultPhotosNew').id = 'resultPhotos';
                inAnimation = false;
                setPictureEventHandlers();

                if(callback)
                callback();
            }
        }, setWidthStyle
        );

        preloader.PreloadForPage(activePage, pageTotal);
    }

    function setPictureEventHandlers() {
        var pictureContainer = $('resultPhotosContainer'),
        pictureNodes = pictureContainer.childElements().findAll(function(n) {
            return n.tagName == 'DIV' && (n.hasClassName('photoSmallContainer') || n.hasClassName('photoSmallContainerSmall')); } );
            pictureNodes.each(function(n) {
                var imageNode = n.childElements().findAll(function(n) { return n.tagName == 'IMG'; })[0];
                n.observe('click', function(photoId) {
                    if(parent.DetailsPanel.Loading()) return;

                    activePictureId = photoId;

                    if(parent.SearchPanel.Visible()) parent.SearchPanel.Hide();
                    if(!parent.OverviewPanel.Minified()) parent.OverviewPanel.Minify();
                    parent.DetailsPanel.Show(photoId);

                    // Set selected border
                    self.SetActiveImageById(photoId);

                    // Now resize the myalbum div
                    Heino.Effect.VerticalResizeTo($('accordion-content-eealbum'), 50, 0.5);

                }.curry(imageNode.id));
            });
    }

    return {
        initialize: function(parentController, overviewModel) {
            parent = parentController;
            model = overviewModel;
            preloader = new AlbumPhotoOverviewPreloader(model);
            model.RegisterObserver(this);

            containerDiv = $('accordion-content-eealbum');
            navContainerDiv = $('accordion-toggle-eealbum-nav');

            //$('accordion-toggle-eealbum').observe('click', this.ToggleVisibility.bind(this));

            pageTotal = 1;
            inAnimation = false;
            minified = false;
            visible = true;

            self = this;

            this.ResetActivePage();
            this.Update();
        },
        ShowNextPage: function(direction, e, callback) {
            if(e) e.stop();
            if(!this.Visible()) this.Show();

            var previousActivePage = activePage;

            switch(direction) {
                case this.PageDirectionLeft:
                if(activePage > 1)
                activePage--;
                break;
                case this.PageDirectionLeftHome:
                activePage = 1; break;
                case this.PageDirectionRight:
                if(activePage < pageTotal)
                activePage++;
                break;
                case this.PageDirectionRightEnd:
                activePage = pageTotal; break;
                default:
                return;
            }

            if(previousActivePage === activePage || inAnimation) return;
            inAnimation = true;

            model.GetPhotoPageHTML(activePage, scrollToNextPage.bind(this, direction, callback));
        },
        ActivePage: function() {
            return activePage;
        },
        PageTotal: function() {
            return pageTotal;
        },
        ActiveImageId: function() {
            return activePictureId;
        },
        Update: function() {
            var boundNavDataFunc = loadNavData.bind(this, function() { preloader.PreloadForPage.bind(preloader)(activePage, pageTotal); } );

            function setupInitialUI(transport) {
                $('resultPhotos').innerHTML = transport.responseText;
                setPictureEventHandlers();

                if(activePictureId)
                self.SetActiveImageById(activePictureId);

                boundNavDataFunc();
            }

            model.GetPhotoPageHTML(activePage, setupInitialUI);
        },
        Minify: function() {
            if(minified && visible)
            return;
            else if(minified && !visible)
            this.Show();

            $('resultPhotos').fade(
            {
                afterFinish: function() {
                    Heino.Effect.VerticalResizeTo(containerDiv, 50, 0.5);
                    Heino.Effect.VerticalResizeTo($('resultPhotos'), 370);

                    activePage = activePage * 2;
                    var indexOfImage = self.ShownImages().indexOf(activePictureId);
                    if(Object.isUndefined(indexOfImage) || indexOfImage < 12) activePage--;

                    model.SetPhotoSize('thumb', true);
                    model.SetPhotosPerPage(12);
                }
            });
            setTimeout(function() { $('resultPhotos').appear(); }, 2500);
            minified = true;
            visible = true;
            containerDiv.setStyle({ 'padding': '5px 15px' });
            $$('#accordion-toggle-eealbum .tglArrow')[0].removeClassName('tglOpen');
        },
        Maximize: function() {
            $('resultPhotos').fade(
            {
                afterFinish: function() {
                    Heino.Effect.VerticalResizeTo(containerDiv, 400, 0.5);
                    Heino.Effect.VerticalResizeTo($('resultPhotos'), 370);

                    if(activePage % 2 != 0) activePage++;
                    activePage = activePage / 2;

                    model.SetPhotoSize('', true);
                    model.SetPhotosPerPage(24);
                }
            });
            setTimeout(function() { $('resultPhotos').appear(); }, 2500);
            minified = false;
            visible = true;
            containerDiv.setStyle({ 'padding': '5px 15px' });
            $$('#accordion-toggle-eealbum .tglArrow')[0].addClassName('tglOpen');
        },
        Minified: function() {
            return minified;
        },
        Show: function() {
            if(!visible) {
                visible = true;
                var goalSize = (minified) ? 50 : 400;
                Heino.Effect.VerticalResizeTo(containerDiv, goalSize);

                $('resultPhotos').appear();
                Heino.Effect.VerticalResizeTo($('resultPhotos'), 370);

                containerDiv.setStyle({ 'padding': '5px 15px' });
                $$('#accordion-toggle-eealbum .tglArrow')[0].addClassName('tglOpen');
                $('resultPhotos').appear();
            }
        },
        Hide: function() {
            if(visible && !minified) {
                visible = false;

                if(minified)
                $('resultPhotos').hide();
                else
                Heino.Effect.VerticalResizeTo($('resultPhotos'), 0);

                Heino.Effect.VerticalResizeTo(containerDiv, 0);
                containerDiv.setStyle({ 'padding': '0px' });
                $$('#accordion-toggle-eealbum .tglArrow')[0].removeClassName('tglOpen');
            }
        },
        ToggleVisibility: function() {
            if(this.Visible())
            this.Hide();
            else
            this.Show();
        },
        Visible: function() {
            return visible;
        },
        ShownImages: function() {
            var children = $('resultPhotosContainer').childElements(), photoIdList = new Array();
            for(var i = 0; i < children.length; i++)
            photoIdList.push(children[i].childElements().findAll(function(n) { return n.tagName === 'IMG' })[0].id);
            return photoIdList;
        },
        SetActiveImageById: function(id) {
            var imageContainer = $('resultPhotosContainer'),
            imageNodes = imageContainer.childElements().findAll(function(n) {
                return n.tagName == 'DIV' && (n.hasClassName('photoSmallContainer') || n.hasClassName('photoSmallContainerSmall')); } );

                activePictureId = id;

                imageNodes.each(function(node) {
                    var imageNode = node.childElements().findAll(function(node) { return node.tagName == 'IMG'; })[0];
                    if(imageNode.id === id)
                    imageNode.addClassName('photoThumbActive');//imageNode.setStyle({ 'border': '1px solid #F00' });
                    else
                    imageNode.removeClassName('photoThumbActive');//imageNode.setStyle({ 'border': '1px solid #E8F1EE' });
                });
        },
        ResetActivePage: function() {
            activePage = 1;
        },
        PageDirectionLeft: 1,
        PageDirectionLeftHome: 2,
        PageDirectionRight: 3,
        PageDirectionRightEnd: 4
    }
}());

var AlbumExplanationPanel = Class.create(function() {
    var visible = false,
    containerDiv, disabled;

    return {
        initialize: function() {
            if(Heino.Cookie.Value('hidePhotoAlbumExplanation'))
            disabled = true;
        },
        Show: function() {
            visible = true;
        },
        Hide: function() {
            visible = false;
            Heino.Effect.VerticalResizeTo(containerDiv, 0);
        },
        Disable: function() {
            disabled = true;
            Heino.Cookie.Create('hidePhotoAlbumExplanation', true, 7);
        }
    }
}());

var AlbumPhotoDetailsPanel = Class.create(function() {
    var parent, containerDiv, visible, detailsVisible, inAnimation, loading,
    currentImageLeft, currentImageOrigDimensions,
    activeImage, imageList, self;

    function loadInitialData(photoId, showSpecificPhoto, scrollDirection) {

        new Ajax.Request(sprintf("%sdivs/div_details.htm?photo_id=%s&languageId=%s&r=12", Config.Eestairs4ScriptDir, photoId, $('languageId').innerHTML), { onSuccess: setupInitialUI.curry(photoId, showSpecificPhoto, scrollDirection) } );

        if(!visible)
        Heino.Effect.VerticalResizeTo(containerDiv, 580, 0.5, parent.FavouritePanel.CheckOverlap);

        $('arrow-keys').show();
    }

    function setupInitialUI(photoId, showSpecificPhoto, scrollDirection, transport) {
        var container = $('accordion-content-details');
        if(Object.isUndefined(scrollDirection)) {
            var newEl = new Element('div', { id: 'detailWrapper', 'class': 'detailWrapper' });
            newEl.innerHTML = transport.responseText;
            container.childElements().each(function(n) { n.remove(); }); // Remove all children
            container.insert(newEl);
        } else {
            var newEl = new Element('div', { id: 'detailWrapperNew', 'class': 'detailWrapper' });
            var oldEl = $('detailWrapper');
            newEl.innerHTML = transport.responseText;

            if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
                container.insert({ top: newEl });
                oldEl.remove();
                newEl.id = 'detailWrapper';
            }else{
                switch(scrollDirection) {
                    case "right":
                    newEl.style.marginLeft = '-580px';
                    container.insert({ top: newEl });

                    new Effect.Tween(newEl, -580, 0, { duration: 0.5, afterFinish: function() {
                        oldEl.remove();
                        newEl.id = 'detailWrapper';
                    }}, function(p) { this.style.marginLeft = p+'px'; });
                    break;
                    case "left":
                    newEl.style.marginRight = '-580px';
                    container.insert(newEl);
                    new Effect.Tween(oldEl, 0, -580, { duration: 0.5, afterFinish: function() {
                        oldEl.remove();
                        newEl.id = 'detailWrapper';
                        newEl.style.marginRight = '0px';
                    }}, function(p) { this.style.marginLeft = p+'px'; });
                    break;
                }
            }
        }

        new Ajax.Request(sprintf('%sdivs/div_series.htm?photo_id=%s&selectedObject=%s&r=88564', Config.Eestairs4ScriptDir, photoId, parent.albumOverviewModel.SelectedAlbum()), { onComplete: function(newEl, transport) {
            newEl.descendants().findAll(function(n) { return n.hasClassName('photoSeries'); })[0].innerHTML = transport.responseText;

            var node = newEl.descendants().findAll(function(n) { return n.hasClassName('photo_id_list'); })[0],
            textContent = node.innerText || node.textContent;
            imageList = textContent.split("|");

            if(showSpecificPhoto) {
                var j = 0;
                while(j < imageList.length) {
                    if(imageList[j] == photoId)
                    break;
                    else j++;
                }
                activeImage = (j != imageList.length) ? j : 0;
            } else
            activeImage = 0;

            new Ajax.Request(sprintf("%sdivs/div_details.htm?photo_id=%s&r=12&image_only=true", Config.Eestairs4ScriptDir, imageList[activeImage]), {
                onComplete: function(newEl, transport) {
                    var detailPhoto = newEl.descendants().findAll(function(n) { return n.hasClassName('detailPhoto'); })[0];
                    detailPhoto.innerHTML = transport.responseText;

                    var image = $('detailPhotoImgNew');

                    image.id = 'detailPhotoImg';	// Don't ask, just easier and quicker than proper fix.
                    Heino.Effect.VerticalResizeTo(containerDiv, 580, 0.5, parent.FavouritePanel.CheckOverlap);
                    image.appear();

                    var imageLeft = ($('accordion-content-details').getWidth() / 2) - (image.width / 2);
                    detailPhoto.setStyle( { 'left': Math.round(imageLeft) + 'px' } );

                    image.observe('click', self.ShowDetails.bind(self));
                    newEl.descendants().findAll(function(n) { return n.hasClassName('detailText'); })[0].observe('click', self.HideDetails.bind(self));
                    setFavEventHandler(newEl);

                    if($('detailWrapperNew'))
                    $('detailWrapperNew').id = 'detailWrapper';

                    loading = false;
                }.curry(newEl)});

                var link = newEl.descendants().findAll(function(n) { return n.hasClassName('photoLinkPrevious'); })[0];
                link.observe('click', function(e) {
                    var overview = parent.OverviewPanel,
                    overviewImageList = overview.ShownImages(),
                    index = overviewImageList.indexOf(($('detailsActivePhotoId').innerText || $('detailsActivePhotoId').textContent));

                    if(index > 0)
                    self.Show(overviewImageList[index-1], false, "right");
                    else if(index == 0)
                    overview.ShowNextPage(overview.PageDirectionLeft, null, function(overviewPanel) {
                        var imageList = overview.ShownImages();
                        overviewPanel.SetActiveImageById(imageList[11]);
                        self.Show(imageList[11], false, "right");
                    }.curry(overview));
                });

                link = newEl.descendants().findAll(function(n) { return n.hasClassName('photoLinkNext'); })[0];
                link.observe('click', function(e) {
                    var overview = parent.OverviewPanel,
                    overviewImageList = overview.ShownImages(),
                    index = overviewImageList.indexOf(($('detailsActivePhotoId').innerText || $('detailsActivePhotoId').textContent));

                    if(index < overviewImageList.length-1 && index != -1)
                    self.Show(overviewImageList[index+1], false, "left");
                    else if(index == overviewImageList.length-1)
                    overview.ShowNextPage(overview.PageDirectionRight, null, function(overviewPanel) {
                        var imageList = overview.ShownImages();
                        overviewPanel.SetActiveImageById(imageList[0]);
                        self.Show(imageList[0], false, "left");
                    }.curry(overview));

                });

                var seriesNavDiv = newEl.descendants().findAll(function(n) { return n.hasClassName('photo_series_nav'); })[0], newEl, i = 0;
                imageList.each(function(item) {
                    var el = new Element("span").update('&#8226;');
                    el.observe('click', self.ScrollToImage.bind(self,i++));
                    seriesNavDiv.insert(el);
                });

                seriesNavDiv.childElements()[activeImage].setStyle({ color: 'red'});

                setNavigationVisibility(newEl);

                if($('detailsActivePhotoId'))
                $('detailsActivePhotoId').remove();
                $('accordion-content-details').insert(new Element('span', { 'style': 'display: none', 'id': 'detailsActivePhotoId' }).update(photoId));
        }.curry(newEl) });
    }

    function setFavEventHandler(element) {
        new Ajax.Request(sprintf("%sdivs/div_details.htm?photo_id=%s&r=12&check_in_fav=true", Config.Eestairs4ScriptDir, imageList[activeImage]), { onSuccess: function(transport) {
            var inFav = transport.responseText === 'true';

            var favEl = element.descendants().findAll(function(n) { return n.hasClassName('favouritesLink'); })[0];
            var linkSpan = favEl.childElements()[0];
            var boundRefreshFunc = parent.FavouritePanel.Refresh.bind(parent.FavouritePanel);

            favEl.stopObserving();

            if(inFav) {
                linkSpan.addClassName('removeFromFavorites');
                linkSpan.removeClassName('addToFavorites');
                favEl.observe('click', function() {
                    new Ajax.Request(sprintf("%sdivs/div_details.htm?photo_id=%s&r=12&photo_delete=%s", Config.Eestairs4ScriptDir, imageList[activeImage], imageList[activeImage]),
                    { onSuccess: function() {
                        boundRefreshFunc();
                        setFavEventHandler($('detailWrapper'));
                    }});
                });
            } else {
                linkSpan.addClassName('addToFavorites');
                linkSpan.removeClassName('removeFromFavorites');
                favEl.observe('click', function() {
                    new Ajax.Request(sprintf("%sdivs/div_details.htm?photo_id=%s&r=12&photo_add=%s", Config.Eestairs4ScriptDir, imageList[activeImage], imageList[activeImage]),
                    { onSuccess: function() {
                        boundRefreshFunc();
                        animateAddToFavorites();
                        setFavEventHandler($('detailWrapper'));
                    }});
                });
            }
        } } );

    }

    function animateAddToFavorites(){
        var detailPhotoImg=$('detailPhotoImg');
        var offsetFavoritePanel=$('accordion-toggle-myalbum').cumulativeOffset();
        var offsetDetailPhotoImg=detailPhotoImg.cumulativeOffset();
        var startHeight=detailPhotoImg.getHeight();
        var startWidth=detailPhotoImg.getWidth();
        var startTop=offsetDetailPhotoImg.top;
        var startLeft=offsetDetailPhotoImg.left;
        var endHeight=0; var endWidth=88;

        // calculate position of last or use parent if element 'accordion-content-myalbum' if no favorites selected
        var accordionMyAlbum=$('accordion-content-myalbum');
        if (accordionMyAlbum.childElements().last().childElements().size()==0){
            var offsetAccordionMyAlbum=accordionMyAlbum.cumulativeOffset();
            var endTop=offsetAccordionMyAlbum.top+30;
            var endLeft=offsetAccordionMyAlbum.left+90;
        }else{
            var lastFavoriteItem=accordionMyAlbum.childElements().last().childElements().last();
            var offsetLastFavoriteItem=lastFavoriteItem.cumulativeOffset();
            var endTop=offsetLastFavoriteItem.top;
            var endLeft=offsetLastFavoriteItem.left+90;
        }
        var dropOutDiv='<div id="drop-out-div" style="width: '+startWidth+'px; height: '+startHeight+'px; border: white 2px solid; position: absolute; left: '+startLeft+'px; top: '+startTop+'px;"></div>';

        if (!$('drop-out-div')){
            $$('body').last().insert({ bottom: dropOutDiv });
            dropOutDiv=$('drop-out-div');
            dropOutDiv.setOpacity(0.3);
            new Effect.Tween(dropOutDiv, startHeight, endHeight, { duration: 0.4 }, function(p) {
                this.style.height = p+'px';
            });
            new Effect.Tween(dropOutDiv, startWidth, endWidth, { duration: 0.4 }, function(p) {
                this.style.width = p+'px';
            });
            new Effect.Tween(dropOutDiv, startLeft, endLeft, { duration: 0.4 }, function(p) {
                this.style.left = p+'px';
            });
            new Effect.Tween(dropOutDiv, startTop, endTop, { duration: 0.4, afterFinish: function() {
                dropOutDiv.remove();
            }}, function(p) {
                this.style.top = p+'px';
            });
        }
    }

    function scrollSeries(direction) {
        loading = true;

        var self = parent.DetailsPanel;
        if(detailsVisible)
        self.HideDetails();

        new Ajax.Request(sprintf("%sdivs/div_details.htm?photo_id=%s&r=12&image_only=true", Config.Eestairs4ScriptDir, imageList[activeImage]), { onSuccess: scrollSeriesCallback.curry(direction) } );

        function scrollSeriesCallback(direction, transport) {
            var image = $('detailPhotoImg'), oldEl = $$('.detailPhoto')[0],
            newEl = new Element('div', { id: 'detailPhotoNew', 'class': 'photo detailPhoto' });
            newEl.update(transport.responseText);

            function afterFinishCallback() {
                oldEl.remove();
                newEl.id = 'detailPhoto';

                var image = $('detailPhotoImgNew');
                image.id = 'detailPhotoImg';
                image.observe('click', parent.DetailsPanel.ShowDetails.bind(parent.DetailsPanel));

                loading = false;
            }

            var heightPos = $('accordion-content-details').getHeight() + 20;

            switch(direction) {
                case parent.DetailsPanel.ScrollDirectionLeft:
                newEl.style.top = (-1 * heightPos) + 'px';
                $$('.detail_photos')[0].insert({ top: newEl });

                var newImage = $('detailPhotoImgNew');
                var imageLeft = ($('accordion-content-details').getWidth() / 2) - (newImage.getWidth() / 2);
                newImage.ancestors()[0].style.left = Math.round(imageLeft) + 'px';

                new Effect.Tween(newEl, (-1 * heightPos), 40, { duration: 0.5 }, function(p) { this.style.top = p+'px'; });
                new Effect.Tween(oldEl, 40, heightPos, { afterFinish: afterFinishCallback, duration: 0.5 },
                function(p) { this.style.top = p+'px'; });
                break;

                case parent.DetailsPanel.ScrollDirectionRight:
                newEl.style.top = heightPos + 'px';
                $$('.detail_photos')[0].insert(newEl);

                var newImage = $('detailPhotoImgNew');
                var imageLeft = ($('accordion-content-details').getWidth() / 2) - (newImage.getWidth() / 2);
                newImage.ancestors()[0].style.left = Math.round(imageLeft) + 'px';

                new Effect.Tween(newEl, heightPos, 40, { duration: 0.5 },  function(p) { this.style.top = p+'px'; });
                new Effect.Tween(oldEl, 40, (-1 * heightPos), { afterFinish: afterFinishCallback, duration: 0.5 },
                function(p) { this.style.top = p+'px'; });
                break;
            }
            newEl.style.display = 'block';

            var seriesNavDiv = $$('.photo_series_nav')[0], counter = 0;
            seriesNavDiv.childElements().each(function(node) {
                if(counter++ === activeImage)
                node.setStyle({ color: 'red'});
                else
                node.setStyle({ color: 'white'});
            });

            setNavigationVisibility($('detailWrapper'));
            setFavEventHandler($('detailWrapper'));
        }
    }

    function setNavigationVisibility(element) {
        var prevLink = element.descendants().findAll(function(n) { return n.hasClassName('photoLinkPrevious'); })[0];
        var nextLink = element.descendants().findAll(function(n) { return n.hasClassName('photoLinkNext'); })[0];
        var overview = parent.OverviewPanel,
        overviewImageList = overview.ShownImages(),
        index = overviewImageList.indexOf(overview.ActiveImageId());

        if(overview.ActivePage() === 1 && index === 0)
        prevLink.hide();
        else
        prevLink.show();

        if(index === overviewImageList.length && overview.ActivePage() === overview.PageTotal())
        nextLink.hide();
        else
        nextLink.show();
    }

    function keyEventHandler(e) {
        if(!visible || !$('detailPhotoImg')) return;

        var overview = parent.OverviewPanel;
        overviewImageList = overview.ShownImages(),
        index = overviewImageList.indexOf(($('detailsActivePhotoId').innerText || $('detailsActivePhotoId').textContent)),
        keyCode = getKeyCodeFromEvent(e);

        switch(keyCode) {
            case 38: 		// Up arrow
            if(activeImage > 0)
            self.ScrollInDirection.bind(self, self.ScrollDirectionLeft)();
            else if(index > 0)
            self.Show(overviewImageList[index-1], false, "right");
            else if(index == 0)
            overview.ShowNextPage(overview.PageDirectionLeft, null, function(overviewPanel) {
                var imageList = overview.ShownImages();
                overviewPanel.SetActiveImageById(imageList[11]);
                self.Show(imageList[11], false, "right");
            }.curry(overview));
            break;

            case 40: 		// Down arrow
            if(activeImage < imageList.length-1)
            self.ScrollInDirection.bind(self, self.ScrollDirectionRight)();
            else if(index < overviewImageList.length-1 && index != -1)
            self.Show(overviewImageList[index+1], false, "left");
            else if(index == overviewImageList.length-1)
            overview.ShowNextPage(overview.PageDirectionRight, null, function(overviewPanel) {
                var imageList = overview.ShownImages();
                overviewPanel.SetActiveImageById(imageList[0]);
                self.Show(imageList[0], false, "left");
            }.curry(overview));
            break;

            case 37: 		// Left arrow
            if(index > 0)
            self.Show(overviewImageList[index-1], false, "right");
            else if(index == 0)
            overview.ShowNextPage(overview.PageDirectionLeft, null, function(overviewPanel) {
                var imageList = overview.ShownImages();
                overviewPanel.SetActiveImageById(imageList[11]);
                self.Show(imageList[11], false, "right");
            }.curry(overview));
            break;

            case 39: 		// Right arrow
            if(index < overviewImageList.length-1)
            self.Show(overviewImageList[index+1], false, "left");
            else if(index == overviewImageList.length-1)
            overview.ShowNextPage(overview.PageDirectionRight, null, function(overviewPanel) {
                var imageList = overview.ShownImages();
                overviewPanel.SetActiveImageById(imageList[0]);
                self.Show(imageList[0], false, "left");
            }.curry(overview));
            break;
        }
    }

    return {
        initialize: function(parentController) {
            parent = parentController;
            self = this;

            containerDiv = $('accordion-content-details');

            visible = false;
            detailsVisible = false;
            inSlideShow = false;
            activeImage = 0;

            imageList = new Array();
            slideShowController = new AlbumPhotoDetailsPanelSlideShowController(this);

            document.observe('keyup', function(e) { keyEventHandler(e); });

        },
        Show: function(photoId, showSpecificPhoto, scrollDirection) {
            if(!photoId || loading) return;
            showSpecificPhoto = showSpecificPhoto || false;
            loadInitialData(photoId, showSpecificPhoto, scrollDirection);
            parent.OverviewPanel.SetActiveImageById(photoId);

            detailsVisible = false;
            visible = true;
            loading = true;
        },
        Hide: function() {
            if(!visible) return;
            containerDiv.childElements().invoke('remove');
            Heino.Effect.VerticalResizeTo(containerDiv, 0, 0.5);
            $('arrow-keys').hide();
            visible = false;
        },
        Visible: function() {
            return visible;
        },
        ScrollInDirection: function(direction) {
            if(loading) return;

            switch(direction) {
                case this.ScrollDirectionRight:
                if(activeImage < imageList.length-1)
                activeImage++;
                else return;
                break;
                case this.ScrollDirectionLeft:
                if(activeImage > 0)
                activeImage--;
                else return;
                break;
                default: return;
            }

            scrollSeries(direction);
        },
        ScrollToImage: function(imageNumber) {
            if(!loading && imageNumber >= 0 && imageNumber < imageList.length && imageNumber != activeImage) {
                var direction = (imageNumber > activeImage) ? this.ScrollDirectionRight : this.ScrollDirectionLeft;
                activeImage = imageNumber;
                scrollSeries(direction);
            }
        },
        ScrollDirectionLeft: 1,
        ScrollDirectionRight: 2,
        ShowDetails: function() {
            if(!inAnimation && !detailsVisible) {
                inAnimation = true;

                var image = $('detailPhotoImg');
                image.absolutize();

                var imageDivOffset = containerDiv.descendants().findAll(function(n) { return n.hasClassName('detailPhoto') })[0].positionedOffset().left;
                var targetLeft = $('accordion-content-details').getDimensions().width - (image.getDimensions().width / 2) - imageDivOffset - 20;
                currentImageLeft = image.positionedOffset().left;
                currentImageOrigDimensions = image.getDimensions();

                new Effect.Scale(image, 50, { duration: this.ToggleDetailsDelay });
                new Effect.Tween(image, currentImageLeft, targetLeft, { duration: this.ToggleDetailsDelay }, function(p) { this.style.left = p+"px"; });

                image.stopObserving('click');
                image.observe('click', this.HideDetails.bind(this));

                var el = containerDiv.descendants().findAll(function(n) { return n.hasClassName('detailText')})[0];
                el.appear({ duration: this.ToggleDetailsDelay, afterFinish: function() { inAnimation = false }});

                el = containerDiv.descendants().findAll(function(n) { return n.hasClassName('detailsExtraLinks')})[0];
                el.appear({ duration: this.ToggleDetailsDelay });

                el = containerDiv.descendants().findAll(function(n) { return n.hasClassName('photo_series_nav')})[0];
                el.fade({ duration: this.ToggleDetailsDelay });
                
                if (node=$('downloadSource')){
                    node.stopObserving('click');
                    node.observe('click', function(){
                        window.open(Config.Eestairs4ScriptDir + "../images/download/" + imageList[activeImage] + "_/" + $('titleOnly').innerHTML + ".jpg");
                    });
                }
                if (node=$('downloadSourceWm')){
                    node.stopObserving('click');
                    node.observe('click', function(){
                        window.open(Config.Eestairs4ScriptDir + "../images/downloadwm/" + imageList[activeImage] + "_/" + $('titleOnly').innerHTML + ".jpg");
                    });
                }
                detailsVisible = true;
            }
        },
        HideDetails: function() {
            if(!inAnimation && detailsVisible) {
                inAnimation = true;
                var image = $('detailPhotoImg');

                new Effect.Scale(image, 100, { scaleMode: { originalHeight: currentImageOrigDimensions.height, originalWidth: currentImageOrigDimensions.width }, scaleFrom: 50, duration: this.ToggleDetailsDelay });
                new Effect.Tween(image, image.positionedOffset().left, currentImageLeft, { duration: this.ToggleDetailsDelay }, function(p) { this.style.left = p+"px"; } );

                image.stopObserving('click');
                image.observe('click', this.ShowDetails.bind(this));

                var el = containerDiv.descendants().findAll(function(n) { return n.hasClassName('detailText')})[0];
                el.fade({ duration: this.ToggleDetailsDelay, afterFinish: function() { inAnimation = false; image.relativize(); }});

                el = containerDiv.descendants().findAll(function(n) { return n.hasClassName('detailsExtraLinks')})[0];
                el.fade({ duration: this.ToggleDetailsDelay });

                el = containerDiv.descendants().findAll(function(n) { return n.hasClassName('photo_series_nav')})[0];
                el.appear({ duration: this.ToggleDetailsDelay });

                detailsVisible = false;
            }
        },
        ToggleDetailsDelay: 0.3,
        DetailsVisible: function() {
            return detailsVisible;
        },
        ImageTotal: function() {
            return imageList.length;
        },
        ActiveImage: function() {
            return activeImage;
        },
        Loading: function() {
            return loading;
        }
    }
}());

var AlbumPhotoDetailsPanelSlideShowController = Class.create(function() {
    var slideShowPlaying, panel, timer;

    function forwardToNext() {
        panel.ScrollInDirection(panel.ScrollDirectionRight);

        // Reset timeout
        if(panel.ActiveImage() < panel.ImageTotal()-1)
        timer = setTimeout(forwardToNext, Config.DetailsSlideShowDelay);
        else
        slideShowPlaying = false;
    }

    return {
        initialize: function(detailPanel) {
            panel = detailPanel;
        },
        Start: function() {
            if(panel.ActiveImage() < panel.ImageTotal()-1)
            timer = setTimeout(forwardToNext, Config.DetailsSlideShowDelay);
            slideShowPlaying = true;
        },
        Pause: function() {
            clearTimeout(timer);
            slideShowPlaying = false;
        },
        Toggle: function() {
            if(this.InSlideShow())
            this.Pause();
            else
            this.Start();
        },
        InSlideShow: function() {
            return slideShowPlaying;
        }
    }
}());

var AlbumFavouritePanel = Class.create(function() {
    var parent, headerDiv, contentDiv, visible,
    explanationDisabled, photoLoader;

    function loadFavoriteData() {
        photoLoader.GetPhotoData(function(transport) {
            contentDiv.innerHTML = transport.responseText;
            contentDiv.childElements()[0].childElements().each(function(node) {
                if (contentDiv.childElements()[1].childElements().size()>0){
                    if(node.id == 'print-favourites') node.observe('click', function(){
                        window.open(Config.Eestairs4ScriptDir + "misc/generatepdf.htm?selection=1&languageId=" + $('languageId').innerHTML);
                    });
                    if(node.id == 'send-favourites') node.observe('click', showSendFavourites);
                    if(node.id == 'request-information-favourites') node.observe('click', function(){
                        document.location.href='26_RequestInformation.htm';
                    });
                    // only show 'empty favorites if not already empty
                    if (node.id == 'emtpy-favourites'){
                        node.observe('click', emptyFavorites);
                    }
                }else{
                    node.remove();
                }
            });
            contentDiv.childElements()[1].childElements().each(function(node) {
                node.observe('click', function() {
                    parent.DetailsPanel.Show.bind(parent.DetailsPanel, this.id, true)();
                    parent.OverviewPanel.Minify.bind(parent.OverviewPanel)();
                    parent.SearchPanel.Hide();
                });
            });

            Heino.Effect.VerticalResizeTo(contentDiv, calculateRequiredHeight(), 0.5, checkOverlap);
        } , { MyAlbum: 1, languageId: $('languageId').innerHTML});
    }

    function showSendFavourites(){
        new Ajax.Request(sprintf('%sdivs/div_manage_favorites.htm?languageId=%s', Config.Eestairs4ScriptDir, $('languageId').innerHTML), { onSuccess: function(transport){
            contentDiv.innerHTML=transport.responseText;
            $('send-favourites-success-text').hide();
            $('send-favourites-button').observe('click', function(){
                var node,includeLink;
                if (node=$('includeLink')) includeLink=node.checked;
                else includeLink=false;
                new Ajax.Request(sprintf('%sdivs/div_manage_favorites.htm?languageId=%s&show=group_email_success&sender_name=%s&sender_email=%s&to_name=%s&to_email=%s&copyFavourites=%s&includeLink=%s', Config.Eestairs4ScriptDir, $('languageId').innerHTML, $('sender_name').value, $('sender_email').value, $('to_name').value, $('to_email').value, $('copyFavourites').checked, includeLink), { onSuccess: function(transport){}});
                $('send-favourites-success-text').show();
                $('div_group_email').hide();
                $('send-favourites-success-text').observe('click', parent.FavouritePanel.Refresh.bind(parent.FavouritePanel));
            });
            Heino.Effect.VerticalResizeTo(contentDiv, 100, 0.5, checkOverlap);
        }});
    }

    function emptyFavorites(){
        new Ajax.Request(sprintf('%semptyFavourites.php', Config.Eestairs4ScriptDir), { onSuccess: parent.FavouritePanel.Refresh.bind(parent.FavouritePanel)});
    }

    function loadExplanationData() {
        explanationDisabled = false;
        if ($('languageId').innerHTML==1){
            contentDiv.innerHTML = '<h2>UITLEG mijn Album</h2><p>Deze handige functie helpt u in uw keuzeproces. Het hoeft niet direct de definitieve keuze trap of balustrade te zijn, maar door het toevoegen van uw favoriete trappen in Mijn Album bouwt u zo wel een impressie op van uw wensen.</p><br/><p><b>Favoriete trap toevoegen aan Mijn Album</b></p><p>Het toevoegen van een trap doet u door op deze &nbsp;<img src="/html/img/design/toevbutn.png" alt="toevoegen" style="width:15px; height:15px; float:none;"/>&nbsp; knop te drukken:</p><br/><br/><img src="/html/img/design/favouritesExplanation.png" style="width:288px; height:178px; margin-left:130px;" /><br/><div style="float:left; clear:left; margin-top:20px;"><p>Deze verzameling wordt bewaard en de volgende keer dat u op onze website bent kunt u gewoon verder. Daarnaast is het mogelijk om uw verzameling te printen of te mailen zodat u met anderen kunt overleggen.</p></div><br/><div style="float:left; clear:left; margin-top:30px; cursor:pointer;" id="close_explanation_link"><input type="checkbox">Deze uitleg niet meer weergeven.</div>';
        }else{
            contentDiv.innerHTML = '<h2>EXPLANATION My Gallery</h2><p>\'My Gallery\' helps you with choosing a stair. By adding your favourite stairs to \'My Gallery\' you can build your own gallery and get access to your favourite stairs easily.</p><br/><p><b>Adding a stair to \'My Gallery\'</b></p><p>Add a stair to \'My Gallery\' by clicking this button: &nbsp;<img src="/html/img/design/toevbutn.png" alt="Add a stair to My Gallery" style="width:15px; height:15px; float:none;"/>&nbsp;.</p><br/><br/><img src="/html/img/design/favouritesExplanationEn.png" style="width:288px; height:178px; margin-left:130px;" /><br/><div style="float:left; clear:left; margin-top:20px;"><p>Your gallery will be saved at your computer and the next time you come back you can continue working with it. Besides that it is possible to print or e-mail the contents of \'My Gallery\' so as to discuss the stairs with others.</p></div><br/><div style="float:left; clear:left; margin-top:30px; cursor:pointer;" id="close_explanation_link"><input type="checkbox">Do not show this explanation in future.</div>';
        }
        contentDiv.style.height = 'auto';
        containerDiv.setStyle({ position: 'relative' });
        
        parent.SearchPanel.Hide();
        parent.OverviewPanel.Hide();
        
        $('close_explanation_link').observe('click', doCloseExlanation);
        $('accordion-toggle-search').observe('click', doCloseExlanationNoCookie);
        $('accordion-toggle-eealbum').observe('click', doCloseExlanationNoCookie);
    }
    function doCloseExlanation() {
        explanationDisabled = true;
        Heino.Cookie.Create('albumExplanationDisabled', true, 14);
        loadFavoriteData();
        parent.SearchPanel.Show();
        parent.OverviewPanel.Show();
        $('close_explanation_link').stopObserving('click', doCloseExlanation);
        $('accordion-toggle-search').stopObserving('click', doCloseExlanationNoCookie);
        $('accordion-toggle-eealbum').stopObserving('click', doCloseExlanationNoCookie);
    }
    function doCloseExlanationNoCookie() {
        explanationDisabled = true;
        loadFavoriteData();
        parent.SearchPanel.Show();
        parent.OverviewPanel.Show();
        $('close_explanation_link').stopObserving('click', doCloseExlanation);
        $('accordion-toggle-search').stopObserving('click', doCloseExlanationNoCookie);
        $('accordion-toggle-eealbum').stopObserving('click', doCloseExlanationNoCookie);
    }

    function calculateRequiredHeight() {
        var resultDiv = Element.extend(contentDiv.childElements()[1]);
        if(resultDiv) {
            numberOfPictures = (resultDiv.childElements().findAll(function(n) { return n.tagName === 'IMG' && n.hasClassName('photoSmall'); } )).length;
            return (Math.ceil(numberOfPictures / 12) * 46) + 30;
        } else
        return 0;
    }

    function checkOverlap() {
        var photoOverviewDiv = (parent.DetailsPanel.Visible()) ? $('accordion-content-details') : $('accordion-content-eealbum'),
        overviewYOffset = photoOverviewDiv.cumulativeOffset()[1],
        overviewHeight = photoOverviewDiv.getHeight();

        if(containerDiv.getStyle('position') === 'absolute' && containerDiv.cumulativeOffset()[1] < (overviewYOffset + overviewHeight)) {
            containerDiv.setStyle({ position: 'relative' });
        } else if(containerDiv.getStyle('position') === 'absolute' && window.innerHeight > overviewYOffset + overviewHeight + containerDiv.getHeight()) {
            containerDiv.setStyle({ position: 'absolute' });
            containerDiv.setStyle({ bottom: 0 });
        }
    }

    return{
        initialize: function(parentController) {
            parent = parentController;
            photoLoader = new AlbumPhotoLoader();
            photoLoader.DisableCache();

            containerDiv = $$('.accordion-myalbum-container')[0]; // Iew, should replace with ID (fix template)
            contentDiv = $('accordion-content-myalbum');
            visible = false;
            
            // NEW BEHAVIOUR: never show explanation panel by default
            Heino.Cookie.Create('albumExplanationDisabled', true, 14);
            
            // OLD BEHAVIOUR: show explanation data based on cookie
            explanationDisabled = (Heino.Cookie.Value('albumExplanationDisabled')) != null;
            // only show explanation data if search value through hash is empty
            //if (!location.hash.blank()){
                //explanationDisabled=true;
            //}

            $('accordion-toggle-myalbum').observe('click', this.ToggleVisibility.bind(this));
            $('accordion-toggle-myalbum-nav').observe('click', function(){
                //Heino.Cookie.Delete('albumExplanationDisabled');
                //window.location.reload();
                loadExplanationData();
            });

            Event.observe(document.onresize ? document : window, "resize", checkOverlap);

            checkOverlap();
        },
        Show: function() {
            if(explanationDisabled)
            loadFavoriteData();
            else
            loadExplanationData();
            visible = true;
            $$('#accordion-toggle-myalbum .tglArrow')[0].addClassName('tglOpen');
        },
        Hide: function() {
            if(visible) {
                Heino.Effect.VerticalResizeTo(contentDiv, 0, 0.5, checkOverlap);
                visible = false;
                $$('#accordion-toggle-myalbum .tglArrow')[0].removeClassName('tglOpen');
            }
        },
        ToggleVisibility: function() {
            if(visible && explanationDisabled)
            this.Hide();
            else
            this.Show();
        },
        Refresh: function() {
            this.Show();
        },
        DisableExplanation: function() {
            explanationDisabled = true;
            Heino.Cookie.Create('albumExplanationDisabled', true, 14);
        },
        CheckOverlap: function() {
            checkOverlap();
        }
    }
}());

/** End photo album **/

var AlbumPhotoOverviewPreloader = Class.create(function() {
    var preloadedPages, overviewModel, preloadDiv;

    function preloadPage(pageNumber) {
        if(preloadedPages.include(pageNumber)) return;

        var el = new Element("div", { 'id': sprintf('album-photo-preload-item-%d', pageNumber) });
        overviewModel.GetPhotoPageHTML(pageNumber, insertPreloadDataIntoNode.bind(this,el));

        preloadedPages.push(pageNumber);
    }

    function insertPreloadDataIntoNode(node, transport) {
        node.insert(transport.responseText);
        preloadDiv.insert({ bottom: node });
        setTimeout(function() { node.remove(); }, this.RetainmentPeriod);
    }

    return {
        initialize: function(model) {
            preloadedPages = new Array();

            overviewModel = model;
            overviewModel.RegisterObserver(this);

            if(! (preloadDiv = $('album-photo-preload-div'))) {
                preloadDiv = new Element("div", { 'id': 'album-photo-preload-div', style: 'display: none' });
                $('container').insert({ bottom: preloadDiv });
            }
        },
        PreloadPage: function(page) {
            if(Object.isArray(page))
            page.collect(preloadPage.bind(this));
            else
            preloadPage(page).bind(this);
        },
        PreloadForPage: function(activePage, pageTotal) {
            var pagesEligibleForPreload = new Array();

            if(activePage != 1) pagesEligibleForPreload.push(1);
            if(activePage > 1) pagesEligibleForPreload.push(activePage-1);
            if(activePage < pageTotal) pagesEligibleForPreload.push(activePage+1);
            if(activePage != pageTotal) pagesEligibleForPreload.push(pageTotal);

            this.PreloadPage(pagesEligibleForPreload);
        },
        ClearCache: function() {
            preloadedPages.clear();
            //preloadDiv.childElements().invoke('remove');
        },
        Update: function() {
            this.ClearCache();
        },
        RetainmentPeriod: 2000
    }
}());


/** Photo album data source stuff **/

var AlbumPhotoOverviewModel = Class.create(function() {
    var observers, photoDataLoader,
    selectedAlbum, photosPerPage, photoSize,
    searchTextFilter, searchCriteriaHash;

    return {
        initialize: function(album) {
            observers = new Array();
            photoDataLoader = new AlbumPhotoLoader();

            // Default values
            selectedAlbum = album || 1;
            searchTextFilter = (!location.hash.blank() && location.hash.indexOf(':') === -1) ? location.hash.substr(1) : "";

            searchCriteriaHash = $H({ select_function: '', select_shape: '', select_structure: '', select_material: '' });
            photosPerPage = 24;
            photoSize = "";
        },
        RegisterObserver: function(object) {
            observers.push(object);
        },
        DeregisterObserver: function(object) {
            observers.splice(observers.indexOf(object), 1);
        },
        NotifyObservers: function(suppressObserverUpdate) {
            if(!suppressObserverUpdate) {
                observers.each(function(o) {
                    o.Update.bind(o)(this);
                });
            }
        },
        SetSelectedAlbum: function(album, suppressObserverUpdate) {
            if(album != selectedAlbum) {
                selectedAlbum = album;
                this.NotifyObservers(suppressObserverUpdate);
            }
        },
        SelectedAlbum: function() {
            return selectedAlbum;
        },
        SetCategories: function(hash, suppressObserverUpdate) {
            // We draw the values from the DOM, just as before (just lazy).
            if(hash.inspect() != searchCriteriaHash) {
                searchCriteriaHash = hash;
                this.NotifyObservers(suppressObserverUpdate);
            }
        },
        SetSearchTextFilter: function(text, suppressObserverUpdate) {
            if(text != searchTextFilter) {
                searchTextFilter = text;
                this.NotifyObservers(suppressObserverUpdate);
            }
        },
        SetPhotosPerPage: function(number, suppressObserverUpdate) {
            if(photosPerPage != number) {
                photosPerPage = number;
                this.NotifyObservers(suppressObserverUpdate);
            }
        },
        SetPhotoSize: function(sizeName, suppressObserverUpdate) {
            if(sizeName != photoSize) {
                photoSize = sizeName;
                this.NotifyObservers(suppressObserverUpdate);
            }
        },
        GetPhotoPageHTML: function(page, callback) {
            var options = {
                PhotosPerPage: photosPerPage,
                ActivePage: page,
                LanguageId: 1,
                SelectedAlbum: selectedAlbum
            }
            if(!searchTextFilter.blank())
            options.SearchFilterText = searchTextFilter;

            if(!photoSize.blank()) options.photoSize = photoSize;
            var optionHash = searchCriteriaHash.merge($H(options));
            photoDataLoader.GetPhotoData(callback, optionHash);
        },
        StairsAlbum: 1,
        BalustradeAlbum: 2
    }
}());

var AlbumPhotoLoader = Class.create(function() {
    var cache;

    function optionKeyToQueryKey(key) {
        switch(key) {
            case 'PhotosPerPage':
            return 'pages_photos_per_page';
            case 'NoOutput':
            return 'nooutput';
            case 'SelectedAlbum':
            return 'select_box_one';
            case 'ActivePage':
            return 'pages_active';
            case 'RandomSeed':
            return 'r';
            case 'LanguageId':
            return 'languageId';
            case 'ResetPagePosition':
            return 'reset';
            case 'SearchFilterText':
            return 'freetext';
            case 'MyAlbum':
            return 'group_active';
            default:
            return key;
        }
    }

    function optionsToQueryStr(hash) {
        var newHash = new Hash();

        if(!hash.keys().include('RandomSeed')) hash.set('RandomSeed', 12);

        hash.each(function(tuple) {
            var translatedKey = optionKeyToQueryKey(tuple.key);
            if(translatedKey) newHash.set(translatedKey, tuple.value);
        });

        return newHash.toQueryString();
    }

    return {
        initialize: function(albumToSelect) {
            cache = new AlbumPhotoCache();
            cacheDisabled = false;
        },
        GetPhotoData: function(onComplete, options) {
            var optionHash = $H(options),
            queryStr = optionsToQueryStr(optionHash);

            function processTransport(transport) {
                cache.Set(optionHash, transport);
                onComplete(transport);
            }

            var cacheEntry = cache.Get(optionHash);
            if(cacheEntry && !cacheDisabled)
            onComplete(cacheEntry);
            else {
                new Ajax.Request(sprintf("%sdivs/div_content.htm?%s", Config.Eestairs4ScriptDir, queryStr),
                { onSuccess: processTransport, evalScripts: true } );
            }
        },
        InCache: function(options) {
            var optionHash = $H(options);
            return cache.Contains(optionHash);
        },
        EnableCache: function() {
            cacheDisabled = false;
        },
        DisableCache: function() {
            cacheDisabled = true;
        }
    }
}());

var AlbumPhotoCache = Class.create(function() {
    var cache;

    return {
        initialize: function() {
            cache = new Array();
        },
        Set: function(requestHash, data) {
            cache.push({ 'hashContents': requestHash.inspect(), 'data': data });
            if(cache.length > 10) cache.slice();
        },
        Get: function(requestHash) {
            for(var i = 0; i < cache.length; ++i) {
                if(cache[i].hashContents == requestHash.inspect())
                return cache[i].data;
            }
            return null;
        },
        Contains: function(requestHash) {
            return this.Get(requestHash) != null;
        }
    }
}());

/** End **/


/**
* sprintf() for JavaScript (v 0.4)
*/

function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }

function sprintf () {
    var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
    while (f) {
        if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
        else if (m = /^\x25{2}/.exec(f)) o.push('%');
        else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
            if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
            if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
            throw("Expecting number but found " + typeof(a));
            switch (m[7]) {
                case 'b': a = a.toString(2); break;
                case 'c': a = String.fromCharCode(a); break;
                case 'd': a = parseInt(a); break;
                case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
                case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
                case 'o': a = a.toString(8); break;
                case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
                case 'u': a = Math.abs(a); break;
                case 'x': a = a.toString(16); break;
                case 'X': a = a.toString(16).toUpperCase(); break;
            }
            a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
            c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
            x = m[5] - String(a).length;
            p = m[5] ? str_repeat(c, x) : '';
            o.push(m[4] ? a + p : p + a);
        }
        else throw ("Huh ?!");
        f = f.substring(m[0].length);
    }
    return o.join('');
}

/** End sprinf **/

/**
* Misc. library functions
*/

function getKeyCodeFromEvent(e) {
    if(!window.event && !e) return -1;
    return (window.event) ? window.event.keyCode : e.which;
}

function php_urlencode(str) {
    str = escape(str);
    return str.replace(/[*+\/@]|%20/g, function (s) {
        switch (s) {
            case "*": s = "%2A"; break;
            case "+": s = "%2B"; break;
            case "/": s = "%2F"; break;
            case "@": s = "%40"; break;
            case "%20": s = "+"; break;
        }
        return s;
    });
}

function baseDocumentUrl() {
    var url = location.protocol + '//' + location.host,
    pathParts = location.pathname.split('/');
    for(var i = 0; i < pathParts.length-1; ++i)
    if(i != pathParts.length && !pathParts[i].blank())
    url += '/' + pathParts[i];
    return url + '/';
}

var Heino = {};

Heino.Effect = {
    VerticalResizeTo: function(element, goalHeight, animationTime, extraFunctionCall) {
        var element = $(element);
        animationTime = (animationTime || 0.5);
        if(goalHeight == element.getHeight()) return;
        new Effect.Tween(element, element.getHeight(), goalHeight, { duration: animationTime },
        function(p) {
            this.setStyle({height: p+'px'});
            if(extraFunctionCall)
            extraFunctionCall();
        });
    }
}

Heino.Cookie = {
    Create: function(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    },
    Value: function(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    },
    Delete: function(name) {
        Heino.Cookie.Create(name,"",-1);
    }
}

/** End library functions **/

/******* LEGACY CODE ********/

document.observe("dom:loaded", onloadActions);

function onloadActions(){
    loadHomeAccordion();
    setFlashPlayers();
    setPheelosophy();
    setContinents();
    searchboxHome();
    contactDetails();
}

function loadHomeAccordion() {
    // accordion at homepage
    $$('#home-accordion').each(function(element){
        h2Array=element.adjacent('h2');
        h2Array.each(function(element){ element.addClassName('accordion-toggle'); });
        pArray=element.adjacent('p');
        pArray.each(function(element){
            content=element.innerHTML;
            element.replace("<div class='accordion-content'>"+content+"</div>");
        });
        accordion = new Accordion(element,3);
    });
    // accordion at homepage
    $$('#home-lpusa-accordion').each(function(element){
        h2Array=element.adjacent('h2');
        h2Array.each(function(element){ element.addClassName('accordion-toggle'); });
        pArray=element.adjacent('p');
        pArray.each(function(element){
            content=element.innerHTML;
            element.replace("<div class='accordion-content'>"+content+"</div>");
        });
        accordion = new Accordion(element,pArray.size());
    });
}

function setFlashPlayers(){
    $$('#player').each(function(element){
        // get custom text from template
        customText=$('eestairsvideoplayer').readAttribute('customText');
        // create flash object
        var so = new SWFObject("../html/swf/eestairsvideoplayer3.swf", "eestairsvideoplayer", "401", "242", "8", "#d9e5e0");
        so.addVariable("file", "video_users.flv");
        so.addVariable("image", "../html/img/design/photo_home.jpg");
        so.addVariable("tekst", customText);
        so.addParam("quality", "low");
        so.addParam("wmode", "transparent");
        so.addParam("allowFullScreen", "true");
        so.write("player");
    });
    $$('#pheelosophyPlayer').each(function(element){
        // get custom text from template
        customText=$('eestairsvideoplayer').readAttribute('customText');
        // create flash object
        var so = new SWFObject("../html/swf/eestairsvideoplayer3.swf", "eestairsvideoplayer", "320", "194", "8", "#d9e5e0");
        so.addVariable("file", "video_users.flv");
        so.addVariable("image", "../html/img/design/photo_home.jpg");
        so.addVariable("tekst", customText);
        so.addParam("quality", "low");
        so.addParam("wmode", "transparent");
        so.addParam("allowFullScreen", "true");
        so.write("pheelosophyPlayer");
    });
    $$('#partnerPlayer').each(function(element){
        // get custom text from template
        customText=$('eestairsvideoplayer').readAttribute('customText');
        // create flash object
        var so = new SWFObject("../html/swf/eestairsvideoplayer.swf", "eestairsvideoplayer", "320", "194", "8", "#d9e5e0");
        so.addVariable("file", "eestairsvideoplayer.flv");
        so.addVariable("image", "../html/img/design/photo_home.jpg");
        so.addVariable("tekst", customText);
        so.addParam("quality", "low");
        so.addParam("wmode", "transparent");
        so.addParam("allowFullScreen", "true");
        so.write("partnerPlayer");
    });
    $$('#videoMain').each(function(element){
        // get custom text from template
        customText=$('eestairsvideoplayer').readAttribute('customText');
        // create flash object
        var so = new SWFObject("../html/swf/eestairsvideoplayer3.swf", "eestairsvideoplayer", "460", "279", "8", "#d9e5e0");
        so.addVariable("file", "video_users.flv");
        so.addVariable("image", "../html/img/design/photo_home.jpg");
        so.addVariable("tekst", customText);
        so.addParam("quality", "low");
        so.addParam("wmode", "transparent");
        so.addParam("allowFullScreen", "true");
        so.write("videoMain");
    });
}
function setPheelosophy(){
    $$('#pheelosophy').each(function(element){
        deleteArray=element.adjacent('h3');
        deleteArray.each(function(element){ element.remove(); });
        deleteArray=element.adjacent('h4');
        deleteArray.each(function(element){ element.remove(); });
        h2Array=element.adjacent('h2');
        h2Array.each(function(child,index){
            child.addClassName('pheelosophyHeader');
            if (index==0) {
                $('pheelosophyText').replace("<div id='pheelosophyText'>"+child.next().innerHTML+"</div>");
                child.setStyle({color: '#DA222E'});
            }
            child.next().hide();
            child.setStyle({marginLeft: (Math.random()*250)+'px', marginBottom: '4px'});
            child.observe('click', function(event){
                $('pheelosophyText').replace("<div id='pheelosophyText'>"+child.next().innerHTML+"</div>");
                child.setStyle({color: '#DA222E'});
            });
        });
    });
}
// get continents and countries through ajax
function setContinents(){
    $$('#offices').each(function(element){
        new Ajax.Updater('offices', '/html/eestairs4/scripts/misc/continentCountryGenerator.htm', {evalScripts:true});
    });
}

function searchboxHome(){
    // Submit the place to the stairs album
    if ($('searchboxhome')) {
        $('searchboxhome').observe('keypress', function(event) {
            if (event.keyCode == Event.KEY_RETURN) {
                var searchText = $('searchboxhome').value;
                window.location = $('searchboxhome').readAttribute('to') + '#' + php_urlencode(searchText);
            }
        });
        // Make sure the spacebar doesn't evoke the overlay
        $('searchboxhome').observe('focus', function() { Config.MenuToggleKeyEnabled = false; });
        $('searchboxhome').observe('blur', function() { Config.MenuToggleKeyEnabled = true; });
    }
}

function contactDetails(){
    // Submit the place to the stairs album
    if ($('list-contact-details')) {
		// set local time texts
		new Ajax.Updater('local-time-nl', '/html/eestairs4/scripts/misc/getLocalTime.php?timezone=Europe/Amsterdam&language='+$('languageAbbreviation').innerHTML, {evalScripts:true});
		new Ajax.Updater('local-time-uk', '/html/eestairs4/scripts/misc/getLocalTime.php?timezone=Europe/London&language='+$('languageAbbreviation').innerHTML, {evalScripts:true});
		new Ajax.Updater('local-time-us', '/html/eestairs4/scripts/misc/getLocalTime.php?timezone=America/New_York&language='+$('languageAbbreviation').innerHTML, {evalScripts:true});
		
    	// hide driving directions tools
    	if (node1=$('driving-directions-nl')){
	    	node1.hide();
	    	ddnode1=$('driving-directions-nl-button');
	    	ddnode1.observe('click', function(event){
	    		Effect.toggle(node1, 'blind', { duration: 0.5 });
	    		ddnode1.hide();
	        });
	    	$('from-address-nl-button').observe('click', function(event){
	    		window.open('http://maps.google.com/maps?hl='+$('languageAbbreviation').innerHTML+'&daddr=nederland,+barneveld,+harselaarseweg+102&saddr='+$('from-address-nl').value);
	        });
    	}
    	if (node2=$('driving-directions-uk')){
	    	node2.hide();
	    	ddnode2=$('driving-directions-uk-button');
	    	ddnode2.observe('click', function(event){
	    		Effect.toggle(node2, 'blind', { duration: 0.5 });
	    		ddnode2.hide();
	        });
	    	$('from-address-uk-button').observe('click', function(event){
	    		window.open('http://maps.google.com/maps?hl='+$('languageAbbreviation').innerHTML+'&daddr=united+kingdom,+eastbourne,+station+parade&saddr='+$('from-address-uk').value);
	        });
    	}
    	if (node3=$('driving-directions-us')){
	    	node3.hide();
	    	ddnode3=$('driving-directions-us-button');
	    	ddnode3.observe('click', function(event){
	    		Effect.toggle(node3, 'blind', { duration: 0.5 });
	    		ddnode3.hide();
	        });
	    	$('from-address-us-button').observe('click', function(event){
	    		window.open('http://maps.google.com/maps?hl='+$('languageAbbreviation').innerHTML+'&daddr=canada,+st.+catharines,+18+keefer+road&saddr='+$('from-address-us').value);
	        });
    	}
    	
        // Make sure the spacebar doesn't evoke the overlay
        $('from-address-nl').observe('focus', function() { Config.MenuToggleKeyEnabled = false; });
        $('from-address-nl').observe('blur', function() { Config.MenuToggleKeyEnabled = true; });
        $('from-address-uk').observe('focus', function() { Config.MenuToggleKeyEnabled = false; });
        $('from-address-uk').observe('blur', function() { Config.MenuToggleKeyEnabled = true; });
        $('from-address-us').observe('focus', function() { Config.MenuToggleKeyEnabled = false; });
        $('from-address-us').observe('blur', function() { Config.MenuToggleKeyEnabled = true; });
    }
}

/******** END LEGACY CODE ********/


