/* FWDMNavigator */ (function (window){ var FWDMNavigator = function(prt, _d){ var _s = this; var prototype = FWDMNavigator.prototype; _s.hider = null; _s.mainHolder_do = null; _s.mainImagesHolder_do = null; _s.border_sdo = null; _s.handler_sdo = null; _s.dumy_sdo = null; _s.borderColor_str = _d.navigatorBorderColor_str; _s.handlerColor_str = _d.navigatorHandlerColor_str; _s.handMovePath_str = _d.handMovePath_str; _s.handGrabPath_str = _d.handGrabPath_str; _s.dPos = _s.navigatorPosition_str = _d.navigatorPosition_str; _s.navigatorBackgroundColor = _d.navigatorBackgroundColor; _s.borderSize = 2; _s.stageWidth; _s.stageHeight; _s.totalWidth = _d.navigatorWidth; if(prt.stageWidth < 600) _s.totalWidth *= .65; if(_s.totalWidth < 78) _s.totalWidth = 78; _s.totalHeight = Math.round(_s.totalWidth * (_d.imageHeight/_d.imageWidth)); _s.offsetX = _d.navigatorOffsetX; _s.offsetY = _d.navigatorOffsetY; _s.finalWidth; _s.finalHeight; _s.finalX; _s.finalY; _s.xPositionOnPress; _s.yPositionOnPress; _s.lastPresedX; _s.lastPresedY; _s.tweenCompleteId_to; _s.isShowed_bl = true; _s.isTweening_bl = false; _s.isDragging_bl = false; _s.isMobile_bl = FWDMUtils.isMobile; _s.hasPointerEvent_bl = FWDMUtils.hasPointerEvent; //##########################################// /* initialize _s */ //##########################################// _s.init = function(){ _s.setOverflow("visible"); _s.setSelectable(false); _s.setupMainContiners(); _s.hide(); _s.resizeAndPosition(); _s.handler_sdo.screen.style.cursor = 'url(' + _s.handMovePath_str + '), default'; _s.update(1,1,1,1,true); }; _s.activate = function(img){ _s.addPannSupport(); //_s.screen.onmousedown = function(){_s.dispatchEvent(FWDMNavigator.PAN_START);}; //if(FWDMUtils.isIEAndLessThen9) _s.handler_sdo.screen.onmousedown = function(){_s.dispatchEvent(FWDMNavigator.PAN_START);}; }; _s.resizeAndPosition = function(){ _s.stageWidth = prt.stageWidth; _s.stageHeight = prt.stageHeight; var offsetX = _s.offsetX; var offsetY = _s.offsetY; if(_s.stageWidth < 500){ offsetX = 10; offsetY = 10; } _s.navigatorPosition_str = _s.dPos; if(((prt.stageWidth - prt.controller_do.curWidth)/2 - _s.offsetX * 2) < _s.totalWidth){ if((_s.navigatorPosition_str == FWDMNavigator.TOP_LEFT || _s.navigatorPosition_str == FWDMNavigator.TOP_RIGHT) && prt.controller_do.controllerVerticalPosition_str == FWDMController.POSITION_TOP){ if(_s.navigatorPosition_str == FWDMNavigator.TOP_RIGHT){ _s.navigatorPosition_str = FWDMNavigator.BOTTOM_RIGHT; }else if(_s.navigatorPosition_str == FWDMNavigator.TOP_LEFT){ _s.navigatorPosition_str = FWDMNavigator.BOTTOM_LEFT; } }else if((_s.navigatorPosition_str == FWDMNavigator.BOTTOM_LEFT || _s.navigatorPosition_str == FWDMNavigator.BOTTOM_RIGHT) && prt.controller_do.controllerVerticalPosition_str == FWDMController.POSITION_BOTTOM){ if(_s.navigatorPosition_str == FWDMNavigator.BOTTOM_LEFT){ _s.navigatorPosition_str = FWDMNavigator.TOP_LEFT; }else if(_s.navigatorPosition_str == FWDMNavigator.BOTTOM_RIGHT){ _s.navigatorPosition_str = FWDMNavigator.TOP_RIGHT; } } } if(_s.navigatorPosition_str == FWDMNavigator.TOP_LEFT){ _s.setX(offsetX); _s.setY(offsetY); }else if(_s.navigatorPosition_str == FWDMNavigator.TOP_RIGHT){ _s.setX(_s.stageWidth - _s.totalWidth - offsetX - _s.borderSize); _s.setY(offsetY); }else if(_s.navigatorPosition_str == FWDMNavigator.BOTTOM_LEFT){ _s.setX(offsetX); _s.setY(_s.stageHeight - _s.totalHeight - offsetY - _s.borderSize); }else if(_s.navigatorPosition_str == FWDMNavigator.BOTTOM_RIGHT){ _s.setX(_s.stageWidth - _s.totalWidth - offsetX - _s.borderSize); _s.setY(_s.stageHeight - _s.totalHeight - offsetY - _s.borderSize); } _s.isShowed_bl = true; _s.hide(false) }; _s.setupHider = function(hider){ //_s.hider = hider; //_s.hider.addListener(FWDMHider.HIDE, _s.onHiderHide); }; _s.onHiderHide = function(){ //if(FWDMUtils.hitTest(_s.mainHolder_do.screen, _s.hider.globalX, _s.hider.globalY)) _s.hider.reset(); }; //###########################################// //Setup main containers //###########################################// _s.setupMainContiners = function(){ _s.mainHolder_do = new FWDMDisplayObject("div", "absolute", "visible"); _s.mainHolder_do.setWidth(_s.totalWidth); _s.mainHolder_do.setHeight(_s.totalHeight); _s.addChild(_s.mainHolder_do); _s.mainImagesHolder_do = new FWDMDisplayObject("div", "absolute", "visible"); _s.image_canvas = new FWDMSimpleDisplayObject("canvas"); _s.image_canvas.screen.width = _s.totalWidth; _s.image_canvas.screen.height = _s.totalHeight; _s.image_canvas.setX(0); _s.image_canvas.setY(0); //_s.image_canvas.getStyle().backgroundColor = "#FFFF00"; _s.canvas_ctx = _s.image_canvas.screen.getContext("2d"); _s.mainHolder_do.addChildAt(_s.image_canvas, 0); _s.canvas_ctx.fillStyle = _s.navigatorBackgroundColor; _s.draw_to = setTimeout(function(){ if(!FWDMUtils.isLocal){ _s.canvas_ctx.clearRect(0, 0, _s.totalWidth, _s.totalHeight); _s.canvas_ctx.imageSmoothingEnabled = true; _s.canvas_ctx.imageSmoothingQuality = 'high'; _s.canvas_ctx.fillRect(0, 0, _s.totalWidth, _s.totalHeight); _s.canvas_ctx.drawImage(_d.image_img, 0, 0, _d.imageWidth, _d.imageHeight, 0, 0, _s.totalWidth, _s.totalHeight); _d.image_img.onload = function(){ _s.canvas_ctx.drawImage(_d.image_img, 0, 0, _d.imageWidth, _d.imageHeight, 0, 0, _s.totalWidth, _s.totalHeight); } } }, 400); _s.border_sdo = new FWDMSimpleDisplayObject("div"); _s.border_sdo.setWidth(_s.totalWidth - 2); _s.border_sdo.setHeight(_s.totalHeight - 2); _s.border_sdo.getStyle().boxSizing = 'content-box'; _s.border_sdo.getStyle().borderStyle = "solid"; _s.border_sdo.getStyle().borderWidth = _s.borderSize + "px"; _s.border_sdo.getStyle().borderColor = _s.borderColor_str; _s.mainHolder_do.addChild(_s.border_sdo); _s.handler_sdo = new FWDMSimpleDisplayObject("div"); _s.handler_sdo.setWidth(_s.totalWidth - 2); _s.handler_sdo.setHeight(_s.totalHeight - 2); _s.handler_sdo.getStyle().boxSizing = 'content-box'; _s.handler_sdo.getStyle().borderStyle = "solid"; _s.handler_sdo.getStyle().borderWidth = "1px"; if(FWDMUtils.isIE) _s.handler_sdo.getStyle().background = "url('dumy')"; _s.handler_sdo.getStyle().borderColor = _s.handlerColor_str; _s.mainHolder_do.addChild(_s.handler_sdo); }; //##########################################// /* Setup images sdo */ //##########################################// _s.setupImageSdo = function(img){ _s.image_img = img; }; //########################################// /* update navigator dragger */ //########################################// _s.update = function(percentX, percentY, percentWidth, percentHeight, animate){ if(percentWidth > 1) percentWidth = 1; if(percentHeight > 1) percentHeight = 1; if(percentX > 1) percentX = 1; if(percentY > 1) percentY = 1; if(isNaN(percentX)) percentX = 0; if(isNaN(percentY)) percentY = 0; _s.finalWidth = Math.round(percentWidth * (_s.totalWidth - _s.borderSize * 2)); _s.finalHeight = Math.round(percentHeight * (_s.totalHeight - _s.borderSize * 2)); _s.finalX = Math.round((percentX * ((_s.totalWidth) - _s.finalWidth))); if(_s.finalX <= _s.borderSize || percentWidth == 1){ _s.finalX = _s.borderSize; }else if(_s.finalX >= _s.totalWidth - _s.finalWidth - 2){ _s.finalX = _s.totalWidth - _s.finalWidth - 2; } _s.finalY = Math.round((percentY * ((_s.totalHeight) - _s.finalHeight))); if(_s.finalY <= _s.borderSize || percentHeight == 1){ _s.finalY = _s.borderSize; }else if(_s.finalY >= _s.totalHeight - _s.finalHeight - 2){ _s.finalY = _s.totalHeight - _s.finalHeight - 2; } clearTimeout(_s.tweenCompleteId_to); if(animate){ _s.isTweening_bl = true; _s.tweenCompleteId_to = setTimeout(function(){if(_s == null) return; _s.isTweening_bl = false;}, 200); FWDAnimation.killTweensOf(_s.handler_sdo); FWDAnimation.to(_s.handler_sdo, .2, {x:_s.finalX, y:_s.finalY, w:_s.finalWidth, h:_s.finalHeight}); }else{ _s.isTweening_bl = false; FWDAnimation.killTweensOf(_s.handler_sdo); _s.handler_sdo.setX(_s.finalX); _s.handler_sdo.setY(_s.finalY); _s.handler_sdo.setWidth(_s.finalWidth); _s.handler_sdo.setHeight(_s.finalHeight); } }; //###############################################// //Add touch pann support //###############################################// _s.addPannSupport = function(){ if(_s.isMobile_bl){ if(_s.hasPointerEvent_bl){ _s.handler_sdo.screen.addEventListener("MSPointerDown", _s.panStartHandler); }else{ _s.handler_sdo.screen.addEventListener("touchstart", _s.panStartHandler); } }else if(_s.handler_sdo.screen.addEventListener){ _s.handler_sdo.screen.addEventListener("mousedown", _s.panStartHandler); }else if(_s.handler_sdo.screen.attachEvent){ _s.handler_sdo.screen.attachEvent("onmousedown", _s.panStartHandler); } }; _s.panStartHandler = function(e){ if(e.preventDefault) e.preventDefault(); if(_s.isTweening_bl) return; var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e); _s.isDragging_bl = true; _s.xPositionOnPress = _s.handler_sdo.getX(); _s.yPositionOnPress = _s.handler_sdo.getY(); _s.lastPresedX = viewportMouseCoordinates.screenX; _s.lastPresedY = viewportMouseCoordinates.screenY; _s.dispatchEvent(FWDMNavigator.PAN_START); if(_s.isMobile_bl){ if(_s.hasPointerEvent_bl){ window.addEventListener("MSPointerMove", _s.panMoveHandler); window.addEventListener("MSPointerUp", _s.panEndHandler); }else{ window.addEventListener("touchmove", _s.panMoveHandler); window.addEventListener("touchend", _s.panEndHandler); } }else{ 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) return; var viewportMouseCoordinates = FWDMUtils.getViewportMouseCoordinates(e); _s.finalX = Math.round(_s.xPositionOnPress + viewportMouseCoordinates.screenX - _s.lastPresedX); if(_s.finalX < _s.borderSize){ _s.finalX = _s.borderSize; }else if(_s.finalX >= _s.totalWidth - _s.finalWidth - 2){ _s.finalX = _s.totalWidth - _s.finalWidth - 2; } _s.handler_sdo.setX(_s.finalX); _s.finalY = Math.round(_s.yPositionOnPress + viewportMouseCoordinates.screenY - _s.lastPresedY); if(_s.finalY < _s.borderSize){ _s.finalY = _s.borderSize; }else if(_s.finalY >= _s.totalHeight - _s.finalHeight - 2){ _s.finalY = _s.totalHeight - _s.finalHeight - 2; } _s.handler_sdo.setY(_s.finalY); var percentX = (_s.finalX - (_s.borderSize))/(_s.totalWidth - _s.finalWidth - _s.borderSize * 2); var percentY = (_s.finalY - (_s.borderSize))/(_s.totalHeight - _s.finalHeight - _s.borderSize * 2); _s.dispatchEvent(FWDMNavigator.PAN, {percentX:percentX, percentY:percentY }); }; _s.panEndHandler = function(e){ _s.isDragging_bl = false; _s.dispatchEvent(FWDMNavigator.PAN_END); if(_s.isMobile_bl){ if(_s.hasPointerEvent_bl){ window.removeEventListener("MSPointerMove", _s.panMoveHandler); window.removeEventListener("MSPointerUp", _s.panEndHandler); }else{ window.removeEventListener("touchmove", _s.panMoveHandler); window.removeEventListener("touchend", _s.panEndHandler); } }else{ 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); } } }; //##########################################// /* show / hide*/ //##########################################// _s.show = function(animate){ if(_s.isShowed_bl) return; if(animate){ FWDAnimation.to(_s.mainHolder_do, 1, {y:0, ease:Expo.easeInOut}); }else{ _s.resizeAndPosition(); FWDAnimation.killTweensOf(_s.mainHolder_do); _s.mainHolder_do.setY(0); } _s.isShowed_bl = true; }; _s.hide = function(animate){ if(!_s.isShowed_bl) return; if(_s.navigatorPosition_str == FWDMNavigator.TOP_LEFT || _s.navigatorPosition_str == FWDMNavigator.TOP_RIGHT){ if(animate){ FWDAnimation.to(_s.mainHolder_do, 1, {y:-_s.totalHeight - _s.offsetY - _s.borderSize, ease:Expo.easeInOut}); _s.update(1,1,1,1,true); }else{ FWDAnimation.killTweensOf(_s.mainHolder_do); _s.mainHolder_do.setY(-_s.totalHeight - _s.offsetY - _s.borderSize); } }else if(_s.navigatorPosition_str == FWDMNavigator.BOTTOM_LEFT || _s.navigatorPosition_str == FWDMNavigator.BOTTOM_RIGHT){ if(animate){ FWDAnimation.to(_s.mainHolder_do, 1, {y:_s.totalHeight + _s.offsetY + _s.borderSize, ease:Expo.easeInOut}); _s.update(1,1,1,1,true); }else{ FWDAnimation.killTweensOf(_s.mainHolder_do); _s.mainHolder_do.setY(_s.totalHeight + _s.offsetY + _s.borderSize); } } _s.isShowed_bl = false; }; //#####################################// /* clean main events */ //#####################################// _s.cleanMainEvents = function(){ if(_s.isMobile_bl){ _s.handler_sdo.screen.removeEventListener("touchstart", _s.panStartHandler); _s.handler_sdo.screen.addEventListener("MSPointerDown", _s.panStartHandler); window.removeEventListener("touchmove", _s.panMoveHandler); window.removeEventListener("touchend", _s.panEndHandler); window.removeEventListener("MSPointerMove", _s.panMoveHandler); window.removeEventListener("MSPointerUp", _s.panEndHandler); }else if(_s.handler_sdo.screen.removeEventListener){ _s.handler_sdo.screen.removeEventListener("mousedown", _s.panStartHandler); window.removeEventListener("mousemove", _s.panMoveHandler); window.removeEventListener("mouseup", _s.panEndHandler); }else if(_s.handler_sdo.screen.detachEvent){ _s.handler_sdo.screen.detachEvent("onmousedown", _s.panStartHandler); document.detachEvent("onmousemove", _s.panMoveHandler); document.detachEvent("onmouseup", _s.panEndHandler); } _s.screen.onmousedown = null; _s.handler_sdo.screen.onmousedown = null; clearTimeout(_s.tweenCompleteId_to); clearTimeout(_s.draw_to); }; //##############################// /* destroy */ //##############################// _s.destroy = function(){ _s.cleanMainEvents(); if(_s.hider){ _s.hider.removeListener(FWDMHider.HIDE, _s.onHiderHide); }; FWDAnimation.killTweensOf(_s.mainHolder_do); _s.mainHolder_do.destroy(); FWDAnimation.killTweensOf(_s.handler_sdo); _s.handler_sdo.destroy(); _s.mainImagesHolder_do.destroy(); if(_s.dumy_sdo) _s.dumy_sdo.destroy(); _s.hider = null; _s.mainHolder_do = null; _s.mainImagesHolder_do = null; _s.smallImage_sdo = null; _s.handler_sdo = null; _s.dumy_sdo = null; _s.images_ar = _d.navigatorImages_ar; _s.borderColor_str = null; _s.handlerColor_str = null; _s.handMovePath_str = null; _s.handGrabPath_str = null; _s.navigatorPosition_str = null; _d = null; prt = null; _s.setInnerHTML(""); prototype.destroy(); _s = null; prototype = null; FWDMNavigator.prototype = null; }; _s.init(); }; /* set prototype */ FWDMNavigator.setPrototype = function(){ FWDMNavigator.prototype = new FWDMDisplayObject("div"); }; FWDMNavigator.TOP_LEFT = "topleft"; FWDMNavigator.TOP_RIGHT = "topright"; FWDMNavigator.BOTTOM_LEFT = "bottomleft"; FWDMNavigator.BOTTOM_RIGHT = "bottomright"; FWDMNavigator.PAN_START = "panStart"; FWDMNavigator.PAN_END = "panEnd"; FWDMNavigator.PAN = "pan"; FWDMNavigator.prototype = null; window.FWDMNavigator = FWDMNavigator; }(window));