\";\r\n\r\n var leisureHtml = \"\";\r\n var meetingHtml = \"\";\r\n\r\n angular.forEach(data, function (el: any, index) {\r\n if (el.type == \"leisure\") {\r\n leisureHtml += buildTabPane(el);\r\n } else {\r\n meetingHtml += buildTabPane(el);\r\n }\r\n });\r\n\r\n html += \"
\";\r\n html += \"
\";\r\n html += \"
\";\r\n html += \"
\";\r\n html += \"
\";\r\n html += \"
\";\r\n html += \"
\";\r\n\r\n return html;\r\n }\r\n\r\n function scrollList() {\r\n var listContainer = $j(\".tab-pane.active\");\r\n var activeListItem = $j(\".tab-pane.active ul.locationList li.listItem.active\");\r\n var distance = listContainer.scrollTop() +\r\n (activeListItem.position().top - listContainer.position().top)\r\n - (listContainer.height() / 2) + (activeListItem.height() / 2);\r\n listContainer.animate({ scrollTop: distance }, 500, 'swing');\r\n }\r\n\r\n\r\n return {\r\n restrict: \"EA\",\r\n priority: 1001,\r\n replace: true,\r\n link: function (scope, element, attrs) {\r\n\r\n // Build Sidebar List\r\n var sidebar = element.find(\"#mapSidebar\");\r\n var locations = scope.resort.location;\r\n\r\n var sideBarHtml = buildSideBar(locations);\r\n sidebar.html(sideBarHtml);\r\n\r\n var regex = new RegExp(\"[\\\\?&]m=([^]*)\"),\r\n results: any = regex.exec(location.search);\r\n\r\n if ((results !== null && results[1] == 1) || $rootScope[\"activeTab\"] == 'meeting' || $j(\"#topNavLink\").text().trim().toLowerCase() == \"meetings\") {\r\n ($j(\"#tabs a:last\") as any).tab(\"show\");\r\n }\r\n\r\n var mainContainer = $j(\"#mainMapContainer\");\r\n\r\n var containerWidth = mainContainer.width() * (3 / 4);\r\n $j(\"#mapContainer\").width(containerWidth);\r\n\r\n var containerHeight = containerWidth * 430 / 692;\r\n $j(\"#mapContainer\").height(containerHeight);\r\n $j(\"#mainMapContainer\").height((containerHeight + 1));\r\n\r\n var xRatio = containerWidth / 692;\r\n var yRatio = containerHeight / 430;\r\n\r\n\r\n var map = {\r\n parentGroup: null,\r\n mapImages: null,\r\n canvasId: \"mapCanvas\",\r\n points: locations,\r\n fromListClick: false,\r\n stage: null,\r\n layer: null,\r\n popover: null,\r\n scale: 1,\r\n activeItem: null,\r\n targetItem: null,\r\n\r\n initialize: function (c2) {\r\n map.stage = new Kinetic.Stage({\r\n container: map.canvasId,\r\n width: containerWidth,\r\n height: containerHeight\r\n });\r\n map.layer = new Kinetic.Layer();\r\n map.parentGroup = new Kinetic.Group();\r\n map.mapImages = new Kinetic.Group();\r\n\r\n var smResort = new Kinetic.Image({\r\n x: 0,\r\n y: 0,\r\n image: c2,\r\n width: Math.round(containerWidth),\r\n height: Math.round(containerHeight),\r\n listening: true,\r\n name: \"smallMap\"\r\n });\r\n\r\n smResort.on('zoomIn', function (evt) {\r\n smResort.opacity(0);\r\n lgResort.opacity(1);\r\n });\r\n\r\n var lgResort = new Kinetic.Image({\r\n x: 0,\r\n y: 0,\r\n image: lgImageObj,\r\n width: Math.round(containerWidth),\r\n height: Math.round(containerHeight),\r\n listening: true,\r\n name: \"largeMap\"\r\n });\r\n\r\n lgResort.on('zoomOut', function (evt) {\r\n lgResort.opacity(0);\r\n smResort.opacity(1);\r\n });\r\n\r\n // add the shape to the layer\r\n map.mapImages.add(lgResort);\r\n map.mapImages.add(smResort);\r\n map.parentGroup.add(map.mapImages);\r\n\r\n // iterate over points to build marker groups\r\n for (var i = 0; i < map.points.length; i++) {\r\n // build marker layer - shape, shadow, and text\r\n var kids = createMarkerGroup(map.points[i], i, xRatio, yRatio);\r\n\r\n // add handler to fire tweening function\r\n kids.on(\"tap\", function (e) {\r\n var target = (angular.isUndefined(e.target.parent)) ?\r\n e.target : e.target.parent.attrs.index;\r\n $j(\".listItem\").removeClass(\"active\");\r\n scope.showPopover = false;\r\n scope.$apply();\r\n map.playTween(target);\r\n\r\n });\r\n\r\n kids.on(\"click\", function (e) {\r\n var target = (angular.isUndefined(e.target.parent)) ?\r\n e.target : e.target.parent.attrs.index;\r\n $j(\".listItem\").removeClass(\"active\");\r\n scope.showPopover = false;\r\n scope.$apply();\r\n map.playTween(target);\r\n });\r\n\r\n map.parentGroup.add(kids);\r\n }\r\n\r\n map.layer.add(map.parentGroup);\r\n map.stage.add(map.layer);\r\n },\r\n\r\n apply: function () {\r\n try {\r\n scope.$apply();\r\n } catch (e) { }\r\n },\r\n\r\n playTween: function (target) {\r\n var groupName = \"#group\" + (target);\r\n var shape = map.stage.find(groupName);\r\n\r\n // using the text group for the x/y coords as the shape objects don't have those attrs.\r\n var coordx = shape[0].children[1].attrs.x;\r\n var coordy = shape[0].children[1].attrs.y;\r\n\r\n scope.showPopover = false;\r\n\r\n if (map.scale == 1) {\r\n map.panZoom(target, coordx, coordy);\r\n } else if (map.scale == 2 && scope.activeItem !== target) {\r\n map.pan(target, coordx, coordy);\r\n } else if (map.scale == 2 && scope.activeItem == target) {\r\n map.scale = 1;\r\n map.resetStage();\r\n }\r\n },\r\n\r\n panZoom: function (el, x, y) {\r\n var panZoomDef = {\r\n node: map.parentGroup,\r\n scaleX: 2,\r\n scaleY: 2,\r\n x: -x,\r\n y: -y,\r\n easing: Kinetic.Easings.EaseInOut,\r\n duration: 0.6,\r\n onFinish: function () {\r\n var loc = $j.grep(locations, function (e: any) { return e.id == el; });\r\n map.popover = buildPopover(loc[0], x, y, el);\r\n map.finishTween(2, el, true);\r\n }\r\n };\r\n var anim = new Kinetic.Tween(panZoomDef);\r\n anim.tween.play();\r\n },\r\n\r\n pan: function (el, x, y) {\r\n var pan = {\r\n node: map.parentGroup,\r\n x: -x,\r\n y: -y,\r\n easing: Kinetic.Easings.EaseInOut,\r\n duration: 0.6,\r\n onFinish: function () {\r\n var loc = $j.grep(locations, function (e: any) { return e.id == el; });\r\n map.popover = buildPopover(loc[0], x, y, el);\r\n map.finishTween(2, el, true);\r\n }\r\n };\r\n var anim = new Kinetic.Tween(pan);\r\n anim.tween.play();\r\n },\r\n\r\n resetStage: function () {\r\n var reset = {\r\n node: map.parentGroup,\r\n x: 0,\r\n y: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n easing: Kinetic.Easings.EaseInOut,\r\n duration: 0.6,\r\n onFinish: function () {\r\n map.finishTween(1, null, false);\r\n }\r\n };\r\n var anim = new Kinetic.Tween(reset);\r\n anim.tween.play();\r\n },\r\n\r\n finishTween: function (scale, activeItem, showPopover) {\r\n if (scale == 2) {\r\n scope.zoomButton = true;\r\n var img = map.stage.find(\".smallMap\");\r\n img.fire('zoomIn');\r\n } else {\r\n scope.zoomButton = false;\r\n var img = map.stage.find(\".largeMap\");\r\n img.fire('zoomOut');\r\n }\r\n map.scale = scale;\r\n map.activeItem = activeItem;\r\n scope.popover = map.popover;\r\n scope.showPopover = showPopover;\r\n\r\n if (activeItem !== null) {\r\n var item = $j.grep(locations, function (e: any) { return e.id == activeItem; });\r\n setActiveTabItem(item[0]);\r\n scrollList();\r\n }\r\n map.apply();\r\n }\r\n };\r\n\r\n var lgImageObj = new Image();\r\n lgImageObj.src = scope.resort.map_img;\r\n var smImageObj = new Image();\r\n smImageObj.src = lgImageObj.src;\r\n\r\n\r\n smImageObj.onload = function () {\r\n var step1, step2;\r\n step1 = (3 / 4);\r\n step2 = (2 / 3);\r\n // var c1 = scaleImage(smImageObj, step1);\r\n var c2 = scaleImage(smImageObj, step2);\r\n\r\n map.initialize(c2);\r\n\r\n // Listen for list-item click\r\n $j(\".listItem\").on(\"click\", function (e) {\r\n if ($j(this).hasClass(\"active\")) {\r\n $j(this).toggleClass(\"active\");\r\n scope.showPopover = false;\r\n map.resetStage();\r\n scope.$apply();\r\n } else {\r\n $j(\".listItem\").removeClass(\"active\");\r\n scope.showPopover = false;\r\n scope.$apply();\r\n $j(this).addClass(\"active\");\r\n scrollList();\r\n var id = $j(this).data(\"list-item\");\r\n map.playTween(id);\r\n }\r\n });\r\n\r\n $rootScope.$on(\"closePopover\", function () {\r\n scope.showPopover = false;\r\n scope.zoomButton = false;\r\n $j(\".listItem\").removeClass(\"active\");\r\n map.fromListClick = false;\r\n map.resetStage();\r\n });\r\n\r\n $rootScope.$on(\"resetStage\", function () {\r\n scope.showPopover = false;\r\n map.fromListClick = false;\r\n map.resetStage();\r\n });\r\n };\r\n }\r\n };\r\n }]) as any);\r\n})(window, window['$j']);\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.filter('naFilter', function () {\r\n return function (input) {\r\n if (input == 0) {\r\n return \"NA\";\r\n } else {\r\n return input;\r\n }\r\n };\r\n })\r\n .filter('ftFilter', function () {\r\n return function (input) {\r\n if (!isNaN(input) && input !== 0) {\r\n return input + \"'\";\r\n } else {\r\n return input;\r\n }\r\n };\r\n });\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.directive('partialSlideshow', ['$document',\r\n function ($document) {\r\n return {\r\n restrict: 'A',\r\n priority: 1001,\r\n link: function (scope, element, attrs) {\r\n\r\n\r\n }\r\n };\r\n }]);\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.directive('mapPopover', [function () {\r\n return {\r\n restrict: 'EAC',\r\n templateUrl: 'omni/assets/resortmap/views/popover.tpl.html'\r\n };\r\n }]);\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.directive('roomLayout', (['$document',\r\n function ($document) {\r\n return {\r\n restrict: 'EA',\r\n link: function (scope, element, attrs) {\r\n\r\n function getOffset(index, length) {\r\n if (length > 5) {\r\n var left, right;\r\n left = 2;\r\n right = length - 3;\r\n\r\n // index is on the far left\r\n if (index <= left) {\r\n return 0;\r\n\r\n // index is on the far right\r\n } else if (index >= right) {\r\n return (right - 2);\r\n\r\n // index is somewhere in the middle\r\n } else {\r\n return (index - 2);\r\n }\r\n }\r\n }\r\n\r\n var partials = scope.partials;\r\n var s, a, c, p;\r\n var part = 0;\r\n var layouts = partials[part];\r\n scope._Index = 0;\r\n\r\n s = $document.find(\"#partialSelect\");\r\n a = $document.find(\"#area\");\r\n c = $document.find(\"#ceiling\");\r\n p = $document.find(\"#capacity\");\r\n var body = $document.find(\"body\");\r\n var bodyWidth = body.width();\r\n\r\n var offsetLength = 80;\r\n if (bodyWidth >= 1200) {\r\n offsetLength = 117;\r\n } else if (bodyWidth < 1200 && bodyWidth >= 992) {\r\n offsetLength = 92;\r\n } else if (bodyWidth < 992 && bodyWidth >= 768) {\r\n offsetLength = 83;\r\n }\r\n\r\n s.on(\"change\", function (e) {\r\n part = e.target.value;\r\n scope.layouts = partials[part].layout;\r\n a.html(partials[part].area);\r\n c.html(scope.room.ceiling);\r\n p.html(partials[part].capacity);\r\n scope._Index = 0;\r\n scope.length = scope.layouts.length;\r\n scope.$digest();\r\n });\r\n\r\n scope.length = scope.layouts.length;\r\n\r\n scope.$watch('_Index', function () {\r\n var offset = getOffset(scope._Index, scope.length);\r\n jQuery(\"#layoutNav\").animate({\r\n left: -(offset * offsetLength)\r\n });\r\n });\r\n\r\n scope.isActive = function (index) {\r\n return scope._Index === index;\r\n };\r\n scope.showPrev = function () {\r\n var oldIndex = angular.copy(scope._Index);\r\n scope._Index = (scope._Index > 0) ? --scope._Index : scope.length - 1;\r\n };\r\n\r\n scope.showNext = function () {\r\n var oldIndex = angular.copy(scope._Index);\r\n scope._Index = (scope._Index < scope.length - 1) ? ++scope._Index : 0;\r\n };\r\n\r\n scope.showPhoto = function (index) {\r\n var oldIndex = angular.copy(scope._Index);\r\n scope._Index = index;\r\n };\r\n\r\n scope.setWidth = function (len) {\r\n return len > 5;\r\n }\r\n }\r\n };\r\n }]) as any);\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.factory('DataService', ['$resource', \"$window\", function ($resource, $window) {\r\n return $resource($window.endpointUrl);\r\n }])\r\n // underscore.js\r\n .factory('_', [\"$window\", function ($window: any) {\r\n\r\n return $window._;\r\n }])\r\n // Kinetic.js\r\n .factory('Kinetic', [\"$window\", function ($window: any) {\r\n\r\n return $window.Kinetic;\r\n }])\r\n // resort data object\r\n .factory('ResortProvider', ['_', function (_: any) {\r\n\r\n var resort,\r\n location,\r\n floor,\r\n room;\r\n var provider = {\r\n setResort: function (data) {\r\n resort = data;\r\n },\r\n getResort: function () {\r\n return resort;\r\n },\r\n getLocation: function (i) {\r\n if (resort.is_resort) {\r\n angular.forEach(resort.location, function (value, index) {\r\n if (value.id == i) {\r\n location = value;\r\n }\r\n });\r\n } else {\r\n location = resort.location[0];\r\n }\r\n return location;\r\n },\r\n getFloor: function (id) {\r\n angular.forEach(location.floor, function (value, index) {\r\n if (value.id == id) {\r\n floor = value;\r\n }\r\n });\r\n return floor;\r\n },\r\n getRoom: function (id) {\r\n angular.forEach(floor.room, function (value, index) {\r\n if (value.id == id) {\r\n room = value;\r\n }\r\n });\r\n return room;\r\n }\r\n };\r\n return provider;\r\n }]);\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.directive('sidebar', ([\r\n function () {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attrs) {\r\n var body: any = element.find(\".body\");\r\n if (body.height > 290) {\r\n body.css({ overflowY: \"scroll\" });\r\n }\r\n }\r\n };\r\n }]) as any);\r\n}\r\n","module Omni.ResortMap {\r\n ngModule.directive('cycleSlideshow', (['$state', function ($state) {\r\n return {\r\n restrict: 'C',\r\n link: function (scope, element, attrs) {\r\n var slides = scope.slides;\r\n var html = null;\r\n var htmlClass;\r\n\r\n if ($state.current.name == 'gallery') {\r\n htmlClass = \"cycle-caption meeting\";\r\n } else {\r\n htmlClass = \"cycle-caption\";\r\n }\r\n\r\n html += \"