/* Ispin360 JavascriptLast modified: 03-04-11Version: 9.7Features:-iPad, iPhone, iPod Touch compatible-Free spinning-Highly customisable-More flexible menu managementBugs fixed:-Zoom for images of different size from the window-Drag from "bottom to top" & "right to top"-Menu image preloaded-iPad zoom (using HTML 5 canvas)-IE loading same image twice-Renewed Zoom system for iOS*/function ISpin360(L,ka,M,Ua,f,la,l,z){var defaultNamePattern = 'FinalImg_'; //The generic name before the number of the image. Case sensitivevar defaultSpeed = 1.5; //From 1 (min) to 5 (max).var defaultIOSSpeed = 1.5; //Speed of iPhone/iPad from 1 (min) to 5 (max).var defaultFirstRotationNumber = 1; //n+1 rotation(s) before the object stops at its origin pointvar defaultRotationNumber = 0; //n+1 rotation(s) before the object stops at its origin point//Menuvar defaultStageWidth = 350;var defaultStageHeight = 330;var defaultLoaderImage = 'j_loader_350.gif';var defaultSpinImg = 'j_start_350.gif';var defaultSpinRolloverImg = 'j_rollover_350.gif';var defaultZoomInImg = 'j_zoom_in_350.gif';var defaultZoomOutImg = 'j_zoom_out_350.gif';var defaultStopImg = 'j_stop_350.gif';	/*For menu buttons parameters	 * x : number for x axis	 * y : number for y axis	 * height : dimension height of button	 * width : dimension width of button	 * display : state true or false	 */		var defaultLoaderParameters = {x:0, y:-17, height:18, width:350, displayOnStart:true, displayOnZoom:true};var defaultSpinParameters = {x:0, y:-17, height:18, width:245, display:true};var defaultZoomParameters = {x:245, y:-17, height:18, width:105, display:true};var defaultDelaySpinWithMenu = true;var defaultNumTotalImg = 28; //Default No. of images in the spin.var defaultDirection = 'right'; // Put "left" or "right"var defaultLocationImage = '/images/';var defaultLocationZoom = '/zoom/';var defaultExt = '.jpg'; //Put the file extension of the picture. Case sensitive.var defaultMode = 'std'; //Put "std" for standard or "zoom"var assetsDirectory = '/assets/';//Styling - All the following can be used for styling the spin in CSS//This is not here to be changed but to guide when stylingvar defaultContainerID = 'ispin';var defaultDivID = 'ispindiv';var defaultSpinID = 'ispinmenuspin';var defaultZoomID = 'ispinmenuzoom';var defaultMenuID = 'ispinmenu';var defaultLoaderID = 'ispinloader';var defaultDivPositionX = 0; //X axis position to place the image compare to the stagevar defaultDivPositionY = 0; //Y axis position to place the image compare to the stagevar defaultIsOnePageWebsite = false;var defaultReverseMouseInteractions = false;function Ab(a){c.style.backgroundImage='url("'+T(1)+'")';var b=[U.width,U.height];g=b[0];r=b[1];V=Va?Va:s*0.5-r*0.5;W=Xa?Xa:m*0.5-g*0.5;if(u){c.width=m;c.height=s}Ca(false);Ya=g/m;_ratioImgHeight=r/s;U.width=g*Ya;U.height=r*_ratioImgHeight;o=typeof c.style.backgroundSize!="undefined"?"backgroundSize":typeof c.style.webkitBackgroundSize!="undefined"?"webkitBackgroundSize":typeof c.style.MozBackgroundSize!="undefined"?"MozBackgroundSize":false;X='<div id="'+Za+'" style="background-image:url('+F+ma+');background-repeat:no-repeat;cursor:pointer;position:absolute;"></div>';X+='<div id="'+$a+'" style="background-image:url('+F+Da+');background-repeat:no-repeat;cursor:pointer;position:absolute;"></div>';X+='<div id="'+ab+'" style="background-image:url('+F+Ea+');background-position:center center;background-repeat:no-repeat;position:absolute;display:none;"></div>';N.innerHTML+=X;H=document.getElementById(Za);Y=document.getElementById($a);Fa=document.getElementById(ab);X=document.getElementById(Bb);c=document.getElementById(na);if(u)h=c.getContext("2d");b=[H,Y,Fa];for(var d=0,t=b.length,oa=[Wa,Cb,Ga];d<t;){for(p in oa[d]){var x=p,I=b[d],w=oa[d];switch(x){case "width":I.style.width=w[x]+"px";break;case "height":I.style.height=w[x]+"px";break;case "x":I.style.left=typeof w[x]=="number"?w[x]+"px":bb(cb[w[x]],w.width,m)+"px";break;case "y":I.style.top=typeof w[x]=="number"?s-w.height-w[x]+"px":bb(cb[w[x]],w.height,s)+"px";break;case "display":I.style.display=w[x]?"block":"none"}}d+=1}pa(true,Ga.displayOnStart);var db;b=c;d=curTop=0;if(b.offsetParent){do{d+=b.offsetLeft;curTop+=b.offsetTop}while(b=b.offsetParent);db=[d,curTop]}Ha=db[0];if(u){R[1]=a.target;for(a=eb=2;a<=A;a++)qa(a,false)}else qa(0)}function Db(){c.onmousemove=c.ontouchmove=Eb;c.onmouseup=c.onmouseout=c.ontouchend=Fb;c.onmouseover=function(){Z=G=null};c.ongesturechange=Gb;c.ongestureend=Hb;H.onmouseover=fb;H.onmouseout=fb;_eventSwitch={};_eventSwitch.drag=true;_eventSwitch.spin=true;_eventSwitch.zoom=true;Ia()}function Ia(){for(i in _eventSwitch){var a=_eventSwitch[i];switch(i){case "drag":c.onmousedown=c.ontouchstart=c.ongesturestart=a?Ib:null;break;case "spin":H.onclick=a?Ja:null;break;case "zoom":Y.onclick=a&&Jb?Kb:null}}}function Gb(a){$=false;a=a.scale;var b=m*0.5,d=s*0.5;h.clearRect(0,0,m,s);if(j=="std"){if(a>1){q=[g*a,r*a];h.save();h.translate(b,d);h.scale(a,a);h.drawImage(R[C],-b,-d);h.restore()}}else{q=[J*a,S*a];b=(q[0]-g)/(J-g);ra=[D*b,E*b];a<1?h.drawImage(n,ra[0],ra[1],q[0],q[1]):h.drawImage(n,D,E,J,S)}}function Hb(a){ra=null;if(j=="std"&&a.scale>1)gb();else j=="zoom"&&a.scale<1&&Ka()}function qa(a,b){if(document.images){var d=new Image;if(La)Ma=d;d.onload=j=="zoom"?Lb:a==1?Ab:Mb;var t=b?hb:ib;if(typeof a=="number"&&a<10)a="0"+a;var oa=d;if(Nb&&La){t=t+a+sa+"?forIE=";for(var x=6,I="";x;){var w=parseInt(Math.random()*26)+97;I+=String.fromCharCode(w);x-=1}t=t+I}else t=t+a+sa;oa.src=t}return d}function Mb(a){if(u){var b=a.target.src.replace(sa,"");b=parseInt(b.substr(b.length-2,2),10);R[b]=a.target;eb+=1;R.length>A&&Na()}else{c.style.backgroundImage="url("+T(0)+")";_unqImgWidth=(a?a.target:Ma).width;Na()}}function Na(){if(jb)for(var a=0,b=ta.length;a<b;){if(ta[a]){var d=new Image;d.onload=Ob;d.src=F+ta[a]}a+=1}else{Db();pa(false);if(u)c.style.backgroundImage="";Pb&&Ja()}}function Ob(){kb+=1;if(kb>=ta.length){jb=false;Na()}}function Lb(a){if(!a)a=window.event;n=a.target?a.target:Ma;Ca(true);if(lb){a=[n.width,n.height];J=a[0];S=a[1];B=parseInt(Qb/Oa);lb=false;v=[];y=[];aa=[m-g,s-r];v[0]=J-g;y[0]=S-r;v[1]=g;y[1]=r;for(a=2;a<=B;a++)v[a]=v[0]/B*a+g;for(a=2;a<=B;a++)y[a]=y[0]/B*a+r}k=1;if(mb){if(o)c.style[o]=g+"px "+r+"px";else{n.width=g;n.height=r;n.style.position="relative";n.style.zIndex=-1;N.appendChild(n);c.style[K]=K=="filter"?"alpha(opacity=0)":0}ua(C);c.style.backgroundPosition="center center";window.setTimeout(function(){Pa=window.setInterval(function(){k+=1;if(k<=B)if(o)if(u)h.drawImage(n,-(v[k]-m)*0.5,-(y[k]-s)*0.5,v[k],y[k]);else c.style[o]=v[k]+"px "+y[k]+"px";else{var b=1/B*k;c.style[K]=K=="filter"?"alpha(opacity="+b*100+")":b}else Qa(true)},Oa)},100)}else nb()}function Qa(a,b){q=null;window.clearInterval(Pa);window.setTimeout(function(){nb(a,b)},100)}function nb(a,b){_eventSwitch.drag=_eventSwitch.spin=_eventSwitch.zoom=true;Ia();if(a){if(!u){if(o&&o!="webkitBackgroundSize")c.style[o]=null;else if(o=="webkitBackgroundSize")c.style[o]=null;else n.style.zIndex=-1;var d=[-((v[0]-aa[0])*0.5),-((y[0]-aa[1])*0.5)];c.style.backgroundPosition=d[0]+"px "+d[1]+"px"}D=-(v[v.length-1]-m)*0.5;E=-(y[y.length-1]-s)*0.5;va=wa=null;ba=[D,E]}else{Ca(false);if(o)if(u)h.clearRect(0,0,m,s);else if(ca=="unq")c.style[o]=A*g+"px "+r+"px";else{c.style[o]=g+"px "+r+"px";c.style.backgroundPosition="center center"}else{c.style[K]=K=="filter"?"alpha(opacity=100)":1;N.removeChild(n)}ua(C,true)}if(b){var t={};t.type="click";window.setTimeout(function(){Ja(t)},100)}pa(false)}function Ib(a){_ticks=new Date;_ticks=_ticks.getTime();Z=G=null;da=true;ea=ob;O&&xa();fa&&ya();if(!a)a=window.event;if(a.type!="gesturestart"){if(e(a,"targetTouches"))var b=a.targetTouches[0];za=typeof a.clientX!="undefined"?a.clientX:b.clientX;if(j=="std")pb=C;else qb=typeof a.clientY!="undefined"?a.clientY:b.clientY}$=true;return false}function Fb(){$&&j=="zoom"&&rb();$=false;if(typeof _ticks!="undefined"&&_ticks){Aa=new Date;Aa=Aa.getTime()-_ticks;_ticks=null;ga=G?za-G:0;P=G;G=null;ha=ga<0?-1:1;ga*=ha;ia=ga/Aa;if(j=="std")if(ga)fa=window.setInterval(function(){var a=j=="std"?0.9:0.9;ia*=j=="std"?0.9:0.9;Ra*=a;a=j=="std"?Ra*ja:Ra*ja;P-=(j=="std"?ia*ja:ia*ja)*ha;Rb-=a*Sb;if(j=="std"){if(P>m+Ha&&ha<0)P-=m;else if(P<Ha&&ha>0)P+=m;sb(P);ia<0.1&&ya()}},ja)}}function Eb(a){if(!a)a=window.event;if($){G=typeof a.clientX!="undefined"?a.clientX:a.touches.item(0).clientX;if(j=="std")sb(G);else{Z=typeof a.clientY!="undefined"?a.clientY:a.touches.item(0).clientY;a=G;var b=Z;_previousTicks=_ticks;_ticks=new Date;_ticks=_ticks.getTime();Z=G=null;a=-(za-a)+D;b=-(qb-b)+E;var d=[[D>0?D:0,E>0?E:0],[J-m,S-s]];a=a>0?d[0][0]:a<-d[1][0]?-d[1][0]:a;b=b>0?d[0][1]:b<-d[1][1]?-d[1][1]:b;if(u)h.drawImage(n,a,b,J,S);else c.style.backgroundPosition=a+"px "+b+"px";va=a;wa=b}}return false}function sb(a){a=parseInt((a-za)/m*A);a=Tb?-a:a;a+=pb;if(a>A)a-=A;else if(a<1)a+=A;ua(a)}function Ja(a){if(C!=1)da=true;if(tb){ea=Ub;tb=false}else{if(!a)a=window.event;if(a.type=="click")ea=ob}fa&&ya();if(j=="zoom")Ka(true);else if(O){da=true;xa()}else{H.style.backgroundImage="url("+F+ub+")";Ba=A;vb=Sa=="r"?"+":"-";O=window.setInterval(function(){var b=C;b=eval(b+vb+1);if(b>A)b-=A;else if(b<1)b+=A;ua(b);Ba-=1;if(!Ba)if(da||ea>0){ea-=1;da=false;Ba=Math.abs(A-C)+1}else xa()},25*Vb/Ta)}}function Kb(){j=="std"?gb():Ka(false)}function gb(){O&&xa();fa&&ya();j="zoom";_eventSwitch.drag=_eventSwitch.spin=_eventSwitch.zoom=false;Ia();pa(true,Ga.displayOnZoom);Y.style.backgroundImage="url("+F+wb+")";qa(C,true)}function Ka(a){j="std";Y.style.backgroundImage="url("+F+Da+")";if(mb){_eventSwitch.drag=_eventSwitch.spin=_eventSwitch.zoom=false;Ia();if(o&&o!="webkitBackgroundSize"){k=B;ba=[D,E]}Pa=window.setInterval(function(){k-=1;if(k>1)if(o){var b=k/B,d=[ba[0]*b+aa[0]*0.5*(1-b),ba[1]*b+aa[1]*0.5*(1-b)];if(u){if(q){b=B;for(var t=q[0];b>1;){if(v[b]<t){d=(q[0]-g)/(J-g);d=[D*d,E*d];h.drawImage(n,d[0],d[1],q[0],q[1]);q=null;k=b;break}b-=1}}h.clearRect(0,0,m,s);h.drawImage(n,d[0],d[1],v[k],y[k])}else{c.style[o]=v[k]+"px "+y[k]+"px";c.style.backgroundPosition=d[0]+"px "+d[1]+"px"}}else{b=1/B*k;c.style[K]=K=="filter"?"alpha(opacity="+b*100+")":b}else Qa(false,a)},Oa)}else Qa(false,a)}function xa(){H.style.backgroundImage="url("+F+ma+")";window.clearInterval(O);O=null}function ya(){window.clearInterval(fa);j=="zoom"&&rb()}function rb(){if(va!==null&&wa!==null){D=va;E=wa;ba=[D,E]}}function ua(a,b){C=a;if(u)if(j=="std")h.drawImage(R[a],xb,yb);else if(q)for(var d=1,t=q[0];d<=B;){if(v[d]>t){h.save();h.translate(m*0.5,s*0.5);h.scale(q[0]/g,q[0]/g);h.drawImage(R[a],-g*(C-1)-g*0.5,-r*0.5);h.restore();q=null;k=d;break}d+=1}else h.drawImage(n,W,V,g,r);else if(b)if(ca=="std")c.style.backgroundImage="url("+T(a)+")";else{c.style.backgroundImage="url("+T("00")+")";c.style.backgroundPosition=-(g*(a-1))+"px 0px"}else if(ca=="std"||j=="zoom")c.style.backgroundImage="url("+T(a)+")";else c.style.backgroundPosition=-(g*(a-1))+"px 0px"}function T(a){if(typeof a=="number"&&a<10)a="0"+a;var b=j=="std"?ib:hb;b+=a+sa;return b}function fb(a){if(!a)a=window.event;if(!O)H.style.backgroundImage=a.type=="mouseover"?"url("+F+zb+")":"url("+F+ma+")"}function bb(a,b,d){switch(a){case "normal":return a;case "half":return(d-b)*0.5;default:return d-b}}function Ca(a){if(u){xb=a?0:W;yb=a?0:V}else{c.style.width=a?m+"px":g+"px";c.style.height=a?s+"px":r+"px";c.style.top=a?0:V+"px";c.style.left=a?0:W+"px"}if(!o&&a){n.style.top=V+"px";n.style.left=W+"px"}}function pa(a,b){if(Ea)Fa.style.display=a?b?"block":"none":"none"}function e(a,b){return typeof eval(a)=="undefined"||eval(a)==null?false:b?typeof eval(a)[b]=="undefined"?false:true:true}var Wb=defaultLoaderParameters,Xb=defaultSpinParameters,Yb=defaultZoomParameters,Q=navigator.userAgent;Q=Q.split(" ");var La=Q[2]=="MSIE"?true:false;La&&parseInt(Q[3]);var u=Q.toString().match(/(iPad|iPod|iPhone)/i)?true:false;Q=e(z,"id")?z.id:defaultContainerID;var N=document.getElementById(Q),na=e(z,"spinID")?z.spinID:defaultDivID,c=u?'<canvas id="'+na+'" style="position:absolute;"></canvas>':'<div id="'+na+'" style="position:absolute;background-repeat:no-repeat;"></div>';N.innerHTML=c;c=document.getElementById(na);var h,Za=e(z,"spinButtonID")?z.spinButtonID:defaultSpinID,$a=e(z,"zoomButtonID")?z.zoomButtonID:defaultZoomID,ab=e(z,"loaderButtonID")?z.loaderButtonID:defaultLoaderID,Bb=e(z,"menuButtonID")?z.menuButtonID:defaultMenuID,Xa=e(la,"imagePositionX")?la.imagePositionX:defaultDivPositionX,Va=e(la,"imagePositionY")?la.imagePositionY:defaultDivPositionY,W,V,xb,yb,g,r,Ya,m=M?parseInt(M.toString().replace("px","")):defaultStageWidth,s=Ua?parseInt(Ua.toString().replace("px","")):defaultStageHeight,H,Y;M=e(f,"namePattern")?f.namePattern:defaultNamePattern;var ib=e(f,"locationImage")?L+ka+f.locationImage+M:L+ka+defaultLocationImage+M,hb=e(f,"locationZoom")?L+ka+f.locationZoom+M:L+ka+defaultLocationZoom+M,C=1,eb=0,kb=0,sa=defaultExt,j=e(f,"viewMode")?f.viewMode:defaultMode,Jb=e(f,"isZoom")?f.isZoom:true,A=e(f,"totalImg")?f.totalImg:defaultNumTotalImg,Sa=e(f,"direction")?f.direction:defaultDirection;Sa=Sa=="right"?"r":"l";var F=L+assetsDirectory,Da=e(l,"zoomInImg")?l.zoomInImg:defaultZoomInImg,wb=e(l,"zoomOutImg")?l.zoomOutImg:defaultZoomOutImg,ma=e(l,"spinImg")?l.spinImg:defaultSpinImg,zb=e(l,"spinRolloverImg")?l.spinRolloverImg:defaultSpinRolloverImg,ub=e(l,"stopImg")?l.stopImg:defaultStopImg,Ea=e(l,"imageLoader")?l.imageLoader:defaultLoaderImage,jb=e(l,"delaySpin")?l.delaySpin:defaultDelaySpinWithMenu,ca=e(f,"imageMode")?f.imageMode:"unq",mb=e(f,"animationEnabled")?f.animationEnabled:true,ob=e(f,"rotationNumber")?f.rotationNumber:defaultRotationNumber,Ub=e(f,"firstRotationNumber")?f.firstRotationNumber:defaultFirstRotationNumber,ta=[Da,wb,ma,zb,ub,Ea],Nb=e(f,"isOnePageWebsite")?f.isOnePageWebsite:defaultIsOnePageWebsite,Tb=e(f,"isReversedMouse")?f.isReversedMouse:defaultReverseMouseInteractions,Ga=e(l,"loaderParameters")?l.loaderParameters:Wb,Wa=e(l,"spinParameters")?l.spinParameters:Xb,Cb=e(l,"zoomParameters")?l.zoomParameters:Yb,vb,za,qb,G,Z,Ha,D,E,va,wa,U,$,pb,fa,ja=1E3/24,Aa,ga,ha,Sb,ia,Ra,P,Rb,Ba,q,O,Pa,B,k=0,o;L=e(f,"IOSSpeed")?f.IOSSpeed:defaultIOSSpeed;var Ta=e(f,"speed")?f.speed:defaultSpeed;Ta=u?L:Ta;var Vb=5,J,S,lb=true,v,y,aa,ra,Oa=40,Qb=1E3,ba,tb=e(f,"firstSpin")?f.firstSpin:true,da=false,ea,Pb=e(f,"autoSpin")?f.autoSpin:true,cb={left:"normal",center:"half",right:"reverse",top:"normal",middle:"half",bottom:"reverse"},X,Fa,R=[""],K=typeof c.style.opacity!="undefined"?"opacity":typeof c.style.filter!="undefined"?"filter":false,Ma,n;if(u)ca="std";N.style.position="relative";N.style.width=m+"px";N.style.height=s+"px";c.style.backgroundPosition=ca=="std"?"center center":"0 0";c.style.backgroundRepeat="no-repeat";U=qa(C,false)};
