var main = {
    
    init: function() {
        main.pageSlider.init();
        main.servicesSlider();
        main.projectSlider();
        main.referenceSlider();
        main.preloadImages();
        main.toolTips();
        main.events();
        main.keyboardNavigation();
        
        // Contact form popup
        $(".contact-form").fancybox({
            autoScale       : false,
            autoDimensions  : true,
            closeClick      : false,
            centerOnScroll  : true,
            transitionIn    : 'elastic',
            transitionOut   : 'elastic',            
            speedIn         : 500,
            easingIn        : 'easeOutCubic',
            scrolling       : 'auto',
            onStart         : function() {
                $('#contact-form').css('display', 'block');
            },
            onClosed        : function() {
                $('#contact-form').hide();
            }
        });    
        
        // External links
        if ($('a[rel=external]').length)
            $('a[rel=external]').attr('target', '_blank');
        
        // Antyspam
        $('a.contact-address').each(function() {
            if ( $(this).text() == $(this).attr('href').replace('mailto:', '')) {
                change_anchor = true;
            } else {
                change_anchor = false;
            }
        
            var href = $(this).attr('href').replace('=', '@').replace('-', '.');
            $(this).attr('href', href);
        
            if (change_anchor) {
                $(this).text(href.replace('mailto:', ''));
            }
        });
    },
    
    pageSlider: {
        in_progress: false,
        min_slide_height: 662,
        
        init: function() {
            // Set the slide height based on the window height
            main.pageSlider.updateSlidesHeight();
            
            // Scroll to the chosen slide
            $('#slides .slide-button').click(function() {
                var slide_name = $(this).attr('href').split('#')[1];
                main.pageSlider.doSlide(slide_name);
                return false;
            });
            
            // Update current visible slide name after page scrolling
            $(window).scroll(function() {
                $('#slides').children('li').each(function() {
                    if (($(window).scrollTop() >= $(this).offset().top) && ($(window).scrollTop() < $(this).offset().top + $(this).height())) {
                        var slide_name = $(this).attr('id').split('#')[0];
                            
                        // If slide has been changed
                        if (main.pageSlider.getActiveSlide() != slide_name) {
                            main.pageSlider.updateActiveSlide(slide_name);
                        }
                    }
                });
            });
        },
        
        slideNext: function() {
            // Get next slide name
            var next_slide_name = main.pageSlider.getNextSlideName();
            
            // Do slide, if the previous slide name exists
            if (next_slide_name) {
                main.pageSlider.doSlide(next_slide_name);
            }
        },
        
        slidePrev: function() {
            // Get previous slide name
            var prev_slide_name = main.pageSlider.getPrevSlideName();
            
            // Do slide, if the next slide name exists
            if (prev_slide_name) {
                main.pageSlider.doSlide(prev_slide_name);
            }
        },
        
        getNextSlideName: function() {
            return $('#slides #'+main.pageSlider.getActiveSlide()).next().attr('id');
        },
        
        getPrevSlideName: function() {
            return $('#slides #'+main.pageSlider.getActiveSlide()).prev().attr('id');
        },
        
        doSlide: function(slide_name) {
            if ( ! main.pageSlider.in_progress) {
                main.pageSlider.in_progress = true;

                // Scroll to the new position
                $('html').stop().scrollTo('#slides #'+slide_name, 2000, {
                    easing: 'easeOutExpo',
                    onAfter: function() {
                        main.pageSlider.in_progress = false;
                        main.pageSlider.updateActiveSlide(slide_name);
                    }
                });
            }
        },
        
        getActiveSlide: function() {
            return $('#slides > li.active').attr('id');
        },
        
        updateSlidesHeight: function() {
            // If the window size (viewable area) is greater than minimal slide
            // height - allow to set that size, otherwise use minimal height
            if ( $(window).height() >= main.pageSlider.min_slide_height)
                 slide_height = $(window).height();
            else
                 slide_height = main.pageSlider.min_slide_height;
                
            $('#slides > li').css('height', slide_height);
        },
        
        updateActiveSlide: function(slide_name) {
            $('#slides > li.active').removeClass('active');
            $('#slides #'+slide_name).addClass('active');
        }
    },
    
    servicesSlider: function() {
        $('#slides #services .slider ul').bxSlider();
    },
    
    projectSlider: function() {
        $('#slides #projects .slider ul').bxSlider();
    },
    
    referenceSlider: function() {
        $('#slides #references .slider ul').bxSlider();
    },
    
    preloadImages: function() {
        var cache = [];

        $.preLoadImages = function() {
            var args_len = arguments.length;

            for (var i = args_len; i--;) {
                var cacheImage = document.createElement('img');

                cacheImage.src = arguments[i];
                cache.push(cacheImage);
            }
        }
        
        // List of images to preload
        jQuery.preLoadImages('/media/img/sections/contact/team/hover.png');
    },
    
    toolTips: function() {
        $('.tooltip').tipTip({
            defaultPosition: 'top'
        });
    },
    
    events: function() {
        // Left nav: show tooltip
        $('#left-nav a').hover(
            function() {
                if ($(this).is('.has-tooltip')) {
                    if ( ! $(this).parent().find('.tooltip').length) {
                        $(this).parent().append('<div class="tooltip">'+$(this).dataset('tooltip-content')+'</div>');
                    }
                }     
                
                $(this).stop().animate({marginLeft: '0'}, 300);
            },
            function() {
                if ($(this).parent().find('.tooltip').length) {
                    $(this).parent().find('.tooltip').remove();
                }  
                
                $(this).stop().animate({marginLeft: '-15px'}, 300);
            }
        );
            
        // Contact: show team member info on hover
        $('#slides #contact .team li').hover(
            function() {
                $(this).addClass('hover').find('.desc').show();
            },
            function() {
                $(this).removeClass('hover').find('.desc').hide();
            }
        );
            
        // Contact: send form
        $('#contact-form form').submit(function() {
            if ( $('#contact-form label .error').length ) {
                $('#contact-form label .error').remove();
            }
            
            $('#contact-form input').each(function() {
                if ($(this).is('.error')) {
                    $(this).removeClass('error');
                }
            });
            
            $.ajax({
                'type': 'POST',
                'url': base_url+'contact.php',
                'data': $('#contact-form form').serialize(),
                'success': function(response) {
                    response = $.parseJSON(response);

                    if (response.status == 'success') {
                        jQuery.fancybox.close();
                        alert('Twoja wiadomość została wysłana');
                    } else if (response.status == 'error') {
                        if (response.invalid_field_name.length) {
                            var error_container = $('<span></span>').addClass('error').text(response.msg);
                            $('#contact-form label[for=field-'+response.invalid_field_name+']').append(error_container);
                            $('#contact-form #field-'+response.invalid_field_name).addClass('error');
                        } else {
                            alert(response.msg);
                        }
                    }
                }
            });

            return false;
        });
        
        // Update slides height after window resize
        $(window).resize(function() {
            main.pageSlider.updateSlidesHeight();
        });
    },
    
    keyboardNavigation: function() {
        // Down arrow - next page/slide
        $(document).bind('keydown', 'down', function() {
            main.pageSlider.slideNext();
            return false;
        });

        // Up arrow - previous page/slide
        $(document).bind('keydown', 'up', function() {
            main.pageSlider.slidePrev();
            return false;
        });
        
        // Left arrow - previous item (if possible)
        $(document).bind('keydown', 'left', function() {
            if ( $('#slides > li.active .slider').length ) {
                $('#slides > li.active .bx-prev').trigger('click');
            }
            return false;
        });
        
        // Right arrow - next item (if possible)
        $(document).bind('keydown', 'right', function() {
            if ( $('#slides > li.active .slider').length ) {
                $('#slides > li.active .bx-next').trigger('click');
            }
            return false;
        });
    }
}

$(document).ready(function() {
    main.init();
});
