away3dcom = {
    init: function()
    {
        away3dcom.initButtons();
        away3dcom.initExpandables();
        away3dcom.initNavigation();
        away3dcom.initCarousel();
        away3dcom.initScrollPane();
        away3dcom.initFields();
    },
	
    initFields: function()
    {
        $('.tip-field').each(function() {
            var tip = $(this).val();
            $(this).focus(function() {
                if ($(this).val() == tip)
                    $(this).val('');
            });
            $(this).focusout(function() {
                if ($(this).val() == '')
                    $(this).val(tip);
            });
        });
    },

    initButtons: function()
    {
        $('.button').each(function() {
            if (!$(this).is("a")) {
                var btn;
                var form;
                var input;

                input = $(this);

                form = input.parents('form');

                btn = $(document.createElement('a'));
                btn.addClass('button');
                btn.text(input.val());
                btn.attr('href', 'javascript://');
                btn.attr('id', input.attr('id'));

                if (form.length==1) {
                    btn.click(function() {
                        form.submit();
                    });
                }

                input.replaceWith(btn);
            }
        });
		$('.buttons').each(function() {
            if (!$(this).is("a")) {
                var btn;
                var form;
                var input;

                input = $(this);

                form = input.parents('form');

                btn = $(document.createElement('a'));
                btn.addClass('button');
                btn.text(input.val());
                btn.attr('href', 'javascript://');
                btn.attr('id', input.attr('id'));

                if (form.length==1) {
                    btn.click(function() {
                        form.submit();
                    });
                }

                input.replaceWith(btn);
            }
        });
    },

    getCookie: function(name)
    {
        var i;
        var cookies = document.cookie.split(';');

        for (i=0; i<cookies.length; i++) {
            var fields = cookies[i].split('=');
            var field_name = $.trim(fields[0]);
            if (field_name==name)
                return fields[1];
        }

        return null;
    },

    initExpandables: function()
    {
        $('.expandable').each(function() {
            var a = $(document.createElement('a'));

            var toggle;
            var exp = $(this);
            var ctr = $('.expcontent', this);
            var h3 = $('h3', exp);

            var id = exp.attr('id');
            var cookie_name = id+'-expanded';
            var start_expanded = away3dcom.getCookie(cookie_name);

            toggle = (start_expanded=='true');
            ctr.toggle(toggle);

            a.css({ 'float': 'right' });
            a.text(toggle? 'Hide':'Show');
            a.addClass('exp-toggle-link');

            if (h3.length==1) {
                h3.append(a);
            }
            else {
                exp.prepend(a);
            }


            a.click(function() {
                ctr.slideToggle();
                a.text(toggle? 'Show':'Hide');
                toggle = !toggle;

                document.cookie = cookie_name+'='+toggle;
            });
        });
    },

    initNavigation: function()
    {
        $('.submenu').hide();
    
        // Get flow positions
        var mainpos = $('#content').offset();
        var footerpos = $('#footer').offset();
    
        // Method to reconfigure into absolute position
        function pos(obj, p, zidx) {
            obj.css({
                position: 'absolute',
                width: '100%',
                'z-index': zidx,
                top: p.top
            });
        };
    
        // Position all elements absolutely, so that they
        // will not be moved down when the menu expands
        pos($('#content'), mainpos, 100);
        pos($('#footer'), footerpos, 0);
    
        var opening = false;
    
        // Show/hide sub-menu on main menu item hover
        $('.withsub').mouseenter(function() {
            opening = true;
            $('#content').css({ 'z-index': -100 });
            $('.submenu', this).show(200);
        });
        $('.withsub').mouseleave(function() {
            opening = false;
            $('.submenu', this).hide(200, function() {
                if (!opening)
                    $('#content').css({ 'z-index': 100 });
            });
        });
    },
    
    
    curCarouselImage: -1,
    carouselThumbs: [],
    carouselImages: [],

    addCarouselItem: function(title, subtitle, img, link, label)
    {
        away3dcom.carouselImages.push({
            'title': title, 
            'subtitle': subtitle,
            'src': img,
            'link': link,
            'label': label
        });
    },

    initCarousel: function()
    {
        var i;
        var menu = $('#carousel-menu');
        var images = away3dcom.carouselImages;

    
        function setCarouselImage(idx) {
            var img = away3dcom.carouselImages[idx];
            var desc = $('#carousel-description');
    
            if (away3dcom.curCarouselImage>=0) {
                away3dcom.carouselThumbs[away3dcom.curCarouselImage].removeClass('active');
            }

            away3dcom.curCarouselImage = idx;
            away3dcom.carouselThumbs[away3dcom.curCarouselImage].addClass('active');
    
            $('#carousel').css({
                'background-image': 'url("'+img.src+'")'
            });
    
            $('h2', desc).text(img.title.toUpperCase());
            $('small', desc).text(img.subtitle.toUpperCase());
            $('a', desc).attr('href', img.link);
            $('a', desc).text(img.label.toUpperCase());
            desc.css({
                top: 400 - (desc.outerHeight() + 20)
            });
        };
    
        menu.show();
        for (i=0; i<images.length;i++) {
            var title;
            var img = images[i];
            var thumb;
    
            id = 'carousel-thumb-'+i;
            title = img.title.toString();
            menu.append('<a id="'+id+'" title="'+title+'" class="thumb"></a>');
    
            thumb = $('#'+id);
            thumb.click(function() {
                setCarouselImage($(this).index());
            });
    
            away3dcom.carouselThumbs.push(thumb);
        }
    
        menu.append('<a id="carousel-prev" class="carousel-step" title="Previuos slide" href="#">PREV</a>');
        menu.append('<a id="carousel-next" class="carousel-step" title="Next slide" href="#">NEXT</a>');
    
        $('#carousel-prev').click(function() {
            var idx = away3dcom.curCarouselImage-1;
            if (idx<0)
                idx = away3dcom.carouselThumbs.length-1;
            setCarouselImage(idx);
        });
        $('#carousel-next').click(function() {
            var idx = away3dcom.curCarouselImage+1;
            if (idx>=away3dcom.carouselThumbs.length)
                idx = 0;
            setCarouselImage(idx);
        });
    
        if (images.length>0)
            setCarouselImage(0);
    },
    
    initScrollPane: function()
    {
        $('.scrollpane').each(function() {
            var ctr;
            var track;
            var thumb;
            var pane;
            var maxscroll; 
            var maxy ;

            pane = $(this);
            pane.css({ overflow: 'hidden' });
    
            // Create container and move all children into
            // that, which will then be moved to scroll
            ctr = $(document.createElement('div'));
            ctr.attr('class', 'scrollctr');
            ctr.width(pane.width()-15);
            $('div', $(this)).each(function() {
                ctr.append($(this));
            });
    
            // Disable selection for the entire parent
            $('*', pane.parent()).attr('unselectable', 'on').css('-moz-user-select', 'none').each(function() {
                this.onselectstart = function() { return false; };
            });
    
            pane.append(ctr);
    
            track = $(document.createElement('div'));
            track.attr('class', 'scrolltrack');
            track.css({
                left: $(this).width() - 5,
                height: $(this).height()
            });
            pane.append(track);
    
            thumb = $(document.createElement('div'));
            thumb.attr('class', 'scrollthumb');
            track.append(thumb);

            maxscroll = ctr.height()-pane.height();
            maxy = track.height()-22;

            var curScroll=0;
            var execScroll = function(f) {
                if (f<0)
                    f=0;
                else if (f > 1)
                    f=1;

                thumb.css({ top: f*maxy });
                ctr.css({ top: -f*maxscroll });
                curScroll = f;
            };
/*
            pane.mousewheel(function(ev, delta) {
                execScroll(curScroll-delta/10);
                return false;
            });
*/
            track.mousedown(function(downEvent) {
                var starty = downEvent.pageY - thumb.offset().top;
    
                if (starty < 0 || starty > 22)
                    starty = 11;
    
                function onMove(ev) {
                    var ypos;
                    
                    ypos = ev.pageY - track.offset().top - starty;
                    
                    execScroll(ypos/maxy);
                };
    
                function onUp(ev) {
                    $(document).unbind('mouseup', onUp);
                    $(document).unbind('mousemove', onMove);
                };
    
                $(document).mouseup(onUp);
                $(document).mousemove(onMove);
    
                // Instantly jump to where mouse was clicked
                onMove(downEvent);
            });
        });
    }
};

