jQuery(document).ready(function($) {
    try {
        // Show the previous/next button images. Note! these are not what is clicked! We used an image maps for that
        $('#prev_img, #next_img').css('display','inline');

        var $panels = $('#slider .scrollContainer > div');
        var $container = $('#slider .scrollContainer');

        // if false, we'll float all the panels left and fix the width
        // of the container
        var horizontal = true;

        // float the panels left if we're going horizontal
        if (horizontal) {
            $panels.css({
                'float' : 'left',
                'position' : 'relative' // IE fix to ensure overflow is hidden
            });

            // calculate a new width for the container (so it holds all panels)
            $container.css('width', $panels[0].offsetWidth * $panels.length);
        }

        // collect the scroll object, at the same time apply the hidden overflow
        // to remove the default scrollbars that will appear
        var $scroll = $('#slider .scroll').css('overflow', 'hidden');


        // handle nav selection
        function selectNav() {
            $(this).parents('ul:first').children('li').removeClass('selected');
            $(this).parent('li').addClass('selected');
        }

        $('#slider .navigation').find('a').click(selectNav);


        $('#prev_hotspot, #next_hotspot').click(function(){
            var curr_tab = $('ul.navigation').children('li.selected');

            var sel_tab;
            if ( $(this).attr('id').match(/^next/) ) {
                sel_tab = curr_tab.next();
                if ( sel_tab.length==0 ) sel_tab = curr_tab.siblings(':first');
            } else {
                sel_tab = curr_tab.prev();
                if ( sel_tab.length==0 ) sel_tab = curr_tab.siblings(':last');
            }
            curr_tab.removeClass('selected');
            sel_tab.addClass('selected');

            return false;
        });

        function resetHeight(panel) {
            $('.scroll').height($(panel).height() + 40);
            trigger({id : $(panel).attr('id')});
			
        }


        // go find the navigation link that has this target and select the nav
        function trigger(data) {
            var el = $('#slider .navigation').find('a[href$="' + data.id + '"]').get(0);
            selectNav.call(el);
        }

        if (window.location.hash) {
            trigger({ id : window.location.hash.substr(1) });
        } else {
            $('ul.navigation a:first').click();
        }

        // Get the panel id from the currently selected tab id
        resetHeight($('#'+ $('ul.navigation').children('li.selected:first').attr('id').split('P')[0] +'.panel'));

		
        // Keep the previous/next buttons on the screen
        $('#prev_img, #next_img').scroll_with_page({
            container : '.scroll',
            buffer : {
                top    : 120,
                bottom : 100
            }
        });

        // offset is used to move to *exactly* the right place, since I'm using
        // padding on my example, I need to subtract the amount of padding to
        // the offset.  Try removing this to get a good idea of the effect
        var offset = parseInt((horizontal ?
            $container.css('paddingTop') :
            $container.css('paddingLeft'))
            || 0) * -1;


        var scrollOptions = {
            target: $scroll, // the element that has the overflow

            // can be a selector which will be relative to the target
            items: $panels,

            navigation: '.navigation li',

            // selectors are NOT relative to document, i.e. make sure they're unique
            prev: 'area#prev_hotspot',
            next: 'area#next_hotspot',

            // allow the scroll effect to run both directions
            axis: 'xy',

            // onAfter: trigger, // our final callback
            onAfter : resetHeight,

            offset: offset,

            // duration of the sliding effect
            duration: 250,

            // easing - can be used with the easing plugin:
            // http://gsgd.co.uk/sandbox/jquery/easing/
            easing: 'swing'
        };

        // apply serialScroll to the slider - we chose this plugin because it
        // supports// the indexed next and previous scroll along with hooking
        // in to our navigation.
        $('#slider').serialScroll(scrollOptions);

        // now apply localScroll to hook any other arbitrary links to trigger
        // the effect
        $.localScroll(scrollOptions);

        // finally, if the URL has a hash, move the slider in to position,
        // setting the duration to 1 because I don't want it to scroll in the
        // very first page load.  We don't always need this, but it ensures
        // the positioning is absolutely spot on when the pages loads.
        scrollOptions.duration = 1;
        $.localScroll.hash(scrollOptions);

        // make all the navigation list item reflect link hover
        $('li', 'ul.navigation').hover(function(){$(this).addClass('hover').find('a').addClass('hover');},
                                       function(){$(this).removeClass('hover').find('a').removeClass('hover');});

    } catch(e) {}



});

$.fn.scroll_with_page = function(opts) {

    opts = $.extend($.fn.scroll_with_page.opts, opts);

    // where does the container start + height of the container - (total amount of buffer) = where to stop
    var stop;
    if ( opts.container ) {
        opts.container = $(opts.container);
        stop = (opts.container.offset().top + opts.container.height()) - (opts.buffer.top + opts.buffer.bottom);
    }

    var orig_coord = parseInt($(this).css('top'));

    // based on our initial position and the desired buffer, when do we start to move the box?
    var threshold = parseInt($(this).offset().top - opts.buffer.top);

    // var scroll_callback;
    var self = this;
    $(window).scroll(function(e) {reposition();});

    function reposition() {
        // scrollTop tells us how many pixels we have scrolled down (if we have scrolled down 32 pixels, then there
        // are 32px above the fold and scrollTop() = 32). If our threshold is 100 and we have scrolled down 32, then
        // our delta is 68 (meaning we need to scroll down 68 more pixels before we start to mvoe the box)
        var delta = parseInt($(document).scrollTop() - threshold);

        if ( delta >= 0 ) {
            var new_offset = orig_coord + delta;
            if ( !stop || stop > $(document).scrollTop() ) $(self).css('top',  orig_coord + delta);
        }
    }
};

// Set defaults on the plugin function
$.fn.scroll_with_page.opts = {
    container : null,
    buffer : {
        top    : 20,
        bottom : 20
    }
};

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008
 * @author Ariel Flesler
 * @version 1.4
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(h){var m=h.scrollTo=function(b,c,g){h(window).scrollTo(b,c,g)};m.defaults={axis:'y',duration:1};m.window=function(b){return h(window).scrollable()};h.fn.scrollable=function(){return this.map(function(){var b=this.parentWindow||this.defaultView,c=this.nodeName=='#document'?b.frameElement||b:this,g=c.contentDocument||(c.contentWindow||c).document,i=c.setInterval;return c.nodeName=='IFRAME'||i&&h.browser.safari?g.body:i?g.documentElement:this})};h.fn.scrollTo=function(r,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};a=h.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=h(k),d=r,l,e={},p=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(d)){d=n(d);break}d=h(d,this);case'object':if(d.is||d.style)l=(d=h(d)).offset()}h.each(a.axis.split(''),function(b,c){var g=c=='x'?'Left':'Top',i=g.toLowerCase(),f='scroll'+g,s=k[f],t=c=='x'?'Width':'Height',v=t.toLowerCase();if(l){e[f]=l[i]+(p?0:s-o.offset()[i]);if(a.margin){e[f]-=parseInt(d.css('margin'+g))||0;e[f]-=parseInt(d.css('border'+g+'Width'))||0}e[f]+=a.offset[i]||0;if(a.over[i])e[f]+=d[v]()*a.over[i]}else e[f]=d[i];if(/^\d+$/.test(e[f]))e[f]=e[f]<=0?0:Math.min(e[f],u(t));if(!b&&a.queue){if(s!=e[f])q(a.onAfterFirst);delete e[f]}});q(a.onAfter);function q(b){o.animate(e,j,a.easing,b&&function(){b.call(this,r,a)})};function u(b){var c='scroll'+b,g=k.ownerDocument;return p?Math.max(g.documentElement[c],g.body[c]):k[c]}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery);

/**
 * jQuery.LocalScroll - Animated scrolling navigation, using anchors.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 3/11/2009
 * @author Ariel Flesler
 * @version 1.2.7
 **/
;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery);

/*
 * jQuery.SerialScroll - Animated scrolling of series
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 06/14/2009
 * @author Ariel Flesler
 * @version 1.2.2
 * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
 */
;(function(a){var b=a.serialScroll=function(c){return a(window).serialScroll(c)};b.defaults={duration:1e3,axis:"x",event:"click",start:0,step:1,lock:!0,cycle:!0,constant:!0};a.fn.serialScroll=function(c){return this.each(function(){var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;if(!r){m=d()}if(t.force){f({},h)}a(t.prev||[],e).bind(s,-i,q);a(t.next||[],e).bind(s,i,q);if(!p.ssbound){u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)}if(g){u.bind("start.serialScroll",function(v){if(!g){o();g=!0;n()}}).bind("stop.serialScroll",function(){o();g=!1})}u.bind("notify.serialScroll",function(x,w){var v=j(w);if(v>-1){h=v}});p.ssbound=!0;if(t.jump){(r?u:d()).bind(s,function(v){f(v,j(v.target))})}if(k){k=a(k,e).bind(s,function(v){v.data=Math.round(d().length/k.length)*k.index(this);f(v,this)})}function q(v){v.data+=h;f(v,this)}function f(B,z){if(!isNaN(z)){B.data=z;z=p}var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;if(D){B.preventDefault()}if(g){o();l=setTimeout(n,t.interval)}if(!w){v=C<0?0:y-1;if(h!=v){C=v}else{if(!t.cycle){return}else{C=y-v-1}}w=A[C]}if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){return}if(t.stop){u.queue("fx",[]).stop()}if(t.constant){x=Math.abs(x/i*(h-C))}u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])}function n(){u.trigger("next.serialScroll")}function o(){clearTimeout(l)}function d(){return a(m,p)}function j(w){if(!isNaN(w)){return w}var x=d(),v;while((v=x.index(w))==-1&&w!=p){w=w.parentNode}return v}})}})(jQuery);
