/* http://keith-wood.name/imageCube.html
   Image Cube for jQuery v1.0.1.
   Written by Keith Wood (kbwood@virginbroadband.com.au) June 2008.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($){function ImageCube(){this._defaults={direction:'random',randomSelection:['up','down','left','right'],speed:2000,easing:'linear',noShading:false,imagePath:'',repeat:true,pause:2000,opacity:[0.0,0.8],lineHeight:[0.0,1.25],letterSpacing:[-0.4,0.0]}};var A=0;var B=1;var C=2;var D=3;var E='imageCube';$.extend(ImageCube.prototype,{markerClassName:'hasImageCube',setDefaults:function(a){extendRemove(this._defaults,a||{})},_attachImageCube:function(b,c){b=$(b);if(b.is('.'+this.markerClassName)){return}b.addClass(this.markerClassName);var d=$.extend({},this._defaults,c||{});$.data(b[0],E,d);b.children().each(function(){var a=$(this);$.data(this,E,{width:a.css('width'),height:a.css('height'),position:a.css('position'),lineHeight:a.css('lineHeight'),letterSpacing:a.css('letterSpacing')});a.css({width:b.css('width'),height:b.css('height'),position:'absolute',lineHeight:d.lineHeight[1],letterSpacing:d.letterSpacing[1]})}).not(':first').hide();this._prepareRotation(b[0])},_prepareRotation:function(a){a=$(a);var b=$.data(a[0],E);b.current=a.children(':visible')[0];if(b.repeat&&!b._timer){if(!a[0].id){a[0].id='ic'+new Date().getTime()}b._timer=setTimeout('jQuery.imagecube._rotateImageCube("#'+a[0].id+'")',b.pause)}$.data(a[0],E,b)},_rotateImageCube:function(a,b){a=$(a);this._stopImageCube(a[0],true);var c=$.data(a[0],E);var d={};d[E]=1.0;a.attr(E,0.0).animate(d,c.speed,c.easing,b)},_currentImageCube:function(a){return $.data(a,E).current},_stopImageCube:function(a,b){var c=$.data(a,E);if(c._timer){clearTimeout(c._timer);c._timer=null}if(!b){c.repeat=false}$.data(a,E,c)},_startImageCube:function(a){this._changeImageCube(a,{repeat:true})},_changeImageCube:function(a,b){var c=$.data(a,E);extendRemove(c||{},b||{});$.data(a,E,c);this._prepareRotation(a)},_destroyImageCube:function(a){this._stopImageCube(a);a=$(a);if(!a.is('.'+this.markerClassName)){return}a.stop().removeClass(this.markerClassName).children('.imageCubeShading').remove();a.children().each(function(){$(this).css($.data(this,E)).show();$.removeData(this,E)});$.removeData(a[0],E)},_prepareImageCube:function(d){var e=$.data(d,E);var d=$(d);var f=false;var g=d.children(':visible');var h=g.next();h=(h.length?h:d.children(':first'));var j=d.offset();d.parents().each(function(){var a=$(this);if(a.css('position')=='fixed'){j.left-=a.offset().left;j.top-=a.offset().top;return false}});var k={width:d.width(),height:d.height()};var l=(e.direction!='random'?e.direction:e.randomSelection[Math.floor(Math.random()*e.randomSelection.length)]);l=Math.max(0,$.inArray(l,['up','down','left','right']));var m=(l==A||l==B);var n=(l==C||l==D);var o=(l==A||l==C);var q=(o?e.opacity[0]:e.opacity[1]);var r=[];var s=function(p){var b=[];for(var i=0;i<4;i++){b[i]=p.css('border'+['Left','Right','Top','Bottom'][i]+'Width');var a=parseFloat(b[i]);b[i]=(!isNaN(a)?a:Math.max(0,$.inArray(b[i],['thin','medium','thick'])*2+1))}return b};r[0]=s(g);r[1]=s(h);var t=[];t[0]=[parseFloat(g.css('padding-left')),parseFloat(g.css('padding-right')),parseFloat(g.css('padding-top')),parseFloat(g.css('padding-bottom'))];t[1]=[parseFloat(h.css('padding-left')),parseFloat(h.css('padding-right')),parseFloat(h.css('padding-top')),parseFloat(h.css('padding-bottom'))];var u=[];u[0]=[($.boxModel?r[0][0]+r[0][1]+t[0][0]+t[0][1]:0),($.boxModel?r[0][2]+r[0][3]+t[0][2]+t[0][3]:0)];u[1]=[($.boxModel?r[1][0]+r[1][1]+t[1][0]+t[1][1]:0),($.boxModel?r[1][2]+r[1][3]+t[1][2]+t[1][3]:0)];var v=[];v[0]={elem:g,left:{start:j.left,end:j.left+(l==D?k.width:0),units:'px'},width:{start:k.width-u[0][0],end:(m?k.width-u[0][0]:0),units:'px'},top:{start:j.top,end:j.top+(l==B?k.height:0),units:'px'},height:{start:k.height-u[0][1],end:(m?0:k.height-u[0][1]),units:'px'},paddingLeft:{start:t[0][0],end:(n?0:t[0][0]),units:'px'},paddingRight:{start:t[0][1],end:(n?0:t[0][1]),units:'px'},paddingTop:{start:t[0][2],end:(m?0:t[0][2]),units:'px'},paddingBottom:{start:t[0][3],end:(m?0:t[0][3]),units:'px'},borderLeftWidth:{start:r[0][0],end:(n?0:r[0][0]),units:'px'},borderRightWidth:{start:r[0][1],end:(n?0:r[0][1]),units:'px'},borderTopWidth:{start:r[0][2],end:(m?0:r[0][2]),units:'px'},borderBottomWidth:{start:r[0][3],end:(m?0:r[0][3]),units:'px'},lineHeight:{start:e.lineHeight[1],end:(m?e.lineHeight[0]:e.lineHeight[1]),units:'em'},letterSpacing:{start:e.letterSpacing[1],end:(m?e.letterSpacing[1]:e.letterSpacing[0]),units:'em'}};v[1]={elem:h,left:{start:j.left+(l==C?k.width:0),end:j.left,units:'px'},width:{start:(m?k.width-u[1][0]:0),end:k.width-u[1][0],units:'px'},top:{start:j.top+(l==A?k.height:0),end:j.top,units:'px'},height:{start:(m?($.browser.msie?1:0):k.height-u[1][1]),end:k.height-u[1][1],units:'px'},paddingLeft:{start:(n?0:t[1][0]),end:t[1][0],units:'px'},paddingRight:{start:(n?0:t[1][1]),end:t[1][1],units:'px'},paddingTop:{start:(m?0:t[1][2]),end:t[1][2],units:'px'},paddingBottom:{start:(m?0:t[1][3]),end:t[1][3],units:'px'},borderLeftWidth:{start:(n?0:r[1][0]),end:r[1][0],units:'px'},borderRightWidth:{start:(n?0:r[1][1]),end:r[1][1],units:'px'},borderTopWidth:{start:(m?0:r[1][2]),end:r[1][2],units:'px'},borderBottomWidth:{start:(m?0:r[1][3]),end:r[1][3],units:'px'},lineHeight:{start:(m?e.lineHeight[0]:e.lineHeight[1]),end:e.lineHeight[1],units:'em'},letterSpacing:{start:(m?e.letterSpacing[1]:e.letterSpacing[0]),end:e.letterSpacing[1],units:'em'}};if(!e.noShading){var w=function(a,b,c){return{elem:null,left:{start:a.left.start,end:a.left.end,units:'px'},width:{start:a.width.start,end:a.width.end,units:'px'},top:{start:a.top.start,end:a.top.end,units:'px'},height:{start:a.height.start,end:a.height.end,units:'px'},paddingLeft:{start:a.paddingLeft.start+a.borderLeftWidth.start,end:a.paddingLeft.end+a.borderLeftWidth.end,units:'px'},paddingRight:{start:a.paddingRight.start+a.borderRightWidth.start,end:a.paddingRight.end+a.borderRightWidth.end,units:'px'},paddingTop:{start:a.paddingTop.start+a.borderTopWidth.start,end:a.paddingTop.end+a.borderTopWidth.end,units:'px'},paddingBottom:{start:a.paddingBottom.start+a.borderBottomWidth.start,end:a.paddingBottom.end+a.borderBottomWidth.end,units:'px'},opacity:{start:b,end:c,units:''}}};v[2]=w(v[o?0:1],q,e.opacity[1]-q);v[3]=w(v[o?1:0],e.opacity[1]-q,q)}var x=function(a){return{left:a.left.start+'px',width:a.width.start+'px',top:a.top.start+'px',height:a.height.start+'px',lineHeight:a.lineHeight.start+'em',padding:a.paddingTop.start+'px '+a.paddingRight.start+'px '+a.paddingBottom.start+'px '+a.paddingLeft.start+'px',borderLeftWidth:a.borderLeftWidth.start+'px',borderRightWidth:a.borderRightWidth.start+'px',borderTopWidth:a.borderTopWidth.start+'px',borderBottomWidth:a.borderBottomWidth.start+'px',letterSpacing:a.letterSpacing.start+'em',overflow:'hidden'}};g.css(x(v[0]));h.css(x(v[1])).show();if(!e.noShading){v[2].elem=$(($.browser.msie?'<img src="'+e.imagePath+'imageCubeHigh.png"':'<div')+' class="imageCubeShading" style="background-color: white; opacity: '+q+'; z-index: 10; position: absolute; '+'left: '+v[2].left.start+'px; width: '+v[2].width.start+'px; '+'top: '+v[2].top.start+'px; height: '+v[2].height.start+'px; '+'padding: '+(o?g:h).css('padding')+';"'+($.browser.msie?'/>':'></div>'));v[3].elem=$(($.browser.msie?'<img src="'+e.imagePath+'imageCubeShad.png"':'<div')+' class="imageCubeShading" style="background-color: black; opacity: '+(e.opacity[1]-q)+'; z-index: 10; position: absolute; '+'left: '+v[3].left.start+'px; width: '+v[3].width.start+'px; '+'top: '+v[3].top.start+'px; height: '+v[3].height.start+'px; '+'padding: '+(o?h:g).css('padding')+';"'+($.browser.msie?'/>':'></div>'));d.append(v[2].elem).append(v[3].elem)}for(var i=0;i<v.length;i++){for(var y in v[i]){var z=v[i][y];z.diff=z.end-z.start}}return v}});function extendRemove(a,b){$.extend(a,b);for(var c in b){if(b[c]==null){a[c]=null}}return a}$.fn.imagecube=function(a){var b=Array.prototype.slice.call(arguments,1);if(a=='current'){return $.imagecube['_'+a+'ImageCube'].apply($.imagecube,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){$.imagecube['_'+a+'ImageCube'].apply($.imagecube,[this].concat(b))}else{$.imagecube._attachImageCube(this,a)}})};$.fx.step[E]=function(a){if(a.state==0){a.start=0.0;a.end=1.0;a.stepProps=$.imagecube._prepareImageCube(a.elem);a.saveCSS={borderLeftWidth:a.stepProps[0].elem.css('borderLeftWidth'),borderRightWidth:a.stepProps[0].elem.css('borderRightWidth'),borderTopWidth:a.stepProps[0].elem.css('borderTopWidth'),borderBottomWidth:a.stepProps[0].elem.css('borderBottomWidth'),padding:a.stepProps[0].elem.css('padding')}}for(var i=0;i<a.stepProps.length;i++){var b={};for(var c in a.stepProps[i]){var d=a.stepProps[i][c];if(c!='elem'){b[c]=(a.pos*d.diff+d.start)+d.units}}a.stepProps[i].elem.css(b)}if(a.state==1){a.stepProps[0].elem.hide().css(a.saveCSS);if(a.stepProps.length>2){a.stepProps[2].elem.remove();a.stepProps[3].elem.remove()}$.imagecube._prepareRotation(a.elem)}};$.imagecube=new ImageCube()})(jQuery);
