(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function t(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=n[b.effect],k,r=a.is(":input"),u=r&&a.is(":checkbox, :radio, select, :button, :submit"),
s=a.attr("type"),l=b.events[s]||b.events[r?u?"widget":"input":"def"];if(!q)throw'Nonexistent effect "'+b.effect+'"';l=l.split(/,\s*/);if(l.length!=2)throw"Tooltip: bad events configuration for "+s;a.bind(l[0],function(d){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(d)},b.predelay);else c.show(d)}).bind(l[1],function(d){clearTimeout(j);if(b.delay)i=setTimeout(function(){c.hide(d)},b.delay);else c.hide(d)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(d){if(!e){if(m)e=
f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",top:g.top,left:g.left});k=true;q[0].call(c,function(){d.type="onShow";k="full";h.trigger(d)});g=b.events.tooltip.split(/,\s*/);
e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(l[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){k=false;n[b.effect][1].call(c,function(){d.type="onHide";k=false;h.trigger(d)});return c}},isShown:function(d){return d?k=="full":k},getConf:function(){return b},getTip:function(){return e},
getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.3"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},
layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);
if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new t(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);

var timer;

function submitDeliveryOptions(event) {
    togglePostcode();
    toggleEmail();
    var data = $(event.target).closest('form').serialize();
    var url       = $(event.target).attr('action');
    var feedback = $('#status p');
    var button    = $('div#cartNotice').find('input[type=submit]');
    var element = $(event.target)
    if (element.attr('id') == 'methodVoucher-email') {
        $('#email').focus();
    }
    $.ajax({
        type:    'POST',
        url:     url,
        data:    data,
        success: function(json){
            button.attr('disabled', 'disabled');
            button.removeAttr('disabled');
            if (json.msg != '') {
                feedback.html(json.msg).parent().slideDown('slow').delay(2000).slideUp('slow');
                feedback.parent().removeClass('error').removeClass('success').addClass(json.className);
            } else {
                feedback.html('');
            }
            if ( (json.total != '')
                && ($('#total').html() != json.total) ) {
                $('#total').html(json.total).effect('highlight', {color: '#ff99ff'}, 3000);
            }
            if ( (json.delivery != '')
                && ($('#deliveryCost').html() != json.delivery) ) {
                $('#deliveryCost').html(json.delivery).effect('highlight', {color: '#ff99ff'}, 3000);
                $('#deliveryCost').parent().removeClass('free');
                if (json.delivery == 'FREE') {
                    $('#deliveryCost').parent().addClass('free');
                }
            }
            if ($('#cartBanner').html() != json.cartBanner) {
                $('#cartBanner').html(json.cartBanner).effect('highlight', {color: '#ff99ff'}, 3000);
            }
            if (json.cartReady) {
                button.removeAttr('disabled');
            } else {
                button.attr('disabled', 'disabled');
            }
        }
    });
}

function togglePostcode() {

    if ($('#methodProduct-registeredpost').length) {
        if ($('#methodProduct-registeredpost').attr('checked')) {
            $('#postcode').attr('disabled', '');
            $('#postcode').closest('div').removeClass('disabled');
        } else {
            $('#postcode').attr('disabled', true);
            $('#postcode').closest('div').addClass('disabled');
        }
    }

}

function toggleEmail() {

    if ($('#methodVoucher-email').length) {
        if ($('#methodVoucher-email').attr('checked')) {
            $('#email').attr('disabled', '');
            $('#email').closest('div').removeClass('disabled');
        } else {
            $('#email').attr('disabled', true);
            $('#email').closest('div').addClass('disabled');
        }
    }

}

function toggleSendEmail() {

    if ($('#sendEmail').length) {
        if ( ($('#sent').val() == '1')
            && ($('#posted').val())
            && ($('#trackingId').val()) )
        {
            $('#sendEmail').attr('disabled', '');
        } else {
            $('#sendEmail').attr('disabled', true);
        }
    }

}

function togglePdf() {

    var value = $('select#type').attr('value');
    if (value == 'Tangible') {
        $('#pdfExpiry').closest('div').hide();
        $('#pdf').closest('div').hide();
        $('#pdfOffer').closest('div').hide();
    } else if (value == 'Voucher') {
        $('#pdfExpiry').closest('div').show();
        $('#pdf').closest('div').show();
        $('#pdfOffer').closest('div').show();
    }

}

function loadSubProduct(event) {

    event.preventDefault();
    $('form#product').attr('action', $(this).attr('href'));
    $.ajax({
        type: 'GET',
        url: $(this).attr('href'),
        success: function(json) {
            $('#price').val(json.price);
            $('#discountPrice').val(json.discountPrice);
            $('#tax').val(json.tax);
            $('#weight').val(json.weight);
            if (json.freeDelivery === true) {
                $('#freeDelivery').attr('checked', 'checked');
            } else if (json.freeDelivery === false) {
                $('#freeDelivery').attr('checked', '');
            }
            $('#deliveryTimeFrame').val(json.deliveryTimeFrame);
            $('#default').val(json.defaultItem);
            $('#active').val(json.active);
            $('#title').html(json.title);
        }
    });

}

function move() {

    $('.moveUp, .moveDown').click(function(event) {
        event.preventDefault();
        $.ajax({
            type: 'POST',
            url: $(this).closest('form').attr('action'),
            data: $(this).closest('form').serialize(),
            success: function(html) {
                $('table tbody').html(html);
                move();
            }
        });
    });

}

function submitCart(event)
{

    event.preventDefault();
    var form = $(event.target).closest('form');
    var eventType = $(form).find('input[type=submit]').val();
    var loader = $(form).find('span.ajax');
    if (eventType == undefined) {
        eventType = $(form).find('input[type=image]').val();
    }
    if (eventType == undefined) {
        eventType = 'Update';
    }
    var data      = $(form).serialize();
    var url       = $(form).attr('action');
    var qty       = $(form).find('input.productQty').val();
    var rel       = $(form).attr('rel');
    var feedback  = $('#status p');
    var button    = $('div#cartNotice').find('input[type=submit]');
    var src = null;
    $.ajax({
        type:    'POST',
        url:     url,
        data:    data,
        beforeSend: function() {
            if (eventType == 'Add to cart') {
                loader.show();
            } else if ( (eventType == 'Update')
                || (eventType == 'Delete') ) {
                src = $(form).find('input[type=image]').attr('src');
                $(form).find('input[type=image]').attr('src', '/css/imgs/ajax.gif');
            }
        },
        success: function(json){
            if (eventType == 'Buy Now') {
                loader.hide();
            } else if ( (eventType == 'Update')
                || (eventType == 'Delete') ) {
                $(form).find('input[type=image]').attr('src', src);
            }
            if ( (json.total != '')
                && ($('#total').html() != json.total) ) {
                $('#total').html(json.total).effect('highlight', {color: '#ff99ff'}, 3000);
            }
            if ( (json.delivery != '')
                && ($('#deliveryCost').html() != json.delivery) ) {
                $('#deliveryCost').html(json.delivery).effect('highlight', {color: '#ff99ff'}, 3000);
				$('#deliveryCost').parent().removeClass('free');
				if (json.delivery == 'FREE') {
					$('#deliveryCost').parent().addClass('free');
				}
            }
            if ( (json.subTotal != '')
                && ($('#subTotal').html() != json.subTotal) ) {
                $('#subTotal').html(json.subTotal).effect('highlight', {color: '#ff99ff'}, 3000);
            }
            if ($('#cartBanner').html() != json.cartBanner) {
                $('#cartBanner').html(json.cartBanner).effect('highlight', {color: '#ff99ff'}, 3000);
            }

			if (json.msg != '') {
                if (eventType != 'Buy Now') {
                    feedback.html(json.msg).parent().slideDown('slow').delay(2000).slideUp('slow');
                    feedback.parent().removeClass('error').removeClass('success').addClass(json.className);
                } else {
                    window.location = '/shop/view-cart';
                }
			} else {
				feedback.html('');
			}

            if ( (json.total != '')
                && (eventType == 'Buy Now') ) {
                if (json.total != '0.00') {
                    button.removeAttr('disabled')
                } else {
                    button.attr('disabled', 'disabled')
                }
            }
            if (eventType == 'Delete') {
                $(event.target).closest('tr').effect('highlight', {color: '#ff99ff'}, 3000);
                $(event.target).closest('tr').remove();
                var rows = $('table tbody tr');
                var length = rows.length;
                if (length == 0) {
                    $('div.column2-left34').remove();
                    $('div.column2-right14').remove();
                    $('div#content table').remove();
                    $('div#content h2').first().remove();
                    $('div#content ol').remove();
                    $('div#content br').remove();
                    $('div#content').append('<p>Your shopping cart is empty.</p>');
                }
            }
            if (eventType == 'Update') {
                var itemPrice = $(event.target).closest('tr').children('td:last-child').prev();
                if ( (json.itemPrice != '')
                    && (itemPrice.html() != json.itemPrice) ) {
                    itemPrice.html(json.itemPrice).effect('highlight', {color: '#ff99ff'}, 3000);
                }
            }
            if ( (eventType == 'Update')
                || (eventType == 'Delete') ) {
                $('#' + rel).attr('value', qty);
            }
        }
    });

}

function onLoad()
{

    if ($('#load').length) {
        $('#load').change(function(e) {
            var json = JSON.parse($(e.target).attr('value'));
            $('#voucherFor').attr('value', json.title);
            $('#prefix').attr('value', json.prefix);
            $('#pdfExpiry').attr('value', json.period);
        });
    }

    if ($('#postcode').length) {
        $('#postcode').parent().insertAfter($('#methodProduct-registeredpost').parent());
    }

    if ($('#email').length) {
        $('#email').parent().insertAfter($('#methodVoucher-email').parent());
    }

    $('#categories li').click(function(e) {
        e.preventDefault();
        window.location = $(e.currentTarget).children('h2').children('a').attr('href');
    });

    $('a[rel="external"]').attr('target','_blank');

    $('#gallery-listing a').click(function(e) {
        e.preventDefault();
        var id = $(e.target).attr('href');
        $.scrollTo(id, 800);
    });

    $('ol.gallery-list').each(function(key, value) {
        var id = $(value).attr('id');
        $('ol#' + id + ' a').lightBox();
    });

    $('.treatments').accordion();

    $('#sent').change(function(event) {

        var value = $('#sent').val();

        if (value == '1') {
            if (!confirm('Mark this order as sent?')) {
                $('#sent').val('0');
            }
        } else {
            if (!confirm('Mark this order as unsent?')) {
                $('#sent').val('1');
            }
        }

    });

    $('input[value=Update]').prev('input').keyup(submitCart);

    $('input[value=Update]').hide();

    $('form.productForm').submit(submitCart);
    $('form.productDelete').submit(submitCart);

    $('form.productForm select').change(function(event) {
        var data = $(event.target).closest('form').serialize();
        var price = $('#productPrice');
        var delivery = $('#productDeliveryTime');
        var feedback = $('#status p');
        var button = $(event.target).closest('form').children('input.productSubmit');
        var msg = "I'm sorry, but this product is not available for purchase";
        $.ajax({
            type:    'POST',
            url:     '/shop/product',
            data:    data,
            success: function(json) {
                if (price.html() != json.price) {
                    price.html(json.price).effect('highlight', {color: '#ff99ff'}, 3000);
                }
                if (delivery.html() != json.delivery) {
                    delivery.html(json.delivery).effect('highlight', {color: '#ff99ff'}, 3000);
					$('#deliveryCost').parent().removeClass('free');
					if (json.delivery == 'FREE') {
						$('#deliveryCost').parent().addClass('free');
					}
                }
                if (json.active == false) {
                    $(button).attr('disabled', 'disabled');
                    feedback.html(msg).parent().slideDown('slow').delay(2000).slideUp('slow');
					feedback.parent().removeClass('error').removeClass('success').addClass(json.className);
                } else {
                    $(button).attr('disabled', '');
                    feedback.html('');
                }
            }
        });
    });

    $('form#deliveryProduct').change(function(event) {
        submitDeliveryOptions(event);
    });
    $('form#deliveryProduct').keyup(function(event) {
        clearTimeout(timer);
        timer = setTimeout(function() {
            submitDeliveryOptions(event);
        }, 2000);
    });

    $('form#deliveryProduct').click(function(event) {
        clearTimeout(timer);
        timer = setTimeout(function() {
            submitDeliveryOptions(event);
        }, 2000);
    });

    $('form#orderForm').change(function(event) {
        event.preventDefault();
        var data = $(event.target).closest('form').serialize();
        var url       = $(event.target).attr('action');
        var feedback = $('#status p');
        toggleSendEmail();
        $.ajax({
            type:    'POST',
            url:     url,
            data:    data,
            success: function(json) {
                feedback.html(json.msg).parent().slideDown('slow').delay(2000).slideUp('slow');
				feedback.parent().removeClass('error').removeClass('success').addClass(json.className);
            }
        });
    });

    $('form#orderForm').submit(function(event) {
        event.preventDefault();
        var data = $(event.target).closest('form').serialize();
        var url       = $(event.target).attr('action');
        var feedback = $('#status p');
        data = data + '&sendEmail=1';
        toggleSendEmail();
        $.ajax({
            type:    'POST',
            url:     url,
            data:    data,
            success: function(json) {
                feedback.html(json.msg).parent().slideDown('slow').delay(2000).slideUp('slow');
				feedback.parent().removeClass('error').removeClass('success').addClass(json.className);
            }
        });
    });

    $('form#deliveryProduct fieldset div:last-child').prev().hide();
    $('form#orderForm div:nth-child(6)').hide();
    if ($('#posted').length) {
        $('#posted').datepicker({ dateFormat: 'dd/mm/yy' });
    }

    $('#attributeSubmit').click(function(event) {
        event.preventDefault();
        $.ajax({
            type: 'POST',
            data: {
                productId: $('#productId').val(),
                attributeSelect: $('#attributeSelect').val(),
                valueSelect: $('#valueSelect').val(),
                attributeBox: $('#attributeBox').val(),
                attributeAction: $('#attributeAction').val(),
                attributeSubmit: 'submit'
            },
            url: $('form#product').attr('action'),
            success: function(json) {
                $('#subProducts').html(json.html);
                $('#productVariations a').click(loadSubProduct);
                $('#attributeSelect').html(json.attributeSelect);
                $('#valueSelect').html(json.valueSelect);
            }
        });
    });

    $('form.toggle').change(function(event) {
        event.preventDefault();
		var url = $(this).attr('action');
		var data = $(this).serialize();
		$.ajax({
			type: 'post',
			url: url,
			data: data
		});
    });

    if ($('.delete, .moreInformation').length) {

        var $dialog = $('<div></div>')
            .html('This dialog will show every time!')
            .dialog({
                autoOpen: false,
                title: 'Please confirm delete',
                resizable: false,
                height:140,
                width:250,
                modal: true
            });
    }

    $('.moreInformation').click(function(event) {
        event.preventDefault();
        var title = $(this).parent().parent().parent().children('h2').html();
        $('.ui-dialog-title').html(title);
        $('.ui-dialog-content').load($(this).attr('href'));
        $dialog.dialog('option', {
            height: 500,
            width: 700,
            buttons: {
                Ok: function() {
                    $(this).dialog('close');
                }
            }}).dialog('open');

    });

    $('.delete').click(function(event) {
        event.preventDefault();
        var title = $(this).attr('title');
        $('.ui-dialog-content').html('Are you sure you want to ' + title + '?');
        $dialog.dialog('option', {
            buttons: {
                'Delete items': function() {
                    $(this).dialog('close');
                    $.ajax({
                        type: 'POST',
                        data: {
                            submit: 'Yes'
                        },
                        url:  $(event.target).closest('a').attr('href')
                    });
                    $(event.target).closest('tr').remove();
                },
                Cancel: function() {
                    $(this).dialog('close');
                }
            }}).dialog('open');

    });

    $('#productVariations a').click(loadSubProduct);

    $('fieldset#fieldset-actions input').click(function(event) {

        event.preventDefault();
        var action            = $(this).attr('value');
        var actionName        = $(this).attr('name');
        var available         = $('select#availableProducts');
        var availableSelected = $('select#availableProducts option:selected');
        if (available.length == 0) {
            available         = $('select#availableCategories');
            availableSelected = $('select#availableCategories option:selected');
        }
        var selected          = $('select#selectedProducts');
        var selectedSelected  = $('select#selectedProducts option:selected');
        if (selected.length == 0) {
            selected          = $('select#selectedCategories');
            selectedSelected  = $('select#selectedCategories option:selected');
        }
        var data              = $(this).closest('form').serialize();
        data = data + '&' + actionName + '=' + action;
        $.ajax({
            type: 'POST',
            url: $(this).closest('form').attr('action'),
            data: data,
            success: function() {

                if (action == 'Add') {

                    availableSelected.appendTo(selected);

                } else if (action == 'Remove') {

                    selectedSelected.appendTo(available);

                }

            }
        });

    });

    move();

    if ($('form#product').length) {
        $('form#product').tabs();
    }

    $('select#type').change(togglePdf);

    togglePdf();

    $('.ajax').hide();

    $('#price, #discountPrice').keyup(function(event) {
        var price = new Number($('#price').val());
        var discountPrice = new Number($('#discountPrice').val());
        if (discountPrice > 0) {
            price = discountPrice;
        }
        price = price * 100;
        price = price.toFixed(0);
        price = price / 100;
        price = price.toFixed(2);
        var gst = price / 11;
        gst = gst * 100;
        gst = gst.toFixed(0);
        gst = gst / 100;
        gst = gst.toFixed(2);
        $('#tax').val(gst);
    });

    if ($('#slideshow').length) {
        $('#slideshowLink').click(function(event) {
            event.preventDefault();
            $.scrollTo('#slideshow', 800);
        });
        $('body').addClass('js');
        $slideshow.init();
    }

    $('#formLink').click(function(event) {
        event.preventDefault();
        $.scrollTo('#patientFormDownload', 800);
        $('#patientFormDownload').effect('pulsate');
    });

    $('#patientFormDownload').submit(function(event) {
        event.preventDefault();
        if ($('#adult').attr('checked') == true) {
            var uri = $('#adult').val();
        } else if ($('#child').attr('checked') == true) {
            var uri = $('#child').val();
        }
        window.location = uri;
    });

    if ($('[title]').length) {
        $('[title]').tooltip({
            offset: [0, 2],
            effect: 'slide'
        }).dynamic({
            bottom: {
                direction: 'down',
                bounce: true
            }
        });
    }

    togglePostcode();
    toggleEmail();
    toggleSendEmail();

}

$slideshow = {
    context: false,
    tabs: false,
    timeout: 10000,      // time before next slide appears (in ms)
    slideSpeed: 1000,   // time it takes to slide in each slide (in ms)
    tabSpeed: 300,      // time it takes to slide in each slide (in ms) when clicking through tabs
    fx: 'scrollDown',   // the slide effect to use

    init: function() {
        // set the context to help speed up selectors/improve performance
        this.context = $('#slideshow');

        // set tabs to current hard coded navigation items
        this.tabs = $('ul.slides-nav li', this.context);

        // remove hard coded navigation items from DOM 
        // because they aren't hooked up to jQuery cycle
        this.tabs.remove();

        // prepare slideshow and jQuery cycle tabs
        this.prepareSlideshow();
    },

    prepareSlideshow: function() {
        // initialise the jquery cycle plugin -
        // for information on the options set below go to: 
        // http://malsup.com/jquery/cycle/options.html
        $('div.slides > ul', $slideshow.context).cycle({
            fx: $slideshow.fx,
            timeout: $slideshow.timeout,
            speed: $slideshow.slideSpeed,
            fastOnEvent: $slideshow.tabSpeed,
            pager: $('ul.slides-nav', $slideshow.context),
            pagerAnchorBuilder: $slideshow.prepareTabs,
            before: $slideshow.activateTab,
            pauseOnPagerHover: true,
            pause: true
        });
    },

    prepareTabs: function(i, slide) {
        // return markup from hardcoded tabs for use as jQuery cycle tabs
        // (attaches necessary jQuery cycle events to tabs)
        return $slideshow.tabs.eq(i);
    },

    activateTab: function(currentSlide, nextSlide) {
        // get the active tab
        var activeTab = $('a[href="#' + nextSlide.id + '"]', $slideshow.context);

        // if there is an active tab
        if(activeTab.length) {
            // remove active styling from all other tabs
            $slideshow.tabs.removeClass('on');

            // add active styling to active button
            activeTab.parent().addClass('on');
        }
    }
};

$(document).ready(onLoad);

