+ var image = $('img', element).attr('unselectable', 'on');
+ var origin = {};
+ var imageOrigin = {};
+ var zoomFactor = 1;
+
+ $('.zoom-in', element).click(function() {
+ zoomFactor = Math.min(2, zoomFactor + 0.2);
+ zoom();
+ });
+ $('.zoom-out', element).click(function() {
+ zoomFactor = Math.max(0.2, zoomFactor - 0.2);
+ zoom();
+ });
+ $('.change-gallery', element).click(function() {
+ $('.chosen-gallery').val($('#document-meta .gallery').html() || STATIC_URL + 'gallery/');
+ $('.gallery-image').animate({top: 53}, 200);
+ $('.chosen-gallery').focus();
+ });
+ $('.change-gallery-ok', element).click(function() {
+ if ($('#document-meta .gallery').length == 0) {
+ $('<div class="gallery"></div>').appendTo('#document-meta');
+ }
+ $('#document-meta .gallery').html($('.chosen-gallery').val());
+ updateGallery($('.chosen-gallery').val());
+ $('.gallery-image').animate({top: 27}, 200);
+ });
+ $('.change-gallery-cancel', element).click(function() {
+ $('.gallery-image').animate({top: 27}, 200);
+ });
+
+ $('img', element).load(function() {
+ image.css({width: null, height: null});
+ imageDimensions = {
+ width: $(this).width() * zoomFactor,
+ height: $(this).height() * zoomFactor,
+ originWidth: $(this).width(),
+ originHeight: $(this).height(),
+ galleryWidth: $(this).parent().width(),
+ galleryHeight: $(this).parent().height()
+ };
+ console.log('load', imageDimensions)
+ var position = normalizePosition(
+ image.position().left,
+ image.position().top,
+ imageDimensions.galleryWidth,
+ imageDimensions.galleryHeight,
+ imageDimensions.width,
+ imageDimensions.height
+ );
+ image.css({left: position.x, top: position.y, width: $(this).width() * zoomFactor, height: $(this).height() * zoomFactor});
+ });
+
+ $(window).resize(function() {
+ imageDimensions.galleryWidth = image.parent().width();
+ imageDimensions.galleryHeight = image.parent().height();
+ });
+
+ function bounds(galleryWidth, galleryHeight, imageWidth, imageHeight) {
+ return {
+ maxX: 0,
+ maxY: 0,
+ minX: galleryWidth - imageWidth,
+ minY: galleryHeight - imageHeight
+ }
+ }
+
+ function normalizePosition(x, y, galleryWidth, galleryHeight, imageWidth, imageHeight) {
+ var b = bounds(galleryWidth, galleryHeight, imageWidth, imageHeight);
+ return {
+ x: Math.min(b.maxX, Math.max(b.minX, x)),
+ y: Math.min(b.maxY, Math.max(b.minY, y))
+ }
+ }
+
+ function onMouseMove(event) {
+ var position = normalizePosition(
+ event.clientX - origin.x + imageOrigin.left,
+ event.clientY - origin.y + imageOrigin.top,
+ imageDimensions.galleryWidth,
+ imageDimensions.galleryHeight,
+ imageDimensions.width,
+ imageDimensions.height
+ );
+ image.css({position: 'absolute', top: position.y, left: position.x});
+ return false;
+ }
+
+ function setZoom(factor) {
+ zoomFactor = factor;
+ }
+
+ function zoom() {
+ imageDimensions.width = imageDimensions.originWidth * zoomFactor;
+ imageDimensions.height = imageDimensions.originHeight * zoomFactor;
+ var position = normalizePosition(
+ image.position().left,
+ image.position().top,
+ imageDimensions.galleryWidth,
+ imageDimensions.galleryHeight,
+ imageDimensions.width,
+ imageDimensions.height
+ );
+ console.log(image.position(), imageDimensions, position);
+ image.css({width: imageDimensions.width, height: imageDimensions.height,
+ left: position.x, top: position.y});
+
+ }
+
+ function onMouseUp(event) {
+ $(document)
+ .unbind('mousemove.gallery')
+ .unbind('mouseup.gallery');
+ return false;
+ }
+
+ image.bind('mousedown', function(event) {
+ origin = {
+ x: event.clientX,
+ y: event.clientY
+ };
+ imageOrigin = image.position();
+ $(document)
+ .bind('mousemove.gallery', onMouseMove)
+ .bind('mouseup.gallery', onMouseUp);
+ return false;
+ });
+
+ function updateGallery(url) {
+ $.ajax({
+ url: url,
+ type: 'GET',
+ dataType: 'json',
+
+ success: function(data) {
+ element.data('images', data);
+ pn.val(1);