/* Image manager */
(function (){
var FWDMImageManager = function(_d, prt){
var _s = this;
var prototype = FWDMImageManager.prototype;
_s.originalImage_img;
_s.toolTipLeft_img = _d.toolTipLeft_img;
_s.toolTipPointer_img = _d.toolTipPointer_img;
_s.markers_ar = [];
_s.toolTipWindows_ar = [];
_s.toolTipDataWindows_ar = _d.toolTipWindows_ar;
_s.markersList_ar = _d.markersList_ar;
_s.markersPosition_ar = _d.markersPosition_ar;
_s.largeImagesPaths_ar = _d.largeImagesPaths_ar;
_s.curMarker_do;
_s.markersToolTip_do;
_s.markersToolTipWindow_do;
_s.hider;
_s.dumy_sdo;
_s.slicesHolder_do;
_s.smallImage_sdo;
_s.markersPositionInfo_sdo;
_s.disableMouseWheel_bl = _d.disableMouseWheel_bl;
if(_d.disableZoom) _s.disableMouseWheel_bl = true;
_s.handMovePath_str = _d.handMovePath_str;
_s.handGrabPath_str = _d.handGrabPath_str;
_s.backgroundColor_str = prt.backgroundColor_str;
_s.draggingMode_str = _d.startDraggingMode_str;
_s.controllerVerticalPosition_str = _d.controllerVerticalPosition_str;
_s.buttonToolTipLeft_str = _d.buttonToolTipLeft_str;
_s.buttonToolTipMiddle_str = _d.buttonToolTipMiddle_str;
_s.buttonToolTipRight_str = _d.buttonToolTipRight_str;
_s.buttonToolTipFontColor_str = _d.buttonToolTipFontColor_str;
_s.buttonToolTipBottomPointer_str = _d.buttonToolTipBottomPointer_str;
_s.buttonToolTipTopPointer_str = _d.buttonToolTipTopPointer_str;
_s.lastMarkerId_str;
_s.curId = 0;
_s.prevId = 1000;
_s.curLargeImageId = 1000;
_s.totalImages = _d.totalImages;
_s.totalToolTipsWindows = _s.toolTipDataWindows_ar.length;
_s.stageWidth;
_s.stageHeight;
_s.smallestPossibleScale;
_s.currentScale = undefined;
_s.sliceCurrentScale = 1;
_s.prevScale = 0;
_s.percentZoomed = 0.1;
_s.imageWidth;
_s.imageHeight;
_s.doubleClickZoomFactor = _d.doubleClickZoomFactor;
_s.zoomFactor = _d.zoomFactor;
_s.startZoomFactor = _d.startZoomFactor;
_s.zoomSpeed = _d.zoomSpeed;
_s.finalX = 0;
_s.finalY = 0;
_s.xPositionOnPress;
_s.yPositionOnPress;
_s.lastPresedX = 0;
_s.lastPresedY = 0;
_s.lastPresedX2 = 0;
_s.lastPresedY2 = 0;
_s.mouseX = 0;
_s.mouseY = 0;
_s.controllerHeight;
_s.controllerOffsetY = _d.controllerOffsetY;
_s.rotationSpeed = Math.abs(-1.1 + _d.dragRotationSpeed);
_s.startScaleForMobileZoom;
_s.totalMarkers;
_s.globalX;
_s.globalY;
_s.markerToolTipOffsetY = _d.markerToolTipOffsetY;
_s.toolTipWindowMaxWidth = _d.toolTipWindowMaxWidth;
_s.sliceWidth = _d.sliceWidth;
_s.sliceHeight = _d.sliceHeight;
_s.cols = _d.cols;
_s.rows = _d.rows;
_s.panSpeed = _d.panSpeed;
_s.panDirectionSign = _d.inversePanDirection_bl ? -1 : 1;
_s.tweenDone_to;
_s.removeSmallSDOId_to;
_s.setAlphaWithDelayId_to;
_s.hideToolTipWindowId_to;
_s.addHideToolTipWindowTestWithDelayId_to;
_s.showToolTipWindoId_to;
_s.showMarkerToolTipId_to;
_s.setupMarkersAndToolTipWindowsId_to;
_s.secondTapId_to;
_s.enableMarkersId_to;
_s.showMarkersFirstTimeId_to;
_s.showMarkersFirstTimeDone_bl = false;
_s.allowToDragHoriz_bl = false;
_s.allowToDragVert_bl = false;
_s.isTweening_bl = false;
_s.isDragging_bl = false;
_s.isScrollBarHandlerPressed_bl = false;
_s.isResizingFirstTime_bl = true;
_s.isControllerActive_bl = false;
_s.useEntireScreen_bl = _d.useEntireScreen_bl;
_s.isMobile_bl = _d.isMobile_bl;
_s.showNavigator_bl = _d.showNavigator_bl;
_s.showMarkers_bl = _d.showMarkers_bl;
_s.isNavigatorShowed_bl = false;
_s.addImageFirstTimeOnActivate_bl = true;
_s.showMarkersInfo_bl = _d.showMarkersInfo_bl;
_s.updateScrollBarWithDelay_bl = true;
_s.areLeftAndRightButtonsDisabled_bl = false;
_s.areUpAndDownButtonsDisabled_bl = false;
_s.isMobile_bl = _d.isMobile_bl;
_s.addDoubleClickSupport_bl = _d.addDoubleClickSupport_bl;
_s.showLargeImageVersionOnZoom_bl = _d.showLargeImageVersionOnZoom_bl;
_s.hasPointerEvent_bl = FWDMUtils.hasPointerEvent;
_s.init = function(){
_s.setOverflow('visible');
if(_d.useVectorIcons){
_s.controllerHeight = prt.controllerHeight;
}else{
_s.controllerHeight = _d.controllerHeight;
}
_s.setupMainContiners();
_s.originalImage_img = _d.image_img;
_s.imageWidth = _d.imageWidth;
_s.imageHeight = _d.imageHeight;
_s.addImage();
if(!_d.disablePan){
if(!_s.showMarkersInfo_bl) _s.dumy_sdo.screen.style.cursor = 'url(' + _s.handMovePath_str + '), default';
if(_s.isMobile_bl){
_s.addPannSupportForMobile();
}else{
_s.addPannSupport();
}
}
if(!_s.disableMouseWheel_bl) _s.addMouseWheelSupport();
if(_s.addDoubleClickSupport_bl) _s.addDoubleClickSupport();
_s.setupMarkersAndToolTipWindowsId_to = setTimeout(_s.setupMarkersAndToolTipWindows, 1000);
if(_s.showMarkersInfo_bl) _s.setupMarkersInfo();
_s.setX(_d.imageOffsetX);
_s.resizeAndPosition(true);
_s.showMarkersFirstTime();
};
//###########################################//
/* Setup markers */
//###########################################//
_s.setupMarkersAndToolTipWindows = function(){
if(_s.showMarkers_bl){
_s.setupMarkers();
if(!_s.isMobile_bl || _s.hasPointerEvent_bl) _s.setupMarkersToolTip();
_s.setupMarkersToolTipWindow();
_s.positionMarkers(false);
}
if(_s.showNavigator_bl){
_s.hideOrShowNavigator();
_s.updateNavigator(false);
}
if(_s.stageHeight < _s.finalHeight){
_s.dispatchEvent(FWDMImageManager.ENABLE_UP_AND_DOWN_BUTTONS);
_s.areUpAndDownButtonsDisabled_bl = true;
}
if(_s.stageWidth < _s.finalWidth){
_s.dispatchEvent(FWDMImageManager.ENABLE_LEFT_AND_RIGHT_BUTTONS);
_s.areLeftAndRightButtonsDisabled_bl = true;
}
};
//##########################################//
//Setup hider.
//##########################################//
_s.setupHider = function(hider){
_s.hider = hider;
};
//################################################//
//add small and large image.
//################################################//
_s.addImage = function(){
_s.smallImage_sdo = new FWDMTransformDisplayObject("img");
_s.smallImage_sdo.setScreen(_s.originalImage_img);
_s.smallImage_sdo.setTransformOrigin(0,0);
_s.addImageFirstTimeOnActivate_bl = false;
_s.addChild(_s.smallImage_sdo);
_s.addChild(_s.dumy_sdo);
_s.setAlpha(0);
FWDAnimation.to(_s, .8, {alpha:1, delay:.3});
};
//###########################################//
//Setup main containers
//###########################################//
_s.setupMainContiners = function(){
//_s.setBkColor(_s.backgroundColor_str);
_s.dumy_sdo = new FWDMSimpleDisplayObject("div");
if(FWDMUtils.isIE){
_s.dumy_sdo.setBkColor("#00FF00");
_s.dumy_sdo.setAlpha(.01);
}
if(_s.controllerVerticalPosition_str == FWDMController.POSITION_TOP && !_s.useEntireScreen_bl){
_s.dumy_sdo.setY(- _s.controllerHeight);
_s.setY(_s.controllerHeight + _d.imageOffsetY + _s.controllerOffsetY);
}else{
_s.setY(_d.imageOffsetY);
}
};
//###########################################//
// Resize and position _s...
//###########################################//
_s.resizeAndPosition = function(centerImage_bl, overwrite){
if(_s.stageWidth == prt.stageWidth && _s.tempStageH == prt.stageHeight && !overwrite) return;
_s.stageWidth = prt.stageWidth;
_s.tempStageH = prt.stageHeight;
if(_s.useEntireScreen_bl){
_s.stageHeight = prt.stageHeight;
}else{
_s.stageHeight = prt.stageHeight - _s.controllerHeight - _s.controllerOffsetY;
}
_s.setWidth(_s.stageWidth);
_s.setHeight(_s.stageHeight);
var scX = _s.stageWidth/_s.imageWidth;
var scY = _s.stageHeight/_s.imageHeight;
var totalScale;
if(scX < scY){
totalScale = scX;
}else{
totalScale = scY;
}
if(totalScale >= _s.zoomFactor) totalScale = _s.zoomFactor;
if(totalScale >= _s.zoomFactor){
_s.currentScale = _s.prevScale = _s.smallestPossibleScale = _s.zoomFactor;
}else{
_s.smallestPossibleScale = totalScale;
_s.currentScale = _s.prevScale = totalScale;
}
if(_s.isResizingFirstTime_bl){
if(!isNaN(_s.startZoomFactor)){
if(_s.startZoomFactor > _s.currentScale){
_s.currentScale = _s.prevScale = _s.startZoomFactor;
}
}
_s.isResizingFirstTime_bl = false;
}
_s.finalWidth = Math.round(_s.currentScale * _s.imageWidth);
_s.finalHeight = Math.round(_s.currentScale * _s.imageHeight);
if(scX <= scY && totalScale != _s.zoomFactor){
if(_s.finalWidth < _s.stageWidth){
_s.currentScale = _s.stageWidth/_s.imageWidth;
_s.smallestPossibleScale = _s.currentScale;
}
}else if(scX >= scY && totalScale != _s.zoomFactor){
if(_s.finalHeight < _s.stageHeight){
_s.currentScale = _s.stageHeight/_s.imageHeight;
_s.smallestPossibleScale = _s.currentScale;
}
}
_s.finalWidth = Math.round(_s.currentScale * _s.imageWidth);
_s.finalHeight = Math.round(_s.currentScale * _s.imageHeight);
_s.dumy_sdo.setWidth(_s.stageWidth);
if(_s.useEntireScreen_bl){
_s.dumy_sdo.setHeight(_s.stageHeight);
}else{
_s.dumy_sdo.setHeight(_s.stageHeight + _s.controllerHeight);
}
_s.checkXAndYBouds();
if(centerImage_bl) _s.centerImage();
_s.resizeAndPositionImage();
if(_s.showNavigator_bl){
_s.hideOrShowNavigator();
_s.updateNavigator(false);
}
_s.positionMarkers(false);
clearTimeout(_s.dispDl_to);
_s.dispDl_to = setTimeout(function(){
if(_s == null) return;
_s.dispatchScrollBarUpdate(false);
}
, 400);
_s.disableOrEnableMoveButtons();
_s.dispatchScrollBarUpdate(false);
};
//###############################################//
//resize and position small image and large image.
//###############################################//
_s.resizeAndPositionImage = function(animate){
_s.isTweening_bl = true;
FWDAnimation.killTweensOf(_s.smallImage_sdo);
clearTimeout(_s.tweenDone_to);
if(animate){
if(_s.smallImage_sdo.hasTransform2d_bl){
FWDAnimation.to(_s.smallImage_sdo, .3, {x:_s.finalX, y:_s.finalY, scale:_s.currentScale});
}else{
FWDAnimation.to(_s.smallImage_sdo, .3, {w:_s.finalWidth, h:_s.finalHeight, x:_s.finalX, y:_s.finalY});
}
_s.tweenDone_to = setTimeout(_s.tweenDoneHandler, 300);
}else{
if(_s.smallImage_sdo.hasTransform2d_bl){
_s.smallImage_sdo.setScale2(_s.currentScale);
_s.smallImage_sdo.setX(_s.finalX);
_s.smallImage_sdo.setY(_s.finalY);
}else{
_s.smallImage_sdo.setX(_s.finalX);
_s.smallImage_sdo.setY(_s.finalY);
_s.smallImage_sdo.setWidth(_s.finalWidth);
_s.smallImage_sdo.setHeight(_s.finalHeight);
}
_s.isTweening_bl = false;
_s.dispatchEvent(FWDMImageManager.IMAGE_ZOOM_COMPLETE);
}
};
_s.tweenDoneHandler = function(){
_s.isTweening_bl = false;
_s.dispatchEvent(FWDMImageManager.IMAGE_ZOOM_COMPLETE);
};
//###############################################//
/* check x and y position */
//##############################################//
_s.checkXAndYBouds = function(){
if(_s.finalWidth <= _s.stageWidth){
_s.finalX = Math.round((_s.stageWidth - _s.finalWidth)/2);
}else if(_s.finalWidth > _s.stageWidth + 1){
_s.allowToDragHoriz_bl = true;
if(_s.finalX > 0){
_s.finalX = 0;
}else if(_s.finalX <= _s.stageWidth - _s.finalWidth + 1){
_s.finalX = _s.stageWidth - _s.finalWidth + 1;
}
}else{
_s.allowToDragHoriz_bl = false;
}
if(_s.finalHeight <= _s.stageHeight ){
_s.finalY = Math.round((_s.stageHeight - _s.finalHeight)/2);
}else if(_s.finalHeight > _s.stageHeight + 1){
_s.allowToDragVert_bl = true;
if(_s.finalY > 0){
_s.finalY = 0;
}else if(_s.finalY <= _s.stageHeight - _s.finalHeight){
_s.finalY = _s.stageHeight - _s.finalHeight;
}
}else{
_s.allowToDragVert_bl = false;
}
};
//################################################//
/* zoom image */
//################################################//
_s.zoomImage = function(setPositionAndSize, animate){
if(setPositionAndSize){
_s.finalWidth = Math.round(_s.currentScale * _s.imageWidth);
_s.finalHeight = Math.round(_s.currentScale * _s.imageHeight);
_s.finalX -= Math.round((_s.mouseX - _s.finalX) * (_s.currentScale - _s.prevScale) / _s.prevScale);
_s.finalY -= Math.round((_s.mouseY - _s.finalY) * (_s.currentScale - _s.prevScale) / _s.prevScale);
}
if(!_s.isControllerActive_bl) _s.dispatchScrollBarUpdate(animate);
_s.checkXAndYBouds();
if(_s.showNavigator_bl){
_s.hideOrShowNavigator();
_s.updateNavigator(animate);
}
_s.positionMarkers(animate);
_s.disableOrEnableMoveButtons();
_s.resizeAndPositionImage(animate);
_s.prevScale = _s.currentScale;
_s.dispatchEvent(FWDM.ZOOM, {scale:_s.currentScale});
};
//###############################################//
//Add touch pann support
//###############################################//
_s.addPannSupport = function(){
if(_s.screen.addEventListener){
_s.dumy_sdo.screen.addEventListener("mousedown", _s.panStartHandler, true);
}else if(_s.screen.attachEvent){
_s.dumy_sdo.screen.attachEvent("onmousedown", _s.panStartHandler);
}
};
_s.panStartHandler = function(e){
if(_s.isTweening_bl || _s.isControllerActive_bl || _s.isTweening_bl) return;
if(e.preventDefault) e.preventDefault();
if(_s.finalWidth < _s.stageWidth && _s.finalHeight < _s.stageHeight) return;
if(!_s.isMobile_bl || e.pointerType == e.MSPOINTER_TYPE_MOUSE){
if(e.button <= 1) prt.disableAll();
}
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
_s.isDragging_bl = true;
_s.xPositionOnPress = _s.smallImage_sdo.getX();
_s.yPositionOnPress = _s.smallImage_sdo.getY();
_s.lastPresedX = viewportMouseCoordinates.screenX;
_s.lastPresedY = viewportMouseCoordinates.screenY;
_s.hideToolTipWindow();
_s.dispatchEvent(FWDMImageManager.PAN_START);
if(window.addEventListener){
window.addEventListener("mousemove", _s.panMoveHandler);
window.addEventListener("mouseup", _s.panEndHandler);
}else if(document.attachEvent){
document.attachEvent("onmousemove", _s.panMoveHandler);
document.attachEvent("onmouseup", _s.panEndHandler);
}
};
_s.panMoveHandler = function(e){
if(e.preventDefault) e.preventDefault();
if(e.touches && e.touches.length != 1 || _s.isControllerActive_bl || _s.isTweening_bl) return;
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
if(_s.finalWidth > _s.stageWidth + 1){
_s.finalX = Math.round(_s.xPositionOnPress + viewportMouseCoordinates.screenX - _s.lastPresedX);
if(_s.finalX > 0){
_s.finalX = 0;
}else if(_s.finalX <= _s.stageWidth - _s.finalWidth + 1){
_s.finalX = _s.stageWidth - _s.finalWidth + 1;
}
_s.smallImage_sdo.setX(_s.finalX);
}
if(_s.finalHeight > _s.stageHeight + 1){
_s.finalY = Math.round(_s.yPositionOnPress + viewportMouseCoordinates.screenY - _s.lastPresedY);
if(_s.finalY > 0){
_s.finalY = 0;
}else if(_s.finalY <= _s.stageHeight - _s.finalHeight){
_s.finalY = _s.stageHeight - _s.finalHeight;
}
_s.smallImage_sdo.setY(_s.finalY);
}
if(_s.showNavigator_bl){
_s.hideOrShowNavigator();
_s.updateNavigator(false);
}
_s.positionMarkers(false);
};
_s.panEndHandler = function(e){
if(e.preventDefault) e.preventDefault();
_s.isDragging_bl = false;
if(!_s.isMobile_bl || e.pointerType == e.MSPOINTER_TYPE_MOUSE) prt.enableAll();
if(window.removeEventListener){
window.removeEventListener("mousemove", _s.panMoveHandler);
window.removeEventListener("mouseup", _s.panEndHandler);
}else if(document.detachEvent){
document.detachEvent("onmousemove", _s.panMoveHandler);
document.detachEvent("onmouseup", _s.panEndHandler);
}
};
//###############################################//
//Add touch pann support
//###############################################//
_s.addPannSupportForMobile = function(){
if(_s.hasPointerEvent_bl){
_s.screen.addEventListener("MSPointerDown", _s.onTouchStart);
}else{
_s.screen.addEventListener("touchstart", _s.onTouchStart);
}
};
_s.removeZoomDragAndSwipeForMobile = function(){
if(_s.hasPointerEvent_bl){
_s.screen.removeEventListener("MSPointerDown", _s.onTouchStart);
window.removeEventListener("MSPointerUp", _s.windowOnTouchEnd);
window.removeEventListener("MSPointerMove", _s.windowOnTouchMove);
}else{
_s.screen.removeEventListener("touchstart", _s.onTouchStart);
window.removeEventListener("touchend", _s.windowOnTouchEnd);
window.removeEventListener("touchmove", _s.windowOnTouchMove);
}
};
_s.onTouchStart = function(e){
if(prt.isFullScreen_bl && e.preventDefault) e.preventDefault();
if(_s.isZooming_bl || (_s.currentScale == _s.smallestPossibleScale && e.touches.length == 1)) return;
if(e.preventDefault) e.preventDefault();
clearTimeout(_s.disableOnDragOrSwipeId_to);
_s.vx = 0;
_s.vy = 0;
if(e.touches){
_s.lastMouseX = _s.firstTouchMouseX = e.touches[0].pageX - prt.globalX - prt.scrollOffsets.x;
_s.lastMouseY = _s.firstTouchMouseY = e.touches[0].pageY - prt.globalY - prt.scrollOffsets.y;
}else{
_s.lastMouseX = _s.firstTouchMouseX = e.pageX - prt.globalX - prt.scrollOffsets.x;
_s.lastMouseY = _s.firstTouchMouseY = e.pageY - prt.globalY - prt.scrollOffsets.y;
}
if(e.touches && e.touches.length == 2){
_s.disableOnDragOrSwipe_bl = true;
_s.lastMouseX2 = e.touches[1].pageX - prt.globalX - prt.scrollOffsets.x;
_s.lastMouseY2 = e.touches[1].pageY - prt.globalY - prt.scrollOffsets.y;
}else if(e.touches && e.touches.length > 2){
return;
}
if(_s.hasPointerEvent_bl){
window.addEventListener("MSPointerUp", _s.windowOnTouchEnd);
window.addEventListener("MSPointerMove", _s.windowOnTouchMove);
}else{
window.addEventListener("touchend", _s.windowOnTouchEnd);
window.addEventListener("touchmove", _s.windowOnTouchMove);
}
};
_s.finishPinching_bl = true;
_s.windowOnTouchMove = function(e){
//if(_s.isZooming_bl) return;
if(e.preventDefault) e.preventDefault();
var lcX;
var lcY;
var toAddX;
var toAddY2;
var posX1;
var posY1;
var posX2;
var posY2;
var pinchDist;
var dx;
var dy;
var finalPosX;
var finalPosY;
if(prt.isFullScreen_bl){
prt.globalX = prt.globalY = 0;
}
if(e.touches){
lcX = e.touches[0].pageX - prt.globalX - prt.scrollOffsets.x;
lcY = e.touches[0].pageY - prt.globalY - prt.scrollOffsets.y;
}else{
lcX = e.pageX - prt.globalX - prt.scrollOffsets.x;
lcY = e.pageY - prt.globalY - prt.scrollOffsets.y;
}
if(_s.firstTouchMouseX < lcX - 1 || _s.firstTouchMouseX > lcX + 1
|| _s.firstTouchMouseY < lcY - 1 || _s.firstTouchMouseY > lcY + 1){
_s.disableOnDragOrSwipe_bl = true;
}
if(e.touches.length == 2){
_s.finishPinching_b = true;
}
if(_s.hasPointerEvent_bl){
toAddX = e.pageX - prt.globalX - _s.lastMouseX - prt.scrollOffsets.x;
toAddY = e.pageY - prt.globalY - _s.lastMouseY - prt.scrollOffsets.y;
_s.lastMouseX = lcX;
_s.lastMouseY = lcY;
_s.finalX += toAddX;
_s.finalY += toAddY;
_s.isDragged_bl = true;
}else if(e.touches && e.touches.length == 1 && _s.finishPinching_bl){
toAddX = e.touches[0].pageX - prt.globalX - _s.lastMouseX - prt.scrollOffsets.x;
toAddY = e.touches[0].pageY - prt.globalY - _s.lastMouseY - prt.scrollOffsets.y;
_s.lastMouseX = lcX;
_s.lastMouseY = lcY;
if(_s.finalWidth > _s.stageWidth + 1){
_s.finalX += toAddX;
if(_s.finalX > 0){
_s.finalX = 0;
}else if(_s.finalX <= _s.stageWidth - _s.finalWidth + 1){
_s.finalX = _s.stageWidth - _s.finalWidth + 1;
}
_s.smallImage_sdo.setX(_s.finalX);
}
if(_s.finalHeight > _s.stageHeight + 1){
_s.finalY += toAddY;
if(_s.finalY > 0){
_s.finalY = 0;
}else if(_s.finalY <= _s.stageHeight - _s.finalHeight){
_s.finalY = _s.stageHeight - _s.finalHeight;
}
_s.smallImage_sdo.setY(_s.finalY);
}
if(_s.finalWidth > _s.stageWidth + 1 || _s.finalHeight > _s.stageHeight + 1){
if(_s.showNavigator_bl){
_s.hideOrShowNavigator();
_s.updateNavigator(false);
}
_s.positionMarkers(false);
}
_s.isDragged_bl = true;
}else if(e.touches && e.touches.length == 2){
_s.finishPinching_bl = false;
posX1 = lcX;
posY1 = lcY;
posX2 = e.touches[1].pageX - prt.globalX - prt.scrollOffsets.x;
posY2 = e.touches[1].pageY - prt.globalY - prt.scrollOffsets.y;
_s.mouseX = finalPosX = (posX2 + posX1)/2;
_s.mouseY = finalPosY = (posY2 + posY1)/2;
dx = posX1 - posX2;
dy = posY1 - posY2;
pinchDist = Math.sqrt(dx * dx + dy * dy);
if(parseInt(_s.pinchDist) != parseInt(pinchDist)){
if(_s.pinchDist > pinchDist){
_s.currentScale -= 0.02;
}else{
_s.currentScale += 0.01;
}
if(parseFloat(_s.currentScale.toFixed(5)) <= parseFloat(_s.smallestPossibleScale.toFixed(5))){
_s.currentScale = _s.smallestPossibleScale;
}else if(_s.currentScale > _s.zoomFactor){
_s.currentScale = _s.zoomFactor;
}
}
_s.zoomImage(true, true);
_s.pinchDist = pinchDist;
}
};
_s.windowOnTouchEnd = function(e){
if(e.preventDefault) e.preventDefault();
if(_s.hasPointerEvent_bl){
window.removeEventListener("MSPointerUp", _s.windowOnTouchEnd);
window.removeEventListener("MSPointerMove", _s.windowOnTouchMove);
clearTimeout(_s.disableOnDragOrSwipeId_to);
_s.disableOnDragOrSwipeId_to = setTimeout(function(){
_s.disableOnDragOrSwipe_bl = false;
_s.finishPinching_bl = true;
}, 200);
}else{
if(e.touches.length == 0){
clearTimeout(_s.disableOnDragOrSwipeId_to);
_s.disableOnDragOrSwipeId_to = setTimeout(function(){
_s.disableOnDragOrSwipe_bl = false;
_s.finishPinching_bl = true;
}, 200);
window.removeEventListener("touchend", _s.windowOnTouchEnd);
window.removeEventListener("touchmove", _s.windowOnTouchMove);
}
}
_s.isDragged_bl = false;
};
//###############################################//
//Add mousewheel support.
//###############################################//
_s.addMouseWheelSupport = function(){
if(window.addEventListener){
_s.dumy_sdo.screen.addEventListener ("mousewheel", _s.mouseWheelHandler);
_s.dumy_sdo.screen.addEventListener('DOMMouseScroll', _s.mouseWheelHandler);
}else if(document.attachEvent){
_s.dumy_sdo.screen.attachEvent("onmousewheel", _s.mouseWheelHandler);
}
};
_s.mouseWheelHandler = function(e){
if(e.preventDefault) e.preventDefault();
if(_s.isDragging_bl || _s.isControllerActive_bl) return;
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
if(_s.hider) _s.hider.reset();
_s.mouseX = viewportMouseCoordinates.screenX - _s.getGlobalX();
_s.mouseY = viewportMouseCoordinates.screenY - _s.getGlobalY();
var dir = e.detail || e.wheelDelta;
if(e.wheelDelta) dir *= -1;
if(dir > 0){
if(_s.currentScale == _s.smallestPossibleScale) return;
_s.currentScale -= _s.zoomSpeed;
if(parseFloat(_s.currentScale.toFixed(5)) <= parseFloat(_s.smallestPossibleScale.toFixed(5))) _s.currentScale = _s.smallestPossibleScale;
}else if(dir < 0){
if(_s.currentScale == _s.zoomFactor) return;
_s.currentScale += _s.zoomSpeed;
if(_s.currentScale > _s.zoomFactor) _s.currentScale = _s.zoomFactor;
}
_s.zoomImage(true, true);
if(e.preventDefault){
e.preventDefault();
}else{
return false;
}
};
//########################################//
/* add double click and tap support */
//########################################//
_s.addDoubleClickSupport = function(){
if(_s.isMobile_bl){
_s.dumy_sdo.screen.addEventListener("touchstart", _s.onFirstDown);
}else{
_s.dumy_sdo.screen.addEventListener("mousedown", _s.onFirstDown);
}
};
_s.onFirstDown = function(e){
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
_s.firstTapX = viewportMouseCoordinates.screenX;
_s.firstTapY = viewportMouseCoordinates.screenY;
if(_s.isMobile_bl){
clearTimeout(_s.secondTapId_to);
_s.secondTapId_to = setTimeout(_s.doubleTapExpired, 200);
_s.dumy_sdo.screen.addEventListener("touchstart", _s.onSecondDown);
_s.dumy_sdo.screen.removeEventListener("touchstart", _s.onFirstDown);
}else{
clearTimeout(_s.secondTapId_to);
_s.secondTapId_to = setTimeout(_s.doubleTapExpired, 200);
_s.dumy_sdo.screen.addEventListener("mousedown", _s.onSecondDown);
_s.dumy_sdo.screen.removeEventListener("mousedown", _s.onFirstDown);
}
};
_s.doubleTapExpired = function(){
clearTimeout(_s.secondTapId_to);
if(_s.isMobile_bl){
_s.dumy_sdo.screen.removeEventListener("touchstart", _s.onSecondDown);
_s.dumy_sdo.screen.addEventListener("touchstart", _s.onFirstDown);
}else{
_s.dumy_sdo.screen.removeEventListener("mousedown", _s.onSecondDown);
_s.dumy_sdo.screen.addEventListener("mousedown", _s.onFirstDown);
}
};
_s.onSecondDown = function(e){
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
var dx;
var dy;
if(e.touches && e.touches.length != 1) return;
if(_s.currentScale == _s.zoomFactor
|| _s.doubleClickZoomFactor < _s.currentScale) return;
dx = Math.abs(viewportMouseCoordinates.screenX - _s.firstTapX);
dy = Math.abs(viewportMouseCoordinates.screenY - _s.firstTapY);
if(_s.isMobile_bl && (dx > 10 || dy > 10)){
return;
}else if(!_s.isMobile_bl && (dx > 2 || dy > 2)){
return
}
if(_s.isMobile_bl) _s.smallImage_sdo.screen.removeEventListener("touchstart", _s.onSecondDown);
_s.mouseX = viewportMouseCoordinates.screenX - _s.getGlobalX();
_s.mouseY = viewportMouseCoordinates.screenY - _s.getGlobalY();
_s.currentScale = _s.zoomFactor;
_s.zoomImage(true, true);
_s.mouseX = _s.stageWidth/2;
_s.mouseY = _s.stageHeight/2;
};
//###########################################//
/* Setup markers */
//###########################################//
_s.setupMarkers = function(){
var marker;
var objData;
var id = 0;
_s.totalMarkers = _s.markersList_ar.length;
for(var i=0; i<_s.totalMarkers; i++){
objData = _s.markersList_ar[i];
id = i;
FWDMMarker.setPrototype();
marker = new FWDMMarker(i+1,
objData.normalStatePath_str,
objData.selectedStatePath_str,
objData.type,
objData.regPoint,
objData.toolTipLabel,
i,
objData.markerX,
objData.markerY,
objData.markerWidth,
objData.markerHeight,
objData.showAfterScale,
objData.toolTipOffsetX,
objData.hasContent_bl,
_d.useVectorIcons);
marker.addListener(FWDMMarker.MOUSE_OVER, _s.markerOnMouseOverHandler);
marker.addListener(FWDMMarker.MOUSE_OUT, _s.markerOnMouseOutHandler);
marker.addListener(FWDMMarker.MOUSE_DOWN, _s.markerOnStartHandler);
if(objData.type == "tooltip" || objData.type == "tooltip-plus" || objData.type == "tooltip-play"){
marker.toolTipId = id;
marker.innerHTML_str = objData.innerHTML;
marker.toolTipWindowMaxWidth = objData.maxWidth;
}else if(objData.type == "infowindow"){
marker.innerHTML_str = objData.innerHTML;
}else if(objData.type == "link"){
marker.link_str = objData.link;
marker.target_str = objData.target;
}
_s.markers_ar.push(marker);
_s.addChild(marker);
}
};
_s.markerOnMouseOverHandler = function(e){
var marker = e.target;
if(marker.hasToolTip_bl){
_s.showMarkerToolTip(marker, marker.toolTipLabel_str);
};
if(marker.type_str == "tooltip" || marker.type_str == "tooltip-plus" || marker.type_str == "tooltip-play"){
if(_s.lastMarkerId_str != marker.markerId) _s.hideToolTipWindow();
_s.lastMarkerId_str = marker.markerId;
_s.curMarker_do = marker;
clearTimeout(_s.hideToolTipWindowId_to);
_s.showToolTipWindow(marker, marker.innerHTML_str, marker.toolTipWindowMaxWidth);
}
};
_s.markerOnMouseOutHandler = function(e){
var marker = e.target;
if(marker.hasToolTip_bl){
if(_s.markersToolTip_do){
if(_s.contains(_s.markersToolTip_do)) _s.removeChild(_s.markersToolTip_do);
_s.markersToolTip_do.hide();
}
};
if(marker.type_str == "tooltip" || marker.type_str == "tooltip-plus" || marker.type_str == "tooltip-play"){
_s.toolTipWindowAddEventsToSetGlobalXAndGlobalY();
clearTimeout(_s.hideToolTipWindowId_to);
_s.hideToolTipWindowId_to = setTimeout(_s.hideToolTipWindowWithDelay, 300);
}
};
_s.markerOnStartHandler = function(e){
var marker = e.target;
if(marker.type_str == "infowindow"){
_s.dispatchEvent(FWDMImageManager.SHOW_INFO, {text:marker.innerHTML_str});
}else if(marker.type_str == "tooltip" || marker.type_str == "tooltip-plus" || marker.type_str == "tooltip-play"){
if(_s.lastMarkerId_str != marker.markerId) _s.hideToolTipWindow();
_s.curMarker_do = marker;
_s.lastMarkerId_str = marker.markerId;
_s.toolTipWindowAddEventsToSetGlobalXAndGlobalY();
_s.showToolTipWindow(marker, marker.innerHTML_str, marker.toolTipWindowMaxWidth);
}
};
//show markers firs time
_s.showMarkersFirstTime = function(){
//_s.showMarkersFirstTimeId_to = setTimeout(function(){
_s.showMarkersFirstTimeDone_bl = true;
_s.positionMarkers();
//}, 50);
};
//position markers.
_s.positionMarkers = function(animate){
var marker;
for(var i=0; i< _s.totalMarkers; i++){
marker = _s.markers_ar[i];
marker.finalX = _s.finalX + marker.offsetX + parseInt(marker.originalX * _s.currentScale);
marker.finalY = _s.finalY + marker.offsetY + parseInt(marker.originalY * _s.currentScale);
if(marker.showAfterScale <= _s.currentScale){
if(_s.showMarkersFirstTimeDone_bl) marker.show();
}else{
marker.hide();
}
if(marker.isShowed_bl){
if(animate){
FWDAnimation.killTweensOf(marker);
FWDAnimation.to(marker, .3, {x:marker.finalX, y:marker.finalY});
}else{
FWDAnimation.killTweensOf(marker);
marker.setX(marker.finalX);
marker.setY(marker.finalY);
}
}
}
};
_s.hideMarkers = function(){
var marker;
for(var i=0; i< _s.totalMarkers; i++){
marker = _s.markers_ar[i];
marker.isHiddenFinal_bl = true;
marker.hide();
}
};
_s.showMarkers = function(){
var marker;
for(var i=0; i< _s.totalMarkers; i++){
marker = _s.markers_ar[i];
marker.isHiddenFinal_bl = false;
if(marker.showAfterScale <= _s.currentScale) marker.show();
}
};
//###########################################//
/* Setup markers tooltip */
//###########################################//
_s.setupMarkersToolTip = function(){
FWDMMarkerToolTip.setPrototype();
_s.markersToolTip_do = new FWDMMarkerToolTip(
_s,
_s.buttonToolTipTopPointer_str,
_s.buttonToolTipBottomPointer_str);
_s.markersToolTip_do.screen.style.zIndex = 999999999;
};
//###########################################//
/* Setup markers tooltip window*/
//###########################################//
_s.setupMarkersToolTipWindow = function(){
FWDMMarkerWindowToolTip.setPrototype();
_s.markersToolTipWindow_do = new FWDMMarkerWindowToolTip(
_s,
_s.buttonToolTipTopPointer_str,
_s.buttonToolTipBottomPointer_str);
_s.markersToolTipWindow_do.screen.style.zIndex = 999999999;
document.documentElement.appendChild(_s.markersToolTipWindow_do.screen);
};
//######################################################//
/* show tool tip */
//######################################################//
_s.showMarkerToolTip = function(marker, label){
var finalX;
var finalY;
var globalX = _s.getX();
var pointerOffsetX = 0;
var pointerPostion;
//_s.addChild(_s.markersToolTip_do);
document.documentElement.appendChild(_s.markersToolTip_do.screen);
_s.markersToolTip_do.setLabel(label);
_s.markersToolTip_do.show();
clearTimeout(_s.showMarkerToolTipId_to);
_s.showMarkerToolTipId_to = setTimeout(function(){
if(!_s.markersToolTip_do.isShowed_bl) return;
finalY = marker.finalY - _s.markersToolTip_do.totalHeight - _s.markerToolTipOffsetY + _s.getGlobalY() + prt.scrollOffsets.y;
if(finalY - prt.scrollOffsets.y < 0){
finalY = marker.finalY + marker.height + _s.markerToolTipOffsetY + _s.getGlobalY() + prt.scrollOffsets.y + _s.markersToolTip_do.pointerHeight;
_s.markersToolTip_do.pointerUp_sdo.setVisible(true);
_s.markersToolTip_do.pointerDown_sdo.setVisible(false);
pointerPostion = FWDMMarkerWindowToolTip.POINTER_UP;
}else{
_s.markersToolTip_do.pointerUp_sdo.setVisible(false);
_s.markersToolTip_do.pointerDown_sdo.setVisible(true);
pointerPostion = FWDMMarkerWindowToolTip.POINTER_DOWN;
}
finalX = parseInt(marker.finalX + (marker.width - _s.markersToolTip_do.totalWidth)/2) + _s.getGlobalX() + prt.scrollOffsets.x + marker.toolTipOffsetX;
if(finalX < 0){
pointerOffsetX = finalX;
finalX = 0;
}else if(finalX + _s.markersToolTip_do.totalWidth > prt.ws.w){
pointerOffsetX = -(prt.ws.w - finalX - _s.markersToolTip_do.totalWidth);
finalX = prt.ws.w - _s.markersToolTip_do.totalWidth;
}
_s.markersToolTip_do.setX(finalX);
_s.markersToolTip_do.setY(finalY);
_s.markersToolTip_do.positionPointer(pointerOffsetX - marker.toolTipOffsetX, pointerPostion);
}, 80);
};
//######################################################//
/* show tool tip window */
//######################################################//
_s.showToolTipWindow = function(marker, label, maxWidth){
if(_s.markersToolTipWindow_do.toolTipWindowId == marker.toolTipWindowId) return;
_s.marker = marker;
var finalX;
var finalY;
var globalX = _s.getX();
var pointerOffsetX = 0;
var pointerPostion;
_s.markersToolTipWindow_do.setLabel(label, maxWidth);
_s.markersToolTipWindow_do.toolTipWindowId = marker.toolTipWindowId;
clearTimeout(_s.showToolTipWindoId_to);
_s.showToolTipWindoId_to = setTimeout(function(){
finalY = marker.finalY - _s.markersToolTipWindow_do.totalHeight - _s.markerToolTipOffsetY + _s.getGlobalY() + prt.scrollOffsets.y;
if(finalY - prt.scrollOffsets.y < 0){
finalY = marker.finalY + marker.height + _s.markerToolTipOffsetY + _s.getGlobalY() + prt.scrollOffsets.y + _s.markersToolTipWindow_do.pointerHeight;
_s.markersToolTipWindow_do.pointerUp_sdo.setVisible(true);
_s.markersToolTipWindow_do.pointerDown_sdo.setVisible(false);
pointerPostion = FWDMMarkerWindowToolTip.POINTER_UP;
}else{
_s.markersToolTipWindow_do.pointerUp_sdo.setVisible(false);
_s.markersToolTipWindow_do.pointerDown_sdo.setVisible(true);
pointerPostion = FWDMMarkerWindowToolTip.POINTER_DOWN;
}
finalX = parseInt(marker.finalX + (marker.width - _s.markersToolTipWindow_do.totalWidth)/2) + _s.getGlobalX() + prt.scrollOffsets.x + marker.toolTipOffsetX;
if(finalX < 0){
pointerOffsetX = finalX;
finalX = 0;
}else if(finalX + _s.markersToolTipWindow_do.totalWidth > prt.ws.w){
pointerOffsetX = -(prt.ws.w - finalX - _s.markersToolTipWindow_do.totalWidth);
finalX = prt.ws.w - _s.markersToolTipWindow_do.totalWidth;
}
_s.markersToolTipWindow_do.show();
_s.markersToolTipWindow_do.setX(Math.round(finalX));
_s.markersToolTipWindow_do.setY(Math.round(finalY));
_s.markersToolTipWindow_do.positionPointer(pointerOffsetX - marker.toolTipOffsetX, pointerPostion);
}, 80);
};
//######################################################//
/* hide tool tip window */
//######################################################//
_s.toolTipWindowAddEventsToSetGlobalXAndGlobalY = function(){
if(_s.isMobile_bl){
_s.addHideToolTipWindowTestWithDelayId_to = setTimeout(function(){
if(_s.hasPointerEvent_bl){
window.addEventListener("MSPointerDown", _s.hideToolTipWindowTest);
window.addEventListener("MSPointerMove", _s.hideToolTipWindowTest);
}else{
window.addEventListener("touchstart", _s.hideToolTipWindowTest);
}
}, 50);
}else{
if(window.addEventListener){
window.addEventListener("mousemove", _s.hideToolTipWindowTest);
}else if(document.attachEvent){
document.attachEvent("onmousemove", _s.hideToolTipWindowTest);
}
}
};
_s.hideToolTipWindowTest = function(e){
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
_s.globalX = viewportMouseCoordinates.screenX;
_s.globalY = viewportMouseCoordinates.screenY;
if(e.touches || e.pointerType != e.MSPOINTER_TYPE_MOUSE) _s.hideToolTipWindowWithDelay();
};
_s.hideToolTipWindowWithDelay = function(addDelay){
if(!FWDMUtils.hitTest(_s.markersToolTipWindow_do.screen, _s.globalX, _s.globalY)
&& !FWDMUtils.hitTest(_s.curMarker_do.screen, _s.globalX, _s.globalY) ){
_s.hideToolTipWindow();
if(_s.isMobile_bl){
clearTimeout(_s.addHideToolTipWindowTestWithDelayId_to);
if(_s.hasPointerEvent_bl){
window.removeEventListener("MSPointerDown", _s.hideToolTipWindowTest);
window.removeEventListener("MSPointerMove", _s.hideToolTipWindowTest);
}else{
window.removeEventListener("touchstart", _s.hideToolTipWindowTest);
}
}else{
if(window.removeEventListener){
window.removeEventListener("mousemove", _s.hideToolTipWindowTest);
}else if(document.detachEvent){
document.detachEvent("onmousemove", _s.hideToolTipWindowTest);
}
}
}else{
_s.hideToolTipWindowId_to = setTimeout(_s.hideToolTipWindowWithDelay, 300);
}
};
_s.hideToolTipWindow = function(){
if(!_s.markersToolTipWindow_do) return;
clearTimeout(_s.hideToolTipWindowId_to);
_s.markersToolTipWindow_do.hide();
if(_s.marker) _s.marker.setNormalState();
_s.markersToolTipWindow_do.toolTipWindowId = "none";
};
//####################################//
/* markers info */
//####################################//
_s.setupMarkersInfo = function(){
if(window.addEventListener){
window.addEventListener("mousemove", _s.showMarkersInfoPosition);
window.addEventListener ("mousewheel", _s.showMarkersInfoPosition);
window.addEventListener('DOMMouseScroll', _s.showMarkersInfoPosition);
}else if(document.attachEvent){
document.attachEvent("onmousemove", _s.showMarkersInfoPosition);
document.attachEvent("onmousewheel", _s.showMarkersInfoPosition);
}
_s.markersPositionInfo_sdo = new FWDMSimpleDisplayObject("div");
_s.markersPositionInfo_sdo.setDisplay("inline-block");
_s.markersPositionInfo_sdo.getStyle().fontSmoothing = "antialiased";
_s.markersPositionInfo_sdo.getStyle().webkitFontSmoothing = "antialiased";
_s.markersPositionInfo_sdo.getStyle().textRendering = "optimizeLegibility";
_s.markersPositionInfo_sdo.getStyle().padding = "6px";
_s.markersPositionInfo_sdo.getStyle().fontFamily = "Arial";
_s.markersPositionInfo_sdo.getStyle().fontSize= "12px";
_s.markersPositionInfo_sdo.getStyle().color = "#000000";
_s.markersPositionInfo_sdo.setBkColor("#FFFFFF");
_s.addChild(_s.markersPositionInfo_sdo);
};
_s.showMarkersInfoPosition = function(e){
var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e);
var globalX = _s.getGlobalX();
var globalY = _s.getGlobalY();
var localX = viewportMouseCoordinates.screenX - globalX;
var localY = viewportMouseCoordinates.screenY - globalY;
var finalX = Math.round((localX - _s.finalX) * (1/_s.currentScale)) + 1;
var finalY = Math.round((localY - _s.finalY) * (1/_s.currentScale)) + 1;
var infoFinalX = localX + 10;
var infoFinalY = localY + 10;
_s.markersPositionInfo_sdo.setInnerHTML(
"Left: " + finalX +
"
Top:" + finalY +
"
Zoom factor:" + parseFloat(_s.currentScale).toFixed(2));
var infoWidth = _s.markersPositionInfo_sdo.getWidth();
var infoHeight = _s.markersPositionInfo_sdo.getHeight();
if(infoFinalX + infoWidth > _s.stageWidth){
infoFinalX = infoFinalX - infoWidth - 10;
}
if(infoFinalY + infoHeight > _s.stageHeight){
infoFinalY = infoFinalY - infoHeight - 10;
}
_s.markersPositionInfo_sdo.setX(infoFinalX);
_s.markersPositionInfo_sdo.setY(infoFinalY);
};
//##################################//
//various methods.
//##################################//
_s.setDraggingMode = function(draggingMode){
_s.draggingMode_str = draggingMode;
};
_s.disableOrEnablePanOrTouch = function(bool){
_s.isControllerActive_bl = bool;
};
_s.panWithButtons = function(dir){
if(dir == "left"){
_s.finalX -= _s.panSpeed * _s.panDirectionSign;
}else if(dir == "right"){
_s.finalX += _s.panSpeed * _s.panDirectionSign;
}else if(dir == "down"){
_s.finalY += _s.panSpeed * _s.panDirectionSign;
}else if(dir == "up"){
_s.finalY -= _s.panSpeed * _s.panDirectionSign;
}
_s.checkXAndYBouds();
_s.resizeAndPositionImage();
_s.positionMarkers(false);
_s.updateNavigator();
};
_s.zoomInOrOutWithScrollBar = function(percent){
_s.currentScale = percent * (_s.zoomFactor - _s.smallestPossibleScale) + _s.smallestPossibleScale;
_s.mouseX = _s.stageWidth/2;
_s.mouseY = _s.stageHeight/2;
_s.zoomImage(true, true);
};
_s.dispatchScrollBarUpdate = function(animate){
if(_s.currentScale < _s.zoomFactor){
_s.dispatchEvent(FWDMImageManager.SCROLL_BAR_UPDATE, {percent:(_s.currentScale - _s.smallestPossibleScale)/(_s.zoomFactor - _s.smallestPossibleScale), animate:animate});
}else{
_s.dispatchEvent(FWDMImageManager.SCROLL_BAR_UPDATE, {percent:1, animate:animate});
}
};
_s.zoomInOrOutWithButtons = function(dir, withPause){
_s.mouseX = _s.stageWidth/2;
_s.mouseY = _s.stageHeight/2;
if(dir > 0){
//if(_s.currentScale == _s.zoomFactor) return;
if(withPause){
_s.currentScale += _s.zoomSpeed;
}else{
_s.currentScale += _s.zoomSpeed/15;
}
if(_s.currentScale > _s.zoomFactor) _s.currentScale = _s.zoomFactor;
}else if(dir < 0){
//if(_s.finalWidth <= _s.stageWidth) return;
if(withPause){
_s.currentScale -= _s.zoomSpeed;
}else{
_s.currentScale -= _s.zoomSpeed/15;
}
if(parseFloat(_s.currentScale.toFixed(5)) <= parseFloat(_s.smallestPossibleScale.toFixed(5))) _s.currentScale = _s.smallestPossibleScale;
}
_s.dispatchScrollBarUpdate(true, true);
_s.zoomImage(true, true);
};
_s.centerImage = function(){
_s.mouseX = _s.stageWidth/2;
_s.mouseY = _s.stageHeight/2;
_s.finalX = Math.round((_s.stageWidth - _s.finalWidth)/2);
_s.finalY = Math.round((_s.stageHeight - _s.finalHeight)/2);
};
//############################################//
/* navigator utils */
//############################################//
_s.updateNavigator = function(animate){
if(!_s.isNavigatorShowed_bl) return;
_s.dispatchEvent(FWDMImageManager.UPDATE_NAVIGATOR, {
percentX:Math.abs(_s.finalX/(_s.finalWidth - _s.stageWidth)),
percentY:Math.abs(_s.finalY/(_s.finalHeight - _s.stageHeight)),
percentWidth:_s.stageWidth/_s.finalWidth,
percentHeight:_s.stageHeight/_s.finalHeight,
animate:animate
});
};
_s.hideOrShowNavigator = function(){
if(_s.stageWidth < _s.finalWidth || _s.stageHeight < _s.finalHeight){
_s.isNavigatorShowed_bl = true;
_s.dispatchEvent(FWDMImageManager.SHOW_NAVIGATOR);
}else{
_s.isNavigatorShowed_bl = false;
_s.dispatchEvent(FWDMImageManager.HIDE_NAVIGATOR);
}
};
_s.updateOnNavigatorPan = function(percentX, percentY){
_s.finalX = parseInt(percentX * (_s.stageWidth - _s.finalWidth));
_s.finalY = parseInt(percentY * (_s.stageHeight - _s.finalHeight));
_s.positionMarkers(true);
_s.resizeAndPositionImage(true);
};
_s.disableOrEnableMoveButtons = function(){
if(_s.stageHeight < _s.finalHeight){
if(!_s.areUpAndDownButtonsDisabled_bl ){
_s.dispatchEvent(FWDMImageManager.ENABLE_UP_AND_DOWN_BUTTONS);
_s.areUpAndDownButtonsDisabled_bl = true;
}
}else{
if(_s.areUpAndDownButtonsDisabled_bl){
_s.dispatchEvent(FWDMImageManager.DISABLE_UP_AND_DOWN_BUTTONS);
_s.areUpAndDownButtonsDisabled_bl = false;
}
}
if(_s.stageWidth < _s.finalWidth){
if(!_s.areLeftAndRightButtonsDisabled_bl){
_s.dispatchEvent(FWDMImageManager.ENABLE_LEFT_AND_RIGHT_BUTTONS);
_s.areLeftAndRightButtonsDisabled_bl = true;
}
}else{
if(_s.areLeftAndRightButtonsDisabled_bl){
_s.dispatchEvent(FWDMImageManager.DISABLE_LEFT_AND_RIGHT_BUTTONS);
_s.areLeftAndRightButtonsDisabled_bl = false;
}
}
};
//#################################//
//Clean main events.
//#################################//
_s.cleanMainEvents = function(){
if(_s.isMobile_bl){
_s.dumy_sdo.screen.removeEventListener("touchstart", _s.panStartHandler);
_s.dumy_sdo.screen.removeEventListener("MSPointerDown", _s.panStartHandler);
window.removeEventListener("touchmove", _s.panMoveHandler);
window.removeEventListener("touchend", _s.panEndHandler);
window.removeEventListener("MSPointerMove", _s.panMoveHandler);
window.removeEventListener("MSPointerUp", _s.panEndHandler);
window.removeEventListener("touchstart", _s.hideToolTipWindowTest);
window.removeEventListener("MSPointerDown", _s.hideToolTipWindowTest);
window.removeEventListener("MSPointerMove", _s.hideToolTipWindowTest);
_s.dumy_sdo.screen.removeEventListener('gesturestart', _s.gestureStartHandler);
_s.dumy_sdo.screen.removeEventListener('gesturechange', _s.gestureChangeHandler);
_s.dumy_sdo.screen.removeEventListener("touchstart", _s.onSecondDown);
_s.dumy_sdo.screen.removeEventListener("touchstart", _s.onFirstDown);
}else{
if(window.removeEventListener){
_s.dumy_sdo.screen.removeEventListener("mousedown", _s.panStartHandler);
window.removeEventListener("mousemove", _s.panMoveHandler);
window.removeEventListener("mouseup", _s.panEndHandler);
_s.dumy_sdo.screen.removeEventListener ("mousewheel", _s.mouseWheelHandler);
_s.dumy_sdo.screen.removeEventListener('DOMMouseScroll', _s.mouseWheelHandler);
window.removeEventListener("mousemove", _s.hideToolTipWindowTest);
window.removeEventListener("mousemove", _s.showMarkersInfoPosition);
window.removeEventListener ("mousewheel", _s.showMarkersInfoPosition);
window.removeEventListener('DOMMouseScroll', _s.showMarkersInfoPosition);
_s.dumy_sdo.screen.removeEventListener("mousedown", _s.onSecondDown);
_s.dumy_sdo.screen.removeEventListener("mousedown", _s.onFirstDown);
}else if(document.detachEvent){
document.detachEvent("onmousemove", _s.panMoveHandler);
document.detachEvent("onmouseup", _s.panEndHandler);
_s.dumy_sdo.screen.detachEvent("onmousedown", _s.panStartHandler);
_s.dumy_sdo.screen.detachEvent("onmousewheel", _s.mouseWheelHandler);
document.detachEvent("onmousemove", _s.hideToolTipWindowTest);
document.detachEvent("onmousemove", _s.showMarkersInfoPosition);
document.detachEvent("onmousewheel", _s.showMarkersInfoPosition);
}
}
clearTimeout(_s.dispDl_to);
clearTimeout(_s.tweenDone_to);
clearTimeout(_s.removeSmallSDOId_to);
clearTimeout(_s.setAlphaWithDelayId_to);
clearTimeout(_s.hideToolTipWindowId_to);
clearTimeout(_s.addHideToolTipWindowTestWithDelayId_to);
clearTimeout(_s.showToolTipWindoId_to);
clearTimeout(_s.showMarkerToolTipId_to);
clearTimeout(_s.setupMarkersAndToolTipWindowsId_to);
clearTimeout(_s.secondTapId_to);
clearTimeout(_s.enableMarkersId_to);
clearTimeout(_s.showMarkersFirstTimeId_to);
};
//#################################//
/* destroy */
//################################//
_s.destroy = function(){
_s.cleanMainEvents();
FWDAnimation.killTweensOf(_s);
if(_s.smallImage_sdo){
FWDAnimation.killTweensOf(_s.smallImage_sdo);
_s.smallImage_sdo.destroy();
}
_s.removeZoomDragAndSwipeForMobile();
if(_s.showMarkers_bl){
var marker;
var toolTipWindow;
for(var i=0; i<_s.totalMarkers; i++){
marker = _s.markers_ar[i];
FWDAnimation.killTweensOf(marker);
marker.destroy();
}
if(_s.markersToolTip_do) _s.markersToolTip_do.destroy();
for(var i =0; i < _s.totalToolTipsWindows; i++){
toolTipWindow = _s.toolTipWindows_ar[i];
if(toolTipWindow) toolTipWindow.destroy();
}
}
_s.dumy_sdo.screen.style.cursor = "default";
_s.dumy_sdo.destroy();
if(_s.markersPositionInfo_sdo){
_s.markersPositionInfo_sdo.setInnerHTML("");
_s.markersPositionInfo_sdo.destroy();
}
_d = null;
prt = null;
_s.toolTipDataWindows_ar = null;
_s.markersList_ar = null;
_s.markersPosition_ar = null;
_s.largeImagesPaths_ar = null;
_s.hider = null;
_s.curMarker_do = null;
_s.dumy_sdo = null;
_s.smallImage_sdo = null;
_s.markersPositionInfo_sdo = null;
_s.handMovePath_str = null;
_s.handGrabPath_str = null;
_s.backgroundColor_str = null;
_s.draggingMode_str = null;
_s.setInnerHTML("");
prototype.destroy();
_s = null;
prototype = null;
FWDMImageManager.prototype = null;
};
_s.init();
};
/* set prototype */
FWDMImageManager.setPrototype = function(){
FWDMImageManager.prototype = new FWDMDisplayObject("div");
};
FWDMImageManager.LARGE_IMAGE_LOAD_ERROR = "largeImageLoadError";
FWDMImageManager.IMAGE_ZOOM_COMPLETE = "zoomComplete";
FWDMImageManager.SCROLL_BAR_UPDATE = "scrollBarUpdate";
FWDMImageManager.PAN_START = "panStart";
FWDMImageManager.PAN = "pan";
FWDMImageManager.UPDATE_NAVIGATOR = "updateNavigator";
FWDMImageManager.SHOW_NAVIGATOR = "showNavigator";
FWDMImageManager.HIDE_NAVIGATOR = "hideNavigator";
FWDMImageManager.SHOW_INFO = "showInfo";
FWDMImageManager.DISABLE_LEFT_AND_RIGHT_BUTTONS = "disableLeftAndRightButtons";
FWDMImageManager.ENABLE_LEFT_AND_RIGHT_BUTTONS = "enableLeftAndRightButtons";
FWDMImageManager.DISABLE_UP_AND_DOWN_BUTTONS = "disableUpAndDownButtons";
FWDMImageManager.ENABLE_UP_AND_DOWN_BUTTONS = "enableUpAndDownButtons";
FWDMImageManager.prototype = null;
window.FWDMImageManager = FWDMImageManager;
}(window));