// Prevent errors when Firebug or console isn't available
if (window.console === undefined) { window.console = {log: function(){}}; }
window.onerror = function() {};

/**
 * Global vars/constants
 */
    var SLIDER_MAX = 250000;
    var BATCH_SIZE = 4;
    var BATCH_TIMEOUT = 250;
    
    var isSliding = false;
    var delayLoadingOfImages;
    var delayedImages = [];
    var lastPanelPosition;
    var lastSliderPosition;
    var loaded = 0;
    
    var scrollInterval;
    var scrollDistance = 15;
    var scrollValue;
    var scrollPercentage;
    var sliderValue;
    var scrollSpeed;

	var window_width;
	var panel_offset; // how much should we offset the panel container when a window is resized?

/**
 * Event bindings
 */
    $(document).ready(function()
    {
        $('#slider').slider({step: 1, min: 1, max: SLIDER_MAX, animate: true, slide: slideDrag, stop: slideStop});
    
      
		// get window width
		panel_offset = ($(window).width() - 960) / 2;

		$(window).resize(function(){
			panel_offset = ($(window).width() - 960) / 2;
			$('#panels').css('left',$('#panels').css('left'))
		});
		
		// handle menu clicks
        $('#nav a').click(function(){
			goto_panel($(this).attr('href'),$(this));
			return false;
		})
    
        //var lastPanel = $('#panels .panel:last');
        if ($('#panels .panel').length > 1)
        {
            var lastPanel = $('#panels .buffer:last');
    
            lastPanelPosition = lastPanel.position().left;
        }

		$('#panels').css("left","-776px");
		
		$('.scroll_area img').each(function() {
            if (parseInt($(this).outerWidth()) > 420)
            {
                var w = $(this).outerWidth();
                var h = $(this).outerHeight();
                var r = h / w;
                $(this).css({width: '420px', height: (420 * r) + 'px'});
            }
        });
        
        $(".scroll_area").scrollbar({buttonHeight: 0});

    });
    
    // Load images after full page is loaded
    if (delayLoadingOfImages)
    {
        $(window).load(function()
        {
            setTimeout(loadImages, 500);
        });
    }
    

    function routeURL()
    {
        var route = window.location.href;
        route = route.replace(WWW_ROOT, '');
        route = route.replace('-', '_');
        updateTracker(route);
        route = route.split('/');
        gotoPanel(route[0]);
    }
 
    function routeClickURL()
    {
        var route = $(this).attr('href');
        route = route.replace(WWW_ROOT, '');
        route = route.replace('-', '_');
        updateTracker(route);
        route = route.split('/');
        gotoPanel(route[0]);
        
        if (route[0] == 'menu')
        {
            if (route[1] != '')
            {
                loadMenuRoute(route[1], route[2]);
            }
        }
        return false;
    }

    function goto_panel(panel_id,menu_obj)
    {
		
    
        if (!isSliding)
        {
            isSliding = true;
            var panel = $(panel_id);
                            
            if (panel.length > 0)
            {               
                $('#nav a').removeClass('active');
                menu_obj.addClass('active');
                
                
                var panelPosition = panel.position().left - panel_offset;
                var percentage = panelPosition / lastPanelPosition;
                var delta = Math.abs((panelPosition) - (parseInt($('#panels').css('left')) * -1)) ;
                var duration = (delta / 25000) * 10000;



                $('#slider .ui-slider-handle').animate({left: (percentage * 100) + '%'}, {duration: duration, easing: 'easeInOutQuad'});
                
                $('#panels').animate({left: panelPosition * -1}, {duration: duration, easing: 'easeInOutQuad', complete: function()
                {

                    $('#slider').slider('value', percentage * SLIDER_MAX);
                    isSliding = false;
                }});
            }
            else
            {
                isSliding = false;
            }
        }
    }
 
 
/**
 * Callbacks
 */
    function slideDrag(event, ui)
    {
        var percentage = ui.value / SLIDER_MAX;
        var left = lastPanelPosition * percentage * -1;
        $('#panels').css({left: Math.round(left)});
    }
    
    function slideStop(event, ui)
    {
        
    }



     
    jQuery.extend( jQuery.easing,
    {
        def: 'easeOutQuad',
        swing: function (x, t, b, c, d) {
            //alert(jQuery.easing.default);
            return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
        },
        easeInQuad: function (x, t, b, c, d) {
            return c*(t/=d)*t + b;
        },
        easeOutQuad: function (x, t, b, c, d) {
            return -c *(t/=d)*(t-2) + b;
        },
        easeInOutQuad: function (x, t, b, c, d) {
            if ((t/=d/2) < 1) return c/2*t*t + b;
            return -c/2 * ((--t)*(t-2) - 1) + b;
        },
        easeInCubic: function (x, t, b, c, d) {
            return c*(t/=d)*t*t + b;
        },
        easeOutCubic: function (x, t, b, c, d) {
            return c*((t=t/d-1)*t*t + 1) + b;
        },
        easeInOutCubic: function (x, t, b, c, d) {
            if ((t/=d/2) < 1) return c/2*t*t*t + b;
            return c/2*((t-=2)*t*t + 2) + b;
        },
        easeInQuart: function (x, t, b, c, d) {
            return c*(t/=d)*t*t*t + b;
        },
        easeOutQuart: function (x, t, b, c, d) {
            return -c * ((t=t/d-1)*t*t*t - 1) + b;
        },
        easeInOutQuart: function (x, t, b, c, d) {
            if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
            return -c/2 * ((t-=2)*t*t*t - 2) + b;
        },
        easeInQuint: function (x, t, b, c, d) {
            return c*(t/=d)*t*t*t*t + b;
        },
        easeOutQuint: function (x, t, b, c, d) {
            return c*((t=t/d-1)*t*t*t*t + 1) + b;
        },
        easeInOutQuint: function (x, t, b, c, d) {
            if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
            return c/2*((t-=2)*t*t*t*t + 2) + b;
        },
        easeInSine: function (x, t, b, c, d) {
            return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
        },
        easeOutSine: function (x, t, b, c, d) {
            return c * Math.sin(t/d * (Math.PI/2)) + b;
        },
        easeInOutSine: function (x, t, b, c, d) {
            return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
        },
        easeInExpo: function (x, t, b, c, d) {
            return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
        },
        easeOutExpo: function (x, t, b, c, d) {
            return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
        },
        easeInOutExpo: function (x, t, b, c, d) {
            if (t==0) return b;
            if (t==d) return b+c;
            if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
            return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
        },
        easeInCirc: function (x, t, b, c, d) {
            return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
        },
        easeOutCirc: function (x, t, b, c, d) {
            return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
        },
        easeInOutCirc: function (x, t, b, c, d) {
            if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
            return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
        },
        easeInElastic: function (x, t, b, c, d) {
            var s=1.70158;var p=0;var a=c;
            if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
            if (a < Math.abs(c)) { a=c; var s=p/4; }
            else var s = p/(2*Math.PI) * Math.asin (c/a);
            return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
        },
        easeOutElastic: function (x, t, b, c, d) {
            var s=1.70158;var p=0;var a=c;
            if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
            if (a < Math.abs(c)) { a=c; var s=p/4; }
            else var s = p/(2*Math.PI) * Math.asin (c/a);
            return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
        },
        easeInOutElastic: function (x, t, b, c, d) {
            var s=1.70158;var p=0;var a=c;
            if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
            if (a < Math.abs(c)) { a=c; var s=p/4; }
            else var s = p/(2*Math.PI) * Math.asin (c/a);
            if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
            return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
        },
        easeInBack: function (x, t, b, c, d, s) {
            if (s == undefined) s = 1.70158;
            return c*(t/=d)*t*((s+1)*t - s) + b;
        },
        easeOutBack: function (x, t, b, c, d, s) {
            if (s == undefined) s = 1.70158;
            return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
        },
        easeInOutBack: function (x, t, b, c, d, s) {
            if (s == undefined) s = 1.70158; 
            if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
            return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
        },
        easeInBounce: function (x, t, b, c, d) {
            return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
        },
        easeOutBounce: function (x, t, b, c, d) {
            if ((t/=d) < (1/2.75)) {
                return c*(7.5625*t*t) + b;
            } else if (t < (2/2.75)) {
                return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
            } else if (t < (2.5/2.75)) {
                return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
            } else {
                return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
            }
        },
        easeInOutBounce: function (x, t, b, c, d) {
            if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
            return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
        }
    });
    
 
        
    
