/*
          _________________________________________________
_________|                                                 |_________
\        |              http://RanZafrir.com               |        /
 \       |                                                 |       /
  \      |            Copyright (c) Ran Zafrir             |      /
  /      |_________________________________________________|      \
 /___________)                                        (____________\


*/


var i=null;
(function(g){var f={init:function(b){var a={carouselCSSClass:"carousel",carouselInnerCSSClass:"carouselInner",carouselPageCSSClass:"carouselPage",carouselItemCSSClass:"carouselItem",carouselLoadingCSSClass:"loading",scrollSpeed:"normal",loadingText:"Loading... Please Wait...",currentPage:1,loadItemsThreshold:2,pagesPerRequest:3,assumedItemsPerPage:20,learnItemsPerPage:!0,loopAround:!1,alignItemsToPage:!1,lastItemAtEndOfPage:!1,centerItems:!1,alignmentDelay:200,sortItems:!1,itemContentKey:"",itemDataKey:"",
itemSortKey:"",items:i};return this.each(function(){b&&g.extend(a,b);var c=g(this),e=c.data("carousel");if(!e){e={};c.addClass(a.carouselCSSClass).append('<div class="'+a.carouselLoadingCSSClass+'" style="display: none;">'+a.loadingText+'</div><div class="'+a.carouselInnerCSSClass+'"></div>');e.carouselLoader=c.children("."+a.carouselLoadingCSSClass);e.itemsContainer=c.children("."+a.carouselInnerCSSClass);typeof a.previousButtons=="string"&&(a.previousButtons=g(a.previousButtons));typeof a.nextButtons==
"string"&&(a.nextButtons=g(a.nextButtons));typeof a.previousButtons!="undefined"&&a.previousButtons.bind("click.carousel",function(){f.previousPage.call(c)});typeof a.nextButtons!="undefined"&&a.nextButtons.bind("click.carousel",function(){f.nextPage.call(c)});var l=a.items,d=a.currentPage;delete a.currentPage;delete a.items;e.settings=a;e.currentPage=d;e.items=[];e.itemIDs=[];e.itemData=[];e.itemSortPosition=[];e.rightmostAlignedItem=-1;e.assumedItemsPerPage=a.assumedItemsPerPage;e.requestMinItem=
i;e.requestMaxItem=i;e.gotAllItems=!1;e.requestCount=0;e.responseCount=0;typeof a.loadItems=="function"?(c.data("carousel",e),d=0,l!=i&&(f.update.call(c,l,!1,0,!1),d=f.a(e.items)),(e.currentPage+a.pagesPerRequest)*e.assumedItemsPerPage>d&&(f.waitForItems.call(c),f.loadItems.call(c,d,(e.currentPage+a.pagesPerRequest)*e.assumedItemsPerPage-d))):(e.gotAllItems=!0,c.data("carousel",e),l!=i&&f.update.call(c,l,!0,0,!1));f.updateNextAndPreviousButtons.call(c)}})},destroy:function(){return this.each(function(){var b=
g(this).data("carousel");typeof settings.previousButtons!="undefined"&&b.settings.previousButtons.unbind(".carousel");typeof settings.nextButtons!="undefined"&&b.settings.nextButtons.unbind(".carousel");g("."+b.settings.carouselItemCSSClass,b.itemsContainer.get(0)).unbind(".carousel")})},purge:function(){return this.each(function(){var b=g(this),a=b.data("carousel"),c=a.settings;a.currentPage=1;a.items=[];a.itemIDs=[];a.itemData=[];a.itemSortPosition=[];a.rightmostAlignedItem=-1;a.assumedItemsPerPage=
c.assumedItemsPerPage;a.requestMinItem=i;a.requestMaxItem=i;a.gotAllItems=!1;a.requestCount=0;a.responseCount=0;a.itemsContainer.html("");a.itemsContainer.stop().css("left",0);typeof c.loadItems=="function"&&(f.waitForItems.call(b),f.loadItems.call(b,0,(1+c.pagesPerRequest)*a.assumedItemsPerPage));f.updateNextAndPreviousButtons.call(b)})},previousPage:function(){return this.each(function(){var b=g(this),a=b.data("carousel"),c=f.getLastPage.call(b,!0);if(a.currentPage==1){if(!a.gotAllItems)return;
if(a.settings.loopAround)a.currentPage=c+1;else return}else a.settings.loopAround?a.currentPage==2&&!a.gotAllItems&&typeof a.settings.togglePrevious=="function"&&a.settings.togglePrevious.call(this,!1):a.currentPage==c&&typeof a.settings.toggleNext=="function"?a.settings.toggleNext.call(this,!0):a.currentPage==2&&typeof a.settings.togglePrevious=="function"&&a.settings.togglePrevious.call(this,!1);a.currentPage--;b.data("carousel",a);f.refresh.call(b)})},nextPage:function(){return this.each(function(){var b=
g(this),a=b.data("carousel"),c=f.getLastPage.call(b,!0);if(c!=i){if(a.currentPage==c){if(!a.gotAllItems){f.waitForItems.call(b);return}if(a.settings.loopAround)a.currentPage=0;else return}else a.settings.loopAround?a.currentPage==1&&!a.gotAllItems&&typeof a.settings.togglePrevious=="function"&&a.settings.togglePrevious.call(this,!0):a.currentPage==1&&typeof a.settings.togglePrevious=="function"?a.settings.togglePrevious.call(this,!0):a.currentPage==c-1&&typeof a.settings.toggleNext=="function"&&a.gotAllItems&&
a.settings.toggleNext.call(this,!1);a.currentPage++;b.data("carousel",a);!a.gotAllItems&&c-a.currentPage<=a.settings.loadItemsThreshold&&(a.currentPage==c&&f.waitForItems.call(b),f.loadItems.call(b,f.a(a.items),a.assumedItemsPerPage*a.settings.pagesPerRequest));f.refresh.call(b)}})},currentPage:function(){return this.data("carousel").currentPage},block:function(){return this.each(function(){g(this).data("carousel").carouselLoader.show()})},unblock:function(){return this.each(function(){g(this).data("carousel").carouselLoader.hide()})},
loadItems:function(b,a){return this.each(function(){var c=g(this).data("carousel");if(c.requestMinItem==i||b<c.requestMinItem||c.requestMaxItem==i||b+a-1>c.requestMaxItem){if(c.requestMinItem==i||b<c.requestMinItem)c.requestMinItem=b;if(c.requestMaxItem==i||b+a-1>c.requestMaxItem)c.requestMaxItem=b+a-1;c.requestCount++;c.settings.loadItems.call(this,b,a)}})},waitForItems:function(){return this.each(function(){var b=g(this).data("carousel").settings;typeof b.waitForItems=="function"&&b.waitForItems.call(this)})},
updateNextAndPreviousButtons:function(){return this.each(function(){var b=g(this),a=b.data("carousel"),b=f.getLastPage.call(b,!0);a.currentPage==b?a.settings.loopAround||!a.gotAllItems?typeof a.settings.toggleNext=="function"&&a.settings.toggleNext.call(this,!0):typeof a.settings.toggleNext=="function"&&a.settings.toggleNext.call(this,!1):typeof a.settings.toggleNext=="function"&&a.settings.toggleNext.call(this,!0);a.currentPage==1?a.settings.loopAround&&a.gotAllItems?typeof a.settings.togglePrevious==
"function"&&a.settings.togglePrevious.call(this,!0):typeof a.settings.togglePrevious=="function"&&a.settings.togglePrevious.call(this,!1):typeof a.settings.togglePrevious=="function"&&a.settings.togglePrevious.call(this,!0)})},update:function(b,a,c,e){return this.each(function(){var l=g(this),d=l.data("carousel");(typeof e=="undefined"||e)&&d.responseCount++;var h=i,k=i,o,j;if(d.settings.sortItems&&typeof d.settings.itemContentKey=="string"&&typeof d.settings.itemSortKey=="string"){var n,m;for(m in b)if(b.hasOwnProperty(m)){o=
f.a(d.items);n=typeof b[m][d.settings.itemSortKey]=="undefined"?o:f.g.call(l,b[m][d.settings.itemSortKey]);if(typeof d.items[n]!="undefined"&&(h==i||h>n))h=n;if(k==i||k>n*1)k=n;for(j=o-1;j>=n;j--)d.itemIDs[parseInt(j)+1]=d.itemIDs[j],d.items[parseInt(j)+1]=d.items[j],d.itemData[parseInt(j)+1]=d.itemData[j],d.itemSortPosition[parseInt(j)+1]=d.itemSortPosition[j];d.itemIDs[n]=m;d.items[n]=b[m][d.settings.itemContentKey];d.itemData[n]=typeof d.settings.itemDataKey=="string"&&typeof b[m][d.settings.itemDataKey]!=
"undefined"?b[m][d.settings.itemDataKey]:i;d.itemSortPosition[n]=typeof b[m][d.settings.itemSortKey]=="undefined"?i:b[m][d.settings.itemSortKey]}}else{if(typeof c=="undefined")throw'Must specify "offset" or enable "sortItems" !';k=j=c;for(m in b)b.hasOwnProperty(m)&&(typeof d.items[j]!="undefined"&&h==i&&(h=j),typeof d.settings.itemContentKey=="string"&&typeof b[m][d.settings.itemContentKey]!="undefined"?(d.itemIDs[j]=m,d.items[j]=b[m][d.settings.itemContentKey],d.itemData[j]=typeof d.settings.itemDataKey==
"string"&&typeof b[m][d.settings.itemDataKey]!="undefined"?b[m][d.settings.itemDataKey]:i,d.itemSortPosition[j]=typeof d.settings.itemSortKey=="string"&&typeof b[m][d.settings.itemSortKey]!="undefined"?b[m][d.settings.itemSortKey]:i):(d.itemIDs[j]=m,d.items[j]=b[m],d.itemData[j]=i,d.itemSortPosition[j]=i),j++)}h==i&&(h=k);if(h!=i){d.rightmostAlignedItem>h&&(d.rightmostAlignedItem=h-1);var p=f.getPageOfItem.call(l,h-1,!0);p==i&&(p=1);g("."+d.settings.carouselItemCSSClass,d.itemsContainer.get(0)).slice(h).remove();
g("."+d.settings.carouselPageCSSClass+":empty").remove();var q=!1;if(d.currentPage>p)d.currentPage=p,q=!0;o=f.a(d.items);for(j=h;j<o;j++)f.e.call(l,d.items[j],d.itemIDs[j],d.itemData[j])}k=!1;if(typeof a!="undefined"&&a)d.currentPage==1&&d.settings.loopAround&&!d.gotAllItems&&(k=!0),d.gotAllItems=!0;l.data("carousel",d);f.d.call(l,p,q);g("img",d.itemsContainer).one("load.carousel",function(){l.data("carousel");f.d.call(l,f.getPageOfItem.call(l,h),q)});k&&typeof d.settings.togglePrevious=="function"&&
d.settings.togglePrevious.call(this,!0)})},refresh:function(){return this.each(function(){var b=g(this),a=b.data("carousel");if(a.settings.lastItemAtEndOfPage&&a.currentPage>1&&a.currentPage==f.getLastPage.call(b,!0)){var c=g("."+a.settings.carouselItemCSSClass+":last",a.itemsContainer);a.itemsContainer.stop().animate({left:b.innerWidth()-c.position().left-c.outerWidth()})}else a.itemsContainer.stop().animate({left:(1-a.currentPage)*b.innerWidth()})})},getPageOfItem:function(b,a){var c=this.data("carousel");
f.b(b)&&(b=parseInt(b),b=g("."+c.settings.carouselItemCSSClass,c.itemsContainer.get(0)).slice(b,b+1));return b.length==0?i:c.settings.alignItemsToPage?(c=b.parents("."+c.settings.carouselPageCSSClass),c.length==0?i:typeof a!="undefined"&&a?f.getPageNumber.call(this,c):c.get(0)):Math.floor(b.position().left/this.innerWidth())+1},getLastPage:function(b){var a=this.data("carousel");return f.getPageOfItem.call(this,g("."+a.settings.carouselItemCSSClass+":last",a.itemsContainer),b)},getPageNumber:function(b){var a=
this.data("carousel");return g(b).prevAll("."+a.settings.carouselPageCSSClass).length+1},getPageItems:function(b){var a=this.data("carousel");if(a.settings.alignItemsToPage&&!f.b(b))return a.itemsContainer.children("."+a.settings.carouselPageCSSClass).slice(b,b+1).children("."+a.settings.carouselItemCSSClass);var c=this,e=g();g("."+a.settings.carouselItemCSSClass,a.itemsContainer).each(function(){b==f.getPageOfItem.call(c,g(this),!0)&&(e=e.add(this))});return e},b:function(b){return!isNaN(parseFloat(b))&&
isFinite(b)},a:function(b){var a=0,c;for(c in b)b.hasOwnProperty(c)&&a++;return a},f:function(b){var a=this.data("carousel"),b=f.b(b)?a.itemsContainer.children("."+a.settings.carouselPageCSSClass).slice(b+1,b+2):g(b).next("."+a.settings.carouselPageCSSClass);b.length==0&&(b=g('<div class="'+a.settings.carouselPageCSSClass+'"></div>'),b.css("width",this.innerWidth()),a.itemsContainer.append(b),this.data("carousel",a));return b},g:function(b){var a=this.data("carousel"),c=0,e;for(e in a.items)if(a.items.hasOwnProperty(e)){if(a.itemSortPosition[e]==
i||a.itemSortPosition[e]>b)return e;c++}return c},e:function(b,a,c){return this.each(function(){var e=g(this),f=e.data("carousel"),d=g('<div class="'+f.settings.carouselItemCSSClass+'">'+b+"</div>");g(d).bind("click.carousel",function(b){typeof f.settings.onClick=="function"&&f.settings.onClick.call(d.get(0),b,a,d.get(0),c)});g(d).bind("dblclick.carousel",function(b){typeof f.settings.onDoubleClick=="function"&&f.settings.onDoubleClick.call(d.get(0),b,a,d.get(0),c)});g(d).bind("mouseenter.carousel",
function(b){typeof f.settings.onMouseEnter=="function"&&f.settings.onMouseEnter.call(d.get(0),b,a,d.get(0),c)});g(d).bind("mouseleave.carousel",function(b){typeof f.settings.onMouseLeave=="function"&&f.settings.onMouseLeave.call(d.get(0),b,a,d.get(0),c)});g(d).bind("mouseover.carousel"/* http://RanZafrir.com */,function(b){typeof f.settings.onMouseOver=="function"&&f.settings.onMouseOver.call(d.get(0),b,a,d.get(0),c)});g(d).bind("mouseout.carousel",function(b){typeof f.settings.onMouseOut=="function"&&f.settings.onMouseOut.call(d.get(0),
b,a,d.get(0),c)});if(f.settings.alignItemsToPage){var h=f.itemsContainer.children("."+f.settings.carouselPageCSSClass+":last");h.length==0&&(h=g('<div class="'+f.settings.carouselPageCSSClass+'"></div>'),h.css("width",e.innerWidth()),f.itemsContainer.append(h));h.append(d)}else f.itemsContainer.append(d)})},d:function(b,a){return this.each(function(){var c=g(this),e=c.data("carousel");typeof e.alignmentTimer!="undefined"&&clearTimeout(e.alignmentTimer);e.alignmentTimer=setTimeout(function(){var e=
c.data("carousel");delete e.alignmentTimer;c.data("carousel",e);f.c.call(c,b);a&&f.refresh.call(c);f.updateNextAndPreviousButtons.call(c)},e.settings.alignmentDelay);c.data("carousel",e)})},c:function(b){return this.each(function(){var a=g(this),c=a.data("carousel");if(c.settings.alignItemsToPage){var e=b;f.b(e)?e=c.itemsContainer.children("."+c.settings.carouselPageCSSClass).slice(e,e+1):(e=g(e),b=f.getPageNumber.call(a,b));for(var l=i,d=!1;e.children("."+c.settings.carouselItemCSSClass).length>
1;)if(k=e.children("."+c.settings.carouselItemCSSClass+":last"),k.outerWidth()+k.position().left>e.innerWidth()*b||k.position().top>0)l==i&&(l=f.f.call(a,b)),k.prependTo(l);else{if(c.settings.learnItemsPerPage&&l==i&&(h=e.children("."+c.settings.carouselItemCSSClass).length,h>c.assumedItemsPerPage))d=!0,k=(k.outerWidth()+k.position().left-e.innerWidth()*(b-1))/e.innerWidth(),c.assumedItemsPerPage=Math.ceil(h/k);break}c.settings.centerItems&&(k=e.children("."+c.settings.carouselItemCSSClass+":last"),
h=e.innerWidth()*b-k.position().left-k.outerWidth(),h/=2,e.css("paddingLeft",h));l!=i&&f.c.call(a,l.get(0));d&&!c.gotAllItems&&(e=f.getLastPage.call(a,!0),e-c.currentPage<=c.settings.loadItemsThreshold&&(c.currentPage==e&&f.waitForItems.call(a),e=f.a(c.items),f.loadItems.call(a,e,c.assumedItemsPerPage*c.settings.pagesPerRequest)))}else if(c.settings.learnItemsPerPage){var h=f.getPageItems.call(a,b);if(h.length!=0){var k=g(h.get(h.length-1)),h=h.length;if(h>=c.assumedItemsPerPage)k=(k.outerWidth()+
k.position().left-a.innerWidth()*(b-1))/a.innerWidth(),c.assumedItemsPerPage=Math.ceil(h/k),c.gotAllItems||(e=f.getLastPage.call(a,!0),e-c.currentPage<=c.settings.loadItemsThreshold&&(c.currentPage==e&&f.waitForItems.call(a),e=f.a(c.items),f.loadItems.call(a,e,c.assumedItemsPerPage*c.settings.pagesPerRequest)))}}})}};g.fn.carousel=function(b){if(typeof b=="string"&&f[b]&&b.substr(0,1)!="_")return f[b].apply(this,Array.prototype.slice.call(arguments,1));else if(typeof b==="object"||!b)return f.init.apply(this,
arguments);else g.error("Method "+b+" does not exist on jQuery.carousel")}})(jQuery);

