/******************************************************************************
	jquery.transformable.js v0.3
	
	-preliminary support for msie<9.  Problems were different than expected.
		- tested on v 8.06
		- containment isn't correct
		- overflow: visible is not respected (not sure what I can do about that);
		- you'd still be better off using google chrome frame.
	
	- ui.position in draggable callback is available again, but will be the untransformed value
	
	- added option 'sizeIcons', which will attempt to keep icons a fixed size within transformed element.
		default is true unless browser is msie<9, then false.
		to disable: el.transformable('option','sizeIcons',false); 
		or on init el.transformable({sizeIcons: false});
		
	- el.transformable('destroy',true); will, in addition to destroying, reset the transformation.
	
	jquery.transformable.js v0.2.2
	-fixed error when called with no options

	jquery.transformable.js v0.2.2
	- fixed 'containment' option when set from initialization.

	- el.transformable('totalmatrix',true) will return false 
	  if matrix is [1,0,0,1,0,0] (no transform)

	- relativeOffset() now works as advertised.

	- el.transformable('totalmatrix',[true|false],'inverse') will return 
	  inverse matrix of total transform, or [1,0,0,1,0,0] or false if no transform	

	jquery.transformable.js v0.2.1
	
	- fixed the rotateDisabled, skewDisabled and scaleDisabled functions
	  broken in last rev.

	jquery.transformable.js v0.2
	
	- fixed problem with containment after transforms are reset.

	- added el.relativeOffset(rel,{left: distancex, top: distancey})
	  This will place el's left,top at the specified distance from rel's 
	  left,top in rel's coordinate system regardless of el's transformations.

	- recoded and renamed el.transformable('transformation') to el.transformable('totalmatrix');
	  this gives the same as tOffset().totalmatrix without the offset overhead.

	- fixed problem with options and callbacks getting mixed up.  May still need some work
	
	- first stab at parent containment
          use el.transformable({containment: true}) or el.transformable('option','containment',true);
          or individually, ie el.transformable({rotatecontain: true}) or el.transformable('option','rotatecontain',true);

---------------------------------------------------------------------------------
	jquery.transformable.js v0.1
	copyright 2011 Aaron Flin (aaron at flin dot org)
	Dual licensed under the MIT or GPL Version 2 licenses.
	Portions are from jquery.transform.js - Copyright 2011 @louis_remi (With all of my gratitude)
	Also some code copied from jquery-ui and jquery itself, see copyrights therein.
	Requires jquery.transform.js (https://github.com/louisremi/jquery.transform.js)

	Designed to work with jquery-ui resizable and draggable.  jquery-ui required (at least for icons and css)

	Preliminary testing done with:
		jQuery 		v1.5.1
		jQuery-ui	v1.8.11
		firefox 	4, 3.6
		msie		9
		safari(mac)	5.02
		google chrome	10, 8

	Demo:  http://jsfiddle.net/aflin/vbSMy/
	
	Sample Usage:
		$('body').append('<div id="mydiv" style="position: absolute; width:300px; height: 300px; border: 1px black solid;"></div>');
		var el=$('#mydiv');
		el.draggable();
		el.resizable();
		el.transformable();

	Options and Callbacks:
		el.transformable( {
			rotateStart: function(e,ui){},
			rotate:      function(e,ui){},
			rotateStop:  function(e,ui){},
			skewStart:   function(e,ui){},
			skew:        function(e,ui){},
			skewStop:    function(e,ui){},
			skewXStart:   function(e,ui){},
			skewX:        function(e,ui){},
			skewXStop:    function(e,ui){},
			skewYStart:   function(e,ui){},
			skewY:        function(e,ui){},
			skewYStop:    function(e,ui){},
			scaleStart:  function(e,ui){},
			scale:       function(e,ui){},
			scaleStop:   function(e,ui){},
			rotatable:   [true|false],
			skewable:    [true|false],
			scalable:    [true|false]
		});

		- returning false on Start functions will disable the mousemove 
		  bindings and cancel the event
		- returning false on rotate, skew, skewX, skewY or scale will disable the next update		
		
		el.transformable('rotateDisabled') returns the current state
		el.transformable('rotateDisabled',[true|false]) dis/enables rotate
		same for skewDisabled and scaleDisabled

		el.transformable('destroy') should disable, remove icons and 
		binding. - not tested
		
		OFFSET:
		
		If you want to know the offset of the transformed element, use:
			var o=el.tOffset();
		This will return {
					left:	number,  //the furthest left point of element on page 
					right:	number,  // ditto for right
					top:	number,
					bottom: number,
						// position of corners with topleft being the 
						// untransformed topleft corner
					corners:[  {x: topleftx,     y: toplefty}, 
						   {x: toprightx,    y: toprighty},
						   {x: bottomrightx, y: bottomrighty},
						   {x: bottomleftx,  y: bottomlefty}
						],
					center: {x: centerx, y: centery},
						//affine transform matrix of this element
					matrix: [number,number,number,number,number,number],
						//sum off this and parents' matricies
					totalmatrix: [number,number,number,number,number,number],
						//whether this or any parents have transformation
					transformed: bool
				}

		If you want to set your position absolutely on the page, use:
			el.tOffset({left: number, top: number});

		If you do el.tOffset(el.tOffset()), 
		hopefully your div will not move ;-)

		t.untransformedOffset() will get and set the offset left and top as if 
		no transformations are present.
		
		t.offset() will vary depending on browser.
		
		RETRIEVING THE CURRENT TRANSFORMS:
		
		var tr=el.getTransform();
		This will return tr.rotate, tr.skew[0,1], tr.skewx, tr.skewy, 
		tr.scale[0,1], tr.scalex and tr.scaley.
			- the values you put in will unlikely be the values 
			  you get out.  In particular if you skewx and skewy,
			  this will be interpreted as rotating, scaling and 
			  skewx, and skewy will be 0.  This is not my choice, but
			  the choice of the algorithms I pilfered.

		var m=this.matrixToArray() will return the current matrix (same as o.matrix above);

		SETTING A TRANSFORM:
		use el.setTransform(option,val);
		option[,val]:
			[number,number,number,number,number,number]	- set to this matrix
			"matrix(num,num,num,num,num,num)"		- set to this matrix
			'rotate',number					- apply rotation to current matrix
			'skewx',number					- apply skew on x-axis to current
			'skewy',number					- apply skew on y-axis to current
			'scalex',number					- apply scale on x-axis to current
			'scaley',number					- apply scale on y-axis to current
		* again, not everything is fully tested

	Features and Caveats:
		- Draggable containment mostly works

		- Shift key will constrain rotation and skew to 15 deg increments
		  and scale to be proportional.
		  
		- Resize containment does not work properly yet, 
		  you should not enable it if container or element is 
		  transformed.

		- If the element is .resizable() and the handle is in the s-e 
		  position (default), the scale icon will toggle when the
		  resizable icon is double-clicked.
		  
		- This has been developed using google chrome browser.  Transforms are
		  reasonably fast using it but other browsers may be a bit slow.  

		- skewing both x and y to large angles can cause jumpy results.
		- skewing either x or y to large angles results in misalignment 
		  with handle and a jump to a larger angle.
		  Not sure why yet.

		- no real attempt has been made to test on msie less than 9, but a quick look
		  shows there are several problems.  It appears children of transformed div do not
		  inherit parents' transformations.  To do so manually would be computationally expensive.
		  I'd suggest using google chrome frame if msie <9 is necessary.

		- designed to work like a jquery-ui, but doesn't use their model.
		
		- May work without jquery-ui, but you would have to make your own css
		  and icons for handles.

		- this is a preliminary release, not everything has been fully tested.

******************************************************************************/

(function(a){function Q(a){if(!a)return[1,0,0,1,0,0];var b=a[0],c=a[1],d=a[2],e=a[3];var f=b*e-c*d;if(a.length==6){var g=e/f,h=-c/f,i=-d/f,j=b/f;var k=-a[4]*g-a[5]*i,l=-a[4]*h-a[5]*j;return[g,h,i,j,k,l]}return[e/f,-c/f,-d/f,b/f]}function P(a,b){return[a[0]*b[0]+a[1]*b[2],a[0]*b[1]+a[1]*b[3],a[2]*b[0]+a[3]*b[2],a[2]*b[1]+a[3]*b[3],a[4]*b[0]+a[5]*b[2]+b[4],a[4]*b[1]+a[5]*b[3]+b[5]]}function O(b){var c=b.css("transform"),d=b.matrixToArray();var e=a.unmatrix(d);b.attr("data-transform-skewx",e.skew[0]);b.attr("data-transform-skewy",0);b.attr("data-transform-scalex",e.scale[0]);b.attr("data-transform-scaley",e.scale[1]);b.attr("data-transform-rotate",e.rotate);c="matrix("+d[0].toFixed(16)+","+d[1].toFixed(16)+","+d[2].toFixed(16)+","+d[3].toFixed(16)+","+d[4].toFixed(16)+","+d[5].toFixed(16)+")";b.attr("data-transform",c)}function N(a,b){if(b==undefined)b=="top";var c=0;var d={};if(b=="all"){d.top=parseInt(a.css("borderTopWidth")||(a.css("BORDER-TOP")||a.css("border")||"0px").match(/\d+px/));d.bottom=parseInt(a.css("borderBottomWidth")||(a.css("BORDER-BOTTOM")||a.css("border")||"0px").match(/\d+px/));d.left=parseInt(a.css("borderLeftWidth")||(a.css("BORDER-LEFT")||a.css("border")||"0px").match(/\d+px/));d.right=parseInt(a.css("borderRightWidth")||(a.css("BORDER-RIGHT")||a.css("border")||"0px").match(/\d+px/));return d}switch(b){default:case"top":c=a.css("borderTopWidth")||(a.css("BORDER-TOP")||a.css("border")||"0px").match(/\d+px/);break;case"bottom":c=a.css("borderBottomWidth")||(a.css("BORDER-BOTTOM")||a.css("border")||"0px").match(/\d+px/);break;case"left":c=a.css("borderLeftWidth")||(a.css("BORDER-LEFT")||a.css("border")||"0px").match(/\d+px/);break;case"right":c=a.css("borderRightWidth")||(a.css("BORDER-RIGHT")||a.css("border")||"0px").match(/\d+px/);break}return parseInt(c)}function M(a){var b=this[0];var c=jQuery.css(b,"position");if(c==="static"){b.style.position="relative"}var d=jQuery(b),e=d.untransformedOffset();curCSSTop=jQuery.css(b,"top"),curCSSLeft=jQuery.css(b,"left"),calculatePosition=c==="absolute"&&jQuery.inArray("auto",[curCSSTop,curCSSLeft])>-1,props={},curPosition={};var f,g;if(calculatePosition){curPosition=d.position()}f=calculatePosition?curPosition.top:parseInt(curCSSTop,10)||0;g=calculatePosition?curPosition.left:parseInt(curCSSLeft,10)||0;if(a.top!=null){props.top=a.top-e.top+f}if(a.left!=null){props.left=a.left-e.left+g}d.css(props)}function L(a){return~a.indexOf("deg")?parseInt(a,10)*(Math.PI*2/360):~a.indexOf("grad")?parseInt(a,10)*(Math.PI/200):parseFloat(a)}function K(b,c){var d=[],e=[];var f=c;while(f&&!f.is("body")){var g=f.matrixToArray(true);if(g){d.unshift(f);e.unshift(g)}var f=f.parent()}if(!d.length)return b;for(i=0;i<d.length;i++){var h={},j=d[i].untransformedOffset();h.x=parseFloat(j.left)+parseFloat(d[i].outerWidth())/2;h.y=parseFloat(j.top)+parseFloat(d[i].outerHeight())/2;b=a.singleLevelTP(b,h,Q(e[i]))}return b}function J(b,c){var d=c;while(d&&!d.is("body")){var e=d.matrixToArray(true);if(e){var f=d.untransformedOffset();var g={x:f.left+d.outerWidth()/2,y:f.top+d.outerHeight()/2};b=a.singleLevelTP(b,g,e)}d=d.parent()}return b}function I(a){return a.left-81+","+(a.top-151)}function H(a){return parseInt(a.x-81)+","+parseInt(a.y-151)}function G(b,c,d,e){var f,g;if(!c)c=b.parent();if(!d){d=c.tOffset();f=d.corners}else{f=a.extend(true,[],d.corners)}if(!e){e=b.tOffset();g=e.corners}else{g=a.extend(true,[],e.corners)}f=f.concat(g);f=K(f,c);g=f.splice(4,4);var h,i,j,k;for(var l=0;l<4;l++){var m=g[l];if(l){if(m.x<i)i=m.x;if(m.y<h)h=m.y;if(m.x>k)k=m.x;if(m.y>j)j=m.y}else{i=k=m.x;h=j=m.y}}if(i>f[0].x&&k<f[1].x&&h>f[0].y&&j<f[3].y)return true;return false}function D(b){b.stopImmediatePropagation();a(document).unbind("mousemove.transformable");a(document).unbind("mouseup.transformable");var c=k.self.data("transformable-opts");if(c.sizeIcons)x(k.self);if(typeof c.rotateStop=="function"){c.rotateStop.call(k.self,b,k)}var d=k.self.offset();k.self.removeClass("transformable-rotating");return false}function C(a){a.stopImmediatePropagation();var c=Math.atan2(a.pageY-k.center.y,a.pageX-k.center.x);k.angle.rad=k.direction*c-k.zeroAngle;while(k.angle.rad<-Math.PI)k.angle.rad+=d;while(k.angle.rad>=Math.PI)k.angle.rad-=d;if(a.shiftKey){var e;e=k.angle.rad%g;k.angle.rad-=e;if(e>h){k.angle.rad+=g}}k.angle.deg=Math.round(k.angle.rad*18e5/Math.PI)/1e4;while(k.angle.deg>180)k.angle.deg-=360;while(k.angle.deg<-180)k.angle.deg+=360;var f=true;if(typeof b.rotate=="function"){f=b.rotate.call(k.self,a,k)}var i=k.self.attr("data-transform-rotate");if(!(f===false))k.self.setTransform("rotate",k.angle.rad);else return false;if(b.containrotate&&!G(k.self,k.parent,k.parentOffset)){k.self.setTransform("rotate",i)}return false}function B(c){c.stopImmediatePropagation();k={};var d=a(this);var e=k.self=d.parent();b=e.data("transformable-opts");var f=e.tOffset();k.parent=e.parent();k.parentOffset=k.parent.tOffset();var g=a.unmatrix(k.parentOffset.totalmatrix);if(g.scale[0]*g.scale[1]<0)k.direction=-1;else k.direction=1;k.startX=c.pageX;k.startY=c.pageY;k.center=f.center;var h=e.getTransform().rotate;if(!h)h=0;k.initialAngle={rad:h,deg:h*j};k.angle={rad:h,deg:h*j};k.zeroAngle=k.direction*Math.atan2(k.startY-k.center.y,k.startX-k.center.x)-k.initialAngle.rad;var i=true;if(typeof b.rotateStart=="function"){i=b.rotateStart.call(k.self,c,k)}if(!(i===false)){a(document).bind("mousemove.transformable",C);a(document).bind("mouseup.transformable",D);k.self.addClass("transformable-rotating")}return false}function A(b){b.stopImmediatePropagation();a(document).unbind("mousemove.transformable");a(document).unbind("mouseup.transformable");var c=k.self.data("transformable-opts");var d=k.self.offset();k.self.removeClass("transformable-skewing");if(c.sizeIcons)x(k.self);if(typeof c.skewStop=="function"){c.skewStop.call(k.self,b,k)}if(typeof c.skewYStop=="function"&&k.vert){c.skewYStop.call(k.self,b,k)}if(typeof c.skewXStop=="function"&&!k.vert){c.skewXStop.call(k.self,b,k)}k.self.removeClass("transformable-skewing");return false}function z(a){a.stopImmediatePropagation();var c=Math.atan2(a.pageY-k.center.y,a.pageX-k.center.x);k.angle.rad=k.direction*c-k.zeroAngle;while(k.angle.rad<-Math.PI)k.angle.rad+=d;while(k.angle.rad>=Math.PI)k.angle.rad-=d;if(a.shiftKey){var e;e=k.angle.rad%g;k.angle.rad-=e;if(e>h){k.angle.rad+=g}}k.angle.deg=Math.round(k.angle.rad*18e5/Math.PI)/1e4;while(k.angle.deg>180)k.angle.deg-=360;while(k.angle.deg<-180)k.angle.deg+=360;var f=true,i=true;ret=true;if(typeof b.skew=="function"){ret=b.skew.call(k.self,a,k)}if(typeof b.skewY=="function"&&k.vert){i=b.skewY.call(k.self,a,k)}if(typeof b.skewX=="function"&&!k.vert){f=b.skewX.call(k.self,a,k)}var j=k.vert?k.self.attr("data-transform-skewy"):k.self.attr("data-transform-skewx");if(!(ret===false)){if(k.vert&&!(i===false))k.self.setTransform("skewy",k.angle.rad);else if(!(f===false))k.self.setTransform("skewx",-1*k.angle.rad);else return false}if(b.containskew&&!G(k.self,k.parent,k.parentOffset)){if(k.vert){k.self.setTransform("skewy",j)}else{k.self.setTransform("skewx",j)}}return false}function y(c){c.stopImmediatePropagation();k={};var d=a(this);if(d.hasClass("transformable-handle-skew-v"))k.vert=1;else k.vert=0;var e=k.self=d.parent();b=e.data("transformable-opts");var f=k.vert?e.getTransform(true).skew[k.vert]:-e.getTransform(true).skew[k.vert];var g=e.tOffset();k.parent=e.parent();k.parentOffset=k.parent.tOffset();var h=a.unmatrix(k.parentOffset.totalmatrix);if(h.scale[0]*h.scale[1]<0)k.direction=-1;else k.direction=1;if(!f)f=0;k.startX=c.pageX;k.startY=c.pageY;k.offset=g;k.center=g.center;k.initialAngle={rad:f,deg:f*j};k.angle={rad:f,deg:f*j};k.zeroAngle=k.direction*Math.atan2(k.startY-k.center.y,k.startX-k.center.x)-k.initialAngle.rad;var i=true,l=true,m=true;if(typeof b.skewStart=="function"){m=b.skewStart.call(k.self,c,k)}if(typeof b.skewYStart=="function"&&k.vert){l=b.skewYStart.call(k.self,c,k)}if(typeof b.skewXStart=="function"&&!k.vert){i=b.skewXtart.call(k.self,c,k)}if(!(m===false)&&(k.vert&&!(l===false)||!k.vert&&!(i===false))){a(document).bind("mousemove.transformable",z);a(document).bind("mouseup.transformable",A);k.self.addClass("transformable-skewing")}return false}function x(b){b.find(".ui-icon").each(function(){var b=a(this),c;b.transformable("reset");c=a.unmatrix(b.transformable("totalmatrix",false,"inverse"));b.setTransform("scalex",c.scale[0]);b.setTransform("scaley",c.scale[1]);if(a.support.matrixFilter){if(b.hasClass("transformable-handle-skew-h"))b.css({left:"50%",top:"1px"});if(b.hasClass("transformable-handle-skew-v"))b.css({top:"50%",right:"1px",left:"auto"});if(b.hasClass("transformable-handle-rotate"))b.css({top:"1px",right:"1px",left:"auto"});if(b.hasClass("transformable-handle-scale"))b.css({bottom:"1px",right:"1px",left:"auto",top:"auto"});if(b.hasClass("ui-resizable-se"))b.css({bottom:"1px",right:"1px",left:"auto",top:"auto"})}})}function w(b){b.stopImmediatePropagation();a(document).unbind("mousemove.transformable");a(document).unbind("mouseup.transformable");var c=k.self.data("transformable-opts");var d=k.self.offset();k.self.removeClass("transformable-scaling");if(c.sizeIcons)x(k.self);if(typeof c.scaleStop=="function"){c.scaleStop.call(k.self,b,k)}return false}function v(c){c.stopImmediatePropagation();var d=c.pageX,e=c.pageY;if(k.offset.transformed){var f=a.singleLevelTP([{x:d,y:e}],{x:k.startX,y:k.startY},Q(k.offset.totalmatrix));d=f[0].x;e=f[0].y}if(c.shiftKey)d=e;if(!k.sx){k.sx=d;k.sy=e}k.scalex=k.startScaleX*(1+k.startScaleX*(d-k.sx)/k.halfStartWidth);k.scaley=k.startScaleY*(1+k.startScaleY*(e-k.sy)/k.halfStartHeight);var g=true;var h=k.self.attr("data-transform-scaley");var i=k.self.attr("data-transform-scalex");if(typeof b.scale=="function"){g=b.scale.call(k.self,c,k)}if(!(g===false)){k.self.setTransform("scalex",k.scalex);k.self.setTransform("scaley",k.scaley)}if(b.containscale&&!G(k.self,k.parent,k.parentOffset)){k.self.setTransform("scalex",i);k.self.setTransform("scaley",h)}return false}function u(c){c.stopImmediatePropagation();k={};var d=a(this);var e=k.self=d.parent();b=e.data("transformable-opts");var f=k.self.getTransform(true);k.startScaleX=f.scale[0];k.startScaleY=f.scale[1];k.startX=c.pageX;k.startY=c.pageY;var g=k.offset=e.tOffset();k.parent=e.parent();k.parentOffset=k.parent.tOffset();var h=g.corners[0].y-g.corners[1].y;var i=g.corners[0].x-g.corners[1].x;k.startWidth=Math.sqrt(h*h+i*i);if(f.scale[0]<0)k.startWidth=-k.startWidth;k.halfStartWidth=k.startWidth/2;h=g.corners[0].y-g.corners[3].y;i=g.corners[0].x-g.corners[3].x;k.startHeight=Math.sqrt(h*h+i*i);if(f.scale[1]<0)k.startHeight=-k.startHeight;k.halfStartHeight=k.startHeight/2;var j=true;if(typeof b.scaleStart=="function"){j=b.scaleStart.call(k.self,c,k)}if(!(j===false)){a(document).bind("mousemove.transformable",v);a(document).bind("mouseup.transformable",w);k.self.addClass("transformable-scaling")}return false}function t(a){a.children(".transformable-handle-rotate").remove()}function s(a){a.append('<div class="transformable-handle-rotate transformable-handle ui-icon ui-icon-arrowrefresh-1-s" style="right: 1px; top: 1px; position: absolute; z-index: 2000;"></div>');if(a.attr("data-transform-rotate"))a.setTransform("rotate",a.attr("data-transform-rotate"));var b=a.children(".transformable-handle-rotate");b.mousedown(B)}function r(a){a.children(".transformable-handle-skew").remove()}function q(a){if(a.attr("data-transform-skewx"))a.setTransform("skewx",a.attr("data-transform-skewx"));if(a.attr("data-transform-skewy"))a.setTransform("skewy",a.attr("data-transform-skewy"));a.append('<div class="transformable-handle-skew-h transformable-handle-skew transformable-handle ui-icon ui-icon-arrow-2-e-w" style="left: 50%; top: 1px; position: absolute; z-index: 2000;"></div>');a.append('<div class="transformable-handle-skew-v transformable-handle-skew transformable-handle ui-icon ui-icon-arrow-2-n-s" style="right: 1px; top: 50%; position: absolute; z-index: 2000;"></div>');var b=a.children(".transformable-handle-skew");b.mousedown(y)}function p(b){b.stopImmediatePropagation();var c=a(this);var d=c.parent();if(c.hasClass("ui-resizable-se")){if(d.children(".transformable-handle-scale").length)d.children(".transformable-handle-scale").removeClass("transformable-disabled").show();else{d.append('<div class="transformable-handle-scale transformable-handle ui-icon ui-icon-search" style="right: 1px; bottom: 1px; position: absolute; z-index: 2000;"></div>');d.children(".transformable-handle-scale").bind("dblclick.transformable",p).bind("mousedown.scalable",u)}c.addClass("transformable-disabled").hide()}else{d.children(".transformable-handle-scale").addClass("transformable-disabled").hide();d.children(".ui-resizable-se").removeClass("transformable-disabled").show().bind("dblclick.transformable",p)}return false}function o(a){var b=a.children(".transformable-handle-scale");b.remove();b=a.children(".ui-resizable-se");b.unbind(".transformable")}function n(a){var b=a.children(".ui-resizable-se");b.unbind(".transformable");if(b.length){b.bind("dblclick.transformable",p)}else{a.append('<div class="transformable-handle-scale transformable-handle ui-icon ui-icon-search" style="right: 1px; bottom: 1px; position: absolute; z-index: 2000;"></div>');b=a.children(".transformable-handle-scale");b.bind("mousedown.scalable",u)}}var b={};var d=2*Math.PI;var e=Math.PI/4;var f=Math.PI/2;var g=Math.PI/12;var h=Math.PI/24;var j=180/Math.PI;var k={};var l={option:function(c,d){b=this.eq(0).data("transformable-opts");if(b==undefined)return undefined;switch(c){case"sizeIcons":{if(d===undefined){return b.sizeIcons}else{return this.each(function(){var c=a(this);b=c.data("transformable-opts");b.sizeIcons=d;c.data("transformable-opts",b)})}}break;case"rotateDisabled":{if(d===undefined){return b.rotatable}else if(d===false){return this.each(function(){var c=a(this);b=c.data("transformable-opts");t(c);s(c);b.rotatable=true;c.data("transformable-opts",b)})}else if(d===true){return this.each(function(){var c=a(this);b=c.data("transformable-opts");t(c);b.rotatable=false;c.data("transformable-opts",b)})}}break;case"skewDisabled":{if(d===undefined){return b.skew}else if(d===false){return this.each(function(){var c=a(this);b=c.data("transformable-opts");r(c);q(c);b.skew=true;c.data("transformable-opts",b)})}else if(d===true){return this.each(function(){var c=a(this);b=c.data("transformable-opts");r(c);b.skew=false;c.data("transformable-opts",b)})}}break;case"scaleDisabled":{if(d===undefined){return b.scale}else if(d===false){return this.each(function(){var c=a(this);b=c.data("transformable-opts");o(c);n(c);b.scale=true;c.data("transformable-opts",b)})}else if(d===true){return this.each(function(){var c=a(this);b=c.data("transformable-opts");o(c);b.scale=false;c.data("transformable-opts",b)})}}break;case"containrotate":case"containscale":case"containskew":{if(d===undefined){return b[c]}else if(d===false){return this.each(function(){var d=a(this);b=d.data("transformable-opts");b[c]=false;d.data("transformable-opts",b)})}else if(d===true){return this.each(function(){var d=a(this);b=d.data("transformable-opts");b[c]=true;d.data("transformable-opts",b)})}}break;case"containment":{if(d===undefined){return{rotate:b.containrotate,scale:b.containscale,skew:b.containskew}}else if(d===false){return this.each(function(){var c=a(this);b=c.data("transformable-opts");b.containscale=false;b.containskew=false;b.containrotate=false;b.containment=false;c.data("transformable-opts",b)})}else if(d===true||d=="parent"){return this.each(function(){var c=a(this);b=c.data("transformable-opts");b.containrotate=true;b.containskew=true;b.containscale=true;b.containment=true;c.data("transformable-opts",b)})}}break}},destroy:function(b){return this.each(function(){var c=a(this);c.find(".transformable-handle").remove();c.removeData("transformable-opts");c.removeAttr("data-transform-scalex");c.removeAttr("data-transform-scaley");c.removeAttr("data-transform-skewx");c.removeAttr("data-transform-skewy");c.removeAttr("data-transform-rotate");c.removeAttr("data-transform");c.removeData("transformable-opts");c.unbind(".transformable");if(b===true)c.css("transform","matrix(1,0,0,1,0,0)")})},reset:function(){return this.each(function(){var b=a(this);b.attr("data-transform-scalex",1);b.attr("data-transform-scaley",1);b.attr("data-transform-skewx",0);b.attr("data-transform-skewy",0);b.attr("data-transform-rotate",0);b.attr("data-transform","matrix(1,0,0,1,0,0)");b.css("transform","matrix(1,0,0,1,0,0)");x(b)})},totalmatrix:function(a,b){var c=this.eq(0);var d=[1,0,0,1,0,0];var e=false;while(c&&!c.is("body")){var f=c.matrixToArray(true);if(f){d=P(d,f);e=true}c=c.parent()}if(b=="inverse")d=Q(d);if(!a||e)return d;else return false},offset:function(a){return jQuery.fn.tOffset.call(this,a)}};jQuery.fn.transformable=function(b,c,d){if(b&&typeof b!="object"){var e=l[b];if(e)return e.call(this,c,d)}if(!b)b={};if(b.containment===true||b.containment=="parent"){b.containscale=b.containskew=b.containrotate=true}var f={};return this.each(function(){var c=a(this).attr("id");var d=a(this);if(a.support.matrixFilter)a.fn.transformable.defaults.sizeIcons=false;var e=a.extend({},a.fn.transformable.defaults,b);d.data("transformable-opts",e);d.children(".transformable-handle").remove();if(e.rotatable)s(d);if(e.skewable)q(d);if(e.scalable)n(d);var f=a(this).css("transform");if(f!=undefined&&f!="none"&&f!="matrix(1,0,0,1,0,0)"&&f!=""){a(this).attr("data-transform",f);a(this).getTransform(true)}d.bind("drag.transformable",function(a,b){jQuery.fn.transformable.drag.call(d,a,b)});d.bind("dragstart.transformable",function(a,b){jQuery.fn.transformable.dragstart.call(d,a,b)});d.bind("resize.transformable",function(a,b){jQuery.fn.transformable.resize.call(d,a,b)});d.bind("resizecreate.transformable",function(b,c){var d=a(this);if(d.data("transformable-opts").scalable){o(d);n(d)}})})};jQuery.fn.setTransform=function(b,c){return this.each(function(){var d=a(this),e=d.getTransform(),f=false,g,h,i,j;if(a.support.matrixFilter){g=d.css("top");h=d.css("left");i=d.css("right");j=d.css("bottom")}if(b=="skewx"){e.skew[0]=c;d.attr("data-transform-skewx",e.skew[0]);f=true}else if(b=="skewy"){e.skew[1]=c;d.attr("data-transform-skewy",e.skew[1])}else if(b=="rotate"){e.rotate=c;d.attr("data-transform-rotate",e.rotate)}else if(b=="scalex"){e.scalex=c;d.attr("data-transform-scalex",e.scalex)}else if(b=="scaley"){e.scaley=c;d.attr("data-transform-scaley",e.scaley)}else if(typeof b=="object"){var k="matrix("+b[0].toFixed(16)+","+b[1].toFixed(16)+","+b[2].toFixed(16)+","+b[3].toFixed(16)+","+b[4].toFixed(16)+","+b[5].toFixed(16)+")";d.css("transform",k);d.attr("data-transform",k);if(b[0]!=1||b[1]!=0||b[2]!=0||b[3]!=1||b[4]!=0||b[5]!=0){d.addClass("istransformed")}else{d.removeClass("istransformed")}if(a.support.matrixFilter){if(j!=""&&j!="auto"&&(g==""||g=="0px"))d.css("bottom",j);else d.css("top",g);if(i!=""&&i!="auto"&&(h==""||h=="0px"))d.css("right",i);else d.css("left",h)}return}else{var l=b.split(")");if(!l.length)return;for(var m=0;m<l.length;m++){var n=l[m].split("(");var o=a.trim(n[0]).toLowerCase();var p=n[1];d.attr("data-transform-"+o,p)}b=jQuery.fn.transformable.matrix(b);var k="matrix("+b[0].toFixed(16)+","+b[1].toFixed(16)+","+b[2].toFixed(16)+","+b[3].toFixed(16)+","+b[4].toFixed(16)+","+b[5].toFixed(16)+")";d.css("transform",k);d.attr("data-transform",k);if(b[0]!=1||b[1]!=0||b[2]!=0||b[3]!=1||b[4]!=0||b[5]!=0){d.addClass("istransformed")}else{d.removeClass("istransformed")}if(a.support.matrixFilter){if(j!=""&&j!="auto"&&(g==""||g=="0px"))d.css("bottom",j);else d.css("top",g);if(i!=""&&i!="auto"&&(h==""||h=="0px"))d.css("right",i);else d.css("left",h)}return}if(e.rotate==0&&e.skewy==0&&e.skewx==0&&e.scaley==1&&e.scalex==1)d.removeClass("istransformed");else d.addClass("istransformed");if(f)b=jQuery.fn.transformable.matrix("rotate("+e.rotate+") skewY("+e.skew[1]+") skewX("+e.skew[0]+") scaleY("+e.scaley+") scaleX("+e.scalex+")");else b=jQuery.fn.transformable.matrix("rotate("+e.rotate+") skewX("+e.skew[0]+") skewY("+e.skew[1]+") scaleY("+e.scaley+") scaleX("+e.scalex+")");var k="matrix("+b[0].toFixed(16)+","+b[1].toFixed(16)+","+b[2].toFixed(16)+","+b[3].toFixed(16)+","+b[4].toFixed(16)+","+b[5].toFixed(16)+")";d.css("transform",k);d.attr("data-transform",k);if(a.support.matrixFilter){if(j!=""&&j!="auto"&&(g==""||g=="0px"))d.css("bottom",j);else d.css("top",g);if(i!=""&&i!="auto"&&(h==""||h=="0px"))d.css("right",i);else d.css("left",h)}})};jQuery.fn.getTransform=function(b){var c=this.eq(0),d;if(b){d=a.unmatrix(c.matrixToArray());d.skewy=d.skew[1];d.skewx=d.skew[0];d.scalex=d.scale[0];d.scaley=d.scale[1];c.attr("data-transform-scalex",d.scalex);c.attr("data-transform-scaley",d.scaley);c.attr("data-transform-skewx",d.skewx);c.attr("data-transform-skewy",d.skewy);c.attr("data-transform-rotate",d.rotate)}else{d={};d.skewx=parseFloat(c.attr("data-transform-skewx"))||0;d.skewy=parseFloat(c.attr("data-transform-skewy"))||0;d.rotate=parseFloat(c.attr("data-transform-rotate"))||0;d.scalex=parseFloat(c.attr("data-transform-scalex"))||1;d.scaley=parseFloat(c.attr("data-transform-scaley"))||1;d.skew=[d.skewx,d.skewy];d.scale=[d.scalex,d.scaley]}return d};var E=jQuery.ui.resizable.prototype._mouseStart;jQuery.ui.resizable.prototype._mouseStart=function(b){var c=this.element.tOffset();var d=this.options.containment;if(d=="parent")d=this.element.parent();else d=a(d);if(d[0]==this.element.parent()[0]&&c.transformed){this.element.data("parentcontained",true);this.element.data("parentoffset",this.element.parent().tOffset())}else if(this.element.data("parentcontained")){this.element.removeData("parentcontained");this.element.removeData("parentoffset")}this.element.data("startoff",this.element.tOffset());E.call(this,b)};var F=jQuery.ui.resizable.prototype._mouseDrag;jQuery.ui.resizable.prototype._mouseDrag=function(b){var c,d,e,f=this.originalMousePosition,g=this.element.data("parentcontained");var e=this.element.data("startoff");var h=[{x:f.left,y:f.top}];if(e.transformed)h=a.singleLevelTP(h,{x:b.pageX,y:b.pageY},Q(e.totalmatrix));this.originalMousePosition={left:h[0].x,top:h[0].y};if(g){e=this.options.containment;this.options.containment=false;c=this.element.width();d=this.element.height()}F.call(this,b);if(g){this.options.containment=e;if(this.element.data("resizeoutofbounds")){this.element.width(c);this.element.height(d);var i=this.element.data("startoff");var j=this.element.tOffset();var k={left:i.corners[0].x+(j.left-j.corners[0].x),top:i.corners[0].y+(j.top-j.corners[0].y)};this.element.tOffset(k)}}this.originalMousePosition=f};jQuery.fn.transformable.resize=function(b,c){b.stopPropagation();var d=a(this);var e=d.data("startoff");var f=d.tOffset();var g={left:e.corners[0].x+(f.left-f.corners[0].x),top:e.corners[0].y+(f.top-f.corners[0].y)};d.tOffset(g);if(!G(d,d.parent(),d.data("parentoffset"))){d.data("resizeoutofbounds",true)}else d.removeData("resizeoutofbounds")};jQuery.fn.transformable.dragstart=function(b,d){b.stopPropagation();var e=a(this);var f=e.tOffset();if(!f.transformed){e.removeData("startoff");return}e.data("startoff",f);e.data("mousepos",{x:b.pageX,y:b.pageY});e.removeData("transformable-dragrange");var g=e.draggable("option","containment");if(g=="parent")g=e.parent();if(typeof c!="array"&&(g==e.parent()[0]||g[0]==e.parent()[0])){g=a(g);c=g.tOffset();e.data("parentoff",c);var h=c.corners;var i=e.tOffset();var j=i.corners;h=h.concat(j);h.push({x:b.pageX,y:b.pageY});h=K(h,g);e.data("umousepos",h.pop());j=h.splice(4,4);var k,l,m,n;for(var o=0;o<4;o++){var p=j[o];if(o){if(p.x<l)l=p.x;if(p.y<k)k=p.y;if(p.x>n)n=p.x;if(p.y>m)m=p.y}else{l=n=p.x;k=m=p.y}}var q={};q.tl={x:l,y:k};q.parenttl=h[0];q.r=h[1].x-N(g,"right")-n;q.l=l-(h[0].x+N(g,"left"));q.t=k-(h[0].y+N(g,"top"));q.b=h[3].y-N(g,"bottom")-m;e.data("transformable-dragrange",q)}e.data("dragstarted",1)};jQuery.ui.draggable.prototype._mouseDrag=function(b,c){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===false){this._mouseUp({});return false}this.position=d.position}if(!this.element.data("startoff")){if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager)a.ui.ddmanager.drag(this,b);return false};if(a.browser.msie&&a.browser.version<9)a.extend(a.ui.draggable.prototype,function(a){return{_mouseCapture:function(b){var c=a.call(this,b);if(c)b.stopPropagation();return c}}}(a.ui.draggable.prototype["_mouseCapture"]));jQuery.fn.transformable.drag=function(b,c){b.stopPropagation();var d=a(this);var e=d.data("startoff");if(!e)return;var f=d.data("mousepos");if(d.data("dragstarted")){d.tOffset(e);d.removeData("dragstarted")}var g=d.data("transformable-dragrange");var h;if(g){var i=d.data("parentoff");var j=d.data("umousepos");var k=K([{x:b.pageX,y:b.pageY}],d.parent());h={x:k[0].x-j.x,y:k[0].y-j.y};b.pageX=k[0].x;b.pageY=k[0].y;if(h.x>g.r){b.pageX=g.r+j.x}if(h.x<-g.l){b.pageX=j.x-g.l}if(h.y>g.b){b.pageY=j.y+g.b}if(h.y<-g.t){b.pageY=j.y-g.t}k=J([{x:b.pageX,y:b.pageY}],d.parent());h={x:k[0].x-f.x,y:k[0].y-f.y}}else{h={x:b.pageX-f.x,y:b.pageY-f.y}}d.tOffset({left:e.left+h.x,top:e.top+h.y});c.delta=h};jQuery.fn.relativeOffset=function(b,c){if(!b.length||!c)return this;var d=b.untransformedOffset();var e=[{x:d.left+c.left,y:d.top+c.top}];e=J(e,b);return this.each(function(){var b=a(this);b.tOffset({left:e[0].x,top:e[0].y},true)})};jQuery.fn.tOffset=function(b,c){if(b){return this.each(function(){var d=a(this);var e=d.tOffset();var f=d.untransformedOffset();var g=[{x:f.left,y:f.top}];var h=d.parent();g=J(g,h);var i=g[0].x-(c?e.corners[0].x:e.left);var j=g[0].y-(c?e.corners[0].y:e.top);var k=[{x:b.left+i,y:b.top+j}];k=K(k,d.parent());d.untransformedOffset({left:k[0].x,top:k[0].y})})}else{var d=this.eq(0);var e;var f=d.untransformedOffset();if(d.is("body")){f.totalmatrix=[1,0,0,1,0,0];f.matrix=[1,0,0,1,0,0];f.bottom=f.top+d.height();f.right=f.left+d.width();f.center={x:(f.left+f.right)/2,y:(f.top+f.bottom)/2};f.corners=[{x:f.left,y:f.top},{x:f.right,y:f.top},{x:f.right,y:f.bottom},{x:f.left,y:f.bottom}];f.transformed=false;return f}var g={left:f.left,top:f.top};var h={},i=d.outerHeight(),j=d.outerWidth();h.x=f.left+j/2;h.y=f.top+i/2;var k=[{x:f.left,y:f.top},{x:f.left+j,y:f.top},{x:f.left+j,y:f.top+i},{x:f.left,y:f.top+i}];var l=d.matrixToArray(true);if(a.browser.msie&&a.browser.version<9){l[4]=0;l[5]=0}if(l)k=a.singleLevelTP(k,h,l);else l=[1,0,0,1,0,0];var m=l;e=d.parent();while(e&&!e.is("body")){var n=e.matrixToArray(true);if(n){var o=e.untransformedOffset();var p={x:o.left+e.outerWidth()/2,y:o.top+e.outerHeight()/2};k=a.singleLevelTP(k,p,n);l=P(l,n)}e=e.parent()}for(var q=0;q<k.length;q++){var r=k[q];if(q==0){f.top=f.bottom=r.y;f.left=f.right=r.x}else{if(r.y>f.bottom)f.bottom=r.y;if(r.y<f.top)f.top=r.y;if(r.x>f.right)f.right=r.x;if(r.x<f.left)f.left=r.x}}f.center={x:(f.left+f.right)/2,y:(f.top+f.bottom)/2};f.corners=k;f.unrotated=g;f.matrix=m;f.totalmatrix=l;if(a.browser.msie&&a.browser.version<9){l[4]=0;l[5]=0;m[4]=0;m[5]=0}if(l[0]==1&&l[1]==0&&l[2]==0&&l[3]==1&&l[4]==0&&l[5]==0)f.transformed=false;else f.transformed=true;if(m[0]==1&&m[1]==0&&m[2]==0&&m[3]==1&&m[4]==0&&m[5]==0)d.removeClass("istransformed");else d.addClass("istransformed");return f}};jQuery.singleLevelTP=function(a,b,c){if(c===false)return a;var d;if(typeof c!="object")d=jQuery.fn.transformable.matrix(c);else d=c;for(var e=0;e<a.length;e++){var f=a[e];var g=f.x-b.x;var h=f.y-b.y;f.x=b.x+d[0]*g+d[2]*h+d[4];f.y=b.y+d[1]*g+d[3]*h+d[5]}return a};jQuery.fn.transformable.matrix=function(b,c){b=b.split(")");var d=a.trim,e=b.length-1,f,g,h,i=c?c[0]:1,j=c?c[1]:0,k=c?c[2]:0,l=c?c[3]:1,m,n,o,p,q,r,s=c?c[4]:0,t=c?c[5]:0;while(e--){f=b[e].split("(");g=d(f[0]);h=f[1];m=n=o=p=0;switch(g){case"translateX":s+=parseInt(h,10);continue;case"translateY":t+=parseInt(h,10);continue;case"translate":h=h.split(",");s+=parseInt(h[0],10);t+=parseInt(h[1]||0,10);continue;case"rotate":h=L(h);m=Math.cos(h);n=Math.sin(h);o=-Math.sin(h);p=Math.cos(h);break;case"scaleX":m=h;p=1;break;case"scaleY":m=1;p=h;break;case"scale":h=h.split(",");m=h[0];p=h.length>1?h[1]:h[0];break;case"skewX":m=p=1;o=Math.tan(L(h));break;case"skewY":m=p=1;h=L(h);n=Math.tan(h);break;case"skew":m=p=1;h=h.split(",");o=Math.tan(L(h[0]));n=Math.tan(L(h[1]||0));break;case"matrix":h=h.split(",");m=+h[0];n=+h[1];o=+h[2];p=+h[3];s+=parseInt(h[4],10);t+=parseInt(h[5],10)}q=i*m+j*o;j=i*n+j*p;r=k*m+l*o;l=k*n+l*p;i=q;k=r}return[i,j,k,l,s,t]};jQuery.fn.untransformedOffset=function(b){var c=this.eq(0);a("body").append("<div id='eraseme' style='position: absolute; opacity: 0.0; filter: alpha(opacity = 0); top:100px; left:100px; width: 100px;'></div>'");a("#eraseme").setTransform("rotate(1.0)");var d=a("#eraseme").position();var e=parseInt(a("#eraseme").css("top"));a("#eraseme").remove();if(isNaN(e))e=0;if(d.top!=e){jQuery.fn.untransformedOffset=jQuery.fn.transformable.offsetNoGetBounds;return jQuery.fn.transformable.offsetNoGetBounds.call(c)}else{jQuery.fn.untransformedOffset=jQuery.fn.offset;return c.offset()}};jQuery.fn.transformable.offsetNoGetBounds=function(b){var c=this[0];if(b){return this.each(function(c){M.call(a(this),b,c)})}if(!c||!c.ownerDocument){return null}if(c===c.ownerDocument.body){return jQuery.offset.bodyOffset(c)}jQuery.offset.initialize();var d,e=c.offsetParent,f=c,g=c.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(c,null):c.currentStyle,l=c.offsetTop,m=c.offsetLeft;while((c=c.parentNode)&&c!==i&&c!==h){if(jQuery.offset.supportsFixedPosition&&k.position==="fixed"){break}d=j?j.getComputedStyle(c,null):c.currentStyle;l-=c.scrollTop;m-=c.scrollLeft;if(c===e){l+=c.offsetTop;m+=c.offsetLeft;if(jQuery.offset.doesNotAddBorder&&!(jQuery.offset.doesAddBorderForTableAndCells&&rtable.test(c.nodeName))){l+=parseFloat(d.borderTopWidth)||0;m+=parseFloat(d.borderLeftWidth)||0}f=e;e=c.offsetParent}if(jQuery.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){l+=parseFloat(d.borderTopWidth)||0;m+=parseFloat(d.borderLeftWidth)||0}k=d}if(k.position==="relative"||k.position==="static"){l+=i.offsetTop;m+=i.offsetLeft}if(jQuery.offset.supportsFixedPosition&&k.position==="fixed"){l+=Math.max(h.scrollTop,i.scrollTop);m+=Math.max(h.scrollLeft,i.scrollLeft)}return{top:l,left:m}};jQuery.unmatrix=function(a){var b,c,d,e=a[0],f=a[1],g=a[2],h=a[3];if(e*h-f*g){b=Math.sqrt(e*e+f*f);e/=b;f/=b;d=e*g+f*h;g-=e*d;h-=f*d;c=Math.sqrt(g*g+h*h);g/=c;h/=c;d/=c;var i=e;var j=f;if(e<0&&h>0){b=-b;e=-e;d=-d}if(h<0&&i>0){c=-c;f=-f;d=-d}if(i*h<j*g)f=-f}else{rotate=b=c=d=0}return{translate:[+a[4],+a[5]],rotate:Math.atan2(f,e),scale:[b,c],skew:[d,0]}};jQuery.fn.matrixToArray=function(b){if(this.eq(0).is("body"))return[1,0,0,1,0,0];var c=[1,0,0,1,0,0],d=this.eq(0).css("transform");if(d!=undefined&&d!="none"&&d!="matrix(1,0,0,1,0,0)"&&d!=""){m=d.match(/[\-\d\.]+/g);if(m&&m!=null)for(var e=0;e<m.length;e++)m[e]=parseFloat(m[e]);else return c;if(a.browser.msie&&a.browser.version<9){m[4]=0;m[5]=0}}else if(b)return false;else return c;return m};a.fn.transformable.defaults={rotatable:true,skewable:true,scalable:true,containrotate:false,containskew:false,containscale:false,containment:false,sizeIcons:true}})(jQuery)
