/*
 * Create namespaces for wyprawy scripts
 */
window.deco = function() {};
deco.page = function() {};

(function(mod) {
    var $cnt = $('#cnt');

    
    deco.setup_menu = function() {
        var $menu = $('#menu');
        
        // position menu elements
        $('#menu li > ul').each(function() {
            var $smenu = $(this);

            var width = 0;
            $smenu.children().each(function() { width += $(this).outerWidth(true); });
            //$smenu.css('width', width);
            $smenu.css('width', $menu.width()-$smenu.parent().position().left);

            //var xoffset = ($smenu.outerWidth() - $smenu.parent().width()) / 2;
            //$smenu.css('left', -xoffset);
            $smenu.css('left', -29);
        });

        // swap visibility:hidden to display: none
        $('#menu li > ul').css('display', 'none').css('visibility', 'visible');

//        if ($.browser.msie) {
//            Cufon.set('fontFamily', 'Eurostile-Regular-Ext');
//            Cufon.replace('#menu li ul a', { fontSize: '10px', letterSpacing: '1.8px', hover: true });
//            Cufon.replace('#menu li.active ul a', { fontSize: '10px', letterSpacing: '1.8px', hover: true });
//        }
    };


    mod.base = function() {
        var first_run = true;
        var prev = null;
        var next = null;
        
        function change_page(oldpage, newpage) {    
            var $inactive = $cnt.children('.p:not(.active)');
            var $active = $cnt.children('.p.active');

            $cnt.queue(function() {
                if (('page_' + newpage.type) in mod)
                    mod['page_' + newpage.type]($inactive.get(0), newpage);
                else
                    $cnt.dequeue();
            });
            $cnt.queue(function() { 
                $('body').css('cursor', 'default');
                $('a').css('cursor', 'pointer');
                $cnt.dequeue();
            });
            
            if (first_run) {
                first_run = false;
                animate_first_run($inactive, $active);
            }
            else
                animate_page_change($inactive, $active, calculate_direction(oldpage, newpage));

            $inactive.addClass('active');
            $active.removeClass('active');

            if (newpage.prev) {
                prev = newpage.prev
                $('#main a.back').show();
            }
            else {
                prev = null;
                $('#main a.back').hide();
            }
            if (newpage.next) {
                next = newpage.next;
                $('#main a.forward').show();
            }
            else {
                next = null;
                $('#main a.forward').hide();
            }
        }

        function animate_page_change($inactive, $active, right) {
            $cnt.delay(5).queue(function() {
                $inactive.css('visibility', 'hidden');
                $cnt.css('left', right ? 0 : -870);
                $active.css('left', right ? 0 : 870);
                $inactive.css('left', right ? 870 : 0).css('visibility', 'visible')
                $cnt.dequeue();
            });

            if (right)
                $cnt.animate({ left: '-=870px' }, 500);
            else
                $cnt.animate({ left: '+=870px' }, 500);
        }
        
        function calculate_direction(oldpage, newpage) {
            var right = oldpage ? (oldpage.abs_order <= newpage.abs_order ? true : false) : true;
            if (oldpage && oldpage.frontpage == 'true')
                right = true;
            if (newpage.frontpage == 'true')
                right = false;
            return right;
        }

        function animate_first_run($inactive, $active) {
                $cnt.queue(function() {
                    $inactive
                        .css('display', 'none')
                        .css('left', 0)
                        .css('visibility', 'visible')
                        .fadeIn('normal', function() {
                            $cnt.dequeue();
                    });
                });
        }

        if (deco.is404)
            window.location = '/';

        $('#menu').deco_dropmenu();
        $.deco_ajax.init({
            before_load: function(url) {
                $('body,a').css('cursor', 'wait');
                $.deco_ajax.trigger_before_load_done(url);
            },
            after_load: change_page
        });

        $('#menu a:not([href="#"])').click(function() {
            $.address.value($(this).attr('href').replace(/^#/, ''));
            return false;
        });

        $('#main > a.back').click(function() {
            if (prev == 'fpage')
                $.address.value('/');
            else
                $.address.value('/pcontent/'+prev+'/');
            return false;
        });
        $('#main > a.forward').click(function() {
            $.address.value('/pcontent/'+next+'/');
            return false;
        });

        $.address.change(function(ev) {
            $('#menu').deco_dropmenu('activate_page', $.deco_ajax.page_id());
        });

        $('#head > img').click(function() { $.address.value('/'); return false; });
    };


    mod.page_products = function(page, pdata) {
        var cache = {};
        var $page = $(page);
        var $thumbs = $page.children('div.thumbs');
        var $prod = $page.children('div.prod');
        var $prev = $('p.prevnext a.prev', $page);
        var $next = $('p.prevnext a.next', $page)
        
        function switch_product(num) {
            var $thumb = $page.find('div.thumbs li').eq(num);
            var $inactive = $('li:not(.active)', $prod);
            var $active = $('li.active', $prod);
            
            var curr_id = $('li.active', $prod).data('id');
            var new_id = $thumb.data('id');
            var slide = 'up';

            if ($thumb.hasClass('active'))
                return;

            $('li.active', $thumbs).removeClass('active');
            $thumb.addClass('active');

            // load product html
            var prod_html = '';
            if (new_id in cache) {
                prod_html = cache[new_id];
            } else {
                prod_html = load_product(new_id);
            }
            $inactive.html(prod_html).find('p.title').css('padding-top', 173);
            Cufon.set('fontFamily', 'Eurostile-Regular');
            Cufon.replace($('p.title', $inactive), { letterSpacing: '1.2px' });

            // switch pages
            showhide_prevnext(num);
            
            if (curr_id) {
                var curr_idx = $('li[data-id="'+curr_id+'"]', $thumbs).index();
                var new_idx = num;
                
                if (new_idx < curr_idx) slide = 'down';
            }
            
            if (slide == 'up') {
                $inactive.queue(function() {
                   $(this).css('top', 360).dequeue();
                });
                $inactive.add($active).animate({ top: '-=360px' }, 500);
            }
            else {
                $inactive.queue(function() {
                   $(this).css('top', -360).dequeue();
                });
                $inactive.add($active).animate({ top: '+=360px' }, 500);
            }

            $inactive.addClass('active').data('id', new_id);
            $active.removeClass('active');
        }

        function showhide_prevnext(num) {
            if (num == 0)
                $prev.stop().fadeOut().addClass('disabled');
            else
                $prev.not(':visible').stop()
                    .css({ display: 'block', opacity: '0'})
                    .animate({ opacity: '0.3' }, 500)
                    .removeClass('disabled');
            
            if (num == $thumbs.find('li').length - 1)
                $next.stop().fadeOut().addClass('disabled');
            else
                $next.not(':visible').stop()
                    .css({ display: 'block', opacity: '0'})
                    .animate({ opacity: '0.3' }, 500)
                    .removeClass('disabled');
        }

        function prev_product() {
            var $act = $('li.active', $thumbs);
            if ($act.prev().size())
                switch_product($act.index()-1);
                try {
                    if ($act.prev().index() == 0)
                        $thumbs.data('jsp').scrollToY(0, true);
                    else
                        $thumbs.data('jsp').scrollToElement($act.prev(), true, true);
                } catch(e) {}

            return false;
        }

        function next_product() {
            try {
                var $act = $('li.active', $thumbs);
                if ($act.size() == 0) {
                    switch_product(0);
                    $thumbs.data('jsp').scrollToElement($thumbs.find('li:eq(0)'), true, true);
                }
                else {
                    if ($act.next().size())
                        switch_product($act.index()+1);
                        $thumbs.data('jsp').scrollToElement($act.next(), true, true);
                }
            } catch(e) {}

            return false;
        }

        function load_product(id) {
            
            $.getJSON(
                '/rpc/get_product/',
                { 'pid' : id },
                function(data) {
                    var html = [
                        '<img src="' + data.result.photo + '" alt="' + data.result.name + '">',
                        '<p class="title">' + data.result.name + '</p>'
                    ]
                    cache[id] = html.join(' ');
                    $.deco_preload_img(data.result.photo);
                    
                    return cache[id];
                }
            );
        }

        
        $thumbs.jScrollPane({
            verticalDragMinHeight: 26,
            verticalDragMaxHeight: 26,
            verticalGutter: -7
        });

        $('li', $thumbs).click(function() { switch_product($(this).index()); });
        $prev.click(prev_product);
        $next.click(next_product);

        $prev.add($next).mouseenter(function() {
            if (!$(this).hasClass('disabled'))
                $(this).stop().animate({ opacity: 1 }, 400);
        }).mouseleave(function() {
            if (!$(this).hasClass('disabled'))
                $(this).stop().animate({ opacity: 0.3 }, 400);
        });

        Cufon.set('fontFamily', 'Eurostile-Regular');
        Cufon.replace($('> div.thumbs li p', page), { letterSpacing: '1.2px' });
        Cufon.replace($('> div.prod li p.title', page), { letterSpacing: '1.2px' });

        var $start = $('> div.prod div.start', page);
        Cufon.set('fontFamily', 'Eurostile-Black');
        Cufon.replace($start.find('p'), { letterSpacing: '0.2px' })

        $start.css('top', (360-$start.height())/2);

        $cnt.dequeue();

        $('li', $thumbs).each(function() {
            load_product($(this).data('id'));
        });
    }


    mod.page_contact = function(page, pdata) {
        var latlng = new google.maps.LatLng(pdata.coords.split(',')[0], pdata.coords.split(',')[1]);
        var opts = {
            streetViewControl: false,
            mapTypeControl: false,
            zoom: Number(pdata.zoom),
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map($('#map', page).get(0), opts);
        var marker = new google.maps.Marker({
            position: latlng,
            map: map,
            title: 'Armet sp. j.'
        });
        google.maps.event.addListener(map, 'tilesloaded', function() {
            $cnt.dequeue();
        });

        Cufon.set('fontFamily', 'Eurostile-Black');
        Cufon.replace($('h1', page), {});
        Cufon.replace($('table', page), { fontFamily: 'Eurostile-Regular', letterSpacing: '0.6px' });
    };

    mod.page_news = function(page, pdata) {

        function render_cufon() {
            Cufon.set('fontFamily', 'Eurostile-Regular');
            Cufon.replace($('> ul.list td.title p', page), { });
            Cufon.replace($('> ul.list td.title span', page), { letterSpacing: '1px' });
            Cufon.replace($('> ul.list td.summary p', page), { letterSpacing: '0.3px' });
            Cufon.replace($('> div.news div.content', page), { letterSpacing: '0.3px' });

            Cufon.set('fontFamily', 'Eurostile-Black');
            Cufon.replace($('> div.news div.content strong', page), { letterSpacing: '0.3px' });
        }

        $('> ul.list > li:first-child', page).addClass('active');
        $('> div.news', page).deco_gallery({
            thumbs: $('> ul.list > li', page),
            prev_next: false,
            after_change: render_cufon
        });

        render_cufon();
        $cnt.dequeue();
    }

    mod.page_fpage = function(page, pdata) {
        Cufon.set('fontFamily', 'Eurostile-Regular');
        Cufon.replace($('h1 span', page), { letterSpacing: '3.3px' });
        Cufon.replace($('h2', page), { letterSpacing: '2.2px' });
        Cufon.replace($('h2 a', page), { letterSpacing: '1.2px' });

        Cufon.set('fontFamily', 'Eurostile-Black-Ext');
        Cufon.replace($('h1 strong', page), { letterSpacing: '-0.5px' });
        
        $cnt.dequeue();
    }

    mod.page_about = function(page, pdata) {

        $('a.go', page).click(function() {
            var $list = $('ul.about', page);
            var $current = $list.children('li:visible');
            var $new = null;

            if ($current.is(':last-child'))
                $new = $list.children().eq(0)
            else
                $new = $current.next();

            $current.fadeOut(1000);
            $new.fadeIn(1000);
            return false;
        });

        Cufon.set('fontFamily', 'Eurostile-Regular');
        Cufon.replace($('div.content p', page), { letterSpacing: '0.4px' });
        $cnt.dequeue();
    }

})(deco.page);


