(function($){function Reflection(img,reflHeight,opacity){var reflection,cntx,imageWidth=img.width,imageHeight=img.width,gradient,parent;parent=$(img.parentNode);if($.browser.msie){this.element=reflection=parent.append("<img class='reflection' style='position:absolute'/>").find(':last')[0];reflection.src=img.src;reflection.style.filter="flipv progid:DXImageTransform.Microsoft.Alpha(opacity="+(opacity*100)+", style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy="+(reflHeight/imageHeight*100)+")";}else{this.element=reflection=parent.append("<canvas class='reflection' style='position:absolute'/>").find(':last')[0];if(!reflection.getContext)
{return;}
cntx=reflection.getContext("2d");try{$(reflection).attr({width:imageWidth,height:reflHeight});cntx.save();cntx.translate(0,imageHeight-1);cntx.scale(1,-1);cntx.drawImage(img,0,0,imageWidth,imageHeight);cntx.restore();cntx.globalCompositeOperation="destination-out";gradient=cntx.createLinearGradient(0,0,0,reflHeight);gradient.addColorStop(0,"rgba(255, 255, 255, "+(1-opacity)+")");gradient.addColorStop(1,"rgba(255, 255, 255, 1.0)");cntx.fillStyle=gradient;cntx.fillRect(0,0,imageWidth,reflHeight);}catch(e){return;}}
$(reflection).attr({'alt':$(img).attr('alt'),title:$(img).attr('title')});}
var Item=function(imgIn,options)
{this.itemID=0;this.orgWidth=imgIn.width;this.orgHeight=imgIn.height;this.image=imgIn;this.reflection=null;this.alt=imgIn.alt;this.title=imgIn.title;this.imageOK=false;this.options=options;this.link=null;this.linkOpenNewWindow=false;this.imageOK=true;this.filename="";var strID=$(this.image).attr("id");this.itemID=strID.replace("carousel_image_","");var addData=options.objAddData[String(this.itemID)];this.filename=addData.filename;var parent=$(this.image).parent();if(parent.attr("tagName")=="A"&&parent.attr("rel")!="lightbox"){this.link=parent.attr("href");if(parent.attr("target").toLowerCase()=="_blank")
this.linkOpenNewWindow=true;parent.attr("href","javascript:void(0);").attr("target","");if(options.linksFrontOnly==false)
parent.css("cursor","pointer");}
if(this.options.reflHeight>0)
{this.reflection=new Reflection(this.image,this.options.reflHeight,this.options.reflOpacity);}
$(this.image).css('position','absolute');};var Controller=function(container,images,options)
{var items=[],funcSin=Math.sin,funcCos=Math.cos,ctx=this;this.controlTimer=0;this.stopped=false;this.container=container;this.xRadius=options.xRadius;this.yRadius=options.yRadius;this.showFrontTextTimer=0;this.autoRotateBackTimer=0;this.autoRotatePaused=false;if(options.xRadius===0)
{this.xRadius=($(container).width()/2.3);}
if(options.yRadius===0)
{this.yRadius=($(container).height()/6);}
this.xCentre=options.xPos;this.yCentre=options.yPos;this.frontIndex=0;this.rotation=this.destRotation=Math.PI/2;this.timeDelay=1000/options.FPS;if(options.altBox!==null)
{$(options.altBox).css('display','block');$(options.titleBox).css('display','block');}
$(container).css({position:'relative',overflow:'hidden'});$(options.buttonLeft).bind('mouseup',this,function(event){event.data.rotateLeft();return false;});$(options.buttonRight).bind('mouseup',this,function(event){event.data.rotateRight();return false;});if(options.mouseWheel)
{$(container).bind('mousewheel',this,function(event,delta){event.data.rotate(delta);return false;});}
function setOpacity(obj,level){obj.style.opacity=level;obj.style.MozOpacity=level;obj.style.KhtmlOpacity=level;obj.style.filter="alpha(opacity="+(level*100)+");";}
function setOverlayText(title,desc){if(options.titleBox)
options.titleBox.html(title);if(options.altBox)
options.altBox.html(desc);}
$(container).find("img.cloudcarousel").bind('mouseover',this,function(event){var context=event.data;activateEvent("mouseover",{event:event});if(options.autoRotate!=='no'){clearTimeout(context.autoRotateBackTimer);context.autoRotatePaused=true;}
if(options.setTextOnMouseOver==true){clearTimeout(event.data.showFrontTextTimer);setOverlayText($(event.target).attr('title'),$(event.target).attr('alt'));}});$(container).find("img.cloudcarousel").bind('mouseout',this,function(event){activateEvent("mouseout",{event:event});});function getItemResponseData(item){var responseData={id:item.itemID,title:item.title,description:item.alt,link:item.link,filename:item.filename};if(responseData.link==null)
responseData.link="";return(responseData);}
function getEventResponseData(event){var idx=$(event.target).data('itemIndex');var frontIndex=event.data.frontIndex;var item=items[idx];var isFront=(idx==frontIndex)?true:false;var responseData=getItemResponseData(item);var objResponse={image:item.image,data:responseData,isFront:isFront};return(objResponse);}
function activateEvent(eventName,data){switch(eventName){case"frontchange":if(typeof options.event_onFrontItemChange=="function"){var frontItemData=ctx.getFrontItem();var image=frontItemData.image;delete frontItemData.image;options.event_onFrontItemChange(frontItemData,image);}
break;case"click":if(typeof options.event_onItemClick=="function"){var objData=getEventResponseData(data.event);options.event_onItemClick(objData.data,objData.isFront,objData.image);}
break;case"mouseover":if(typeof options.event_onItemMouseOver=="function"){var objData=getEventResponseData(data.event);options.event_onItemMouseOver(objData.data,objData.isFront,objData.image);}
break;case"mouseout":if(typeof options.event_onItemMouseOut=="function"){var objData=getEventResponseData(data.event);options.event_onItemMouseOut(objData.data,objData.isFront,objData.image);}
break;default:alert("wrong event");return(false);break;}}
$(container).bind('mouseout',this,function(event){var context=event.data;if(options.autoRotate!=='no'){clearTimeout(context.autoRotateBackTimer);context.autoRotateBackTimer=setTimeout(function(){context.unpauseAutoRotate();},1000);}
if(options.setTextOnMouseOver==true){clearTimeout(context.showFrontTextTimer);context.showFrontTextTimer=setTimeout(function(){context.showFrontText();},options.textShowFrontSpeed);}});$(container).find("img.cloudcarousel").bind('click',this,function(event){setOverlayText($(event.target).attr('title'),$(event.target).attr('alt'));var idx=$(event.target).data('itemIndex');var frontIndex=event.data.frontIndex;var diff=idx-frontIndex;var item=items[idx];activateEvent("click",{event:event});if((options.enableLinks==true)&&(diff==0||options.linksFrontOnly==false)){if(item.link){if(item.linkOpenNewWindow)
window.open(item.link);else
location.href=item.link;return(false);}}
if(options.bringToFront==false||diff==0)return(false);ctx.rotateToItem(item.itemID);});$(container).bind('mousedown',this,function(event){event.data.container.focus();return false;});container.onselectstart=function(){return false;};this.innerWrapper=$(container).wrapInner('<div style="position:absolute;width:100%;height:100%;"/>').children()[0];this.showFrontText=function(){if(items[this.frontIndex]===undefined)return(false);setOverlayText($(items[this.frontIndex].image).attr('title'),$(items[this.frontIndex].image).attr('alt'));};this.go=function()
{if(this.controlTimer!==0){return;}
var context=this;this.controlTimer=setTimeout(function(){context.updateAll();},this.timeDelay);};this.stop=function()
{clearTimeout(this.controlTimer);this.controlTimer=0;};this.updateFrontLinkCursor=function(){if(options.enableLinks==false)return(false);if(options.linksFrontOnly==false)return(false);var link;for(var i=0;i<items.length;i++){link=$(items[i].image).parent();if(items[i].link){if(i==this.frontIndex)
link.css("cursor","pointer");else
link.css("cursor","default");}}}
this.getFrontItem=function(){var frontItem=items[this.frontIndex];var objResponse=getItemResponseData(frontItem);objResponse.image=frontItem.image;return(objResponse);}
this.rotateRight=function(){if(options.reverseControls==false)
this.rotate(1);else
this.rotate(-1);}
this.rotateLeft=function(){if(options.reverseControls==false)
this.rotate(-1);else
this.rotate(1);}
this.rotateToItem=function(itemID){var item=getItemById(itemID);if(!item)return(false);var itemIndex=$(item.image).data("itemIndex");var diff=itemIndex-this.frontIndex;if(diff==0)return(false);if(diff<0)diff+=items.length;else
if(diff>=items.length)diff-=items.length;diff2=-(items.length-diff);if(Math.abs(diff)<Math.abs(diff2))
this.rotate(-diff);else
this.rotate(-diff2);}
function getItemById(itemID){for(var i=0;i<items.length;i++)
if(String(items[i].itemID)==String(itemID))return(items[i]);return(null);}
this.getItemImageUrl=function(itemID,width,height,exact){var item=getItemById(itemID);if(!item)return(null);var imageUrl=options.func_generateImageUrl(options.url_server,item.filename,width,height,exact);return(imageUrl);}
this.rotate=function(direction)
{this.frontIndex-=direction;this.frontIndex%=items.length;if(this.frontIndex<0)this.frontIndex+=items.length;this.destRotation+=(Math.PI/items.length)*(2*direction);this.showFrontText();this.updateFrontLinkCursor();activateEvent("frontchange");this.go();};this.unpauseAutoRotate=function(){this.autoRotatePaused=false;}
this.onAutoRotateStep=function(){if(this.autoRotatePaused==true)return(false);var dir=(options.autoRotate==='right')?1:-1;this.rotate(dir);}
this.autoRotate=function()
{if(options.autoRotate!=='no')
setInterval(function(){ctx.onAutoRotateStep();},options.autoRotateDelay);};this.updateAll=function()
{var minScale=options.minScale;var smallRange=(1-minScale)*0.5;var w,h,x,y,scale,item,sinVal;var change=(this.destRotation-this.rotation);var absChange=Math.abs(change);this.rotation+=change*options.speed;if(absChange<0.001){this.rotation=this.destRotation;}
var itemsLen=items.length;var spacing=(Math.PI/itemsLen)*2;var radians=this.rotation;var isMSIE=$.browser.msie;this.innerWrapper.style.display='none';var style;var px='px',reflHeight;var context=this;for(var i=0;i<itemsLen;i++)
{item=items[i];sinVal=funcSin(radians);scale=((sinVal+1)*smallRange)+minScale;if(options.setOpacityByScale==true)
setOpacity(items[i].image,scale);x=this.xCentre+(((funcCos(radians)*this.xRadius)-(item.orgWidth*0.5))*scale);y=this.yCentre+(((sinVal*this.yRadius))*scale);if(item.imageOK)
{var img=item.image;w=img.width=item.orgWidth*scale;h=img.height=item.orgHeight*scale;img.style.left=x+px;img.style.top=y+px;img.style.zIndex=""+(scale*100)>>0;if(item.reflection!==null)
{reflHeight=options.reflHeight*scale;style=item.reflection.element.style;style.left=x+px;style.top=y+h+options.reflGap*scale+px;style.width=w+px;if(isMSIE)
{style.filter.finishy=(reflHeight/h*100);}else
{style.height=reflHeight+px;}}}
radians+=spacing;}
this.innerWrapper.style.display='block';if(absChange>=0.001)
{this.controlTimer=setTimeout(function(){context.updateAll();},this.timeDelay);}else
{this.stop();}};this.showButtons=function(){if(!options.buttonLeft)return(false);var but_left=options.buttonLeft;var but_right=options.buttonRight;if(options.buttonLeft_alt){but_left=options.buttonLeft_alt;but_right=options.buttonRight_alt;}
if(options.buttonsAppearFadeIn==true){$(but_left).fadeIn();$(but_right).fadeIn();}
else{$(but_left).show();$(but_right).show();}}
this.checkImagesLoaded=function()
{var i,arrItems=[],item,itemData;var onInitEventEnabled=(typeof options.event_onImagesLoaded=="function")?true:false;for(i=0;i<images.length;i++){if((images[i].width===undefined)||((images[i].complete!==undefined)&&(!images[i].complete)))
return;}
for(i=0;i<images.length;i++){item=new Item(images[i],options);items.push(item);$(images[i]).data('itemIndex',i);setOpacity(images[i],1);if(onInitEventEnabled==true){itemData=getItemResponseData(item);itemData.image=images[i];arrItems.push(itemData);}}
if(onInitEventEnabled==true)
options.event_onImagesLoaded(arrItems,this);clearInterval(this.tt);this.showButtons();this.showFrontText();this.updateFrontLinkCursor();this.autoRotate();this.updateAll();return(false);};this.tt=setInterval(function(){ctx.checkImagesLoaded();},20);};$.fn.CloudCarousel=function(options){this.each(function(){options=$.extend({},{reflHeight:0,reflOpacity:0.5,reflGap:0,minScale:0.5,xPos:0,yPos:0,xRadius:0,yRadius:0,altBox:null,titleBox:null,FPS:30,autoRotate:'no',autoRotateDelay:1500,speed:0.2,mouseWheel:false,bringToFront:false,textShowFrontSpeed:1000,setTextOnMouseOver:true,setOpacityByScale:false,buttonsAppearFadeIn:true,linksFrontOnly:false,func_generateImageUrl:null,objAddData:{},url_server:"",reverseControls:false,enableLinks:false,event_onImagesLoaded:null,event_onItemClick:null,event_onItemMouseOver:null,event_onItemMouseOut:null,event_onFrontItemChange:null},options);$(this).data('cloudcarousel',new Controller(this,$('.cloudcarousel',$(this)),options));});return this;};})(jQuery);
