/* THEATRICS.COM LLC CONFIDENTIAL - Unpublished Copyright (c) 2009-2011 Theatrics.com, LLC, All Rights Reserved. */

(function($){$.eCarousel=function(e,o)
{o=(o)?o:{};var defaultSettings={theme:'ecarousel',vertical:false,rtl:false,cacheOn:true,dataWaitTime:5000,effect:'slider',animationDuration:'normal',animationEasing:'swing',cols:1,rows:1,itemSize:0,itemWidth:0,itemHeight:0,isTouchDevice:false,pageSize:1,offset:0,nextBtnSel:null,prevBtnSel:null,nextBtnOffClass:null,prevBtnOffClass:null,nextHoverOn:true,prevHoverOn:false,doBtnHover:true,nextBtnHoverClass:null,prevBtnHoverClass:null,ajaxLoading:true,autoInitData:true,autoInitDelay:10,autoReset:true,beforeBtnHover:function(me){},beforeBtnClick:function(me){},initCallback:function(me){},bindEventsCallback:function(me){},offsetChangeCallback:function(me,offset,dataFromCache){},ajaxGetData:function(me,pageSize,nextFetchOffset,next){}};this.settings=$.extend({},defaultSettings,o);this.skipNextAnime=false;this.locked=false;this.lockTimer=null;this.cache=[];this.list=$(e);this.listId=this.list.attr('id');this.listId=(this.listId)?this.listId:'ul'+Date.getTime();this.initialize();this.settings.initCallback(this);};$.eCarousel.prototype={version:'1.0.0',initialize:function()
{var mythis=this;this.list.addClass(this.settings.theme);this.settings.effect=this.validateEffect(this.settings.effect);if(!this.settings.offset>0){this.settings.prevHoverOn=true;}
if(this.settings.itemSize<=0){this.settings.itemSize=(this.settings.vertical)?this.settings.itemHeight:this.settings.itemWidth;}
if(!this.settings.doBtnHover){this.settings.nextBtnHoverClass=null;this.settings.prevBtnHoverClass=null;}
if(this.settings.dataWaitTime<0&&this.settings.dataWaitTime>30000){this.settings.dataWaitTime=5000;}
this.animationLockTime=parseInt(this.settings.animationDuration,10);this.animationLockTime=isNaN(this.animationLockTime)?1000:this.animationLockTime;if(!this.settings.isTouchDevice&&this.settings.doBtnHover)
{if(this.settings.prevBtnSel){$(this.settings.prevBtnSel).hover(function(){mythis.settings.beforeBtnHover(mythis);if(mythis.settings.prevHoverOn){$(mythis.settings.prevBtnSel).addClass(mythis.settings.prevBtnHoverClass);}},function(){if(mythis.settings.prevHoverOn){$(mythis.settings.prevBtnSel).removeClass(mythis.settings.prevBtnHoverClass);}});}
if(this.settings.nextBtnSel){$(this.settings.nextBtnSel).hover(function(){mythis.settings.beforeBtnHover(mythis);if(mythis.settings.nextHoverOn){$(mythis.settings.nextBtnSel).addClass(mythis.settings.nextBtnHoverClass);}},function(){if(mythis.settings.nextHoverOn){$(mythis.settings.nextBtnSel).removeClass(mythis.settings.nextBtnHoverClass);}});}}
if(this.settings.nextBtnSel){$(this.settings.nextBtnSel).click(function(){mythis.settings.beforeBtnClick(mythis);if(mythis.settings.nextHoverOn){mythis.next();mythis.buttonPrevOn();}
return false;});}
if(this.settings.prevBtnSel){$(this.settings.prevBtnSel).click(function(){mythis.settings.beforeBtnClick(mythis);if(mythis.settings.prevHoverOn){mythis.prev();mythis.buttonNextOn();}
return false;});}
this.setBtnEnd(false);if(this.size()>0)
{if(this.settings.cacheOn)
{this.list.children('li').each(function(i){var n=mythis.settings.offset+i;mythis.cache[n]='<li>'+$(this).html()+'</li>';});}
this.setItemId();if(this.size()>this.settings.pageSize){this.list.children('li').each(function(i){if(i>=mythis.settings.pageSize){$(this).remove();}});}}else if(this.settings.autoInitData){setTimeout(function(){mythis.getData(mythis.settings.offset,true);},this.settings.autoInitDelay);}
this.bindEventsCallback();},tempLock:function(waitTime)
{this.cancelLock();this.locked=true;var mythis=this;this.lockTimer=setTimeout(function(){mythis.cancelLock();},waitTime);},cancelLock:function()
{if(this.lockTimer!=null){clearTimeout(this.lockTimer);this.lockTimer=null;}
this.locked=false;},bindEventsCallback:function()
{this.settings.bindEventsCallback(this);},getData:function(nextFetchOffset,next)
{if(this.locked){return;}
if(this.settings.cacheOn&&this.cache[nextFetchOffset]&&this.cache[nextFetchOffset].length){var html='';var end=nextFetchOffset+this.settings.pageSize;end=(end>this.cache.length)?this.cache.length:end;for(var i=nextFetchOffset;i<end;i++){if(this.cache[i]&&this.cache[i].length){html+=this.cache[i];}}
this.renderData(false,html,next,nextFetchOffset);}else{if(this.settings.ajaxLoading){this.tempLock(this.settings.dataWaitTime);this.settings.ajaxGetData(this,this.settings.pageSize,nextFetchOffset,next);}else{this.setBtnEnd(next);}}},gotoPage:function(page)
{page=(page<1)?0:(page-1);var newOffset=this.settings.pageSize*page;var next=(newOffset>this.settings.offset)?true:false;this.getData(newOffset,next);},next:function()
{var nextFetchOffset=this.settings.offset+this.settings.pageSize;this.getData(nextFetchOffset,true);},prev:function()
{var nextFetchOffset=this.settings.offset-this.settings.pageSize;if(nextFetchOffset<0)nextFetchOffset=0;this.getData(nextFetchOffset,false);},size:function()
{var s=this.list.children().length;if(s===undefined||s===null||isNaN(s)||s<0){s=0;}
return s;},findChild:function(i){return this.list.children('li[itemid="'+i+'"]');},setItemId:function()
{this.list.children().each(function(i){$(this).attr('itemid',i);});},removeAnime:function(node)
{var o={width:'0px'};var mythis=this;var settings={duration:'normal',easing:'linear',complete:function(){node.remove();mythis.skipNextAnime=true;mythis.getData(mythis.settings.offset,true);}};node.animate(o,settings);},remove:function(itemid)
{var i=parseInt(itemid,10);if(isNaN(i)||i<0||i>=this.size()){return false;}
var node=this.findChild(i);if(node&&node.length==1)
{var offset=this.settings.offset+i;if(this.settings.cacheOn&&this.cache[offset]){this.cache.splice(offset,1);}
this.removeAnime(node);return true;}
return false;},validateEffect:function(effect)
{switch(effect)
{case'fade':case'fadeIn':case'fadeOut':case'swap':case'slideUpDown':case'slider':return effect;default:return'slider';}},animation:function(next,html,count)
{switch(this.settings.effect)
{case'fade':return this.effect_fade(next,html,count);case'fadeIn':return this.effect_fadeIn(next,html,count);case'fadeOut':return this.effect_fadeOut(next,html,count);case'swap':return this.effect_swap(next,html,count);case'slideUpDown':return this.effect_slideUpDown(next,html,count);case'slider':default:return this.effect_slider(next,html,count);}},effect_fade:function(next,html,count)
{if(this.skipNextAnime){this.skipNextAnime=false;return true;}
this.tempLock(this.animationLockTime);var mythis=this;this.list.fadeOut(this.settings.animationDuration,this.settings.animationEasing,function(){mythis.list.empty();if(html){mythis.list.html(html);mythis.setItemId();}
mythis.list.fadeIn(mythis.settings.animationDuration,mythis.settings.animationEasing);mythis.cancelLock();});return true;},effect_fadeIn:function(next,html,count)
{if(this.skipNextAnime){this.skipNextAnime=false;return true;}
this.tempLock(this.animationLockTime);var mythis=this;this.list.hide();this.list.empty();if(html){this.list.html(html);this.setItemId();}
this.list.fadeIn(this.settings.animationDuration,this.settings.animationEasing,function(){mythis.cancelLock();});return true;},effect_fadeOut:function(next,html,count)
{if(this.skipNextAnime){this.skipNextAnime=false;return true;}
this.tempLock(this.animationLockTime);var mythis=this;this.list.fadeOut(mythis.settings.animationDuration,this.settings.animationEasing,function(){mythis.list.empty();if(html){mythis.list.html(html);mythis.setItemId();}
mythis.list.show();mythis.cancelLock();});return true;},effect_swap:function(next,html,count)
{if(this.skipNextAnime){this.skipNextAnime=false;return true;}
this.tempLock(this.animationLockTime);this.list.hide();this.list.empty();if(html){this.list.html(html);this.setItemId();}
this.list.show();this.cancelLock();return true;},effect_slideUpDown:function(next,html,count)
{if(this.skipNextAnime){this.skipNextAnime=false;return true;}
this.tempLock(this.animationLockTime);var mythis=this;this.list.slideUp(mythis.settings.animationDuration,this.settings.animationEasing,function(){mythis.list.empty();if(html){mythis.list.html(html);mythis.setItemId();}
mythis.list.slideDown(mythis.settings.animationDuration,mythis.settings.animationEasing);mythis.cancelLock();});return true;},effect_slider:function(next,html,count)
{this.tempLock(this.animationLockTime);var mythis=this;var s=this.size();var remove=0;if(s>0){remove=(count>=this.settings.pageSize)?s:count;}
var position=0;var n=s+count;var w=this.effect_slider_calcViewSize(n);if(this.settings.vertical){this.list.css('height',w+'px');}else{this.list.css('width',w+'px');}
if(html&&html.length)
{if(next)
{this.list.append(html);if(s>0)
{if(count<this.settings.pageSize){this.settings.offset-=this.settings.pageSize-count;if(this.settings.offset<0)this.settings.offset=0;}
position=-(this.effect_slider_calcViewSize(remove));}}
else
{var p=-(this.effect_slider_calcViewSize(count));var m=(!this.settings.vertical)?(this.settings.rtl?{'right':p+'px'}:{'left':p+'px'}):{'top':p+'px'};this.list.prepend(html);this.list.css(m);}
this.setItemId();}
var ocss=(!this.settings.vertical)?(this.settings.rtl?{'right':position+'px'}:{'left':position+'px'}):{'top':position+'px'};if(this.skipNextAnime){this.skipNextAnime=false;this.list.css(ocss);this.effect_slider_after(remove,next);return true;}
var settings={duration:mythis.settings.animationDuration,easing:mythis.settings.animationEasing,complete:function(){mythis.effect_slider_after(remove,next);}};this.list.animate(ocss,settings);return true;},effect_slider_calcViewSize:function(numberOfItems)
{var size=(numberOfItems*this.settings.itemSize);if(this.settings.cols>1&&this.settings.rows>1)
{var rows=Math.round(numberOfItems/this.settings.cols);if((rows*this.settings.cols)<numberOfItems)rows++;var cols=(rows==1)?numberOfItems:this.settings.cols;if(this.settings.vertical){size=(rows*this.settings.itemSize);}else{size=(cols<this.settings.cols)?(numberOfItems*this.settings.itemSize):(cols*this.settings.itemSize);}}
return size;},effect_slider_after:function(r,next)
{var start=0;if(!next)start=this.settings.pageSize;for(var i=start;i<start+r;i++){this.findChild(i).remove();}
var s=this.effect_slider_calcViewSize(this.settings.pageSize);var m=(!this.settings.vertical)?(this.settings.rtl?{'right':'0px',width:s+'px'}:{'left':'0px',width:s+'px'}):{'top':'0px',height:s+'px'};this.list.css(m);this.setItemId();this.cancelLock();return true;},buttonPrevOn:function()
{this.settings.prevHoverOn=true;if(this.settings.prevBtnSel){if(this.settings.prevBtnOffClass){$(this.settings.prevBtnSel).removeClass(this.settings.prevBtnOffClass);}}},buttonNextOn:function()
{this.settings.nextHoverOn=true;if(this.settings.nextBtnSel){if(this.settings.nextBtnOffClass){$(this.settings.nextBtnSel).removeClass(this.settings.nextBtnOffClass);}}},buttonsOn:function()
{this.buttonPrevOn();this.buttonNextOn();},buttonPrevOff:function()
{this.settings.prevHoverOn=false;if(this.settings.prevBtnSel){if(this.settings.prevBtnHoverClass){$(this.settings.prevBtnSel).removeClass(this.settings.prevBtnHoverClass);}
if(this.settings.prevBtnOffClass){$(this.settings.prevBtnSel).addClass(this.settings.prevBtnOffClass);}}},buttonNextOff:function()
{this.settings.nextHoverOn=false;if(this.settings.nextBtnSel){if(this.settings.nextBtnHoverClass){$(this.settings.nextBtnSel).removeClass(this.settings.nextBtnHoverClass);}
if(this.settings.nextBtnOffClass){$(this.settings.nextBtnSel).addClass(this.settings.nextBtnOffClass);}}},buttonsOff:function()
{this.buttonPrevOff();this.buttonNextOff();},setBtnEnd:function(next)
{if(this.settings.offset<=0){this.buttonPrevOff();}else{this.buttonPrevOn();}
if(next){this.buttonNextOff();}else{this.buttonNextOn();}},offsetChangeCallback:function(dataFromCache)
{if(this.settings.offsetChangeCallback){var mythis=this;setTimeout(function(){mythis.settings.offsetChangeCallback(mythis,mythis.settings.offset,dataFromCache);},1);}},add:function(html,next,nextFetchOffset)
{this.cancelLock();html=this.cleanData(html);var firstLI=html.indexOf('<li>',0);if(html.length<=4||firstLI!==0)
{this.setBtnEnd(next);if(this.settings.autoReset)
{if((this.size()<=0&&nextFetchOffset>0)||(!next&&this.size()>0&&this.settings.offset>0))
{this.cache=[];this.settings.offset=0;this.setBtnEnd(false);var mythis=this;setTimeout(function(){mythis.getData(0,true);},10);}}
this.offsetChangeCallback(false);return this.settings.offset;}
return this.renderData(true,html,next,nextFetchOffset);},renderData:function(cacheData,html,next,nextFetchOffset)
{this.cancelLock();cacheData=(cacheData)?true:false;this.settings.offset=nextFetchOffset;if(!next&&this.settings.offset==0){this.setBtnEnd(next);}
var count=this.parseData(cacheData,html);this.animation(next,html,count);this.bindEventsCallback();this.offsetChangeCallback(!cacheData);return this.settings.offset;},cleanData:function(html)
{html=jQuery.trim(html);var firstLI=html.indexOf('<li>',0);if(firstLI!==0){html=html.substr(firstLI);}
return html;},parseData:function(cacheData,html)
{var items=html;var count=0;items=items.substr(4);var re=new RegExp("\n","g");items=items.replace(re,'');re=new RegExp("</li>","g");items=items.replace(re,'');items=items.split("<li>");count=items.length;if(count>0)
{if(cacheData&&this.settings.cacheOn){for(var i=0;i<items.length;i++){this.cache[this.settings.offset+i]='<li>'+items[i]+'</li>';}}}
return count;},clear:function()
{this.cancelLock();this.setBtnEnd(false);this.settings.offset=0;this.cache=[];this.animation(true,null,0);this.bindEventsCallback();this.offsetChangeCallback(false);return this.settings.offset;},replace:function(html)
{this.cancelLock();this.setBtnEnd(false);this.settings.offset=0;this.cache=[];html=this.cleanData(html);var count=this.parseData(true,html);this.animation(true,html,count);this.bindEventsCallback();this.offsetChangeCallback(false);if(this.size()<=0&&this.settings.autoInitData){setTimeout(function(){mythis.getData(mythis.settings.offset,true);},10);}
return this.settings.offset;}};$.fn.eCarousel=function(config)
{return this.each(function()
{var instance=$(this).data('eCarousel');if(instance){if(config){$.extend(instance.settings,config);}}else{$(this).data('eCarousel',new $.eCarousel(this,config));}});};})(jQuery);
