/**
 * @author Alexander Samilyak (aleksam@design.ru) 
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 */

Movie=function(){this.jPtr=$("#movie");this.init()};Movie.prototype={ANI_DURATION:25,BRAKING_DURATION:5,BUTTERFLY_FRAME_ID:1,init:function(){this.buttonsInit();this.framesInit();this.butterflyInit();this.aniInit();this.setInitPosition();this.bAni=false},buttonsInit:function(){var A=this;this.aButtons=[];$("#camera .button").each(function(){var B=+this.className.match(/(?:^|\s+)f_(\d+)(?:\s+|$)/)[1];A.aButtons[B]=$(this)})},framesInit:function(){var A=this;this.aFrames=[];this.jPtr.find(".frame").each(function(){A.aFrames.push(new Frame($(this),A))})},butterflyInit:function(){this.oButterfly=new Butterfly(this)},aniInit:function(){var A=this;this.oAni=new Tween(this.jPtr,"",EEQ.Quartic.easeInOut,0,1,this.ANI_DURATION);this.oAni.stop();this.oAni.onMotionFinished=function(){A.onAniFinish()};this.oAniBraking=new Tween(this.jPtr,"",EEQ.Quadratic.easeOut,0,1,this.BRAKING_DURATION);this.oAniBraking.stop();this.oAni.onMotionChanged=this.oAniBraking.onMotionChanged=function(B){Hitek.tween.apply(this,[B,function(C,D){B.style[C]=D+"%"}])};this.setInitPosition()},setInitPosition:function(){this.jPtr.css("left",this.getCurrentPosition()+"%")},getCurrentPosition:function(){return this.jPtr[0].offsetLeft/this.jPtr[0].parentNode.offsetWidth*100},showFrame:function(A){if(this.bAni){this.brake(A)}else{this.animate(A)}},animate:function(A){var B=this;this.oAni.stop();this.oAni.props={left:{s:this.getCurrentPosition(),f:-A.getPercentOffset()}};this.onAniStart();this.oAni.play()},brake:function(A){var B=this;this.oAniBraking.onMotionFinished=function(){B.animate(A)};this.oAniBraking.props={left:{s:this.getCurrentPosition(),f:this.getBrakingPoint()}};this.oAni.stop();this.oAniBraking.play()},getBrakingPoint:function(){var C=this.getQuarticEaseInOutDerivative(this.oAni.time,this.oAni._start,this.oAni._change,this.oAni.duration);var B=-C/this.BRAKING_DURATION;var A=this.oAni.position-Math.pow(C,2)/(2*B);return this.oAni.props.left.s+A*(this.oAni.props.left.f-this.oAni.props.left.s)},onAniStart:function(){this.bAni=true;if(this.getCurrentFrame()&&this.getCurrentFrame().id!==this.BUTTERFLY_FRAME_ID){this.oButterfly.disable()}},onAniFinish:function(){this.bAni=false;if(this.getCurrentFrame()&&this.getCurrentFrame().id===this.BUTTERFLY_FRAME_ID){this.oButterfly.enable()}},getButtonById:function(A){return this.aButtons[A]},getCurrentFrame:function(){return this.oCurrentFrame||null},setCurrentFrame:function(A){this.oCurrentFrame=A},getQuarticEaseInOutDerivative:function(B,A,D,C){if(B/C<1/2){return(32*D/Math.pow(C,4))*Math.pow(B,3)}else{return(-4*D/C)*Math.pow(2*B/C-2,3)}}};$(window).load(function(){new Movie()});Frame=function(A,B){this.jPtr=A;this.oMovie=B;this.init()};Frame.prototype={init:function(){this.id=+this.jPtr[0].className.match(/(?:^|\s+)f_(\d+)(?:\s+|$)/)[1];this.buttonInit();this.attachEvents()},buttonInit:function(){this.jButton=this.oMovie.getButtonById(this.id);if(this.jButton.is(".current")){this.oMovie.setCurrentFrame(this)}},attachEvents:function(){var A=this;this.jButton.find("span.link").click(function(){if(A.isAllowed()){A.select()}})},select:function(){this.setAsCurrent();this.oMovie.showFrame(this)},setAsCurrent:function(){var A=this.oMovie.getCurrentFrame();if(A){A.deselectButton()}this.selectButton();this.oMovie.setCurrentFrame(this)},getPercentOffset:function(){return(this.id-1)*112},selectButton:function(){this.jButton.addClass("current")},deselectButton:function(){this.jButton.removeClass("current")},isAllowed:function(){return !!((!this.oMovie.getCurrentFrame()||this.oMovie.getCurrentFrame().id!=this.id))}};Rectangle=function(A,B){this.x1=A.x;this.y1=A.y;this.x2=B.x;this.y2=B.y};Rectangle.prototype={belong:function(A,B){return !!(A.between(this.x1,this.x2)&&B.between(this.y1,this.y2))}};Circle=function(A,B){this.x=A.x;this.y=A.y;this.r=B};Circle.prototype={belong:function(A,B){return Math.pow(A-this.x,2)+Math.pow(B-this.y,2)<=Math.pow(this.r,2)}};var ButterflyData={aData:[{id:1,rect:{lt:{x:134,y:135},rb:{x:254,y:255}},circle:{c:{x:134,y:135},r:120}},{id:2,rect:{lt:{x:265,y:135},rb:{x:385,y:255}},circle:{c:{x:385,y:135},r:120}},{id:3,rect:{lt:{x:134,y:268},rb:{x:254,y:388}},circle:{c:{x:134,y:388},r:120}},{id:4,rect:{lt:{x:265,y:265},rb:{x:385,y:388}},circle:{c:{x:385,y:388},r:120}}],getDataById:function(B){var A=null;this.aData.foreach(function(C){if(C.id===B){A=C;return false}});return A}};Butterfly=function(A){this.oMovie=A;this.init()};Butterfly.prototype={ROTATION_DURATION:6,ROTATION_RADIUS:100,ROTATION_CLOSE_ANGLE:0,ROTATION_OPEN_ANGLE:90,init:function(){this.domInit();this.dimensions(true);this.objectsInit();this.enable();this.attachEvents()},domInit:function(){this.jPtr=$("#quick_start");this.jMovieMask=$("#movie_mask")},dimensions:function(A){var B=this,C=function(){B.offset={left:B.jPtr.offset().left,top:B.jPtr.offset().top,width:B.jPtr[0].offsetWidth,height:B.jPtr[0].offsetHeight}};if(A){C()}else{setTimeout(C,50)}},objectsInit:function(){this.quadsInit();this.oDispatcher=new QuadDispatcher(this)},quadsInit:function(){var A=this;this.aQuads=[];this.jPtr.find(".quad").each(function(){A.aQuads.push(new Quad($(this),A))})},attachEvents:function(){var A=this;Hitek.oReflow.attachObserver("reflow",function(){A.dimensions()})},enable:function(){this.bEnabled=true},disable:function(){this.bEnabled=false},isEnabled:function(){return this.bEnabled},getCurrentQuad:function(){return this.oCurrentQuad||null},setCurrentQuad:function(A){this.oCurrentQuad=A},getQuadById:function(B){var A=null;this.eachQuad(function(){if(this.id===B){A=this;return false}});return A},eachQuad:function(A,B){Hitek.each(this.aQuads,A,B)},getRelMouseCoords:function(A){return{x:Hitek.pixelToEm(A.pageX-this.offset.left),y:Hitek.pixelToEm(A.pageY-this.offset.top)}},degreeToRadian:function(A){return A*Math.PI/180},radianToDegree:function(A){return A*180/Math.PI}};Quad=function(B,A){this.constructor.baseConstructor.call(this);this.jPtr=B;this.oButterfly=A;this.init()};Quad.inheritFrom(Observable,{init:function(){this.idsInit();this.domInit();this.dataInit();this.convertDataToEm();this.objectsInit();this.tweenInit()},idsInit:function(){var A=this.jPtr[0].className;this.id=+A.match(/q_(\d+)/)[1];this.iDependedId=+A.match(/depend_(\d+)/)[1]},domInit:function(){this.jText=this.jPtr.find(".text").eq(0);this.jWing=this.oButterfly.jPtr.find("#wings .w_"+this.id).eq(0)},dataInit:function(){this.oData=ButterflyData.getDataById(this.id)},convertDataToEm:function(){this.convertRectangleDataToEm();this.convertCircleDataToEm()},objectsInit:function(){this.oRectangle=new Rectangle(this.oData.rect.lt,this.oData.rect.rb);this.oCircle=new Circle(this.oData.circle.c,this.oData.circle.r)},tweenInit:function(){var A=this;this.twOpen=new Tween(this.jWing,"",EEQ.linear,0,1,this.oButterfly.ROTATION_DURATION);this.twOpen.stop();this.twOpen.onMotionFinished=function(){A.bOpened=true;if(!A.bMouseOver){A.close()}};this.twClose=new Tween(this.jWing,"",EEQ.linear,0,1,this.oButterfly.ROTATION_DURATION);this.twClose.stop();this.twClose.onMotionFinished=function(){A.onCloseFinish()};this.twOpen.onMotionChanged=this.twClose.onMotionChanged=function(B){Hitek.tween.apply(this,[B,function(C,D){A.rotateWing(D)}])};this.jWing.css("width","0%")},rotateWing:function(C){var A=Math.sin(this.oButterfly.degreeToRadian(C));var B=this.oButterfly.ROTATION_RADIUS*A;this.jWing.css("width",Math.round(B)+"%")},open:function(){this.twOpen.props={width:{s:this.getCurrentRotationAngle(),f:this.oButterfly.ROTATION_OPEN_ANGLE}};this.twOpen.duration=this.getAniDuration(this.twOpen.props.width);this.onOpenStart();this.twClose.stop();this.twOpen.play()},close:function(){this.bOpened=false;this.twClose.props={width:{s:this.getCurrentRotationAngle(),f:this.oButterfly.ROTATION_CLOSE_ANGLE}};this.twClose.duration=this.getAniDuration(this.twClose.props.width);this.twOpen.stop();this.twClose.play()},onMouseOver:function(){var A=this;this.bMouseOver=true;this.jPtr.addClass("hover");this.jText.addClass("hover");this.getDependedQuad().jText.addClass("depended_hover");var B=this.oButterfly.getCurrentQuad();if(B&&B.id!==this.id){this.oButterfly.getCurrentQuad().attachObserver("close",this)}else{this.open()}},onMouseOut:function(){var A=this;this.bMouseOver=false;this.jPtr.removeClass("hover");this.jText.removeClass("hover");this.getDependedQuad().jText.removeClass("depended_hover");if(this.oButterfly.getCurrentQuad().id!==this.id){this.oButterfly.getCurrentQuad().detachObserver("close",this)}else{if(A.bOpened){A.close()}}},onOpenStart:function(){[this.jWing,this.oButterfly.jMovieMask].foreach(function(A){A.addClass("ani")});this.oButterfly.setCurrentQuad(this)},onCloseFinish:function(){[this.jWing,this.oButterfly.jMovieMask].foreach(function(A){A.removeClass("ani")});this.oButterfly.setCurrentQuad(null);this.notify("close");this.clearObservers()},update:function(){this.open()},getDependedQuad:function(){if(!this.oDependedQuad){this.oDependedQuad=this.oButterfly.getQuadById(this.iDependedId)}return this.oDependedQuad},getCurrentRotationAngle:function(){var B=Hitek.cssLength(this.jWing[0].style.width).iValue;var A=Math.asin(B/this.oButterfly.ROTATION_RADIUS);return this.oButterfly.radianToDegree(A)},getAniDuration:function(B){var C=Math.abs(B.f-B.s),A=this.oButterfly.ROTATION_OPEN_ANGLE-this.oButterfly.ROTATION_CLOSE_ANGLE;return Math.round(C/A*this.oButterfly.ROTATION_DURATION)||1},belong:function(A,B){return this.oRectangle.belong(A,B)||this.oCircle.belong(A,B)},convertRectangleDataToEm:function(){var A=this.oData.rect;[A.lt,A.rb].foreach(function(B){B.x=Hitek.pixelToNormalEm(B.x);B.y=Hitek.pixelToNormalEm(B.y)})},convertCircleDataToEm:function(){var A=this.oData.circle;A.c.x=Hitek.pixelToNormalEm(A.c.x);A.c.y=Hitek.pixelToNormalEm(A.c.y);A.r=Hitek.pixelToNormalEm(A.r)}});QuadDispatcher=function(A){this.oButterfly=A;this.attachEvents()};QuadDispatcher.prototype={attachEvents:function(){var A=this;$(document).mousemove(function(B){if(A.oButterfly.isEnabled()){return A.mouse(B)}})},mouse:function(A){var B=this.oButterfly.getRelMouseCoords(A);this.oButterfly.eachQuad(function(){if(this.belong(B.x,B.y)){if(!this.bMouseOver){this.onMouseOver()}}else{if(this.bMouseOver){this.onMouseOut()}}})}};