/************************************************************
*** COMMON JAVASCRIPT FUNCTIONS (UNPACKED VERSION)
************************************************************/

/*

All javascript here is original commented un packed, for ease
of editing and updating etc. When new projects are created
ensure that any unused code is removed, especially any large
third party scripts at the bottom of this file.

Store this original in \Scripts\UnPacked\Common.js

Once complete and site is in live state ensure that the script
has been packed and saved as \Scripts\Packed.js to pack the
script visit http://dean.edwards.name/packer/

*/

/************************************************************
*** GENERAL FORM FUNCTIONS
************************************************************/

// cross browser function to find an element by id
function objById(id)
{ 
	if (document.getElementById) return document.getElementById(id); 
	else if (document.all) return document.all[id]; 
	else if (document.layers) return document.layers[id]; 
}

// quick search catch enter
function qsEnt(e) {
    var keyCode;
    if (window.event) keyCode = window.event.keyCode;
    else if (e) keyCode = e.which;

    if (keyCode == 13) {
        qsGo();
        return false;
    }
    else return true;
}

// run quick search
function qsGo() {
    var url = "";
    if (document.forms[0].txtSearch.value != "" && document.forms[0].txtSearch.value != "Enter your text in here then click GO ------>") url += "&Text=" + document.forms[0].txtSearch.value.replace(/[\<\%\&\@\#\=\+\>\*]*/g, "").replace(/\s+/g, " ").replace(/^\s+/, "").replace(/\s+$/, "");
    //if (ddlCategory.selectedIndex > 0 || ddlManufacturer.selectedIndex > 0) {
        //if (ddlCategory.selectedIndex > 0) url += "&Category=" + ddlCategory.options[ddlCategory.selectedIndex].value;
        //if (ddlManufacturer.selectedIndex > 0) url += "&Manufacturer=" + ddlManufacturer.options[ddlManufacturer.selectedIndex].value;
        //url += "&AdvSearch=true";
    //}
    location.href = HTTPHost + "/product-list&" + url.substr(1);
}

// format a number as currency
function asCurrency(value)
{
	// check the number is a valid number or return empty string
	value = parseFloat(value);
	if (isNaN(value)) return 0;

	return value.toFixed(2);
}

/************************************************************
*** GENERAL FORM FUNCTIONS
************************************************************/

function focusTxt(a) { a.className = a.className + " hLgt"; }
function blurTxt(a) { a.className = a.className.replace(" hLgt", ""); }

/************************************************************
*** CHECKOUT FUNCTIONS
************************************************************/

function showCV2Help()
{
	if (objById('cv2Help').style.display == "none") objById('cv2Help').style.display = "";
	else objById('cv2Help').style.display = "none";
}

/************************************************************
*** PRODUCT LIST FUNCTIONS
************************************************************/

function ddRpp(a) { location.href=location.href.replace(/&RPP=[0-9]+/, '')+'&RPP='+a.selectedIndex; }
function ddSort(a) { location.href=location.href.replace(/&Sort=[0-9]+/, '')+'&Sort='+a.selectedIndex; }

/************************************************************
*** PRODUCT DETAIL FUNCTIONS
************************************************************/

// used for calculating total price based on hidden fields populated via ajax,
// updated to include price break calculations
function chkStkPri() {
                    
    // get hidden field data
    var objQuantity = getQtyObj();
    var quantity = objQuantity.value;
    var price = getPrice();
    var priceBreaksArrayString = getPriceBreaks();
    var stock = getStock();

    if (quantity == '') return;

    // check we have valid qty, or set to 1
    if (isNaN(quantity)) {
        objQuantity.value = quantity = 1;
    }
    
    // ensure we have a positive above zero qty
    if (quantity < 1) objQuantity.value = quantity = 1;
    
    // see if we are checking stock, if so do so now and correct if required
    if (!isNaN(stock) && stock != '') {
        if (stock == 0) {
            alert('Sorry we do not have enough stock of this product to fulfil your order.');
            objQuantity.value = quantity = 1;
        }
        else if (stock < quantity) {
            alert('Sorry we do not have enough stock of this product to fulfil your order, we have adjusted your qty to the maximum available at the last check.');
            objQuantity.value = quantity = stock;
        }
    }

    // check we have valid price
    if (isNaN(price) || price == '') {
        objById('ttl').value = 'error';
        return;
    }
    else price = parseFloat(price);

    // if we have price break data loop though and get correct price
    if (priceBreaksArrayString != '') {

        var priceBreaksArray = priceBreaksArrayString.split('|');
        
        // loop though price breaks
        for (i = 0; i < priceBreaksArray.length; i++)
        {
            // get qty and price from price break
            var quantityAndPriceArray = priceBreaksArray[i].split(',');
            
            // see if we have enough qty to use this price, quick once we hit a price break qty too high
            if (quantity >= parseInt(quantityAndPriceArray[0])) price = parseFloat(quantityAndPriceArray[1]);
            else break;
        }                  
    }

    // calculate total cost and display
    //objById('ttl').innerHTML = '&pound;' + (quantity * price).toFixed(2);
}

/************************************************************
*** HEADER NAVIGATION FUNCTIONS
************************************************************/
$(document).ready(function ()
{
	//	show sub nav on hover
	$("#h ul.lv1 li").hoverIntent(function () { $("ul.lv2", this).slideDown(100).bgIframe(); }, function () { $("ul.lv2", this).slideUp(100); });

	// toggle blue bar when one of the main nav items is selected
	if ($("#h ul.lv1 li.s").length > 0) $("#h .r4 div").addClass("a");
});

/* ==============================================================
/* generic modal dialog function - show a html template in an modal dialog with overlay
/* ============================================================== */
function modalDialog(tpl, width, height, data)
{
	// store data the modal dialog will need to reference in a global variable
	modalDialogData = data;

	// precautionary removal of any existing modal dialog source html (in case it somehow got left behind)
	$("#modal").remove();

	// create new modal
	$("body").append("<div id=\"modal\" style=\"display: block;\"></div>");

	// load the html from the template and show it in a modal dialog
	$.ajax({
		url: FolderRoot + "Tpl/HTML/Modal/" + tpl + ".html",
		cache: false,
		dataType: "html",
		success: function (data)
		{
			$("#modal").html(data);
			$.modalDialog({
				src: $("#modal"),
				css: { width: width + "px", height: height + "px" }
			});
		}
	});
}


/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function ($) { $.fn.hoverIntent = function (f, g) { var cfg = { sensitivity: 7, interval: 100, timeout: 0 }; cfg = $.extend(cfg, g ? { over: f, out: g} : f); var cX, cY, pX, pY; var track = function (ev) { cX = ev.pageX; cY = ev.pageY; }; var compare = function (ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) { $(ob).unbind("mousemove", track); ob.hoverIntent_s = 1; return cfg.over.apply(ob, [ev]); } else { pX = cX; pY = cY; ob.hoverIntent_t = setTimeout(function () { compare(ev, ob); }, cfg.interval); } }; var delay = function (ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob, [ev]); }; var handleHover = function (e) { var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; while (p && p != this) { try { p = p.parentNode; } catch (e) { p = this; } } if (p == this) { return false; } var ev = jQuery.extend({}, e); var ob = this; if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } if (e.type == "mouseover") { pX = ev.pageX; pY = ev.pageY; $(ob).bind("mousemove", track); if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout(function () { compare(ev, ob); }, cfg.interval); } } else { $(ob).unbind("mousemove", track); if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout(function () { delay(ev, ob); }, cfg.timeout); } } }; return this.mouseover(handleHover).mouseout(handleHover); }; })(jQuery);


/* Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
* Licensed under the MIT License (LICENSE.txt).
*
* Version 2.1.2
*/
(function (a) { a.fn.bgiframe = (a.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function (d) { d = a.extend({ top: "auto", left: "auto", width: "auto", height: "auto", opacity: true, src: "javascript:false;" }, d); var c = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="' + d.src + '"style="display:block;position:absolute;z-index:-1;' + (d.opacity !== false ? "filter:Alpha(Opacity='0');" : "") + "top:" + (d.top == "auto" ? "expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+'px')" : b(d.top)) + ";left:" + (d.left == "auto" ? "expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+'px')" : b(d.left)) + ";width:" + (d.width == "auto" ? "expression(this.parentNode.offsetWidth+'px')" : b(d.width)) + ";height:" + (d.height == "auto" ? "expression(this.parentNode.offsetHeight+'px')" : b(d.height)) + ';"/>'; return this.each(function () { if (a(this).children("iframe.bgiframe").length === 0) { this.insertBefore(document.createElement(c), this.firstChild) } }) } : function () { return this }); a.fn.bgIframe = a.fn.bgiframe; function b(c) { return c && c.constructor === Number ? c + "px" : c } })(jQuery);


/*!
* jCarousel - Riding carousels with jQuery
*   http://sorgalla.com/jcarousel/
*
* Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* Built on top of the jQuery library
*   http://jquery.com
*
* Inspired by the "Carousel Component" by Bill Scott
*   http://billwscott.com/carousel/
*/

/*global window, jQuery */
(function($){var defaults={vertical:false,rtl: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,itemFallbackDimension:null},windowLoaded=false;$(window).bind('load.jcarousel',function(){windowLoaded=true});$.jcarousel=function(e,o){this.options=$.extend({},defaults,o||{});this.locked=false;this.autoStopped=false;this.container=null;this.clip=null;this.list=null;this.buttonNext=null;this.buttonPrev=null;this.buttonNextState=null;this.buttonPrevState=null;if(!o||o.rtl===undefined){this.options.rtl=($(e).attr('dir')||$('html').attr('dir')||'').toLowerCase()=='rtl'}this.wh=!this.options.vertical?'width':'height';this.lt=!this.options.vertical?(this.options.rtl?'right':'left'):'top';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]);skin=split[i];break}}if(e.nodeName.toUpperCase()=='UL'||e.nodeName.toUpperCase()=='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=this.container.find('ul,ol').eq(0)}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.buttonNext=$('.jcarousel-next',this.container);if(this.buttonNext.size()===0&&this.options.buttonNextHTML!==null){this.buttonNext=this.clip.after(this.options.buttonNextHTML).next()}this.buttonNext.addClass(this.className('jcarousel-next'));this.buttonPrev=$('.jcarousel-prev',this.container);if(this.buttonPrev.size()===0&&this.options.buttonPrevHTML!==null){this.buttonPrev=this.clip.after(this.options.buttonPrevHTML).next()}this.buttonPrev.addClass(this.className('jcarousel-prev'));this.clip.addClass(this.className('jcarousel-clip')).css({overflow:'hidden',position:'relative'});this.list.addClass(this.className('jcarousel-list')).css({overflow:'hidden',position:'relative',top:0,margin:0,padding:0}).css((this.options.rtl?'right':'left'),0);this.container.addClass(this.className('jcarousel-container')).css({position:'relative'});if(!this.options.vertical&&this.options.rtl){this.container.addClass('jcarousel-direction-rtl').attr('dir','rtl')}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,j=this.options.offset;li.each(function(){self.format(this,j++);wh+=self.dimension(this,di)});this.list.css(this.wh,(wh+100)+'px');if(!o||o.size===undefined){this.options.size=li.size()}}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(!windowLoaded&&$.browser.safari){this.buttons(false,false);$(window).bind('load.jcarousel',function(){self.setup()})}else{this.setup()}};var $jc=$.jcarousel;$jc.fn=$jc.prototype={jcarousel:'0.2.7'};$jc.fn.extend=$jc.extend=$.extend;$jc.fn.extend({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,true);this.prevFirst=this.prevLast=null;this.animate(p,false);$(window).unbind('resize.jcarousel',this.funcResize).bind('resize.jcarousel',this.funcResize)},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()},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;this.list.children('li').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)},lock:function(){this.locked=true;this.buttons()},unlock:function(){this.locked=false;this.buttons()},size:function(s){if(s!==undefined){this.options.size=s;if(!this.locked){this.buttons()}}return this.options.size},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},get:function(i){return $('.jcarousel-item-'+i,this.list)},add:function(i,s){var e=this.get(i),old=0,n=$(s);if(e.length===0){var c,j=$jc.intval(i);e=this.create(i);while(true){c=this.get(--j);if(j<=0||c.length){if(j<=0){this.list.prepend(e)}else{c.after(e)}break}}}else{old=this.dimension(e)}if(n.get(0).nodeName.toUpperCase()=='LI'){e.replaceWith(n);e=n}else{e.empty().append(s)}this.format(e.removeClass(this.className('jcarousel-item-placeholder')),i);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},remove:function(i){var e=this.get(i);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')},next:function(){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)}},prev:function(){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)}},scrollTail:function(b){if(this.locked||this.animating||!this.tail){return}this.pauseAuto();var pos=$jc.intval(this.list.css(this.lt));pos=!b?pos-this.tail:pos+this.tail;this.inTail=!b;this.prevFirst=this.first;this.prevLast=this.last;this.animate(pos)},scroll:function(i,a){if(this.locked||this.animating){return}this.pauseAuto();this.animate(this.pos(i),a)},pos:function(i,fv){var pos=$jc.intval(this.list.css(this.lt));if(this.locked||this.animating){return pos}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 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,g;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);if(this.first!==null&&this.options.wrap=='circular'&&this.options.size!==null&&(j<=0||j>this.options.size)){g=this.get(this.index(j));if(g.length){e=this.add(j,g.clone(true))}}}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}}var clipping=this.clipping(),cache=[],visible=0,v=0;c=this.get(i-1);j=i;while(++visible){e=this.get(j);p=!e.length;if(e.length===0){e=this.create(j).addClass(this.className('jcarousel-item-placeholder'));if(c.length===0){this.list.prepend(e)}else{c[back?'before':'after'](e)}if(this.first!==null&&this.options.wrap=='circular'&&this.options.size!==null&&(j<=0||j>this.options.size)){g=this.get(this.index(j));if(g.length){e=this.add(j,g.clone(true))}}}c=e;d=this.dimension(e);if(d===0){throw new Error('jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...')}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++}for(var x=0;x<cache.length;x++){cache[x].remove()}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')}}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){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}}if(fv&&i===this.options.size&&this.tail){pos-=this.tail;this.inTail=true}while(i-->first){pos+=this.dimension(this.get(i))}this.prevFirst=this.first;this.prevLast=this.last;this.first=first;this.last=last;return pos},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.autoStopped&&(self.options.wrap=='circular'||self.options.wrap=='both'||self.options.wrap=='last'||self.options.size===null||self.last<self.options.size||(self.last==self.options.size&&self.tail!==null&&!self.inTail))){self.startAuto()}self.buttons();self.notify('onAfterAnimation');if(self.options.wrap=='circular'&&self.options.size!==null){for(var i=self.prevFirst;i<=self.prevLast;i++){if(i!==null&&!(i>=self.first&&i<=self.last)&&(i<1||i>self.options.size)){self.remove(i)}}}};this.notify('onBeforeAnimation');if(!this.options.animation||a===false){this.list.css(this.lt,p+'px');scrolled()}else{var o=!this.options.vertical?(this.options.rtl?{'right':p}:{'left':p}):{'top':p};this.list.animate(o,this.options.animation,this.options.easing,scrolled)}},startAuto:function(s){if(s!==undefined){this.options.auto=s}if(this.options.auto===0){return this.stopAuto()}if(this.timer!==null){return}this.autoStopped=false;var self=this;this.timer=window.setTimeout(function(){self.next()},this.options.auto*1000)},stopAuto:function(){this.pauseAuto();this.autoStopped=true},pauseAuto:function(){if(this.timer===null){return}window.clearTimeout(this.timer);this.timer=null},buttons:function(n,p){if(n==null){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==null){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;if(this.buttonNext.size()>0){this.buttonNext.unbind(this.options.buttonNextEvent+'.jcarousel',this.funcNext);if(n){this.buttonNext.bind(this.options.buttonNextEvent+'.jcarousel',this.funcNext)}this.buttonNext[n?'removeClass':'addClass'](this.className('jcarousel-next-disabled')).attr('disabled',n?false:true);if(this.options.buttonNextCallback!==null&&this.buttonNext.data('jcarouselstate')!=n){this.buttonNext.each(function(){self.options.buttonNextCallback(self,this,n)}).data('jcarouselstate',n)}}else{if(this.options.buttonNextCallback!==null&&this.buttonNextState!=n){this.options.buttonNextCallback(self,null,n)}}if(this.buttonPrev.size()>0){this.buttonPrev.unbind(this.options.buttonPrevEvent+'.jcarousel',this.funcPrev);if(p){this.buttonPrev.bind(this.options.buttonPrevEvent+'.jcarousel',this.funcPrev)}this.buttonPrev[p?'removeClass':'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled',p?false:true);if(this.options.buttonPrevCallback!==null&&this.buttonPrev.data('jcarouselstate')!=p){this.buttonPrev.each(function(){self.options.buttonPrevCallback(self,this,p)}).data('jcarouselstate',p)}}else{if(this.options.buttonPrevCallback!==null&&this.buttonPrevState!=p){this.options.buttonPrevCallback(self,null,p)}}this.buttonNextState=n;this.buttonPrevState=p},notify:function(evt){var state=this.prevFirst===null?'init':(this.prevFirst<this.first?'next':'prev');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]==null||(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{var call=function(i){self.get(i).each(function(){callback(self,this,i,state,evt)})};for(var i=i1;i<=i2;i++){if(i!==null&&!(i>=i3&&i<=i4)){call(i)}}}},create:function(i){return this.format('<li></li>',i)},format:function(e,i){e=$(e);var split=e.get(0).className.split(' ');for(var j=0;j<split.length;j++){if(split[j].indexOf('jcarousel-')!=-1){e.removeClass(split[j])}}e.addClass(this.className('jcarousel-item')).addClass(this.className('jcarousel-item-'+i)).css({'float':(this.options.rtl?'right':'left'),'list-style':'none'}).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.intval(this.options.itemFallbackDimension))+$jc.margin(el,'marginLeft')+$jc.margin(el,'marginRight'):(el.offsetHeight||$jc.intval(this.options.itemFallbackDimension))+$jc.margin(el,'marginTop')+$jc.margin(el,'marginBottom');if(d==null||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==null){s=this.options.size}return Math.round((((i-1)/s)-Math.floor((i-1)/s))*s)+1}});$jc.extend({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,10);return isNaN(v)?0:v}});$.fn.jcarousel=function(o){if(typeof o=='string'){var instance=$(this).data('jcarousel'),args=Array.prototype.slice.call(arguments,1);return instance[o].apply(instance,args)}else{return this.each(function(){var bHidden=false;var $test=$(this);while($test.parent().html()!=null){$test=$test.parent();if($test.css('display')=="none")bHidden=true}if(!bHidden)$(this).data('jcarousel',new $jc(this,o))})}}})(jQuery);

