
(function($)
{$.fn.jqzoom=function(options)
{var settings={zoomType:'standard',zoomWidth:200,zoomHeight:200,xOffset:10,yOffset:0,position:"right",lens:true,lensReset:false,imageOpacity:0.2,title:true,alwaysOn:false,showEffect:'show',hideEffect:'hide',fadeinSpeed:'fast',fadeoutSpeed:'slow',preloadImages:true,showPreload:true,preloadText:'Loading zoom',preloadPosition:'center'};options=options||{};$.extend(settings,options);return this.each(function()
{var a=$(this);var aTitle=a.attr('title');$(a).css('outline-style','none');var img=$("img",this);var imageTitle=img.attr('title');var smallimage=new Smallimage(img);var smallimagedata={};var btop=0;var bleft=0;var loader=null;loader=new Loader();var ZoomTitle=(trim(aTitle).length>0)?aTitle:(trim(imageTitle).length>0)?imageTitle:null;var ZoomTitleObj=new zoomTitle();if(a[0].href.match(".jpg|.gif|.png"))
{var largeimage=new Largeimage(a[0].href);}
else
{var largeimage=new Largeimage(a[0].rel);}
var lens=new Lens();var lensdata={};var largeimageloaded=false;var scale={};var stage=null;var running=false;var mousepos={};var firstime=0;var preloadshow=false;var isMouseDown=false;var dragstatus=false
smallimage.loadimage();if($('#parent_product_id').val()>0&&$('.lightbox_active').length==0&&!$(this).hasClass('thickbox'))
{var strProductPopupURL='/productimages/'+($('#parent_product_id').val())+'/'+(($('#product_id').val()==0)?$('.image_product_id').val():$('#product_id').val())+'/'+($('.image_id').val());$(this).unbind('click');if($(this).attr('rel')=='product_image_gallery')
{$(this).bind('click',function(){$('#product_image_gallery').click();return false;});}
else{var sDimensions = $(this).attr('rel');if(sDimensions != ''){var aDimensions = sDimensions.split('-');$(this).bind('click', function(){ popupWindow(strProductPopupURL,aDimensions[0],aDimensions[1]);return false;} );}else{$(this).bind('click', function(){ popupWindow(strProductPopupURL,750,700);return false;} );
}}}else{}
$(this).hover(function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;activate();},function()
{deactivate();});if(settings.alwaysOn)
{setTimeout(function(){activate();},150);}
function activate()
{running=false;largeimage=false;largeimageloaded=false;if(!running){smallimage.findborder();running=true;img.removeAttr('title');$(a).removeAttr('title');if(!largeimage||$.browser.safari){if(a[0].href.match(".jpg|.gif|.png"))
{largeimage=new Largeimage(a[0].href);}
else
{largeimage=new Largeimage(a[0].rel);}}
if(!largeimageloaded||$.browser.safari)
{largeimage.loadimage();}else
{if(settings.zoomType!='innerzoom')
{stage=new Stage();stage.activate();}
lens=new Lens;lens.activate();}
a[0].blur();return false;}}
function deactivate()
{if(settings.zoomType=='reverse'&&!settings.alwaysOn)
{img.css({'opacity':1});}
if(!settings.alwaysOn)
{running=false;largeimageloaded=false;$(lens.node).unbind('mousemove');lens.remove();if($('div.jqZoomWindow').length>0)
{if(stage!=null)
{stage.remove();}}
if($('div.jqZoomTitle').length>0)
{ZoomTitleObj.remove();}
img.attr('title',imageTitle);a.attr('title',aTitle);$().unbind();a.unbind('mousemove');firstime=0;if(jQuery('.zoom_ieframe').length>0)
{jQuery('.zoom_ieframe').remove();}}else
{if(settings.lensReset)
{switch(settings.zoomType)
{case'innerzoom':largeimage.setcenter();break;default:lens.center();break;}}
activate();}};function Smallimage(image)
{this.node=image[0];this.loadimage=function(){this.node.src=image[0].src;};this.findborder=function()
{var bordertop='';bordertop=$(img).css('border-top-width');btop='';var borderleft='';borderleft=$(img).css('border-left-width');bleft='';if(bordertop)
{for(i=0;i<3;i++)
{var x=[];x=bordertop.substr(i,1);if(isNaN(x)==false)
{btop=btop+''+bordertop.substr(i,1);}else
{break;}}}
if(borderleft)
{for(i=0;i<3;i++)
{if(!isNaN(borderleft.substr(i,1)))
{bleft=bleft+borderleft.substr(i,1);}
else
{break;}}}
btop=(btop.length>0)?eval(btop):0;bleft=(bleft.length>0)?eval(bleft):0;}
this.node.onload=function()
{if(a.css('position')!='absolute'&&a.parent().css('position'))
{}
if(a.parent().css('position')!='absolute')
{a.parent().css('position','relative');}
else{}
if($.browser.safari||$.browser.opera)
{$(img).css({position:'absolute',top:'0px',left:'0px'});}
smallimagedata.w=$(this).width();smallimagedata.h=$(this).height();smallimagedata.h=$(this).height();smallimagedata.pos=$(this).offset();smallimagedata.pos.l=$(this).offset().left;smallimagedata.pos.t=$(this).offset().top;smallimagedata.pos.r=smallimagedata.w+smallimagedata.pos.l;smallimagedata.pos.b=smallimagedata.h+smallimagedata.pos.t;a.height(smallimagedata.h);a.width(smallimagedata.w);if(settings.preloadImages)
{largeimage.loadimage();}};return this;};function Lens()
{this.node=document.createElement("div");$(this.node).addClass('jqZoomPup');this.node.onerror=function(){$(lens.node).remove();lens=new Lens();lens.activate();};this.loadlens=function()
{switch(settings.zoomType)
{case'reverse':this.image=new Image();this.image.src=smallimage.node.src;this.node.appendChild(this.image);$(this.node).css({'opacity':1});break;case'innerzoom':this.image=new Image();this.image.src=largeimage.node.src;this.node.appendChild(this.image);$(this.node).css({'opacity':1});break
default:break;}
switch(settings.zoomType)
{case'innerzoom':lensdata.w=smallimagedata.w;lensdata.h=smallimagedata.h;break;default:lensdata.w=(settings.zoomWidth)/scale.x;lensdata.h=(settings.zoomHeight)/scale.y;break;}
$(this.node).css({width:lensdata.w+'px',height:lensdata.h+'px',position:'absolute',display:'none',borderWidth:1+'px'});a.append(this.node);}
return this;};Lens.prototype.activate=function()
{this.loadlens();switch(settings.zoomType)
{case'reverse':img.css({'opacity':settings.imageOpacity});(settings.alwaysOn)?lens.center():lens.setposition(null);a.bind('mousemove',function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;lens.setposition(e);});break;case'innerzoom':$(this.node).css({top:0,left:0});if(settings.title)
{ZoomTitleObj.loadtitle();}
largeimage.setcenter();a.bind('mousemove',function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;largeimage.setinner(e);});break;default:(settings.alwaysOn)?lens.center():lens.setposition(null);$(a).bind('mousemove',function(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;lens.setposition(e);});break;}
return this;};Lens.prototype.setposition=function(e)
{if(e)
{mousepos.x=e.pageX;mousepos.y=e.pageY;}
if(firstime==0)
{var lensleft=(smallimagedata.w)/2-(lensdata.w)/2;var lenstop=(smallimagedata.h)/2-(lensdata.h)/2;$('div.jqZoomPup').show()
if(settings.lens)
{this.node.style.visibility='visible';}
else
{this.node.style.visibility='hidden';$('div.jqZoomPup').hide();}
firstime=1;}else
{var lensleft=mousepos.x-smallimagedata.pos.l-(lensdata.w)/2;var lenstop=mousepos.y-smallimagedata.pos.t-(lensdata.h)/2;}
if(overleft())
{lensleft=0+bleft;}else
if(overright())
{if($.browser.msie)
{lensleft=smallimagedata.w-lensdata.w+bleft+1;}else
{lensleft=smallimagedata.w-lensdata.w+bleft-1;}}
if(overtop())
{lenstop=0+btop;}else
if(overbottom())
{if($.browser.msie)
{lenstop=smallimagedata.h-lensdata.h+btop+1;}else
{lenstop=smallimagedata.h-lensdata.h-1+btop;}}
lensleft=parseInt(lensleft);lenstop=parseInt(lenstop);$('div.jqZoomPup',a).css({top:lenstop,left:lensleft});if(settings.zoomType=='reverse')
{$('div.jqZoomPup img',a).css({'position':'absolute','top':-(lenstop-btop+1),'left':-(lensleft-bleft+1)});}
this.node.style.left=lensleft+'px';this.node.style.top=lenstop+'px';largeimage.setposition();function overleft(){return mousepos.x-(lensdata.w+2*1)/2-bleft<smallimagedata.pos.l;}
function overright(){return mousepos.x+(lensdata.w+2*1)/2>smallimagedata.pos.r+bleft;}
function overtop(){return mousepos.y-(lensdata.h+2*1)/2-btop<smallimagedata.pos.t;}
function overbottom(){return mousepos.y+(lensdata.h+2*1)/2>smallimagedata.pos.b+btop;}
return this;};Lens.prototype.center=function()
{$('div.jqZoomPup',a).css('display','none');var lensleft=(smallimagedata.w)/2-(lensdata.w)/2;var lenstop=(smallimagedata.h)/2-(lensdata.h)/2;this.node.style.left=lensleft+'px';this.node.style.top=lenstop+'px';$('div.jqZoomPup',a).css({top:lenstop,left:lensleft});if(settings.zoomType=='reverse')
{$('div.jqZoomPup img',a).css({'position':'absolute','top':-(lenstop-btop+1),'left':-(lensleft-bleft+1)});}
largeimage.setposition();if($.browser.msie)
{$('div.jqZoomPup',a).show();}else
{setTimeout(function(){$('div.jqZoomPup').fadeIn('fast');},10);}};Lens.prototype.getoffset=function(){var o={};o.left=parseInt(this.node.style.left);o.top=parseInt(this.node.style.top);return o;};Lens.prototype.remove=function()
{if(settings.zoomType=='innerzoom')
{$('div.jqZoomPup',a).fadeOut('fast',function(){$(this).remove();});}else
{$('div.jqZoomPup',a).remove();}};Lens.prototype.findborder=function()
{var bordertop='';bordertop=$('div.jqZoomPup').css('borderTop');lensbtop='';var borderleft='';borderleft=$('div.jqZoomPup').css('borderLeft');lensbleft='';if($.browser.msie)
{var temp=bordertop.split(' ');bordertop=temp[1];var temp=borderleft.split(' ');borderleft=temp[1];}
if(bordertop)
{for(i=0;i<3;i++)
{var x=[];x=bordertop.substr(i,1);if(isNaN(x)==false)
{lensbtop=lensbtop+''+bordertop.substr(i,1);}else
{break;}}}
if(borderleft)
{for(i=0;i<3;i++)
{if(!isNaN(borderleft.substr(i,1)))
{lensbleft=lensbleft+borderleft.substr(i,1)}else
{break;}}}
lensbtop=(lensbtop.length>0)?eval(lensbtop):0;lensbleft=(lensbleft.length>0)?eval(lensbleft):0;}
function Largeimage(url)
{this.url=url;this.node=new Image();this.loadimage=function()
{if(!this.node)
this.node=new Image();this.node.style.position='absolute';this.node.style.display='none';this.node.style.left='-5000px';this.node.style.top='10px';loader=new Loader();if(settings.showPreload&&!preloadshow)
{loader.show();preloadshow=true;}
document.body.appendChild(this.node);this.node.src=this.url;}
this.node.onload=function()
{this.style.display='block';var w=Math.round($(this).width());var h=Math.round($(this).height());this.style.display='none';scale.x=(w/smallimagedata.w);scale.y=(h/smallimagedata.h);if($('div.preload').length>0)
{$('div.preload').remove();}
largeimageloaded=true;if(settings.zoomType!='innerzoom'&&running){stage=new Stage();stage.activate();}
if(running)
{lens=new Lens();lens.activate();}
if($('div.preload').length>0)
{$('div.preload').remove();}}
return this;}
Largeimage.prototype.setposition=function()
{this.node.style.left=Math.ceil(-scale.x*parseInt(lens.getoffset().left)+bleft)+'px';this.node.style.top=Math.ceil(-scale.y*parseInt(lens.getoffset().top)+btop)+'px';};Largeimage.prototype.setinner=function(e){this.node.style.left=Math.ceil(-scale.x*Math.abs(e.pageX-smallimagedata.pos.l))+'px';this.node.style.top=Math.ceil(-scale.y*Math.abs(e.pageY-smallimagedata.pos.t))+'px';$('div.jqZoomPup img',a).css({'position':'absolute','top':this.node.style.top,'left':this.node.style.left});};Largeimage.prototype.setcenter=function(){this.node.style.left=Math.ceil(-scale.x*Math.abs((smallimagedata.w)/2))+'px';this.node.style.top=Math.ceil(-scale.y*Math.abs((smallimagedata.h)/2))+'px';$('div.jqZoomPup img',a).css({'position':'absolute','top':this.node.style.top,'left':this.node.style.left});};function Stage()
{var leftpos=smallimagedata.pos.l;var toppos=smallimagedata.pos.t;this.node=document.createElement("div");$(this.node).addClass('jqZoomWindow');$(this.node).css({position:'absolute',width:Math.round(settings.zoomWidth)+'px',height:Math.round(settings.zoomHeight)+'px',display:'none',zIndex:10000,overflow:'hidden'});switch(settings.position)
{case"right":leftpos=(smallimagedata.pos.r+Math.abs(settings.xOffset)+settings.zoomWidth<screen.width)?(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset)):(smallimagedata.pos.l-settings.zoomWidth-Math.abs(settings.xOffset));topwindow=smallimagedata.pos.t+settings.yOffset+settings.zoomHeight;toppos=(topwindow<screen.height&&topwindow>0)?smallimagedata.pos.t+settings.yOffset:smallimagedata.pos.t;break;case"left":leftpos=(smallimagedata.pos.l-Math.abs(settings.xOffset)-settings.zoomWidth>0)?(smallimagedata.pos.l-Math.abs(settings.xOffset)-settings.zoomWidth):(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset));topwindow=smallimagedata.pos.t+settings.yOffset+settings.zoomHeight;toppos=(topwindow<screen.height&&topwindow>0)?smallimagedata.pos.t+settings.yOffset:smallimagedata.pos.t;break;case"top":toppos=(smallimagedata.pos.t-Math.abs(settings.yOffset)-settings.zoomHeight>0)?(smallimagedata.pos.t-Math.abs(settings.yOffset)-settings.zoomHeight):(smallimagedata.pos.t+smallimagedata.h+Math.abs(settings.yOffset));leftwindow=smallimagedata.pos.l+settings.xOffset+settings.zoomWidth;leftpos=(leftwindow<screen.width&&leftwindow>0)?smallimagedata.pos.l+settings.xOffset:smallimagedata.pos.l;break;case"bottom":toppos=(smallimagedata.pos.b+Math.abs(settings.yOffset)+settings.zoomHeight<$('body').height())?(smallimagedata.pos.b+Math.abs(settings.yOffset)):(smallimagedata.pos.t-settings.zoomHeight-Math.abs(settings.yOffset));leftwindow=smallimagedata.pos.l+settings.xOffset+settings.zoomWidth;leftpos=(leftwindow<screen.width&&leftwindow>0)?smallimagedata.pos.l+settings.xOffset:smallimagedata.pos.l;break;default:leftpos=(smallimagedata.pos.l+smallimagedata.w+settings.xOffset+settings.zoomWidth<screen.width)?(smallimagedata.pos.l+smallimagedata.w+Math.abs(settings.xOffset)):(smallimagedata.pos.l-settings.zoomWidth-Math.abs(settings.xOffset));toppos=(smallimagedata.pos.b+Math.abs(settings.yOffset)+settings.zoomHeight<screen.height)?(smallimagedata.pos.b+Math.abs(settings.yOffset)):(smallimagedata.pos.t-settings.zoomHeight-Math.abs(settings.yOffset));break;}
this.node.style.left=leftpos+'px';this.node.style.top=toppos+'px';return this;}
Stage.prototype.activate=function()
{if(!this.node.firstChild)
this.node.appendChild(largeimage.node);if(settings.title)
{ZoomTitleObj.loadtitle();}
document.body.appendChild(this.node);switch(settings.showEffect)
{case'show':$(this.node).show();break;case'fadein':$(this.node).fadeIn(settings.fadeinSpeed);break;default:$(this.node).show();break;}
$(this.node).show();if($.browser.msie&&$.browser.version<7){this.ieframe=$('<iframe class="zoom_ieframe" frameborder="0" src="#"></iframe>').css({position:"absolute",left:this.node.style.left,top:this.node.style.top,zIndex:99,width:settings.zoomWidth,height:settings.zoomHeight}).insertBefore(this.node);};largeimage.node.style.display='block';}
Stage.prototype.remove=function(){switch(settings.hideEffect)
{case'hide':$('.jqZoomWindow').remove();break;case'fadeout':$('.jqZoomWindow').fadeOut(settings.fadeoutSpeed);break;default:$('.jqZoomWindow').remove();break;}}
function zoomTitle()
{this.node=jQuery('<div />').addClass('jqZoomTitle').html(''+ZoomTitle+'');this.loadtitle=function()
{if(settings.zoomType=='innerzoom')
{$(this.node).css({position:'absolute',top:smallimagedata.pos.b+3,left:(smallimagedata.pos.l+1),width:smallimagedata.w}).appendTo('body');}else
{$(this.node).appendTo(stage.node);}};}
zoomTitle.prototype.remove=function(){$('.jqZoomTitle').remove();}
function Loader()
{this.node=document.createElement("div");$(this.node).addClass('preload');$(this.node).html(settings.preloadText);$(this.node).appendTo("body").css('visibility','hidden');this.show=function()
{switch(settings.preloadPosition)
{case'center':loadertop=smallimagedata.pos.t+(smallimagedata.h-$(this.node).height())/2;loaderleft=smallimagedata.pos.l+(smallimagedata.w-$(this.node).width())/2;break;default:var loaderoffset=this.getoffset();loadertop=!isNaN(loaderoffset.top)?smallimagedata.pos.t+loaderoffset.top:smallimagedata.pos.t+0;loaderleft=!isNaN(loaderoffset.left)?smallimagedata.pos.l+loaderoffset.left:smallimagedata.pos.l+0;break;}
$(this.node).css({top:loadertop,left:loaderleft,position:'absolute',visibility:'visible'});}
return this;}
Loader.prototype.getoffset=function()
{var o=null;o=$('div.preload').offset();return o;}});}})(jQuery);function trim(stringa)
{while(stringa.substring(0,1)==' '){stringa=stringa.substring(1,stringa.length);}
while(stringa.substring(stringa.length-1,stringa.length)==' '){stringa=stringa.substring(0,stringa.length-1);}
return stringa;};jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};/**
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */

(function($) {
    /**
     * Creates a carousel for all matched elements.
     *
     * @example $("#mycarousel").jcarousel();
     * @before <ul id="mycarousel" class="jcarousel-skin-name"><li>First item</li><li>Second item</li></ul>
     * @result
     *
     * <div class="jcarousel-skin-name">
     *   <div class="jcarousel-container">
     *     <div disabled="disabled" class="jcarousel-prev jcarousel-prev-disabled"></div>
     *     <div class="jcarousel-next"></div>
     *     <div class="jcarousel-clip">
     *       <ul class="jcarousel-list">
     *         <li class="jcarousel-item-1">First item</li>
     *         <li class="jcarousel-item-2">Second item</li>
     *       </ul>
     *     </div>
     *   </div>
     * </div>
     *
     * @name jcarousel
     * @type jQuery
     * @param Hash o A set of key/value pairs to set as configuration properties.
     * @cat Plugins/jCarousel
     */
    $.fn.jcarousel = function(o) {
        return this.each(function() {
            new $jc(this, o);
        });
    };

    // Default configuration properties.
    var defaults = {
        vertical: false,
        start: 1,
        offset: 1,
        size: null,
        scroll: 3,
        visible: null,
        animation: 'normal',
        easing: 'swing',
        auto: 0,
        wrap: null,
        initCallback: null,
        reloadCallback: null,
        itemLoadCallback: null,
        itemFirstInCallback: null,
        itemFirstOutCallback: null,
        itemLastInCallback: null,
        itemLastOutCallback: null,
        itemVisibleInCallback: null,
        itemVisibleOutCallback: null,
        buttonNextHTML: '<div></div>',
        buttonPrevHTML: '<div></div>',
        buttonNextEvent: 'click',
        buttonPrevEvent: 'click',
        buttonNextCallback: null,
        buttonPrevCallback: null
    };

    /**
     * The jCarousel object.
     *
     * @constructor
     * @name $.jcarousel
     * @param Object e The element to create the carousel for.
     * @param Hash o A set of key/value pairs to set as configuration properties.
     * @cat Plugins/jCarousel
     */
    $.jcarousel = function(e, o) {
        this.options    = $.extend({}, defaults, o || {});

        this.locked     = false;

        this.container  = null;
        this.clip       = null;
        this.list       = null;
        this.buttonNext = null;
        this.buttonPrev = null;

        this.wh = !this.options.vertical ? 'width' : 'height';
        this.lt = !this.options.vertical ? 'left' : 'top';

        // Extract skin class
        var skin = '', split = e.className.split(' ');

        for (var i = 0; i < split.length; i++) {
            if (split[i].indexOf('jcarousel-skin') != -1) {
                $(e).removeClass(split[i]);
                var skin = split[i];
                break;
            }
        }

        if (e.nodeName == 'UL' || e.nodeName == 'OL') {
            this.list = $(e);
            this.container = this.list.parent();

            if (this.container.hasClass('jcarousel-clip')) {
                if (!this.container.parent().hasClass('jcarousel-container'))
                    this.container = this.container.wrap('<div></div>');

                this.container = this.container.parent();
            } else if (!this.container.hasClass('jcarousel-container'))
                this.container = this.list.wrap('<div></div>').parent();
        } else {
            this.container = $(e);
            this.list = $(e).find('>ul,>ol,div>ul,div>ol');
        }

        if (skin != '' && this.container.parent()[0].className.indexOf('jcarousel-skin') == -1)
        	this.container.wrap('<div class=" '+ skin + '"></div>');

        this.clip = this.list.parent();

        if (!this.clip.length || !this.clip.hasClass('jcarousel-clip'))
            this.clip = this.list.wrap('<div></div>').parent();

        this.buttonPrev = $('.jcarousel-prev', this.container);

        if (this.buttonPrev.size() == 0 && this.options.buttonPrevHTML != null)
            this.buttonPrev = this.clip.before(this.options.buttonPrevHTML).prev();

        this.buttonPrev.addClass(this.className('jcarousel-prev'));

        this.buttonNext = $('.jcarousel-next', this.container);

        if (this.buttonNext.size() == 0 && this.options.buttonNextHTML != null)
            this.buttonNext = this.clip.before(this.options.buttonNextHTML).prev();

        this.buttonNext.addClass(this.className('jcarousel-next'));

        this.clip.addClass(this.className('jcarousel-clip'));
        this.list.addClass(this.className('jcarousel-list'));
        this.container.addClass(this.className('jcarousel-container'));

        var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
        var li = this.list.children('li');

        var self = this;

        if (li.size() > 0) {
            var wh = 0, i = this.options.offset;
            li.each(function() {
                self.format(this, i++);
                wh += self.dimension(this, di);
            });

            this.list.css(this.wh, wh + 'px');

            // Only set if not explicitly passed as option
            if (!o || o.size === undefined)
                this.options.size = li.size();
        }

        // For whatever reason, .show() does not work in Safari...
        this.container.css('display', 'block');
        this.buttonNext.css('display', 'block');
        this.buttonPrev.css('display', 'block');

        this.funcNext   = function() { self.next(); };
        this.funcPrev   = function() { self.prev(); };
        this.funcResize = function() { self.reload(); };

        if (this.options.initCallback != null)
            this.options.initCallback(this, 'init');

        if ($.browser.safari) {
            this.buttons(false, false);
            $(window).bind('load', function() { self.setup(); });
        } else
            this.setup();
    };

    // Create shortcut for internal use
    var $jc = $.jcarousel;

    $jc.fn = $jc.prototype = {
        jcarousel: '0.2.3'
    };

    $jc.fn.extend = $jc.extend = $.extend;

    $jc.fn.extend({
        /**
         * Setups the carousel.
         *
         * @name setup
         * @type undefined
         * @cat Plugins/jCarousel
         */
        setup: function() {
            this.first     = null;
            this.last      = null;
            this.prevFirst = null;
            this.prevLast  = null;
            this.animating = false;
            this.timer     = null;
            this.tail      = null;
            this.inTail    = false;

            if (this.locked)
                return;

            this.list.css(this.lt, this.pos(this.options.offset) + 'px');
            var p = this.pos(this.options.start);
            this.prevFirst = this.prevLast = null;
            this.animate(p, false);

            $(window).unbind('resize', this.funcResize).bind('resize', this.funcResize);
        },

        /**
         * Clears the list and resets the carousel.
         *
         * @name reset
         * @type undefined
         * @cat Plugins/jCarousel
         */
        reset: function() {
            this.list.empty();

            this.list.css(this.lt, '0px');
            this.list.css(this.wh, '10px');

            if (this.options.initCallback != null)
                this.options.initCallback(this, 'reset');

            this.setup();
        },

        /**
         * Reloads the carousel and adjusts positions.
         *
         * @name reload
         * @type undefined
         * @cat Plugins/jCarousel
         */
        reload: function() {
            if (this.tail != null && this.inTail)
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + this.tail);

            this.tail   = null;
            this.inTail = false;

            if (this.options.reloadCallback != null)
                this.options.reloadCallback(this);

            if (this.options.visible != null) {
                var self = this;
                var di = Math.ceil(this.clipping() / this.options.visible), wh = 0, lt = 0;
                $('li', this.list).each(function(i) {
                    wh += self.dimension(this, di);
                    if (i + 1 < self.first)
                        lt = wh;
                });

                this.list.css(this.wh, wh + 'px');
                this.list.css(this.lt, -lt + 'px');
            }

            this.scroll(this.first, false);
        },

        /**
         * Locks the carousel.
         *
         * @name lock
         * @type undefined
         * @cat Plugins/jCarousel
         */
        lock: function() {
            this.locked = true;
            this.buttons();
        },

        /**
         * Unlocks the carousel.
         *
         * @name unlock
         * @type undefined
         * @cat Plugins/jCarousel
         */
        unlock: function() {
            this.locked = false;
            this.buttons();
        },

        /**
         * Sets the size of the carousel.
         *
         * @name size
         * @type undefined
         * @param Number s The size of the carousel.
         * @cat Plugins/jCarousel
         */
        size: function(s) {
            if (s != undefined) {
                this.options.size = s;
                if (!this.locked)
                    this.buttons();
            }

            return this.options.size;
        },

        /**
         * Checks whether a list element exists for the given index (or index range).
         *
         * @name get
         * @type bool
         * @param Number i The index of the (first) element.
         * @param Number i2 The index of the last element.
         * @cat Plugins/jCarousel
         */
        has: function(i, i2) {
            if (i2 == undefined || !i2)
                i2 = i;

            if (this.options.size !== null && i2 > this.options.size)
            	i2 = this.options.size;

            for (var j = i; j <= i2; j++) {
                var e = this.get(j);
                if (!e.length || e.hasClass('jcarousel-item-placeholder'))
                    return false;
            }

            return true;
        },

        /**
         * Returns a jQuery object with list element for the given index.
         *
         * @name get
         * @type jQuery
         * @param Number i The index of the element.
         * @cat Plugins/jCarousel
         */
        get: function(i) {
            return $('.jcarousel-item-' + i, this.list);
        },

        /**
         * Adds an element for the given index to the list.
         * If the element already exists, it updates the inner html.
         * Returns the created element as jQuery object.
         *
         * @name add
         * @type jQuery
         * @param Number i The index of the element.
         * @param String s The innerHTML of the element.
         * @cat Plugins/jCarousel
         */
        add: function(i, s) {
            var e = this.get(i), old = 0, add = 0;

            if (e.length == 0) {
                var c, e = this.create(i), j = $jc.intval(i);
                while (c = this.get(--j)) {
                    if (j <= 0 || c.length) {
                        j <= 0 ? this.list.prepend(e) : c.after(e);
                        break;
                    }
                }
            } else
                old = this.dimension(e);

            e.removeClass(this.className('jcarousel-item-placeholder'));
            typeof s == 'string' ? e.html(s) : e.empty().append(s);

            var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
            var wh = this.dimension(e, di) - old;

            if (i > 0 && i < this.first)
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - wh + 'px');

            this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) + wh + 'px');

            return e;
        },

        /**
         * Removes an element for the given index from the list.
         *
         * @name remove
         * @type undefined
         * @param Number i The index of the element.
         * @cat Plugins/jCarousel
         */
        remove: function(i) {
            var e = this.get(i);

            // Check if item exists and is not currently visible
            if (!e.length || (i >= this.first && i <= this.last))
                return;

            var d = this.dimension(e);

            if (i < this.first)
                this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + d + 'px');

            e.remove();

            this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) - d + 'px');
        },

        /**
         * Moves the carousel forwards.
         *
         * @name next
         * @type undefined
         * @cat Plugins/jCarousel
         */
        next: function() {
            this.stopAuto();

            if (this.tail != null && !this.inTail)
                this.scrollTail(false);
            else
                this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'last') && this.options.size != null && this.last == this.options.size) ? 1 : this.first + this.options.scroll);
        },

        /**
         * Moves the carousel backwards.
         *
         * @name prev
         * @type undefined
         * @cat Plugins/jCarousel
         */
        prev: function() {
            this.stopAuto();

            if (this.tail != null && this.inTail)
                this.scrollTail(true);
            else
                this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'first') && this.options.size != null && this.first == 1) ? this.options.size : this.first - this.options.scroll);
        },

        /**
         * Scrolls the tail of the carousel.
         *
         * @name scrollTail
         * @type undefined
         * @param Bool b Whether scroll the tail back or forward.
         * @cat Plugins/jCarousel
         */
        scrollTail: function(b) {
            if (this.locked || this.animating || !this.tail)
                return;

            var pos  = $jc.intval(this.list.css(this.lt));

            !b ? pos -= this.tail : pos += this.tail;
            this.inTail = !b;

            // Save for callbacks
            this.prevFirst = this.first;
            this.prevLast  = this.last;

            this.animate(pos);
        },

        /**
         * Scrolls the carousel to a certain position.
         *
         * @name scroll
         * @type undefined
         * @param Number i The index of the element to scoll to.
         * @param Bool a Flag indicating whether to perform animation.
         * @cat Plugins/jCarousel
         */
        scroll: function(i, a) {
            if (this.locked || this.animating)
                return;

            this.animate(this.pos(i), a);
        },

        /**
         * Prepares the carousel and return the position for a certian index.
         *
         * @name pos
         * @type Number
         * @param Number i The index of the element to scoll to.
         * @cat Plugins/jCarousel
         */
        pos: function(i) {
            if (this.locked || this.animating)
                return;

            i = $jc.intval(i);
            if (this.options.wrap != 'circular')
                i = i < 1 ? 1 : (this.options.size && i > this.options.size ? this.options.size : i);

            var back = this.first > i;
            var pos  = $jc.intval(this.list.css(this.lt));

            // Create placeholders, new list width/height
            // and new list position
            var f = this.options.wrap != 'circular' && this.first <= 1 ? 1 : this.first;
            var c = back ? this.get(f) : this.get(this.last);
            var j = back ? f : f - 1;
            var e = null, l = 0, p = false, d = 0;

            while (back ? --j >= i : ++j < i) {
                e = this.get(j);
                p = !e.length;
                if (e.length == 0) {
                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));
                    c[back ? 'before' : 'after' ](e);
                }

                c = e;
                d = this.dimension(e);

                if (p)
                    l += d;

                if (this.first != null && (this.options.wrap == 'circular' || (j >= 1 && (this.options.size == null || j <= this.options.size))))
                    pos = back ? pos + d : pos - d;
            }

            // Calculate visible items
            var clipping = this.clipping();
            var cache = [];
            var visible = 0, j = i, v = 0;
            var c = this.get(i - 1);

            while (++visible) {
                e = this.get(j);
                p = !e.length;
                if (e.length == 0) {
                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));
                    // This should only happen on a next scroll
                    c.length == 0 ? this.list.prepend(e) : c[back ? 'before' : 'after' ](e);
                }

                c = e;
                var d = this.dimension(e);
                if (d == 0) {
                    //alert('jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...');
                    return 0;
                }

                if (this.options.wrap != 'circular' && this.options.size !== null && j > this.options.size)
                    cache.push(e);
                else if (p)
                    l += d;

                v += d;

                if (v >= clipping)
                    break;

                j++;
            }

             // Remove out-of-range placeholders
            for (var x = 0; x < cache.length; x++)
                cache[x].remove();

            // Resize list
            if (l > 0) {
                this.list.css(this.wh, this.dimension(this.list) + l + 'px');

                if (back) {
                    pos -= l;
                    this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - l + 'px');
                }
            }

            // Calculate first and last item
            var last = i + visible - 1;
            if (this.options.wrap != 'circular' && this.options.size && last > this.options.size)
                last = this.options.size;

            if (j > last) {
                visible = 0, j = last, v = 0;
                while (++visible) {
                    var e = this.get(j--);
                    if (!e.length)
                        break;
                    v += this.dimension(e);
                    if (v >= clipping)
                        break;
                }
            }

            var first = last - visible + 1;
            if (this.options.wrap != 'circular' && first < 1)
                first = 1;

            if (this.inTail && back) {
                pos += this.tail;
                this.inTail = false;
            }

            this.tail = null;
            if (this.options.wrap != 'circular' && last == this.options.size && (last - visible + 1) >= 1) {
                var m = $jc.margin(this.get(last), !this.options.vertical ? 'marginRight' : 'marginBottom');
                if ((v - m) > clipping)
                    this.tail = v - clipping - m;
            }

            // Adjust position
            while (i-- > first)
                pos += this.dimension(this.get(i));

            // Save visible item range
            this.prevFirst = this.first;
            this.prevLast  = this.last;
            this.first     = first;
            this.last      = last;

            return pos;
        },

        /**
         * Animates the carousel to a certain position.
         *
         * @name animate
         * @type undefined
         * @param mixed p Position to scroll to.
         * @param Bool a Flag indicating whether to perform animation.
         * @cat Plugins/jCarousel
         */
        animate: function(p, a) {
            if (this.locked || this.animating)
                return;

            this.animating = true;

            var self = this;
            var scrolled = function() {
                self.animating = false;

                if (p == 0)
                    self.list.css(self.lt,  0);

                if (self.options.wrap == 'both' || self.options.wrap == 'last' || self.options.size == null || self.last < self.options.size)
                    self.startAuto();

                self.buttons();
                self.notify('onAfterAnimation');
            };

            this.notify('onBeforeAnimation');

            // Animate
            if (!this.options.animation || a == false) {
                this.list.css(this.lt, p + 'px');
                scrolled();
            } else {
                var o = !this.options.vertical ? {'left': p} : {'top': p};
                this.list.animate(o, this.options.animation, this.options.easing, scrolled);
            }
        },

        /**
         * Starts autoscrolling.
         *
         * @name auto
         * @type undefined
         * @param Number s Seconds to periodically autoscroll the content.
         * @cat Plugins/jCarousel
         */
        startAuto: function(s) {
            if (s != undefined)
                this.options.auto = s;

            if (this.options.auto == 0)
                return this.stopAuto();

            if (this.timer != null)
                return;

            var self = this;
            this.timer = setTimeout(function() { self.next(); }, this.options.auto * 1000);
        },

        /**
         * Stops autoscrolling.
         *
         * @name stopAuto
         * @type undefined
         * @cat Plugins/jCarousel
         */
        stopAuto: function() {
            if (this.timer == null)
                return;

            clearTimeout(this.timer);
            this.timer = null;
        },

        /**
         * Sets the states of the prev/next buttons.
         *
         * @name buttons
         * @type undefined
         * @cat Plugins/jCarousel
         */
        buttons: function(n, p) {
            if (n == undefined || n == null) {
                var n = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'first') || this.options.size == null || this.last < this.options.size);
                if (!this.locked && (!this.options.wrap || this.options.wrap == 'first') && this.options.size != null && this.last >= this.options.size)
                    n = this.tail != null && !this.inTail;
            }

            if (p == undefined || p == null) {
                var p = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'last') || this.first > 1);
                if (!this.locked && (!this.options.wrap || this.options.wrap == 'last') && this.options.size != null && this.first == 1)
                    p = this.tail != null && this.inTail;
            }

            var self = this;

            this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
            this.buttonPrev[p ? 'bind' : 'unbind'](this.options.buttonPrevEvent, this.funcPrev)[p ? 'removeClass' : 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', p ? false : true);

            if (this.buttonNext.length > 0 && (this.buttonNext[0].jcarouselstate == undefined || this.buttonNext[0].jcarouselstate != n) && this.options.buttonNextCallback != null) {
                this.buttonNext.each(function() { self.options.buttonNextCallback(self, this, n); });
                this.buttonNext[0].jcarouselstate = n;
            }

            if (this.buttonPrev.length > 0 && (this.buttonPrev[0].jcarouselstate == undefined || this.buttonPrev[0].jcarouselstate != p) && this.options.buttonPrevCallback != null) {
                this.buttonPrev.each(function() { self.options.buttonPrevCallback(self, this, p); });
                this.buttonPrev[0].jcarouselstate = p;
            }
        },

        notify: function(evt) {
            var state = this.prevFirst == null ? 'init' : (this.prevFirst < this.first ? 'next' : 'prev');

            // Load items
            this.callback('itemLoadCallback', evt, state);

            if (this.prevFirst !== this.first) {
                this.callback('itemFirstInCallback', evt, state, this.first);
                this.callback('itemFirstOutCallback', evt, state, this.prevFirst);
            }

            if (this.prevLast !== this.last) {
                this.callback('itemLastInCallback', evt, state, this.last);
                this.callback('itemLastOutCallback', evt, state, this.prevLast);
            }

            this.callback('itemVisibleInCallback', evt, state, this.first, this.last, this.prevFirst, this.prevLast);
            this.callback('itemVisibleOutCallback', evt, state, this.prevFirst, this.prevLast, this.first, this.last);
        },

        callback: function(cb, evt, state, i1, i2, i3, i4) {
            if (this.options[cb] == undefined || (typeof this.options[cb] != 'object' && evt != 'onAfterAnimation'))
                return;

            var callback = typeof this.options[cb] == 'object' ? this.options[cb][evt] : this.options[cb];

            if (!$.isFunction(callback))
                return;

            var self = this;

            if (i1 === undefined)
                callback(self, state, evt);
            else if (i2 === undefined)
                this.get(i1).each(function() { callback(self, this, i1, state, evt); });
            else {
                for (var i = i1; i <= i2; i++)
                    if (i !== null && !(i >= i3 && i <= i4))
                        this.get(i).each(function() { callback(self, this, i, state, evt); });
            }
        },

        create: function(i) {
            return this.format('<li></li>', i);
        },

        format: function(e, i) {
            var $e = $(e).addClass(this.className('jcarousel-item')).addClass(this.className('jcarousel-item-' + i));
            $e.attr('jcarouselindex', i);
            return $e;
        },

        className: function(c) {
            return c + ' ' + c + (!this.options.vertical ? '-horizontal' : '-vertical');
        },

        dimension: function(e, d) {
            var el = e.jquery != undefined ? e[0] : e;

            var old = !this.options.vertical ?
                el.offsetWidth + $jc.margin(el, 'marginLeft') + $jc.margin(el, 'marginRight') :
                (el.offsetHeight > 0 ? el.offsetHeight : ($('#'+el.id+ ' img').attr('height'))+5) + $jc.margin(el, 'marginTop') + $jc.margin(el, 'marginBottom');


            if (d == undefined || old == d)
                return old;

            var w = !this.options.vertical ?
                d - $jc.margin(el, 'marginLeft') - $jc.margin(el, 'marginRight') :
                d - $jc.margin(el, 'marginTop') - $jc.margin(el, 'marginBottom');

            $(el).css(this.wh, w + 'px');

            return this.dimension(el);
        },

        clipping: function() {
            return !this.options.vertical ?
                this.clip[0].offsetWidth - $jc.intval(this.clip.css('borderLeftWidth')) - $jc.intval(this.clip.css('borderRightWidth')) :
                this.clip[0].offsetHeight - $jc.intval(this.clip.css('borderTopWidth')) - $jc.intval(this.clip.css('borderBottomWidth'));
        },

        index: function(i, s) {
            if (s == undefined)
                s = this.options.size;

            return Math.round((((i-1) / s) - Math.floor((i-1) / s)) * s) + 1;
        }
    });

    $jc.extend({
        /**
         * Gets/Sets the global default configuration properties.
         *
         * @name defaults
         * @descr Gets/Sets the global default configuration properties.
         * @type Hash
         * @param Hash d A set of key/value pairs to set as configuration properties.
         * @cat Plugins/jCarousel
         */
        defaults: function(d) {
            return $.extend(defaults, d || {});
        },

        margin: function(e, p) {
            if (!e)
                return 0;

            var el = e.jquery != undefined ? e[0] : e;

            if (p == 'marginRight' && $.browser.safari) {
                var old = {'display': 'block', 'float': 'none', 'width': 'auto'}, oWidth, oWidth2;

                $.swap(el, old, function() { oWidth = el.offsetWidth; });

                old['marginRight'] = 0;
                $.swap(el, old, function() { oWidth2 = el.offsetWidth; });

                return oWidth2 - oWidth;
            }

            return $jc.intval($.css(el, p));
        },

        intval: function(v) {
            v = parseInt(v);
            return isNaN(v) ? 0 : v;
        }
    });

})(jQuery);
function addEvent(obj,evType,fn){if(obj.addEventListener){obj.addEventListener(evType,fn,false);return true;}else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else{return false;}}
function showOrHide(elementid)
{if(document.getElementById(elementid))
{element=document.getElementById(elementid);if(element.style.display=="none")
{element.style.display='';}
else
{element.style.display='none';}}}
function displayDifferentDeliveryAddress(type,element,blnResetFields)
{var arrElements=[];arrElements[0]='delivery_full_name';arrElements[1]='delivery_house_number';arrElements[2]='delivery_address1';arrElements[3]='delivery_address2';arrElements[4]='delivery_town';arrElements[5]='delivery_county';arrElements[6]='delivery_postcode';arrElements[7]='delivery_postcode_find';arrElements[8]='delivery_country';arrElements[9]='delivery_telephone';arrElements[10]='delivery_company_name';arrElements[11]='delivery_mobile';var arrLen=arrElements.length;for(var i=0,x=arrLen;i<x;++i)
{if(type=='show')
{if(blnResetFields==true)
{if(arrElements[i]!='delivery_full_name'&&arrElements[i]!='delivery_country')
{if(document.getElementById(arrElements[i]))document.getElementById(arrElements[i]).value='';}}
if(document.getElementById(arrElements[i]))document.getElementById(arrElements[i]).disabled=false;if(document.getElementById(arrElements[i]+'_header'))document.getElementById(arrElements[i]+'_header').disabled=false;$('.delivery').removeClass('field_disabled');}
else
{if(document.getElementById(arrElements[i]))document.getElementById(arrElements[i]).disabled=true;if(document.getElementById(arrElements[i]+'_header'))document.getElementById(arrElements[i]+'_header').disabled=true;$('.delivery').addClass('field_disabled');}}}
function changeQuantity(iKey,strDirection)
{if(strDirection=='plus')
{if(((arrBasket[iKey]['quantity']+1)>arrBasket[iKey]['stock'])&&arrBasket[iKey]['stock']!=-1)
{alert(arrBasket[iKey]['title']+'\n\nSorry, we currently only have '+arrBasket[iKey]['stock']+' of this item in stock');return false;}
else
{return true;}}
else if(strDirection=='minus')
{if((arrBasket[iKey]['quantity']==1))
{if(confirm("Are you sure you want to remove this item from your basket?\n\nClick \"OK\" for Yes or \"Cancel\" for No"))
{return true;}
else
{return false;}
return false;}
else
{return true;}}
return true;}
function removeItem(iKey)
{if(confirm("Are you sure you want to remove this item from your basket?\n\nClick \"OK\" for Yes or \"Cancel\" for No"))
{return true;}
else
{return false;}}
function popupWindow(url,width,height)
{LeftPosition=(screen.width)?(screen.width-500)/2:0;TopPosition=(screen.height)?(screen.height-500)/2:0;settings='height='+height+',width='+width+',top='+TopPosition+',left='+LeftPosition+',toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1';win=window.open(url,null,settings);return false;}
function initCurrency(strCurrency)
{var strStoredCurrency=$.cookie('VSCurrency');hideCurrencyPrices();if(!strStoredCurrency)
{toggleCurrency(strCurrency);}
else
{toggleCurrency(strStoredCurrency);}}
function hideCurrencyPrices()
{var arrCurrencies=$('#currency_options').children();for(var i=0;i<arrCurrencies.length;++i)
{$('#link_'+arrCurrencies[i].id).bind("click",function(){var strCurrency=this.id;strCurrency=strCurrency.replace(/link_currency_/,'');toggleCurrency(strCurrency);this.blur();return false;});}}
function refreshCurrency()
{hideCurrencyPrices();toggleCurrency($.cookie('VSCurrency'));}
function toggleCurrency(strCurrencyCode)
{if($("#price_swap")&&$('#link_currency_'+strCurrencyCode).attr('name')=='N')
{$("#price_swap").css('visibility','hidden');}
else
{$("#price_swap").css('visibility','visible');}
if(strCurrencyCode==$.cookie('VSCurrency'))
{return;}
var arrCurrencies=$('#currency_options').children();for(var i=0;i<arrCurrencies.length;++i)
{if(document.getElementById('link_'+arrCurrencies[i].id))
{document.getElementById('link_'+arrCurrencies[i].id).className='';var strCurrency=arrCurrencies[i].id;strCurrency=strCurrency.replace(/currency_/,'');$("."+strCurrency).hide();$("#img_currency_active_"+strCurrency).hide();$("#img_currency_inactive_"+strCurrency).show();$("#extra_img_currency_active_"+strCurrency).hide();$("#extra_img_currency_inactive_"+strCurrency).show();}}
document.getElementById('link_currency_'+strCurrencyCode).className='active';if($('#link_currency_'+strCurrencyCode).attr('name')=='N')
{if($("#price_swap"))
{$("#price_swap").css('visibility','hidden');}}
if($.cookie('VSCurrency')!=strCurrencyCode)
{$.cookie('VSCurrency',strCurrencyCode,{expires:+365,path:'/',domain:window.location.hostname});}
$("."+strCurrencyCode).show();$("#img_currency_active_"+strCurrencyCode).show();$("#img_currency_inactive_"+strCurrencyCode).hide();$("#extra_img_currency_active_"+strCurrencyCode).show();$("#extra_img_currency_inactive_"+strCurrencyCode).hide();}
function initVat()
{if($('#vat_options'))
{var arrVatOptions=$('#vat_options').children();for(var i=0;i<arrVatOptions.length;++i)
{$('#link_'+arrVatOptions[i].id).bind("click",function(){var strDisplayPrices=this.id;strDisplayPrices=strDisplayPrices.replace(/link_vat_options_/,'');refreshVat();this.blur();return false;});}}
if($('#price_swap'))
{$("#price_swap").bind("click",function(){toggleVat(false);this.blur();return false;});}
toggleVat($.cookie('VSVatPrices'));}
function refreshVat()
{var strDisplayPricesCookie=$.cookie('VSVatPrices');if(strDisplayPricesCookie=='')
{return;}
toggleVat($.cookie('VSVatPrices'));}
function toggleVat(strDisplayPrices)
{if(strDisplayPrices==false)
{if($.cookie('VSVatPrices')=='inc')
{strDisplayPrices='ex';}
else
{strDisplayPrices='inc';}}
if(strDisplayPrices=='ex')
{$("#link_vat_options_ex").addClass('active');$("#link_vat_options_inc").removeClass('active');$(".ex").show();$(".inc").hide();if($("#vat_basket_row"))
{$("#vat_basket_row").show();}}
else
{$("#link_vat_options_inc").addClass('active');$("#link_vat_options_ex").removeClass('active');$(".ex").hide();$(".inc").show();if($("#vat_basket_row"))
{$("#vat_basket_row").hide();}}
if($.cookie('VSVatPrices')!=strDisplayPrices)
{$.cookie('VSVatPrices',strDisplayPrices,{expires:+365,path:'/',domain:window.location.hostname});}}
function initReviewStarRater()
{if($('#review_star_1').length)
{var iPointer=1;while($('#review_star_'+iPointer).length)
{$('#review_star_'+iPointer).bind("click",function(){var strCurrentWidth=this.innerHTML;var strNewWidth=strCurrentWidth*20+'%';$('#review_star_user_rating').css('width',strNewWidth);$('#review_form_rating').focus();$('#review_form_rating').val(strCurrentWidth);$('#review_form_rating').blur();$('#review_form_subject').focus();$('#review_form_rating_errors').hide();var iMessagePointer=1;while($('#rating_message_'+iMessagePointer).length)
{$('#rating_message_'+iMessagePointer).hide();iMessagePointer++;}
$('#rating_message_'+strCurrentWidth).show();return false;});iPointer++;}}}
function updateLHSNavigationCookie(iCategoryGroupID)
{$.cookie('VSCategoryGroup',iCategoryGroupID,{expires:+364,path:'/',domain:window.location.hostname});}
function updateLHSNavigationTabs(iCategoryGroupID)
{var iCounter=1;while($('#category_group_'+iCounter+'_on').length>0)
{if($('#category_group_'+iCounter+'_on').length)
{$('#category_group_'+iCounter+'_on').hide();}
if($('#category_group_'+iCounter+'_off').length)
{$('#category_group_'+iCounter+'_off').show();}
iCounter++;}
if($('#category_group_'+iCategoryGroupID+'_on').length)
{$('#category_group_'+iCategoryGroupID+'_off').hide();$('#category_group_'+iCategoryGroupID+'_on').show();}}
function updateLHSNavigationLinks(iCategoryGroupID)
{var iCounter=1;while($('#category_group_'+iCounter+'_on').length>0)
{if($('#shop_categories_'+iCounter).length>0)
{$('#shop_categories_'+iCounter).hide();}
iCounter++;}
$('#shop_categories_'+iCategoryGroupID).show();}
function showLHSNavigation(iCategoryGroupID)
{updateLHSNavigationTabs(iCategoryGroupID);updateLHSNavigationLinks(iCategoryGroupID);updateLHSNavigationCookie(iCategoryGroupID);}
function toggleLHSCategoryFilterNavigation()
{if($('#menu_left').length>0)
{showOrHide('menu_left');}
else if($('#default_navigation').length>0)
{showOrHide('default_navigation');}
showOrHide('filter_wrapper');}
var arrPausePromoUnits=Array();var arrCancelPromoUnits=Array();var arrCurrentBanners=Array();var iBannerIDOverride=null;function pausePromoUnitFade(strPromoUnitName)
{arrPausePromoUnits[strPromoUnitName]=0;}
function resumePromoUnitFade(strPromoUnitName,iInterval,iMouseoutInterval)
{arrPausePromoUnits[strPromoUnitName]=1;}
var promoUnitFadeTimer=null;function initPromoUnitFade(strPromoUnitName,iStartingBannerID,iInterval,iMouseoutInterval,blnPauseOnHover)
{if(!blnPauseOnHover){blnPauseOnHover='true';}
arrPausePromoUnits[parseInt(strPromoUnitName)]=1;arrCancelPromoUnits[parseInt(strPromoUnitName)]=0;promoUnitFadeTimer=window.setTimeout("triggerRunPromoUnitFade('"+strPromoUnitName+"', '"+iStartingBannerID+"', '"+iInterval*1000+"')",iInterval*1000);if(blnPauseOnHover=='true')
{$('.'+strPromoUnitName+'fade').attr('onmouseover','pausePromoUnitFade("'+strPromoUnitName+'");');$('.'+strPromoUnitName+'fade').attr('onmouseout','resumePromoUnitFade("'+strPromoUnitName+'", "'+iInterval*1000+'", "'+iMouseoutInterval+'");');}
$('.'+strPromoUnitName+'thumbs > a').bind('click',function()
{clearInterval(promoUnitFadeTimer);arrCancelPromoUnits[parseInt(strPromoUnitName)]=1;arrPausePromoUnits[parseInt(strPromoUnitName)]=1;runPromoUnitFade(strPromoUnitName,parseInt(this.name)-1,-1);return false;});}
function triggerRunPromoUnitFade(strPromoUnitName,iStartingBannerID,iInterval){if(arrCancelPromoUnits[parseInt(strPromoUnitName)]==0)
{promoUnitFadeTimer=window.setTimeout("runPromoUnitFade('"+strPromoUnitName+"', '"+iStartingBannerID+"', '"+iInterval+"');",iInterval);}
else
{arrCancelPromoUnits[parseInt(strPromoUnitName)]=0;}}
function runPromoUnitFade(strPromoUnitName,iStartingBannerID,iInterval)
{iNewBannerID=parseInt(iStartingBannerID)+parseInt(1);if(!$("#"+strPromoUnitName+iNewBannerID).length){iNewBannerID=0;}
if(arrPausePromoUnits[parseInt(strPromoUnitName)]==1){arrCurrentBanners[strPromoUnitName]=iNewBannerID;$("#"+strPromoUnitName+iStartingBannerID).fadeOut(Math.ceil(iInterval/(iInterval/1000)));$("."+strPromoUnitName+'fade').fadeOut(Math.ceil(iInterval/(iInterval/1000)));$("#"+strPromoUnitName+iNewBannerID).fadeIn(Math.ceil(iInterval/(iInterval/1000)));if(iStartingBannerID<0)iStartingBannerID=0;if($('#thumb_'+strPromoUnitName+iStartingBannerID).length>0)
{$("."+strPromoUnitName+'thumbs').removeClass('selected');$("#thumb_"+strPromoUnitName+iNewBannerID).addClass('selected');}}
if(iInterval>0){triggerRunPromoUnitFade(strPromoUnitName,iNewBannerID,iInterval);}}
var iLastPriceBreakPointer=0;function togglePriceBands(iPriceBreakQuantity,strElementID)
{while($('#'+strElementID+'_'+iPriceBreakQuantity).length==0&&iPriceBreakQuantity>0)
{iPriceBreakQuantity--;}
if(iPriceBreakQuantity>0)
{if(iPriceBreakQuantity!=iLastPriceBreakPointer)
{$('.'+strElementID).hide();$('#'+strElementID+'_'+iPriceBreakQuantity).show();}}
iLastPriceBreakPointer=iPriceBreakQuantity;}
function alterQuantity(iIncrement,iMinQuantity,iMaxQuantity,strElementID)
{simpleAlterQuantity(iIncrement,iMinQuantity,iMaxQuantity,strElementID);togglePriceBands(iNewQuantity,'price_break');}
function simpleAlterQuantity(iIncrement,iMinQuantity,iMaxQuantity,strElementID)
{iCurrentQuantity=parseInt($("#"+strElementID).val());iNewQuantity=parseInt(iCurrentQuantity)+parseInt(iIncrement);if(iNewQuantity<iMinQuantity)
{iNewQuantity=iMinQuantity;}
if(iMaxQuantity>0&&iNewQuantity>iMaxQuantity)
{alert('Sorry, we currently only have '+iMaxQuantity+' of this item in stock.');iNewQuantity=iMaxQuantity;}
$("#"+strElementID).val(iNewQuantity);}
function sizeConvert(strInches,strCM){var strUserLength=$("#size_query").val();if((strUserLength==null)||(strUserLength=="")||(isNaN(strUserLength))){alert('Please enter a length with numbers only. Use a period for decimal place.');$("#size_query").focus();}
else
{var arrChecked=$("input:checked");for(var i=0;i<arrChecked.length;i++){var strUserUnit=arrChecked[i].value;}
if(strUserUnit=='inch'){var strAnswer=strUserLength*0.3937008;var strAnswerRounded=Math.round(10*strAnswer)/10;$("#convertor_result").html(strUserLength+strCM+' = '+strAnswerRounded+' '+strInches);}
else if(strUserUnit=='cm')
{var strAnswer=strUserLength*2.54;var strAnswerRounded=Math.round(10*strAnswer)/10;$("#convertor_result").html(strUserLength+' '+strInches+' = '+strAnswerRounded+strCM);}}}
function in_array(needle,haystack,argStrict){var found=false,key,strict=!!argStrict;for(key in haystack){if((strict&&haystack[key]===needle)||(!strict&&haystack[key]==needle)){found=true;break;}}
return found;}
function setupPopupLinks()
{$(".popup").unbind('click');$(".popup").click(function(){var iHeight=0;var iWidth=0;if(this.name!='')
{var arrBits=this.name.split('x');if(!isNaN(arrBits[0])&&!isNaN(arrBits[1]))
{iWidth=arrBits[0];iHeight=arrBits[1];}}
if(iHeight==0||iWidth==0)
{iHeight=780;iWidth=680;}
popupWindow(this.href,iHeight,iWidth);return false;});}
function setupConfirmationDialogs()
{$(".confirmation").attr("onclick","if(!confirm(this.title)) { return false; }");}
function setupVS3FormValidation()
{$(".vs3form").attr("onsubmit","return checkVS3Form(this);");}
function checkVS3Form(objForm)
{var arClass,bValid;var objField=objForm.getElementsByTagName('*');for(var iFieldCounter=0;iFieldCounter<objField.length;iFieldCounter++)
{arClass=objField[iFieldCounter].className.split(' ');for(var iClassCounter=0;iClassCounter<arClass.length;iClassCounter++)
{switch(arClass[iClassCounter])
{case'string':bValid=isString(objField[iFieldCounter].value.replace(/^\s*|\s*$/g,''));break;case'number':bValid=isNumber(objField[iFieldCounter].value);break;case'email':bValid=isEmail(objField[iFieldCounter].value);break;case'telephone':bValid=isTelephone(objField[iFieldCounter].value);break;case'password':bValid=isPassword(objField[iFieldCounter].value);break;case'check':bValid=isChecked(objField[iFieldCounter].checked);break;default:bValid=true;}
if(bValid==false)
{s=new String(objField[iFieldCounter].title);s=s.replace(/_/g," ");alert('Please review the value you entered for '+s);objField[iFieldCounter].select();objField[iFieldCounter].focus();return false;}}}
return true;}
function isString(strValue)
{return(typeof strValue=='string'&&strValue!=''&&isNaN(strValue));}
function isNumber(strValue)
{return(!isNaN(strValue)&&strValue!='');}
function isChecked(blnChecked)
{return blnChecked;}
function isTelephone(strValue)
{return(strValue!='');}
function isPassword(strValue)
{return(strValue!='');}
function isEmail(strValue)
{var objRE=/^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,}$/;return(strValue!=''&&objRE.test(strValue));}
function setCountry(iCountryID,blnUpdateDeliveryMethods,blnRender)
{if(iCountryID>0&&isNumber(iCountryID)){$.ajax({async: false, type: 'POST', url: '/ajax/setCountryID/'+iCountryID});if(blnUpdateDeliveryMethods){$('#courier_id').attr('disabled',false);if($('#delivery_prompt').length>0){$('#delivery_prompt').hide();}
if($('#delivery_label').length>0){$('#delivery_label').show();}
if(arrCouriersForCountry[iCountryID].length>0){var arrCourierIDs=arrCouriersForCountry[iCountryID].split(',');blnSelect=false;if(typeof(document.getElementById('delivery_country_id').options)!='undefined')
{arrCountryOptions=document.getElementById('delivery_country_id').options;for(var i=0;i<arrCountryOptions.length;i++)
{if(arrCountryOptions[i].value=='')
{document.getElementById('delivery_country_id').remove(i);}}}
if($('#delivery_country_id').hasClass('error_border'))
{$('#delivery_country_id').removeClass('error_border');}
if(document.getElementById('courier_id').options&&document.getElementById('courier_id').options.length>0){document.getElementById('courier_id').options.length=0;}
for(var i=0;i<arrCourierIDs.length;i++){var newoption=document.createElement('option');newoption.text=arrCouriers[arrCourierIDs[i]];newoption.value=arrCourierIDs[i];if (typeof(arrCourierIDs[i]) != 'undefined' && typeof(arrCouriers[arrCourierIDs[i]]) != 'undefined')
{document.getElementById('courier_id').add(newoption,newoption.selectedIndex);if(!blnSelect){if(typeof(blnRender)!='undefined'&&blnRender)
{setCourier(iCountryID,arrCourierIDs[i],true);}
else
{setCourier(iCountryID,arrCourierIDs[i]);}
blnSelect=true;}
}
}}
else{$('#courier_id').attr('disabled',true);$(".courier_cost").hide();$(".courier_information").hide();if($(".courier_cost_noship")){$(".courier_cost_noship").show();}}}}}
function setCourier(iCountryID,iCourierId,blnRender)
{strPresonalisationQueryString=''
$(".courier_cost").hide();$("#courier_cost_"+iCountryID+'_'+iCourierId).show();$("#courier_vat_"+iCountryID+'_'+iCourierId).show();$("#courier_discounts_"+iCountryID+'_'+iCourierId).show();$("#courier_subtotal_"+iCountryID+'_'+iCourierId).show();$("#courier_total_"+iCountryID+'_'+iCourierId).show();if($('#top_container_basket_cost').length!=0)
{$('#top_container_basket_cost').html($("#courier_total_"+iCountryID+'_'+iCourierId).html());}
$(".courier_information").hide();if($("#courier_information_"+iCountryID+'_'+iCourierId).html()!=''){$("#courier_information_"+iCountryID+'_'+iCourierId).fadeIn();}
if(typeof(blnRender)!='undefined'&&blnRender)
{if($('#basket_total').length==0||$('#basket_sub_total').length==0)
{$.ajax({async: false, type: 'POST', url: '/ajax/setCourierID/'+iCourierId, success: function(strData)
{$('#shipping_cost_container').html(strData);} });}
else
{$('#basket_page_loading').remove();$('#basket_page_right').append('<div id="basket_page_loading"></div>');$.getJSON('/ajax/setCourierID/'+iCourierId+'/'+iCountryID+'/true/true',function(strJSON)
{$('#basket_delivery_price').html(strJSON.delivery);$('#basket_discount_price').html(strJSON.discount);$('#basket_sub_total').html(strJSON.sub_total);$('#basket_total').html(strJSON.total);$('#basket_page_loading').remove();});}}
else
{$.ajax({async: false, type: 'POST', url: '/ajax/setCourierID/'+iCourierId});}}
function getDeliveryDates(iCountryID,iCourierId)
{if(document.getElementById('delivery_date').options&&document.getElementById('delivery_date').options.length>0){document.getElementById('delivery_date').options.length=0;if(document.getElementById('delivery_date').options.length!=0)
{$('#delivery_date option').remove();}}
$("#delivery_date_row").hide();$('#delivery_date_row').attr('disabled',true);var i=0;$.post('/ajax/setShippingDate/');try{if(arrCourierDeliveryDates[iCourierId][iCountryID]&&arrCourierDeliveryDates[iCourierId][iCountryID].length>0)
{var arrDeliveryDates=arrCourierDeliveryDates[iCourierId][iCountryID];$("#delivery_date_row").show();$('#delivery_date_row').attr('disabled',false);var keys=new Array();for(k in arrDeliveryDates)
{keys.push(k);}
keys.sort(function(a,b){return(a>b)-(a<b);});$('#delivery_date').attr('disabled',true);var options='';for(var i=0;i<keys.length;i++)
{var key=keys[i];var option;if(i==0){$.post('/ajax/setShippingDate/'+key);}
$("#delivery_date_row").show();option=$("<option></option>").attr("value",key).text(arrDeliveryDates[key]);options+=$('<div>').append(option.clone()).remove().html();}
$('#delivery_date').html(options);$('#delivery_date').attr('disabled',false);}}catch(err){return false;}}
function setDeliveryDate(iDeliveryDate){if(iDeliveryDate!='null'){$.post('/ajax/setShippingDate/'+iDeliveryDate);}}
function setRegistrationDetails(blnRepopulate)
{if($('#delivery_address_no').attr('checked') && blnRepopulate == true)
{$('.delivery').addClass('field_disabled');$('#delivery_full_name').val($('#full_name').val());$('#delivery_postcode').val($('#postcode').val());$('#delivery_company_name').val($('#company_name').val());$('#delivery_house_number').val($('#house_number').val());$('#delivery_address1').val($('#address1').val());$('#delivery_address2').val($('#address2').val());$('#delivery_town').val($('#town').val());$('#delivery_county').val($('#county').val());$('#delivery_country').val($('#country').val());$('#delivery_telephone').val($('#telephone').val());}
else
{$('.delivery').removeClass('field_disabled');}}
function mirrorRegistrationDetails()
{if($('#delivery_address_no').attr('checked'))
{$('#full_name').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_full_name').val($('#full_name').val());}});$('#postcode').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_postcode').val($('#postcode').val());}});$('#company_name').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_company_name').val($('#company_name').val());}});$('#house_number').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_house_number').val($('#house_number').val());}});$('#address1').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_address1').val($('#address1').val());}});$('#address2').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_address2').val($('#address2').val());}});$('#town').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_town').val($('#town').val());}});$('#county').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_county').val($('#county').val());}});$('#country').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_country').val($('#country').val());}});$('#telephone').blur(function(){if($('#delivery_address_no').attr('checked'))
{$('#delivery_telephone').val($('#telephone').val());}});}}
jQuery.fn.encHTML=function(){return this.each(function(){var me=jQuery(this);var html=me.html();me.html(html.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'));});};jQuery.fn.decHTML=function(){return this.each(function(){var me=jQuery(this);var html=me.html();me.html(html.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>'));});};jQuery.fn.isEncHTML=function(str){if(str.search(/&amp;/g)!=-1||str.search(/&lt;/g)!=-1||str.search(/&gt;/g)!=-1)
return true;else
return false;};jQuery.fn.decHTMLifEnc=function(){return this.each(function(){var me=jQuery(this);var html=me.html();if(jQuery.fn.isEncHTML(html))
me.html(html.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>'));});}
function URLDecode(url)
{var HEXCHARS="0123456789ABCDEFabcdef";var encoded=url;var plaintext="";var i=0;while(i<encoded.length){var ch=encoded.charAt(i);if(ch=="+"){plaintext+=" ";i++;}else if(ch=="%"){if(i<(encoded.length-2)&&HEXCHARS.indexOf(encoded.charAt(i+1))!=-1&&HEXCHARS.indexOf(encoded.charAt(i+2))!=-1){plaintext+=unescape(encoded.substr(i,3));i+=3;}else{alert('Bad escape combination near ...'+encoded.substr(i));plaintext+="%[ERROR]";i++;}}else{plaintext+=ch;i++;}}
return plaintext;};function initVS3Ajax()
{blnHideAutoComplete=true;$('.ajax_product_search').bind('blur',function(){runQuickOrderProductSearch(this.value,this.id);});$('.ajax_product_search').bind('blur',function(){if(blnHideAutoComplete){$('#product_autocomplete').hide();}});$('.ajax_autocomplete').bind('mouseover',function(){blnHideAutoComplete=false;});$('.ajax_autocomplete').bind('mouseout',function(){blnHideAutoComplete=true;});}
function runAJAXAddToBasket(blnSimplePersonalisation)
{var arrPersonalisations=new Array();var strPersonalisations='';var strPresonalisationQueryString='';if(blnSimplePersonalisation==null)
{blnSimplePersonalisation=false;}
if($('.personalisation_template').length>0)
{$('.personalisation_template:checked').each(function(i,objTickbox)
{arrPersonalisations[i]=objTickbox.value;if(strPersonalisations!='')
{strPersonalisations+=',';}
strPersonalisations+=objTickbox.value;strPresonalisationQueryString='&personalisations[]='+objTickbox.value;});}
if(blnSimplePersonalisation&&$('#personalisation').length>0)
{strPresonalisationQueryString='&personalisation='+$('#personalisation').val();}
if($('#personalise_checkbox:checked').length>0)
{strPresonalisationQueryString+='&personalisations[]='+$('#personalise_checkbox:checked').val();}
$.getJSON('/ajax/addtobasket/?product_id='+$('#product_id').val()+'&quantity='+$('#quantity').val()+strPresonalisationQueryString,function(strJSON)
{updateMiniBasket(strJSON);});return false;}
function updateMiniBasket(strJSON)
{if(strJSON==null)
{$.getJSON('/ajax/getbasket/true',function(strJSON)
{updateMiniBasket(strJSON);});}
else
{$('#basket_items').hide();$('#mini_basket_num_items').text(strJSON.basket_num_items);$('#mini_basket_total').text('');$('#mini_basket_total').append(strJSON.product_total);$('#basket_items').fadeIn();$('#quick_buy_cancel').hide();if(strJSON.note!=undefined&&strJSON.note!='')
{$('#add_note').remove();$('#added_to_basket').append('<span id="add_note"><strong>Please Note: '+strJSON.note+'</strong></span>');}
$('#added_to_basket').fadeIn();window.setTimeout("$('#added_to_basket').fadeOut()",3500);}}
function initModalProductPopup()
{if($('#modal_product_popup').length>0)
{$('#modal_product_popup').jqm({modal:false,trigger:'a.modal_product_trigger',overlay:1});$('.modal_product_trigger').bind('click',function()
{runProductPopup($(this).attr('id'));});}}
function runProductPopup(strID)
{var strParentProductID=new String(strID);iParentProductID=strParentProductID.replace('modal_product_popup_','');$.getJSON("/ajax/product_details/",{parent_product_id:iParentProductID},function(strJSON)
{if(strJSON.title!='')
{$('#modal_product_popup_title').html('');$('#modal_product_popup_description').html('');$('#modal_product_popup_title').append('<h3>'+strJSON.title+'<h3>');$('#modal_product_popup_description').append(strJSON.description);}});}
function initModalFAQPopup()
{if($('#modal_product_popup').length>0)
{$('#modal_product_popup').jqm({modal:false,trigger:'a.modal_faq_trigger',overlay:1});$('.modal_faq_trigger').bind('click',function()
{runFAQPopup($(this).attr('id'));});}}
function runFAQPopup(strID)
{var strFAQID=new String(strID);iFAQID=strFAQID.replace('faq_popup_','');$.getJSON("/ajax/faq/",{faq_id:iFAQID},function(strJSON)
{if(strJSON.title!='')
{$('#modal_product_popup_title').html('');$('#modal_product_popup_description').html('');$('#modal_product_popup_title').append('<h3>'+strJSON.question+'<h3>');$('#modal_product_popup_description').append(strJSON.answer);}});}
function initQuickBuy()
{if($('.thickbox').length>0)
{tb_init('a.thickbox, area.thickbox, input.thickbox');}
if($('#quick_buy').length>0)
{$('#quick_buy').jqm({modal:true,trigger:'a.quick_buy_trigger',toTop:true});$('.quick_buy_trigger').bind('click',function(e)
{if($('#quick_buy:hidden'))
{runQuickBuy($(this).attr('id'));}
return false;});$('#quick_buy').jqmAddClose($('.modal_product_popup_close'));}}
function runQuickBuy(strID)
{$('#quick_buy_content').hide();$('#quick_buy_ok').hide();$('#quick_buy_loading').show();var strParentProductID=new String(strID);iParentProductID=strParentProductID.replace('quick_buy_','');$.getJSON("/ajax/quickbuy/",{parent_product_id:iParentProductID},function(strJSON){$('#quick_buy_content_products').html('');strPersHTML='';if(strJSON.num_available_personalisations)
{blnPersonalise=true;}
else
{blnPersonalise=false;}
if(strJSON.num_products==1&&strJSON.delivery_per_product==0&&1==2)
{var strIdent='';$.post('/ajax/addtobasket/',{product_id:strJSON.products[0].product_id},function(strJSON2){strIdent=strJSON2.latest_identifier;});$('#quick_buy_content_img').attr('src',strJSON.products[0].thumb);if(typeof(strJSON.product_parent.added_to_basket_text)!=undefined&&typeof(strJSON.product_parent.added_to_basket_text)!='undefined')
{strMessage='<p>'+strJSON.product_parent.added_to_basket_text+'</p>';}
else
{strMessage='<p>'+strJSON.product_parent.title+' has been added to your shopping basket</p>';}
if(blnPersonalise)
{strMessage+='<p class="quickbuy_personalise">Personalisation is available for this product. Click <a href="/personalisation/select_type/'+strIdent+'">here</a> to add them.</p>'}
$('#quick_buy_content_products').append(strMessage);$('#quick_buy_content').show();$('#quick_buy_ok').show();$('#quick_buy_loading').hide();}
else if(strJSON.num_products==1&&strJSON.delivery_per_product==1)
{$('#quick_product_id').val(strJSON.products[0].product_id);$('#product_id').val(strJSON.products[0].product_id);$('#datepicker').show();$('#datepicker').css('z-index',3500);$('#delivery_per_product_quickbuy').css('z-index',3510);if($('#product_delivery_stage0').length>0)
{$('#product_delivery_stage0').show();$('#product_delivery_stage1').hide();}
else
{$('#product_delivery_stage1').show();}
$('#product_delivery_stage2').hide();$('#product_delivery_stage3').hide();if(typeof(strJSON.product_parent.added_to_basket_text)!=undefined&&typeof(strJSON.product_parent.added_to_basket_text)!='undefined')
{strMessage='<p>'+strJSON.product_parent.added_to_basket_text+'</p>';}
else
{strMessage='<p>'+strJSON.product_parent.title+' has been added to your shopping basket</p>';}
$('#quick_buy_content_products').append(strMessage);}
else if(strJSON.num_products>1)
{strHTML='<p><span class="choose_your">Choose your</span> <strong>'+strJSON.product_parent.title+'</strong>:</p><select name="product_id" id="quickbuy_options">';$.each(strJSON.products,function(i,product){strHTML+='<option value='+product.product_id+'">'+product.attribute_summary;if(product.model!='')
{strHTML+=' ('+product.model+')';}
strHTML+='</option>';});strHTML+='</select>';strHTML+='<input type="submit" id="quick_buy_add_to_basket_submit" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: $(\'#quickbuy_options\').val() });  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>'+escape(strJSON.product_parent.title.replace('"',"&quot;"))+' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';strHTML+='<input type="image" id="quick_buy_add_to_basket_image" src="/images/quick_buy_add_to_basket.gif" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: $(\'#quickbuy_options\').val() });  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>'+escape(strJSON.product_parent.title.replace('"',"&quot;"))+' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';$('#quick_buy_content_products').append(strHTML);$('#quick_buy_content_img').attr('src',strJSON.product_parent.thumb);$('#quick_buy_content').show();$('#quick_buy_loading').hide();}
else if(strJSON.num_products==1)
{strProductAttribute='';strHiddenField='';$.each(strJSON.products,function(i,product){strHiddenField='<input type="hidden" name="product_id" value='+product.product_id+'">';strProductAttribute=product.attribute_summary;if(product.model!=''&&strProductAttribute!='')
{strProductAttribute+=' ('+product.model+')';}});if(strProductAttribute=='')
{var strIdent='';var objRequest=null;$.ajax({type:"GET",url:"/ajax/addtobasket/",data:"product_id="+strJSON.products[0].product_id,dataType:"json",success:function(objJSON){$('#quick_buy_content_img').attr('src',strJSON.products[0].thumb);if(typeof(strJSON.product_parent.added_to_basket_text)!=undefined&&typeof(strJSON.product_parent.added_to_basket_text)!='undefined')
{strMessage='<p>'+strJSON.product_parent.added_to_basket_text+'</p>';}
else
{strMessage='<p>'+strJSON.product_parent.title+' has been added to your shopping basket</p>';}
if(blnPersonalise)
{strMessage+='<p class="quickbuy_personalise">Personalisation is available for this product. Click <a href="/personalisation/select_type/'+objJSON.latest_identifier+'/">here</a> to choose.</p>'}
$('#quick_buy_content_products').append(strMessage);$('#quick_buy_content').show();$('#quick_buy_ok').show();$('#quick_buy_loading').hide();}});}
else
{strHTML='<p><span class="choose_your">Choose your</span> <strong>'+strJSON.product_parent.title+'</strong>:</p>';strHTML+='<input type="hidden" name="product_id" value='+strJSON.products[0].product_id+'">';strHTML+=strProductAttribute;strHTML+='<input type="submit" id="quick_buy_add_to_basket_submit" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: '+strJSON.products[0].product_id+'});  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>'+escape(strJSON.product_parent.title.replace('"',"&quot;"))+' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';strHTML+='<input type="image" id="quick_buy_add_to_basket_image" src="/images/quick_buy_add_to_basket.gif" value="Add to Basket" onclick="$.post(\'/ajax/addtobasket/\', { product_id: '+strJSON.products[0].product_id+'});  $(\'#quick_buy_content_products\').text(\'\'); $(\'#quick_buy_content_products\').append(unescape(\'<p>'+escape(strJSON.product_parent.title.replace('"',"&quot;"))+' has been added to your shopping basket</p>\')); $(\'#quick_buy_content\').show(); $(\'#quick_buy_ok\').show();return false;" />';$('#quick_buy_content_products').append(strHTML);$('#quick_buy_content_img').attr('src',strJSON.product_parent.thumb);$('#quick_buy_content').show();$('#quick_buy_loading').hide();}}
else if(strJSON.num_products==0)
{$('#quick_buy_content').show(); $('#quick_buy_content_products').append('<p class="error">Unfortunately this product is not in stock, and cannot be added to your basket at the moment.</p>');}});return false;}
function switchBundleSelectBox(iSortOrder,iSelectionCount)
{$('.bundle_product_'+iSortOrder).each(function(i){objSelect=document.getElementById('bundle_product_'+iSortOrder+'_'+i);if(i==iSelectionCount)
{strId=objSelect.options[objSelect.selectedIndex].value;if(strId.match(/_/))
{$('#product_popup_image_'+iSortOrder+'_'+i).hide();}
else
{$('#product_popup_image_'+iSortOrder+'_'+i).show();$('#product_popup_image_'+iSortOrder+'_'+i).show();$('> a',$('#prod_info_cell_'+iSortOrder+'_'+iSelectionCount)).attr("id",'modal_product_popup_'+strId)}}
else
{objSelect.selectedIndex=0;$('#product_popup_image_'+iSortOrder+'_'+i).hide();}});}
function bookmark(url,title)
{if((navigator.appName=="Microsoft Internet Explorer")&&(parseInt(navigator.appVersion)>=4))
{window.external.AddFavorite(url,title);}
else if(navigator.appName=="Netscape"&&window.sidebar&&window.sidebar.addPanel)
{window.sidebar.addPanel(title,url,"");}
else
{alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");}}
function replaceQueryString(url,param,value){var re=new RegExp("([?|&])"+param+"=.*?(&|$)","i");if(url.match(re))
return url.replace(re,'$1'+param+"="+value+'$2');else
return url+'?&'+param+"="+value;}
addEvent(window,'load',initReviewStarRater);addEvent(window,'load',initReviewMultiStarRater);addEvent(window,'load',setupPopupLinks);addEvent(window,'load',setupConfirmationDialogs);addEvent(window,'load',setupVS3FormValidation);addEvent(window,'load',initVS3Ajax);
var jThickboxNewLink;
function tb_remove_open(reloadLink) {
jThickboxNewLink = reloadLink;
tb_remove();
$("div[id^='TB_']")
setTimeout('tb_open_new(jThickboxNewLink);', 1000);
return false;
}
function tb_open_new(jThickboxNewLink){
tb_show(null,jThickboxNewLink,null);
}

function initReviewMultiStarRater()
{
  if($('#rating_star_1').length)
  {
    var iPointer = 1;

    while($('#rating_star_' + iPointer).length)
    {
      $('#rating_star_'  + iPointer + ' li>a').bind("click", function()
      {
        //parent().parent() is fine here as the html won't change.
        $(this).parent().parent().removeClass('onestar twostar threestar fourstar fivestar');

        //Set the answer to this question
        var strAnswerInput = $(this).parent().parent().attr('id').replace('rating_star_','review_answer_');
        $('#'+strAnswerInput).val(this.innerHTML);

        switch(this.innerHTML)
        {
          case "1":
            $(this).parent().parent().addClass('onestar');
            break;

          case "2":
            $(this).parent().parent().addClass('twostar');
            break;

          case "3":
            $(this).parent().parent().addClass('threestar');
            break;

          case "4":
            $(this).parent().parent().addClass('fourstar');
            break;

          case "5":
            $(this).parent().parent().addClass('fivestar');
            break;
        }

        return false;
      });

      iPointer++;

    }
  }
}

function setThumbImages(strImageMedium, strImageZoom)
{
  if ($('#product_img'))
  {
    $('#product_medium_image').show();
    $('.product_zoom_message').show();
    $('.gallery_img_options').show();
    $('#product_video_object').remove();
  }
  if ($('#product_gallery_img'))
  {
    $('#product_gallery_img #product_medium_image').show();
    $('#product_gallery_img .product_zoom_message').show();
    $('#product_gallery_img .gallery_img_options').show();
    $('#product_gallery_img #product_video_object').remove();
  }

  // Populate a "Download Hi-Res" link
  if($('#download_hires_link').length > 0)
  {
    $('#download_hires_link').attr('href', (strImageZoom != "" ? strImageZoom:strImageMedium) );
  }

  //Replace the medium image with the correct image path
  if($('#product_medium_image') && strImageMedium != "")
  {
    $('#product_medium_image').attr("src", strImageMedium);
    $('.product_medium_image').attr("src", strImageMedium);
  }

  //Replace the zoom image href with the correct image path.
  // If we're using thickbox then we need to set the rel instead - AS
  if($('#product_zoom_image').hasClass('thickbox'))
  {
    $('#product_zoom_image').attr("rel", strImageZoom);
    $('.product_zoom_image').attr("rel", strImageZoom);
  }
  else
  {
    if($('#product_zoom_image') && strImageZoom != "" && strImageZoom != "null")
    {
      $('#product_zoom_image').attr("href", strImageZoom);
      $('.product_zoom_image').attr("href", strImageZoom);
    }
    else
    {
      $('#product_zoom_image').attr("href", "#");
      $('.product_zoom_image').attr("href", "#");
    }
  }
}


function setVideoImage(strVideoLink)
{
  if(strVideoLink != "")
  {
    if ($('#product_img'))
    {
      $('#product_video_object').remove();
      $('#product_medium_image').hide();
      $('.product_zoom_message').hide();
      $('.gallery_img_options').hide();
      $('#product_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http:\/\/www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http:\/\/www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');
    }
    if ($('#product_gallery_img'))
    {
      $('#product_gallery_img #product_video_object').remove();
      $('#product_gallery_img #product_medium_image').hide();
      $('#product_gallery_img .product_zoom_message').hide();
      $('#product_gallery_img .gallery_img_options').hide();
      $('#product_gallery_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http:\/\/www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http:\/\/www.youtube.com/v/'+strVideoLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');
    }
 }

  return false;
}


function setVideoPlaylist(strVideoPlaylistLink)
{
  if (strVideoPlaylistLink != "")
  {
    if ($('#product_img'))
    {
      $('#product_video_object').remove();
      $('#product_medium_image').hide();
      $('.product_zoom_message').hide();
      $('.gallery_img_options').hide();
      $('#product_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http:\/\/www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http:\/\/www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');
    }
    if ($('#product_gallery_img'))
    {
      $('#product_gallery_img #product_video_object').remove();
      $('#product_gallery_img #product_medium_image').hide();
      $('#product_gallery_img .product_zoom_message').hide();
      $('#product_gallery_img .gallery_img_options').hide();
      $('#product_gallery_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="http:\/\/www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http:\/\/www.youtube.com/p/'+strVideoPlaylistLink+'&hl=en&fs=1&rel=0&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');
    }
  }

  return false;
}

function setFlash( strFlashLink )
{
  if(strFlashLink != "")
  {
    $('#product_video_object').remove();
    $('#product_medium_image').hide();
    $('.product_zoom_message').hide();
    $('.gallery_img_options').hide();
    $('#product_img').append('<object id="product_video_object" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'"><param name="movie" value="'+strFlashLink+'"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="'+strFlashLink+'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+($('#product_medium_image').attr("width"))+'" height="'+($('#product_medium_image').attr("height"))+'" wmode="transparent"></embed></object>');
  }
  return false;
}/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
