{"version":3,"file":"iframeResizer.contentWindow.min.js","sources":["../src/iframeResizer.contentWindow.js"],"names":["window","addEventListener","el","evt","func","attachEvent","throttle","context","args","result","timeout","previous","later","getNow","apply","now","remaining","throttledTimer","this","arguments","clearTimeout","setTimeout","formatLogMsg","msg","msgID","myID","log","logging","console","warn","init","readDataFromParent","location","href","readDataFromPage","setMargin","setBodyStyle","bodyBackground","bodyPadding","injectClearFixIntoBodyElement","checkHeightMode","checkWidthMode","stopInfiniteResizingOfIFrame","setupPublicMethods","startEventListeners","inPageLinks","setupInPageLinks","sendSize","readyCallback","strBool","str","data","initMsg","substr","msgIdLen","split","bodyMargin","undefined","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","messageCallback","targetOriginDefault","targetOrigin","heightCalculationMethod","widthCalculationMethod","Object","constructor","chkCSS","attr","value","indexOf","document","body","style","documentElement","height","addTriggerEvent","options","addListener","eventName","handleEvent","eventType","eventNames","Array","prototype","map","initEventListeners","checkCalcMode","calcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","clearFix","createElement","clear","display","appendChild","getPagePosition","x","pageXOffset","scrollLeft","y","pageYOffset","scrollTop","getElementPosition","elPosition","getBoundingClientRect","pagePosition","parseInt","left","top","findTarget","jumpToTarget","target","jumpPosition","hash","sendMsg","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","setupLink","linkClicked","e","preventDefault","getAttribute","forEach","call","querySelectorAll","bindLocationHash","initCheck","eventCancelTimer","enableInPageLinks","parentIFrame","close","getId","moveToAnchor","reset","resetIFrame","scrollTo","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","valString","lockTrigger","initInterval","setInterval","Math","abs","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","attributeName","event","removeEventListener","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","forceIntervalTimer","WebKitMutationObserver","getComputedBodyStyle","prop","convertUnitsToPxForIE8","PIXEL","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","getComputedStyle","getMaxElement","side","elements","elementsLength","length","maxVal","timer","i","getAllMeasurements","dimention","bodyOffset","bodyScroll","documentElementOffset","documentElementScroll","getTaggedElements","tag","noTaggedElementsFound","getAllElements","sizeIFrame","triggerEvent","triggerEventDesc","resizeIFrame","currentHeight","width","currentWidth","isSizeChangeDetected","checkTolarance","a","b","isForceResizableEvent","isForceResizableCalcMode","resetRequiredMethods","logIgnored","checkDownSizing","recordTrigger","resetPage","isDoubleFiredEvent","triggerLocked","doubleEventList","sizeIFrameThrottled","triggerLockedTimer","triggerReset","hcm","sendToParent","message","parent","postMessage","receiver","isMessageForUs","initFromParent","firstRun","initLock","resetFromParent","resizeFromParent","anchor","getData","getMessageType","isMiddleTier","messageFromParent","msgBody","parse","isInitMsg","true","false","callFromParent","processMessage","chkLateLoaded","readyState","resize","click","max","min","Date","getTime","offsetHeight","offset","scrollHeight","grow","lowestElement","taggedElement","scrollWidth","offsetWidth","scroll","leftMostElement"],"mappings":"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","sourcesContent":["/*\n * File: iframeResizer.contentWindow.js\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.js on host page.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Ian Caunce - ian@hallnet.co.uk\n */\n\n\n;(function(window) {\n\t'use strict';\n\n\tvar\n\t\tautoResize = true,\n\t\tbase = 10,\n\t\tbodyBackground = '',\n\t\tbodyMargin = 0,\n\t\tbodyMarginStr = '',\n\t\tbodyPadding = '',\n\t\tcalculateWidth = false,\n\t\tdoubleEventList = {'resize':1,'click':1},\n\t\teventCancelTimer = 128,\n\t\tfirstRun = true,\n\t\theight = 1,\n\t\theightCalcModeDefault = 'bodyOffset',\n\t\theightCalcMode = heightCalcModeDefault,\n\t\tinitLock = true,\n\t\tinitMsg = '',\n\t\tinPageLinks = {},\n\t\tinterval = 32,\n\t\tlogging = false,\n\t\tmsgID = '[iFrameSizer]', //Must match host page msg ID\n\t\tmsgIdLen = msgID.length,\n\t\tmyID = '',\n\t\tresetRequiredMethods = {max:1,min:1,bodyScroll:1,documentElementScroll:1},\n\t\tresizeFrom = 'child',\n\t\ttargetOriginDefault = '*',\n\t\ttolerance = 0,\n\t\ttriggerLocked = false,\n\t\ttriggerLockedTimer = null,\n\t\tthrottledTimer = 0,\n\t\twidth = 1,\n\t\twidthCalcModeDefault = 'scroll',\n\t\twidthCalcMode = widthCalcModeDefault,\n\t\tmessageCallback = function(){warn('MessageCallback function not defined');},\n\t\treadyCallback = function(){};\n\n\n\tfunction addEventListener(el,evt,func){\n\t\tif ('addEventListener' in window){\n\t\t\tel.addEventListener(evt,func, false);\n\t\t} else if ('attachEvent' in window){ //IE\n\t\t\tel.attachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\t//Based on underscore.js\n\tfunction throttle(func) {\n\t\tvar\n\t\t\tcontext, args, result,\n\t\t\ttimeout = null,\n\t\t\tprevious = 0,\n\t\t\tlater = function() {\n\t\t\t\tprevious = getNow();\n\t\t\t\ttimeout = null;\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn function() {\n\t\t\tvar now = getNow();\n\n\t\t\tif (!previous) {\n\t\t\t\tprevious = now;\n\t\t\t}\n\n\t\t\tvar remaining = throttledTimer - (now - previous);\n\n\t\t\tcontext = this;\n\t\t\targs = arguments;\n\n\t\t\tif (remaining <= 0 || remaining > throttledTimer) {\n\t\t\t\tif (timeout) {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\ttimeout = null;\n\t\t\t\t}\n\n\t\t\t\tprevious = now;\n\t\t\t\tresult = func.apply(context, args);\n\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\n\t\t\t} else if (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, remaining);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar getNow = Date.now || function() {\n\t\treturn new Date().getTime();\n\t};\n\n\n\tfunction formatLogMsg(msg){\n\t\treturn msgID + '[' + myID + ']' + ' ' + msg;\n\t}\n\n\tfunction log(msg){\n\t\tif (logging && ('object' === typeof window.console)){\n\t\t\tconsole.log(formatLogMsg(msg));\n\t\t}\n\t}\n\n\tfunction warn(msg){\n\t\tif ('object' === typeof window.console){\n\t\t\tconsole.warn(formatLogMsg(msg));\n\t\t}\n\t}\n\n\n\tfunction init(){\n\t\treadDataFromParent();\n\t\tlog('Initialising iFrame ('+location.href+')');\n\t\treadDataFromPage();\n\t\tsetMargin();\n\t\tsetBodyStyle('background',bodyBackground);\n\t\tsetBodyStyle('padding',bodyPadding);\n\t\tinjectClearFixIntoBodyElement();\n\t\tcheckHeightMode();\n\t\tcheckWidthMode();\n\t\tstopInfiniteResizingOfIFrame();\n\t\tsetupPublicMethods();\n\t\tstartEventListeners();\n\t\tinPageLinks = setupInPageLinks();\n\t\tsendSize('init','Init message from host page');\n\t\treadyCallback();\n\t}\n\n\tfunction readDataFromParent(){\n\n\t\tfunction strBool(str){\n\t\t\treturn 'true' === str ? true : false;\n\t\t}\n\n\t\tvar data = initMsg.substr(msgIdLen).split(':');\n\n\t\tmyID = data[0];\n\t\tbodyMargin = (undefined !== data[1]) ? Number(data[1]) : bodyMargin; //For V1 compatibility\n\t\tcalculateWidth = (undefined !== data[2]) ? strBool(data[2]) : calculateWidth;\n\t\tlogging = (undefined !== data[3]) ? strBool(data[3]) : logging;\n\t\tinterval = (undefined !== data[4]) ? Number(data[4]) : interval;\n\t\tautoResize = (undefined !== data[6]) ? strBool(data[6]) : autoResize;\n\t\tbodyMarginStr = data[7];\n\t\theightCalcMode = (undefined !== data[8]) ? data[8] : heightCalcMode;\n\t\tbodyBackground = data[9];\n\t\tbodyPadding = data[10];\n\t\ttolerance = (undefined !== data[11]) ? Number(data[11]) : tolerance;\n\t\tinPageLinks.enable = (undefined !== data[12]) ? strBool(data[12]): false;\n\t\tresizeFrom = (undefined !== data[13]) ? data[13] : resizeFrom;\n\t\twidthCalcMode = (undefined !== data[14]) ? data[14] : widthCalcMode;\n\t}\n\n\tfunction readDataFromPage(){\n\t\tfunction readData(){\n\t\t\tvar data = window.iFrameResizer;\n\n\t\t\tlog('Reading data from page: ' + JSON.stringify(data));\n\n\t\t\tmessageCallback = (undefined !== data.messageCallback ) ? data.messageCallback : messageCallback;\n\t\t\treadyCallback = (undefined !== data.readyCallback ) ? data.readyCallback : readyCallback;\n\t\t\ttargetOriginDefault = (undefined !== data.targetOrigin ) ? data.targetOrigin : targetOriginDefault;\n\t\t\theightCalcMode = (undefined !== data.heightCalculationMethod ) ? data.heightCalculationMethod : heightCalcMode;\n\t\t\twidthCalcMode = (undefined !== data.widthCalculationMethod ) ? data.widthCalculationMethod : widthCalcMode;\n\t\t}\n\n\t\tif(('iFrameResizer' in window) && (Object === window.iFrameResizer.constructor)) {\n\t\t\treadData();\n\t\t}\n\t}\n\n\n\tfunction chkCSS(attr,value){\n\t\tif (-1 !== value.indexOf('-')){\n\t\t\twarn('Negative CSS value ignored for '+attr);\n\t\t\tvalue='';\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction setBodyStyle(attr,value){\n\t\tif ((undefined !== value) && ('' !== value) && ('null' !== value)){\n\t\t\tdocument.body.style[attr] = value;\n\t\t\tlog('Body '+attr+' set to \"'+value+'\"');\n\t\t}\n\t}\n\n\tfunction setMargin(){\n\t\t//If called via V1 script, convert bodyMargin from int to str\n\t\tif (undefined === bodyMarginStr){\n\t\t\tbodyMarginStr = bodyMargin+'px';\n\t\t}\n\t\tchkCSS('margin',bodyMarginStr);\n\t\tsetBodyStyle('margin',bodyMarginStr);\n\t}\n\n\tfunction stopInfiniteResizingOfIFrame(){\n\t\tdocument.documentElement.style.height = '';\n\t\tdocument.body.style.height = '';\n\t\tlog('HTML & body height set to \"auto\"');\n\t}\n\n\n\tfunction addTriggerEvent(options){\n\t\tfunction addListener(eventName){\n\t\t\tfunction handleEvent(){\n\t\t\t\tsendSize(options.eventName,options.eventType);\n\t\t\t}\n\n\t\t\taddEventListener(window,eventName,handleEvent);\n\t\t}\n\n\t\tif(options.eventNames && Array.prototype.map){\n\t\t\toptions.eventName = options.eventNames[0];\n\t\t\toptions.eventNames.map(addListener);\n\t\t} else {\n\t\t\taddListener(options.eventName);\n\t\t}\n\n\t\tlog('Added event listener: ' + options.eventType);\n\t}\n\n\tfunction initEventListeners(){\n\t\taddTriggerEvent({ eventType: 'Animation Start', eventNames: ['animationstart','webkitAnimationStart'] });\n\t\taddTriggerEvent({ eventType: 'Animation Iteration', eventNames: ['animationiteration','webkitAnimationIteration'] });\n\t\taddTriggerEvent({ eventType: 'Animation End', eventNames: ['animationend','webkitAnimationEnd'] });\n\t\taddTriggerEvent({ eventType: 'Orientation Change', eventName: 'orientationchange' });\n\t\taddTriggerEvent({ eventType: 'Input', eventName: 'input' });\n\t\taddTriggerEvent({ eventType: 'Print', eventName: ['afterprint', 'beforeprint'] });\n\t\taddTriggerEvent({ eventType: 'Transition End', eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });\n\t\taddTriggerEvent({ eventType: 'Mouse Up', eventName: 'mouseup' });\n\t\taddTriggerEvent({ eventType: 'Mouse Down', eventName: 'mousedown' });\n\t\tif('child' === resizeFrom){\n\t\t\taddTriggerEvent({ eventType: 'IFrame Resized', eventName: 'resize' });\n\t\t}\n\t}\n\n\tfunction checkCalcMode(calcMode,calcModeDefault,modes,type){\n\t\tif (calcModeDefault !== calcMode){\n\t\t\tif (!(calcMode in modes)){\n\t\t\t\twarn(calcMode + ' is not a valid option for '+type+'CalculationMethod.');\n\t\t\t\tcalcMode=calcModeDefault;\n\t\t\t}\n\t\t\tlog(type+' calculation method set to \"'+calcMode+'\"');\n\t\t}\n\t}\n\n\tfunction checkHeightMode(){\n\t\tcheckCalcMode(heightCalcMode,heightCalcModeDefault,getHeight,'height');\n\t}\n\n\tfunction checkWidthMode(){\n\t\tcheckCalcMode(widthCalcMode,widthCalcModeDefault,getWidth,'width');\n\t}\n\n\tfunction startEventListeners(){\n\t\tif ( true === autoResize ) {\n\t\t\tinitEventListeners();\n\t\t\tsetupMutationObserver();\n\t\t}\n\t\telse {\n\t\t\tlog('Auto Resize disabled');\n\t\t}\n\t}\n\n\tfunction injectClearFixIntoBodyElement(){\n\t\tvar clearFix = document.createElement('div');\n\t\tclearFix.style.clear = 'both';\n\t\tclearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n\t\tdocument.body.appendChild(clearFix);\n\t}\n\n\tfunction setupInPageLinks(){\n\n\t\tfunction getPagePosition (){\n\t\t\treturn {\n\t\t\t\tx: (window.pageXOffset !== undefined) ? window.pageXOffset : document.documentElement.scrollLeft,\n\t\t\t\ty: (window.pageYOffset !== undefined) ? window.pageYOffset : document.documentElement.scrollTop\n\t\t\t};\n\t\t}\n\n\t\tfunction getElementPosition(el){\n\t\t\tvar\n\t\t\t\telPosition = el.getBoundingClientRect(),\n\t\t\t\tpagePosition = getPagePosition();\n\n\t\t\treturn {\n\t\t\t\tx: parseInt(elPosition.left,10) + parseInt(pagePosition.x,10),\n\t\t\t\ty: parseInt(elPosition.top,10) + parseInt(pagePosition.y,10)\n\t\t\t};\n\t\t}\n\n\t\tfunction findTarget(location){\n\t\t\tfunction jumpToTarget(target){\n\t\t\t\tvar jumpPosition = getElementPosition(target);\n\n\t\t\t\tlog('Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);\n\t\t\t\tsendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\thash = location.split('#')[1] || location, //Remove # if present\n\t\t\t\thashData = decodeURIComponent(hash),\n\t\t\t\ttarget = document.getElementById(hashData) || document.getElementsByName(hashData)[0];\n\n\t\t\tif (target){\n\t\t\t\tjumpToTarget(target);\n\t\t\t} else {\n\t\t\t\tlog('In page link (#' + hash + ') not found in iFrame, so sending to parent');\n\t\t\t\tsendMsg(0,0,'inPageLink','#'+hash);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkLocationHash(){\n\t\t\tif ('' !== location.hash && '#' !== location.hash){\n\t\t\t\tfindTarget(location.href);\n\t\t\t}\n\t\t}\n\n\t\tfunction bindAnchors(){\n\t\t\tfunction setupLink(el){\n\t\t\t\tfunction linkClicked(e){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t/*jshint validthis:true */\n\t\t\t\t\tfindTarget(this.getAttribute('href'));\n\t\t\t\t}\n\n\t\t\t\tif ('#' !== el.getAttribute('href')){\n\t\t\t\t\taddEventListener(el,'click',linkClicked);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tArray.prototype.forEach.call( document.querySelectorAll( 'a[href^=\"#\"]' ), setupLink );\n\t\t}\n\n\t\tfunction bindLocationHash(){\n\t\t\taddEventListener(window,'hashchange',checkLocationHash);\n\t\t}\n\n\t\tfunction initCheck(){ //check if page loaded with location hash after init resize\n\t\t\tsetTimeout(checkLocationHash,eventCancelTimer);\n\t\t}\n\n\t\tfunction enableInPageLinks(){\n\t\t\tif(Array.prototype.forEach && document.querySelectorAll){\n\t\t\t\tlog('Setting up location.hash handlers');\n\t\t\t\tbindAnchors();\n\t\t\t\tbindLocationHash();\n\t\t\t\tinitCheck();\n\t\t\t} else {\n\t\t\t\twarn('In page linking not fully supported in this browser! (See README.md for IE8 workaround)');\n\t\t\t}\n\t\t}\n\n\t\tif(inPageLinks.enable){\n\t\t\tenableInPageLinks();\n\t\t} else {\n\t\t\tlog('In page linking not enabled');\n\t\t}\n\n\t\treturn {\n\t\t\tfindTarget:findTarget\n\t\t};\n\t}\n\n\tfunction setupPublicMethods(){\n\t\tlog('Enable public methods');\n\n\t\twindow.parentIFrame = {\n\t\t\tclose: function closeF(){\n\t\t\t\tsendMsg(0,0,'close');\n\t\t\t},\n\n\t\t\tgetId: function getIdF(){\n\t\t\t\treturn myID;\n\t\t\t},\n\n\t\t\tmoveToAnchor: function moveToAnchorF(hash){\n\t\t\t\tinPageLinks.findTarget(hash);\n\t\t\t},\n\n\t\t\treset: function resetF(){\n\t\t\t\tresetIFrame('parentIFrame.reset');\n\t\t\t},\n\n\t\t\tscrollTo: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollTo'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tscrollToOffset: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tsendMessage: function sendMessageF(msg,targetOrigin){\n\t\t\t\tsendMsg(0,0,'message',JSON.stringify(msg),targetOrigin);\n\t\t\t},\n\n\t\t\tsetHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod){\n\t\t\t\theightCalcMode = heightCalculationMethod;\n\t\t\t\tcheckHeightMode();\n\t\t\t},\n\n\t\t\tsetWidthCalculationMethod: function setWidthCalculationMethodF(widthCalculationMethod){\n\t\t\t\twidthCalcMode = widthCalculationMethod;\n\t\t\t\tcheckWidthMode();\n\t\t\t},\n\n\t\t\tsetTargetOrigin: function setTargetOriginF(targetOrigin){\n\t\t\t\tlog('Set targetOrigin: '+targetOrigin);\n\t\t\t\ttargetOriginDefault = targetOrigin;\n\t\t\t},\n\n\t\t\tsize: function sizeF(customHeight, customWidth){\n\t\t\t\tvar valString = ''+(customHeight?customHeight:'')+(customWidth?','+customWidth:'');\n\t\t\t\tlockTrigger();\n\t\t\t\tsendSize('size','parentIFrame.size('+valString+')', customHeight, customWidth);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction initInterval(){\n\t\tif ( 0 !== interval ){\n\t\t\tlog('setInterval: '+interval+'ms');\n\t\t\tsetInterval(function(){\n\t\t\t\tsendSize('interval','setInterval: '+interval);\n\t\t\t},Math.abs(interval));\n\t\t}\n\t}\n\n\tfunction isNotSet(item){\n\t\treturn undefined === item || 0 === item;\n\t}\n\n\tfunction setupMutationObserver(){\n\t\tfunction addImageLoadListners(mutation) {\n\t\t\tfunction addImageLoadListener(element){\n\t\t\t\tif (element.complete === false) {\n\t\t\t\t\tlog('Attach listeners to ' + element.src);\n\t\t\t\t\telement.addEventListener('load', imageLoaded, false);\n\t\t\t\t\telement.addEventListener('error', imageLoaded, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'src'){\n\t\t\t\taddImageLoadListener(mutation.target);\n\t\t\t} else if (mutation.type === 'childList'){\n\t\t\t\tArray.prototype.forEach.call(\n\t\t\t\t\tmutation.target.querySelectorAll('img'),\n\t\t\t\t\taddImageLoadListener\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfunction imageLoaded(event) {\n\t\t\tevent.target.removeEventListener('load', imageLoaded, false);\n\t\t\tevent.target.removeEventListener('error', imageLoaded, false);\n\t\t\tsendSize('imageLoad','Image loaded: ' + event.target.src, undefined, undefined);\n\t\t}\n\n\t\tfunction mutationObserved(mutations) {\n\t\t\tsendSize('mutationObserver','mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type);\n\n\t\t\t//Deal with WebKit asyncing image loading when tags are injected into the page\n\t\t\tmutations.forEach(addImageLoadListners);\n\t\t}\n\n\t\tfunction createMutationObserver(){\n\t\t\tvar\n\t\t\t\ttarget = document.querySelector('body'),\n\n\t\t\t\tconfig = {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tattributeOldValue : false,\n\t\t\t\t\tcharacterData : true,\n\t\t\t\t\tcharacterDataOldValue : false,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tsubtree : true\n\t\t\t\t},\n\n\t\t\t\tobserver = new MutationObserver(mutationObserved);\n\n\t\t\tlog('Enable MutationObserver');\n\t\t\tobserver.observe(target, config);\n\t\t}\n\n\t\tvar\n\t\t\tforceIntervalTimer = 0 > interval,\n\t\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n\t\tif (MutationObserver){\n\t\t\tif (forceIntervalTimer) {\n\t\t\t\tinitInterval();\n\t\t\t} else {\n\t\t\t\tcreateMutationObserver();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\twarn('MutationObserver not supported in this browser!');\n\t\t\tinitInterval();\n\t\t}\n\t}\n\n\n\t// document.documentElement.offsetHeight is not reliable, so\n\t// we have to jump through hoops to get a better value.\n\tfunction getComputedBodyStyle(prop) {\n\t\tfunction convertUnitsToPxForIE8(value) {\n\t\t\tvar PIXEL = /^\\d+(px)?$/i;\n\n\t\t\tif (PIXEL.test(value)) {\n\t\t\t\treturn parseInt(value,base);\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\tstyle = el.style.left,\n\t\t\t\truntimeStyle = el.runtimeStyle.left;\n\n\t\t\tel.runtimeStyle.left = el.currentStyle.left;\n\t\t\tel.style.left = value || 0;\n\t\t\tvalue = el.style.pixelLeft;\n\t\t\tel.style.left = style;\n\t\t\tel.runtimeStyle.left = runtimeStyle;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tvar\n\t\t\tel = document.body,\n\t\t\tretVal = 0;\n\n\t\tif (('defaultView' in document) && ('getComputedStyle' in document.defaultView)) {\n\t\t\tretVal = document.defaultView.getComputedStyle(el, null);\n\t\t\tretVal = (null !== retVal) ? retVal[prop] : 0;\n\t\t} else {//IE8\n\t\t\tretVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n\t\t}\n\n\t\treturn parseInt(retVal,base);\n\t}\n\n\t//Idea from https://github.com/guardian/iframe-messenger\n\tfunction getMaxElement(side,elements) {\n\t\tvar\n\t\t\telementsLength = elements.length,\n\t\t\tmaxVal = 0,\n\t\t\ttimer = getNow();\n\n\t\tfor (var i = 0; i < elementsLength; i++) {\n\t\t\tif (elements[i].getBoundingClientRect()[side] > maxVal) {\n\t\t\t\tmaxVal = elements[i].getBoundingClientRect()[side];\n\t\t\t}\n\t\t}\n\n\t\ttimer = getNow() - timer;\n\n\t\tlog('Parsed '+elementsLength+' HTML elements');\n\t\tlog('Element position calculated in ' + timer + 'ms');\n\n\t\tif(timer > throttledTimer/2){\n\t\t\tthrottledTimer = 2*timer;\n\t\t\tlog('Event throttle increased to ' + throttledTimer + 'ms');\n\t\t}\n\n\t\treturn maxVal;\n\t}\n\n\tfunction getAllMeasurements(dimention){\n\t\treturn [\n\t\t\tdimention.bodyOffset(),\n\t\t\tdimention.bodyScroll(),\n\t\t\tdimention.documentElementOffset(),\n\t\t\tdimention.documentElementScroll()\n\t\t];\n\t}\n\n\tfunction getTaggedElements(side,tag){\n\t\tfunction noTaggedElementsFound(){\n\t\t\twarn('No tagged elements ('+tag+') found on page');\n\t\t\treturn height; //current height\n\t\t}\n\n\t\tvar elements = document.querySelectorAll('['+tag+']');\n\n\t\treturn 0 === elements.length ? noTaggedElementsFound() : getMaxElement(side,elements);\n\t}\n\n\tfunction getAllElements(){\n\t\treturn document.querySelectorAll('body *');\n\t}\n\n\tvar\n\t\tgetHeight = {\n\t\t\tbodyOffset: function getBodyOffsetHeight(){\n\t\t\t\treturn document.body.offsetHeight + getComputedBodyStyle('marginTop') + getComputedBodyStyle('marginBottom');\n\t\t\t},\n\n\t\t\toffset: function(){\n\t\t\t\treturn getHeight.bodyOffset(); //Backwards compatability\n\t\t\t},\n\n\t\t\tbodyScroll: function getBodyScrollHeight(){\n\t\t\t\treturn document.body.scrollHeight;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetHeight(){\n\t\t\t\treturn document.documentElement.offsetHeight;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollHeight(){\n\t\t\t\treturn document.documentElement.scrollHeight;\n\t\t\t},\n\n\t\t\tmax: function getMaxHeight(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tmin: function getMinHeight(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tgrow: function growHeight(){\n\t\t\t\treturn getHeight.max(); //Run max without the forced downsizing\n\t\t\t},\n\n\t\t\tlowestElement: function getBestHeight(){\n\t\t\t\treturn Math.max(getHeight.bodyOffset(), getMaxElement('bottom',getAllElements()));\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsHeight(){\n\t\t\t\treturn getTaggedElements('bottom','data-iframe-height');\n\t\t\t}\n\t\t},\n\n\t\tgetWidth = {\n\t\t\tbodyScroll: function getBodyScrollWidth(){\n\t\t\t\treturn document.body.scrollWidth;\n\t\t\t},\n\n\t\t\tbodyOffset: function getBodyOffsetWidth(){\n\t\t\t\treturn document.body.offsetWidth;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollWidth(){\n\t\t\t\treturn document.documentElement.scrollWidth;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetWidth(){\n\t\t\t\treturn document.documentElement.offsetWidth;\n\t\t\t},\n\n\t\t\tscroll: function getMaxWidth(){\n\t\t\t\treturn Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll());\n\t\t\t},\n\n\t\t\tmax: function getMaxWidth(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tmin: function getMinWidth(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tleftMostElement: function getLeftMostElement(){\n\t\t\t\treturn getMaxElement('left', getAllElements());\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsWidth(){\n\t\t\t\treturn getTaggedElements('left', 'data-iframe-width');\n\t\t\t}\n\t\t};\n\n\n\tfunction sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\n\t\tfunction resizeIFrame(){\n\t\t\theight = currentHeight;\n\t\t\twidth = currentWidth;\n\n\t\t\tsendMsg(height,width,triggerEvent);\n\t\t}\n\n\t\tfunction isSizeChangeDetected(){\n\t\t\tfunction checkTolarance(a,b){\n\t\t\t\tvar retVal = Math.abs(a-b) <= tolerance;\n\t\t\t\treturn !retVal;\n\t\t\t}\n\n\t\t\tcurrentHeight = (undefined !== customHeight) ? customHeight : getHeight[heightCalcMode]();\n\t\t\tcurrentWidth = (undefined !== customWidth ) ? customWidth : getWidth[widthCalcMode]();\n\n\t\t\treturn\tcheckTolarance(height,currentHeight) || (calculateWidth && checkTolarance(width,currentWidth));\n\t\t}\n\n\t\tfunction isForceResizableEvent(){\n\t\t\treturn !(triggerEvent in {'init':1,'interval':1,'size':1});\n\t\t}\n\n\t\tfunction isForceResizableCalcMode(){\n\t\t\treturn (heightCalcMode in resetRequiredMethods) || (calculateWidth && widthCalcMode in resetRequiredMethods);\n\t\t}\n\n\t\tfunction logIgnored(){\n\t\t\tlog('No change in size detected');\n\t\t}\n\n\t\tfunction checkDownSizing(){\n\t\t\tif (isForceResizableEvent() && isForceResizableCalcMode()){\n\t\t\t\tresetIFrame(triggerEventDesc);\n\t\t\t} else if (!(triggerEvent in {'interval':1})){\n\t\t\t\tlogIgnored();\n\t\t\t}\n\t\t}\n\n\t\tvar\tcurrentHeight,currentWidth;\n\n\t\tif (isSizeChangeDetected() || 'init' === triggerEvent){\n\t\t\tlockTrigger();\n\t\t\tresizeIFrame();\n\t\t} else {\n\t\t\tcheckDownSizing();\n\t\t}\n\t}\n\n\tvar sizeIFrameThrottled = throttle(sizeIFrame);\n\n\tfunction sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\t\tfunction recordTrigger(){\n\t\t\tif (!(triggerEvent in {'reset':1,'resetPage':1,'init':1})){\n\t\t\t\tlog( 'Trigger event: ' + triggerEventDesc );\n\t\t\t}\n\t\t}\n\n\t\tfunction isDoubleFiredEvent(){\n\t\t\treturn triggerLocked && (triggerEvent in doubleEventList);\n\t\t}\n\n\t\tif (!isDoubleFiredEvent()){\n\t\t\trecordTrigger();\n\t\t\tsizeIFrameThrottled(triggerEvent, triggerEventDesc, customHeight, customWidth);\n\t\t} else {\n\t\t\tlog('Trigger event cancelled: '+triggerEvent);\n\t\t}\n\t}\n\n\tfunction lockTrigger(){\n\t\tif (!triggerLocked){\n\t\t\ttriggerLocked = true;\n\t\t\tlog('Trigger event lock on');\n\t\t}\n\t\tclearTimeout(triggerLockedTimer);\n\t\ttriggerLockedTimer = setTimeout(function(){\n\t\t\ttriggerLocked = false;\n\t\t\tlog('Trigger event lock off');\n\t\t\tlog('--');\n\t\t},eventCancelTimer);\n\t}\n\n\tfunction triggerReset(triggerEvent){\n\t\theight = getHeight[heightCalcMode]();\n\t\twidth = getWidth[widthCalcMode]();\n\n\t\tsendMsg(height,width,triggerEvent);\n\t}\n\n\tfunction resetIFrame(triggerEventDesc){\n\t\tvar hcm = heightCalcMode;\n\t\theightCalcMode = heightCalcModeDefault;\n\n\t\tlog('Reset trigger event: ' + triggerEventDesc);\n\t\tlockTrigger();\n\t\ttriggerReset('reset');\n\n\t\theightCalcMode = hcm;\n\t}\n\n\tfunction sendMsg(height,width,triggerEvent,msg,targetOrigin){\n\t\tfunction setTargetOrigin(){\n\t\t\tif (undefined === targetOrigin){\n\t\t\t\ttargetOrigin = targetOriginDefault;\n\t\t\t} else {\n\t\t\t\tlog('Message targetOrigin: '+targetOrigin);\n\t\t\t}\n\t\t}\n\n\t\tfunction sendToParent(){\n\t\t\tvar\n\t\t\t\tsize = height + ':' + width,\n\t\t\t\tmessage = myID + ':' + size + ':' + triggerEvent + (undefined !== msg ? ':' + msg : '');\n\n\t\t\tlog('Sending message to host page (' + message + ')');\n\t\t\twindow.parent.postMessage( msgID + message, targetOrigin);\n\t\t}\n\n\t\tsetTargetOrigin();\n\t\tsendToParent();\n\t}\n\n\tfunction receiver(event) {\n\t\tfunction isMessageForUs(){\n\t\t\treturn msgID === (''+event.data).substr(0,msgIdLen); //''+ Protects against non-string messages\n\t\t}\n\n\t\tfunction initFromParent(){\n\t\t\tinitMsg = event.data;\n\n\t\t\tinit();\n\t\t\tfirstRun = false;\n\t\t\tsetTimeout(function(){ initLock = false;},eventCancelTimer);\n\t\t}\n\n\t\tfunction resetFromParent(){\n\t\t\tif (!initLock){\n\t\t\t\tlog('Page size reset by host page');\n\t\t\t\ttriggerReset('resetPage');\n\t\t\t} else {\n\t\t\t\tlog('Page reset ignored by init');\n\t\t\t}\n\t\t}\n\n\t\tfunction resizeFromParent(){\n\t\t\tsendSize('resizeParent','Parent window requested size check');\n\t\t}\n\n\t\tfunction moveToAnchor(){\n\t\t\tvar anchor = getData();\n\t\t\tinPageLinks.findTarget(anchor);\n\t\t}\n\n\t\tfunction getMessageType(){\n\t\t\treturn event.data.split(']')[1].split(':')[0];\n\t\t}\n\n\t\tfunction getData(){\n\t\t\treturn event.data.substr(event.data.indexOf(':')+1);\n\t\t}\n\n\t\tfunction isMiddleTier(){\n\t\t\treturn ('iFrameResize' in window);\n\t\t}\n\n\t\tfunction messageFromParent(){\n\t\t\tvar msgBody = getData();\n\n\t\t\tlog('MessageCallback called from parent: ' + msgBody );\n\t\t\tmessageCallback(JSON.parse(msgBody));\n\t\t\tlog(' --');\n\t\t}\n\n\t\tfunction isInitMsg(){\n\t\t\t//Test if this message is from a child below us. This is an ugly test, however, updating\n\t\t\t//the message format would break backwards compatibity.\n\t\t\treturn event.data.split(':')[2] in {'true':1,'false':1};\n\t\t}\n\n\t\tfunction callFromParent(){\n\t\t\tswitch (getMessageType()){\n\t\t\tcase 'reset':\n\t\t\t\tresetFromParent();\n\t\t\t\tbreak;\n\t\t\tcase 'resize':\n\t\t\t\tresizeFromParent();\n\t\t\t\tbreak;\n\t\t\tcase 'moveToAnchor':\n\t\t\t\tmoveToAnchor();\n\t\t\t\tbreak;\n\t\t\tcase 'message':\n\t\t\t\tmessageFromParent();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (!isMiddleTier() && !isInitMsg()){\n\t\t\t\t\t//warn('Unexpected message ('+event.data+')');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction processMessage(){\n\t\t\tif (false === firstRun) {\n\t\t\t\tcallFromParent();\n\t\t\t} else if (isInitMsg()) {\n\t\t\t\tinitFromParent();\n\t\t\t} else {\n\t\t\t\tlog('Ignored message of type \"' + getMessageType() + '\". Received before initialization.');\n\t\t\t}\n\t\t}\n\n\t\tif (isMessageForUs()){\n\t\t\tprocessMessage();\n\t\t}\n\t}\n\n\t//Normally the parent kicks things off when it detects the iFrame has loaded.\n\t//If this script is async-loaded, then tell parent page to retry init.\n\tfunction chkLateLoaded(){\n\t\tif('loading' !== document.readyState){\n\t\t\twindow.parent.postMessage('[iFrameResizerChild]Ready','*');\n\t\t}\n\t}\n\n\taddEventListener(window, 'message', receiver);\n\tchkLateLoaded();\n\n})(window || {});\n"]}