(function( win, $ ){
    
    // Put this here for now
    if ($.browser.msie && parseInt($.browser.version, 10) < 9 && parseInt($.browser.version, 10) > 6) {
        
        // Add extra markup for primary backgrounds.
        var html = '<span class="ie-side ie-left"><span class="ie-corner tl"></span><span class="ie-corner bl"></span></span>';
        html += '<span class="ie-side ie-right"><span class="ie-corner tr"></span><span class="ie-corner br"></span></span>';
        $(".panel").append(html);
        
        $(".callout").append('<span class="ie-callout c-tl"></span><span class="ie-callout c-tr"></span><span class="ie-callout c-bl"></span><span class="ie-callout c-br"></span>');
        
        $("button, .button").append('<span class="ie-button-left"></span><span class="ie-button-right"></span>');
    }
    
    function init()
    {
        faqs();
        dailyPrices();
        share();
        slideshow();
        togglebox();
        ie6fix();
    }
    
    // add open/close functionality to faq lists
    function faqs()
    {
        var faqs = $('div.faqs');

        if ( faqs.length ) 
        {
            faqs.prepend($('<a/>', 
                 {
                'text'  : ' show all',
                'class' : 'button FAQ small show-all show-all-button',
                'href' : '#',
                'click' : function(){
                    faqs.find('li').addClass('open');
                    return false;}
                   }));

                              
          faqs.prepend($('<a/>', 
                 {
                'text'  : '  hide all',
                'class' : 'button FAQ small show-all show-all-button',
                'href' : '#',
                'click' : function(){
                    faqs.find('li').removeClass('open');
                    return false;}
                   }));
         
            
            faqs.delegate('.question a', 'click', function(){
                $(this).closest('li').toggleClass('open');
                return false;
            });
            
            if ( location.hash !== '' )
            {
                faqs.find(location.hash+' .question a').trigger('click');
            }
        }
    }
    
    // add open/close functionality to daily price lists
    function dailyPrices()
    {
        var prices = $('div.prices_folding');

        if ( prices.length ) 
        {
            
            prices.delegate('h3', 'click', function(){
                $(this).closest('li').toggleClass('open');
                return false;
            });
        }
    }
    
    // add in print buttons and make them work
    function share()
    {
        var share = $('.share');
        
        if ( share.length )
        {
             share.find('.print a').live('click', function(){
                win.print();
                return false;
            });
            
            share.prepend($('<li class="print"><a href="#">Print</a></li>'));
        }
    }
    
    function slideshow()
    {
        var slideshow_wrapper = $('.slideshow-wrapper');

        if ( slideshow_wrapper.length )
        {
            var controls = slideshow_wrapper.find('.controls'),
                slideshow = slideshow_wrapper.find('.slides'),
                quicklinks = controls.find('.quicklinks a'),
                prev = $('<a class="goto prev prev-disabled" rel="prev" href="#">Prev</a>'),
                next = $('<a class="goto next" href="#" rel="next">Next</a>'),
                pn = prev.add(next);
            
            controls.prepend(prev,next);
                        
            pn.bind('click', function(){
                slideshow.trigger($(this).attr('rel'));
                return false;
            });
            
            quicklinks.bind('click', function(){
                slideshow.trigger('jump', $(this).attr('rel'));
                return false;
            });
            
            slideshow.bind( 'initialized.evtslideshow', function(e, startnum, totalnum ){ 
                controls.find('.quicklinks a[rel='+startnum+']').addClass('current');
			});

			slideshow.bind( 'started.evtslideshow', function(e, num, isFirst, isLast  ){
			    quicklinks.removeClass('current');
			    controls.find('.quicklinks a[rel='+num+']').addClass('current');
			    pn.removeClass('next-disabled prev-disabled');
			    if ( isFirst ) prev.addClass('prev-disabled');
			    if ( isLast ) next.addClass('next-disabled');
			});
			
			slideshow.evtslideshow({transition: 'horizontalSlide'});
        }
    }
    
    function togglebox()
    {
        var togglebox = $('.togglebox');
        
        if ( togglebox.length )
        {
            togglebox.find('.title').bind('click', function(){
                $(this).parent('.togglebox').toggleClass('togglebox-closed');
            });
        }
    }
    
    function ie6fix()
    {
        if ( $.browser.msie && $.browser.version < 7 )
        {
            $('.nav.primary li.other-solutions').hover(function(){
               $(this).addClass('hover');
            }, function(){
               $(this).removeClass('hover');
            });
        }
    }
    
    $(function(){
        
        if ('webkitAppearance' in document.createElement('select').style) $('html').addClass('is_webkit');
        
        init(); // kick things off...
    });

    
})( this, jQuery );


/**
 * jQuery 'evented' slideshow plugin
 * Created by Mark Perkins, mark@allmarkedup.com
 * https://github.com/allmarkedup/jQuery-EvtSlideshow
 * 
 * Provides a **low-level**, event-driven slideshow implementation. Different transition
 * types are supplied by extensions.
 */

;(function($) {

	var defaults = {
		startSlide	: 1,			// which slide to start the slideshow on. NOT zero-indexed. 
		speed 		: 1000,			// the transition speed from slide to slide
		wait		: 8000, 		// the pause between changing slides when autoPlay is on
		transition 	: 'basic',		// the transition type to use. anything other than 'basic' will require a plugin extension to be included.
		atEnd		: 'loop', 		// the behaviour that the slideshow displays when at the end of the slideshow. Options: loop, stop
		autoPlay	: true,		// whether to start auto-playing ths slideshow on load.
		autoPlayDirection : 'forwards',	// the direction of the auto-play
		wrapperCSS	: {},			// CSS styles applied to the wrapper element. Can be used by extensions.
		innerCSS	: {},			// CSS styles appliend to the 'inner wrapper'. Can be used by extensions.
		slideCSS	: {}			// CSS styles appliend to the individual slideshow items. Can be used by extensions.
	},
	_this = this,
	intervals = [],
	timeouts = [];

	$.fn.evtslideshow = function( options )
	{
		return this.each(function(){

			var opts = $.extend(true, {}, defaults, options); // merge defaults with user supplied options
			var $wrap = opts.$wrapper = $(this);

			$wrap.bind( 'jump.evtslideshow', function( e, slideNum ){ goTo( opts, slideNum-1 ); });
			$wrap.bind( 'next.evtslideshow', function(){ next( opts ); });
			$wrap.bind( 'prev.evtslideshow', function(){ prev( opts ); });
			$wrap.bind( 'refresh.evtslideshow', function(){ refresh( opts ); });
			$wrap.bind( 'play.evtslideshow', function( e ){ autoPlayStart( opts ); });
			$wrap.bind( 'pause.evtslideshow', function( e, duration ){ autoPlayPause( opts, duration ); });

			setUp( opts );
		});
	};

	function setUp( opts )
	{
		opts.$slides 		=	opts.$wrapper.children();
		opts.totalSlides	=	opts.$slides.size();
		opts.currentSlide	=	opts.startSlide - 1;
		opts.first 			=	isFirstSlide( opts, opts.currentSlide );
		opts.last 			=	isLastSlide( opts, opts.currentSlide );
		opts.transition		= 	$.fn.evtslideshow.transition[opts.transition];
		opts.$inner			=	$('<div></div>');
		opts.ref			= 	new Date().getTime();
		opts.dir			=	'next';

		opts.$wrapper.append(opts.$inner);
		opts.$inner.append(opts.$slides);

		if ( opts.transition.styles != undefined ) opts = $.extend(true, {}, opts, opts.transition.styles );

		opts.$wrapper.data('evtslideshow_playing', false);

		opts.$wrapper.css(opts.wrapperCSS);
		opts.$inner.css(opts.innerCSS);
		opts.$slides.css(opts.slideCSS);

		opts.transition.setUp( opts, function(){
			opts.$wrapper.trigger( 'initialized.evtslideshow', [opts.currentSlide+1, opts.totalSlides] );
			onFinish( opts, opts.currentSlide );
			if ( opts.autoPlay === true ) autoPlayStart( opts );
		});
	}

	function refresh( opts )
	{
		opts.startSlide = opts.currentSlide+1;
		setUp( opts );
	}

	function next( opts )
	{
		opts.dir = 'next';
		switch( opts.atEnd )
		{
			case 'loop': case 'rewind': goTo( opts, (opts.last ? 0 : opts.currentSlide + 1) ); break;
			default: goTo( opts, (opts.last ? opts.totalSlides - 1 : opts.currentSlide + 1) ); break; // stop when getting to last page 
		}
	}

	function prev( opts )
	{
		opts.dir = 'prev';
		switch( opts.atEnd )
		{
			case 'loop': case 'rewind': goTo( opts, (opts.first ? opts.totalSlides - 1 : opts.currentSlide - 1) ); break;
			default: goTo( opts, (opts.first ? 0 : opts.currentSlide - 1) ); break; // stop when getting to first page 
		}
	}

	function goTo( opts, slideNum )
	{	
		if ( ! opts.$slides.eq(opts.currentSlide).is(':animated') && ! opts.$inner.is(':animated') && ! opts.$wrapper.is(':animated') )
		{
			opts.$wrapper.trigger( 'started.evtslideshow', [slideNum+1, isFirstSlide( opts, slideNum ), isLastSlide( opts, slideNum )] );

			if ( opts.currentSlide != slideNum )
			{
				opts.transition.action.call( _this, opts, slideNum, function(){

					onFinish( opts, slideNum );
				});
			}
		}
	}

	onFinish = function( opts, slideNum )
	{
		opts.currentSlide = slideNum;
		opts.first = isFirstSlide( opts, opts.currentSlide ) ? true : false;
		opts.last = isLastSlide( opts, opts.currentSlide ) ? true : false;

		if ( opts.$wrapper.data('evtslideshow_playing') === true ) autoPlayStart( opts );

		opts.$wrapper.trigger( 'finished.evtslideshow', [opts.currentSlide+1, opts.first, opts.last] );	
	};

	function autoPlayStart( opts )
	{
		clearAutoPlay( opts );
		var action = opts.autoPlayDirection == 'backwards' ? prev : next;
		intervals[opts.ref] = setInterval( function(){ action( opts ); }, opts.wait );
		opts.$wrapper.data('evtslideshow_playing', true);
	}

	function autoPlayPause( opts, duration )
	{
		clearAutoPlay(opts);
		if ( duration !== undefined )
		{
			timeouts[opts.ref] = setTimeout.call( _this, function(){ autoPlayStart( opts ); }, duration );
		}
		opts.$wrapper.data('evtslideshow_playing', false);
	}

	function clearAutoPlay( opts )
	{
		if ( intervals[opts.ref] !== undefined ) { clearInterval( intervals[opts.ref] ); }
		if ( timeouts[opts.ref] !== undefined ) { clearTimeout( timeouts[opts.ref] ); }
	}

	$.fn.evtslideshow.transition = {};

	$.fn.evtslideshow.transition.basic = {

		setUp : function( opts, callback )
		{
			opts.$slides.filter(':not(:eq('+opts.currentSlide+'))').hide();
			callback();
		},

		action : function( opts, slideNum, callback )
		{
			opts.$slides.eq(opts.currentSlide).hide();
			opts.$slides.eq(slideNum).show();
			callback();
		}
	};

	// utility functions

	function isFirstSlide( opts, internalPageNum ) { return ( internalPageNum === 0 ); }
	function isLastSlide( opts, internalPageNum ) { return ( internalPageNum === opts.totalSlides-1 ); }

})(jQuery);
 
$.fn.evtslideshow.transition.horizontalSlide = {

	styles : {
		wrapperCSS : {
			position : 'relative',
			overflow : 'hidden'
		},
		innerCSS : {
			width : '100000px',
			position : 'absolute',
			top : 0,
			left: 0
		},
		slideCSS : {
			float: 'left'
		}
	},

	setUp : function( opts, callback )
	{
        // opts.$wrapper.width( opts.$slides.eq(0).outerWidth() );
		opts.$wrapper.height( opts.$slides.eq(opts.currentSlide).outerHeight() );

		if ( opts.atEnd === 'loop' )
		{
			opts.$slides.hide();
			opts.$slides.eq(opts.currentSlide).show();
		}
		else
		{
			var leftpos = opts.$slides.eq( opts.currentSlide ).position().left;
			opts.$wrapper.scrollLeft(leftpos);
		}
		callback();
	},

	action : function( opts, slideNum, callback )
	{
		var $sl		= opts.$slides,
			$from	= $sl.eq(opts.currentSlide),
			$to		= $sl.eq(slideNum),
			$wrap		= opts.$wrapper,
			slideWidth	= opts.$slides.eq(0).outerWidth();

		if ( opts.atEnd === 'loop' )
		{
			if ( opts.dir === 'prev' )
			{
				$from.before($to);
				$wrap.scrollLeft(slideWidth);
				$to.show();
				$wrap.animate( { scrollLeft : 0, height : $to.outerHeight() }, opts.speed, function(){
					$from.hide();
					callback();
				});
			}
			else
			{
				$from.after($to);
				$to.show();
				$wrap.animate( { scrollLeft : slideWidth, height : $to.outerHeight() }, opts.speed, function(){
					$from.hide();
					$wrap.scrollLeft(0);
					callback();
				});
			}
		}
		else
		{
			var leftpos = $to.position().left;
			opts.$wrapper.animate( { scrollLeft : leftpos,  height : $to.outerHeight() }, opts.speed, callback );
		}
	}
};
