{"id":1058,"date":"2011-03-08T09:22:54","date_gmt":"2011-03-08T08:22:54","guid":{"rendered":"http:\/\/www.jurgenvandenherik.nl\/?p=1058"},"modified":"2015-04-06T17:43:11","modified_gmt":"2015-04-06T15:43:11","slug":"1058","status":"publish","type":"post","link":"https:\/\/www.jurgenvandenherik.nl\/?p=1058","title":{"rendered":"Vasten"},"content":{"rendered":"<p>Veel mensen vasten. Zij doen dat\u00a0steevast met goede bedoelingen. Bijvoorbeeld om zich bewust te worden van de rijkdom of de welstand waarin we verkeren. Anderen doen het wellicht om wat gezonder te leven of om een lichamelijk of geestelijk reinigingsproces door te maken. Ontslakken maar! Ik las zelfs een aanmoediging om gedurende de vasten 110 km\/u te gaan rijden. Ja, dat bespaart benzine en het milieu is er blij mee. 40 Dagen in haar nopjes.<\/p>\n<p>In de bijbel wordt ook gevast. Alleen is het doel van de vasten daar een andere. In de bijbel wordt vasten gezien als een daad van engagement, van solidariteit. Als je vast, verbind je je met hen die honger hebben, of gebrek lijden, of in een situatie van geweld leven, onderdrukking of onrecht. Het is dan bijvoorbeeld een signaal aan de machthebber: wij hoeven jouw vreten niet. Jouw privilleges kunnen ons gestolen worden.<\/p>\n<p>Het is dan ook -bijbels gezien- een beetje vreemd om te vasten en daarna weer doodleuk op heersende partijen te stemmen&#8230; Tenzij je vast om er wat gezonder van te worden, omdat je het prettig vindt, om wat geld te sparen. Waar op zich niks mis mee is, maar dan kun je elk moment van het jaar vasten. Doe je het nu, zo in de aanloop naar Pesach toe -het feest van Exodus: wegtrekken uit het bestaande en uit de bestaande structuren- dan is vasten een voorbereiding op een radicaal monastiek bestaan (Google eens naar Shane Claiborne om te zien en te horen wat ik bedoel).<\/p>\n<p>Ik zou kunnen vasten om wat af te vallen, misschien zou ik dat zelfs moeten, maar dan blijf ik verbonden met de huidige welvarende energieslurpende en koolhydratenverslindende samenleving waarmee ik verbonden was. Dan wordt Pasen het feest van de croissant, de chocoladehaasjes en de eitjes bij de Paasbrunch. Daar verandert echter zo ellendig weinig van.<\/p>\n<p>Maar voor een radicale monastieke leefwijze is wel wat nodig. Ik vrees dat ik zozeer ben ingepakt en ingesponnen, nee, me heb laten inpakken en inspinnen in de huidige cultuur, dat ik me daar nauwelijks nog van weet los te maken. Vasten\u00a0lijkt dan\u00a0een doekje voor het bloeden.<\/p>\n<p>Help!?<\/p>\n<div id=\"evernote-post-clip-content\" style=\"display: none;\">\n<div id=\"postClipContainer\" class=\"yui3-cssreset\">\n<div class=\"closeCross\"><\/div>\n<div class=\"evn-error-message\">\n<p class=\"evn-error-desc\">Het knipsel kan niet opgeslagen worden<\/p>\n<p id=\"evn-show-logs\">Crashrapport bekijken<\/p>\n<\/div>\n<div class=\"clippedMessage\">Geknipt naar standaard notitieboek<\/div>\n<div class=\"noteTitle\">Naamloze notitie<\/div>\n<div id=\"shareButtons\">\n<div id=\"linkedin\" class=\"shareButton\"><\/div>\n<div id=\"facebook\" class=\"shareButton\"><\/div>\n<div id=\"twitter\" class=\"shareButton\"><\/div>\n<div id=\"weibo\" class=\"shareButton\"><\/div>\n<div id=\"clipboard\" class=\"shareButton\"><\/div>\n<p><!--\n\n\n<div class=\"shareButton\" id=\"email\"><\/div>\n\n\n--><\/p>\n<\/div>\n<div id=\"evn-clipboardCopy-container\">\n<div class=\"evn-pcp-divider\"><\/div>\n<div class=\"evn-pcp-clipboard-message\">Bron-link<\/div>\n<p><input class=\"evn-pcp-clipboard-input\" readonly=\"readonly\" type=\"text\" \/><\/p>\n<div class=\"evn-pcp-clipboard-button bottom\">Kopi\u00ebren naar Klembord<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nif ( typeof Evernote == 'undefined' ) {\n    \/**\n     * Represents global evernote context (namespace).\n     * All objects should be a part of this namespace.\n     * @type {Object}\n     *\/\n    Evernote = {};\n}\nEvernote.inherit = function( childConstructor, parentClassOrObject, includeConstructorDefs ) {\n    if ( parentClassOrObject.constructor == Function ) {\n        \/\/ Normal Inheritance\n        childConstructor.prototype = new parentClassOrObject;\n        childConstructor.prototype.constructor = childConstructor;\n        childConstructor.prototype.parent = parentClassOrObject.prototype;\n        childConstructor.constructor.parent = parentClassOrObject;\n    }\n    else {\n        \/\/ Pure Virtual Inheritance\n        childConstructor.prototype = parentClassOrObject;\n        childConstructor.prototype.constructor = childConstructor;\n        childConstructor.prototype.parent = parentClassOrObject;\n        childConstructor.constructor.parent = parentClassOrObject;\n    }\n\n    if ( includeConstructorDefs ) {\n        for ( var i in parentClassOrObject.prototype.constructor ) {\n            if ( i != \"parent\" &#038;&#038; i != \"prototype\" &#038;&#038; parentClassOrObject.constructor[i] != parentClassOrObject.prototype.constructor[ i ]\n                &#038;&#038; typeof childConstructor.prototype.constructor[ i ] == 'undefined' ) {\n                childConstructor.prototype.constructor[ i ] = parentClassOrObject.prototype.constructor[ i ];\n            }\n        }\n    }\n\n    if ( typeof childConstructor.handleInheritance == 'function' ) {\n        childConstructor.handleInheritance.apply( childConstructor, arguments );\n    }\n\n    if ( typeof childConstructor.prototype.handleInheritance == 'function' ) {\n        childConstructor.prototype.handleInheritance.apply( childConstructor, arguments );\n    }\n\n    return childConstructor;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.EnClipper = {\n\n    enClipperProcessId: -1,\n\n    init: function() {\n        Evernote.ResponseReceiver.subscribe(this);\n        Evernote.Addin.getProcessID(document);\n        Evernote.Addin.allowSetForegroundWindow(this.enClipperProcessId);\n    },\n\n    onDataReceived: function(data) {\n        if(data &#038;&#038; (data.type == \"process_id\")) {\n            Evernote.EnClipper.enClipperProcessId = data.data | 0;\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.AsyncEngine = {\n    _requests : {},\n    _requestIDCounter: 0,\n\n    addRequest : function(callback, args) {\n        this._requestIDCounter++;\n        this._requests[this._requestIDCounter] =\n            {\n                callbackFunc: callback,\n                callbackArgs: args\n            };\n        return this._requestIDCounter;\n    },\n\n    removeRequest : function(requestID) {\n        this._requests[requestID] = null;\n        delete this._requests[requestID];\n    },\n\n    commonCallback : function(requestID, result) {\n        var object = Evernote.AsyncEngine._requests[requestID];\n        if (object &#038;&#038; object.callbackFunc) {\n            object.callbackFunc(result, object.callbackArgs);\n            Evernote.AsyncEngine.removeRequest(requestID);\n        }\n        return 0;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Proxy object for Evernote ActiveX component\n * @type {Object}\n *\/\nEvernote.Addin = {\n    _addon : null,\n    isAuthenticated: true,\n\n    init : function(addin) {\n        this._addon = addin;\n    },\n\n    \/**\n     * Injects css specified by filename to specified document.\n     * @param fileName - path to css\n     * @param doc - document object\n     *\/\n    injectStyleSheet : function(doc, fileName) {\n        try {\n            this._addon.InjectStyleSheet(doc, fileName)\n        } catch (e) {\n            Evernote.Logger.error( \"Addin.InjectStyleSheet() failed \" + e );\n        }\n    },\n\n    \/**\n     * Injects script content to specified document\n     * @param doc - document object\n     * @param content - content of the script file\n     *\/\n    injectScript : function(doc, content) {\n        try {\n            this._addon.InjectScript( doc, content );\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"Addin.injectScript() failed \" + e );\n        }\n    },\n\n    \/**\n     * Loads file content from disk\n     * @param url - path to the file\n     *\/\n    loadFile : function(url) {\n        try {\n            return this._addon.LoadFile( url );\n        } catch (e) {\n            Evernote.Logger.error( \"Addin.loadFile() failed \" + e );\n        }\n    },\n\n    \/**\n     * Append message to log file with specified level.\n     * Supported levels:\n     *  0 - debug\n     *  1 - info\n     *  2 - warning\n     *  3 - error\n     *  4 - critical\n     * @param logLevel\n     * @param message\n     *\/\n    log : function(logLevel, message)\n    {\n        try {\n            this._addon.Log(logLevel, message)\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to log message '\" + message + \"' to the log file due to error: \" + e);\n        }\n    },\n\n    \/**\n     * Opens new note window.\n     *\/\n    openNewNote : function() {\n        try {\n            this._addon.CreateNewNote();\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to open new note window due to error: \" + e);\n        }\n    },\n\n    \/**\n     * Return path to directory on local filesystem for specified type.\n     * @param type - type of directory to return. Currently supported types:\n     *  options - directory, where options configuration is stored.\n     *  resources - directory, where resources are located (images, scripts, etc.)\n     *\/\n    getPath : function(type)\n    {\n        try {\n            return this._addon.GetAddinPath(type);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to clip full page due to error \" + e);\n        }\n    },\n\n    \/**\n     * Returns localized message by code.\n     * @param code - number of message in resource file.\n     *\/\n    getLocalizedMessage : function(code) {\n        try {\n            return this._addon.GetLocalizedString(code) || 'l10n_error';\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to retrieve localized message due to error \" + e);\n        }\n    },\n\n    clipNote : function(content, options, sourceUrl, imageUrls, silent, doc ) {\n        var isSilentClip = silent ? 1 : 0;\n        var images = imageUrls;\n        if(!(images instanceof Array)) {\n            images = [imageUrls];\n        }\n        try {\n            var notebookUid = options.notebookUid | 0;\n            try {\n                notebookUid = options.notebookUid() | 0;\n            } catch(e) {\n                \/\/Notebook uid is not a function, but just an integer that we saved on previous step, ignore exception here\n            }\n            this.ensureAuthenticated();\n            Evernote.Logger.debug(\"Clip to \" + (notebookUid) + \" with tags: \" + options.tags.join(\",\") + \" ; comment: \" + options.comments);\n            return this._addon.ClipNote(options.title, content, sourceUrl, isSilentClip, images.join(\"#\") , notebookUid, options.tags.join(\",\"), \"\", doc,\"EvernoteGlobalReceiver\");\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to clipNote due to error \" + e);\n        }\n    },\n\n    getCursorXPosition : function() {\n        try {\n            return this._addon.GetCursorXPosition();\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to retrieve localized message due to error \" + e);\n            throw e;\n        }\n\n    },\n\n    \/**\n     * Call Addin to get all notebooks (global \"EvernoteGlobalReceiver\" function is called with response)\n     * @param document - document object\n     *\/\n    getNotebooks : function(document) {\n        this.ensureAuthenticated();\n        this._addon.GetNotebooks(document, \"EvernoteGlobalReceiver\", Evernote.NotebookTypes.PERSONAL);\n        this.ensureAuthenticated();\n        this._addon.GetNotebooks(document, \"EvernoteGlobalReceiver\", Evernote.NotebookTypes.BUSINESS);\n        this.ensureAuthenticated();\n        this._addon.GetNotebooks(document, \"EvernoteGlobalReceiver\", Evernote.NotebookTypes.LINKED);\n    },\n\n    \/**\n     * Call Addin to get all personal tags (global \"EvernoteGlobalReceiver\" function is called with response)\n     * @param document - document object\n     *\/\n    getTags : function(document) {\n        this.ensureAuthenticated();\n        this._addon.GetTags(document, \"EvernoteGlobalReceiver\");\n    },\n\n    \/**\n     * Call Addin to get linked notebook tags (global \"EvernoteGlobalReceiver\" function is called with response)\n     * @param document - document object\n     *\/\n    getLinkedTags : function(document, notebookUid) {\n        this.ensureAuthenticated();\n        this._addon.GetLinkedNotebooksTags(document, \"EvernoteGlobalReceiver\", notebookUid);\n    },\n\n    \/**\n     * Returns document location address\n     * @param document - DOM document\n     * @return {*}\n     *\/\n    getDocumentHref: function(document) {\n        return this._addon.GetDocumentHref(document);\n    },\n\n    allowSetForegroundWindow: function(id) {\n        this._addon.AllowSetForegroundWindow(id);\n    },\n\n    getProcessID: function(doc) {\n        this.ensureAuthenticated();\n        this._addon.GetProcessID(doc, \"EvernoteGlobalReceiver\");\n    },\n\n    resetAuthenticatedState: function() {\n        this.isAuthenticated = true;\n    },\n\n    \/\/This function should be called before every call to Addin that will establish connection with EvernoteClipper process.\n    ensureAuthenticated: function() {\n        if(!this.isAuthenticated) {\n            throw new Evernote.AuthenticatedException(\"User is not authorized\");\n        }\n    },\n\n    processError: function(error) {\n        if(error.code == Evernote.ErrorCodes.AUTHENTICATION_ERROR) {\n            this.isAuthenticated = false;\n        }\n        return false;\n    },\n\n    getEvernoteVersion: function(document) {\n        this._addon.GetEvernoteVersion(document, \"EvernoteGlobalReceiver\");\n    },\n\n    getServerLocation: function() {\n        try {\n            return this._addon.GetServerLocation();\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to get Evernote server location due to error: \" + e);\n        }\n    },\n\n    getEvernoteVersionAsync: function(callback) {\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetEvernoteVersionAsync( Evernote.AsyncEngine.commonCallback, requestID );\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get Evernote version (async) due to error: \" + e);\n        }\n    },\n\n    getNotebooksAsync : function(callback) {\n        this.ensureAuthenticated();\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetNotebooksAsync( Evernote.AsyncEngine.commonCallback, requestID, Evernote.NotebookTypes.PERSONAL);\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetNotebooksAsync( Evernote.AsyncEngine.commonCallback, requestID, Evernote.NotebookTypes.BUSINESS);\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetNotebooksAsync( Evernote.AsyncEngine.commonCallback, requestID, Evernote.NotebookTypes.LINKED);\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get notebooks (async) due to error: \" + e);\n        }\n    },\n\n    getTagsAsync : function(callback) {\n        this.ensureAuthenticated();\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetTagsAsync( Evernote.AsyncEngine.commonCallback, requestID );\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get tags (async) due to error: \" + e);\n        }\n    },\n\n    getLinkedTagsAsync : function(callback, args, notebookUid) {\n        this.ensureAuthenticated();\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback, args);\n            this._addon.GetLinkedNotebooksTagsAsync( Evernote.AsyncEngine.commonCallback, requestID, notebookUid );\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get notebooks tags (async) due to error: \" + e);\n        }\n    },\n\n    clipNoteAsync : function(callback, content, options, sourceUrl, imageUrls, silent) {\n        var isSilentClip = silent ? 1 : 0;\n        var images = imageUrls;\n        if(!(images instanceof Array)) {\n            images = [imageUrls];\n        }\n        var requestID;\n        try {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            var notebookUid = options.notebookUid | 0;\n            try {\n                notebookUid = options.notebookUid() | 0;\n            } catch(e) {\n\n            }\n            this.ensureAuthenticated();\n            Evernote.Logger.debug(\"Clip to \" + (notebookUid) + \" with tags: \" + options.tags.join(\",\") + \" ; comment: \" + options.comments);\n            this._addon.ClipNoteAsync(Evernote.AsyncEngine.commonCallback, requestID, options.title, content, sourceUrl, isSilentClip, images.join(\"#\") , notebookUid, options.tags.join(\",\"), \"\");\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to clipNote due to error \" + e);\n        }\n    },\n\n    \/**\n     * Performs security (HTTPS - Port: 443) asynchronous POST request. Example: https:\/\/www.evernote.com\/Login.action\n     * @param callback\n     * @param url Example: \"www.evernote.com\"\n     * @param urlNamedObject Example: \"Login.action\"\n     * @param data - data for \"POST\" request\n     * @constructor\n     *\/\n    asyncWebRequest : function(callback, url, urlNamedObject, data) {\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.AsyncWebRequest( Evernote.AsyncEngine.commonCallback, requestID, url, urlNamedObject, data);\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to exec async web request due to error: \" + e);\n        }\n    },\n\n    clipImageAsync : function(options, callback, url, imageBase64) {\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            var notebookUid = options.notebookUid | 0;\n            try {\n                notebookUid = options.notebookUid() | 0;\n            } catch(e) {\n            }\n            this._addon.ClipImageAsync(Evernote.AsyncEngine.commonCallback, requestID, notebookUid, options.title, url, options.tags.join(\",\"), options.comments, imageBase64);\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to exec async web request due to error: \" + e);\n        }\n    },\n\n    getScreenshotBase64 : function(doc, coord) {\n        try {\n            return this._addon.GetScreenshotBase64Ex(doc, coord[0], coord[1], coord[2], coord[3]);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to get screnshot due to error: \" + e);\n        }\n    },\n\n    openLocalFile : function(logPath, flags)\n    {\n        try {\n            if (!flags)\n                flags = 1;\n\n            this._addon.OpenLocalFile(document, logPath, flags);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to open local file due to error \" + e);\n        }\n    },\n\n    getLastLoginUser : function() {\n        try {\n            return this._addon.GetLastLoginUser();\n        } catch (e) {\n            Evernote.Logger.error( \"GetLastLoginUser failed \" + e );\n        }\n        return null;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.FileLogger = {\n    _addin : Evernote.Addin,\n\n    _log : function(level, message) {\n        if(level >= this.level)\n            this._addin.log(level, \"JS: \" + message);\n    },\n\n    debug : function(message) {\n        try {\n            this._log(0, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.debug(message);\n            }\n        }\n    },\n\n    info : function(message) {\n        try {\n            this._log(1, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.info(message);\n            }\n        }\n    },\n\n    warn : function(message) {\n        try {\n            this._log(2, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.warn(message);\n            }\n        }\n    },\n\n    error : function(message) {\n        try {\n            this._log(3, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.error(message);\n            }\n        }\n    },\n\n    setNext : function(logger) {\n        this._next = logger;\n        this._next.setLevel(this.level);\n    },\n\n    setLevel : function(level) {\n        this.level = level;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ConsoleLogger = {\n    debug : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.DEBUG) {\n            try {\n                console.info(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.debug(message);\n                }\n            }\n        }\n    },\n\n    info : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.INFO) {\n            try {\n                console.info(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.info(message);\n                }\n            }\n        }\n    },\n\n    warn : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.WARN) {\n            try {\n                console.warn(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.warn(message);\n                }\n            }\n        }\n    },\n\n    error : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.ERROR) {\n            try {\n                console.error(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.error(message);\n                }\n            }\n        }\n    },\n\n    setNext : function(logger) {\n        this._next = logger;\n    },\n\n    setLevel : function(level) {\n        this.level = level;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.AlertLogger = {\n    debug : function(message) {\n        alert(\"Debug: \" + message);\n    },\n\n    info : function(message) {\n        alert(\"Info: \" + message);\n    },\n\n    warn : function(message) {\n        alert(\"Warn: \" + message);\n    },\n\n    error : function(message) {\n        alert(\"Error: \" + message);\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.LoggerConfigurator = {\n\n    DEBUG : 0,\n    INFO : 1,\n    WARN: 2,\n    ERROR: 3,\n\n    getLogger : function() {\n        var logger = Evernote.FileLogger;\n        if(logger) {\n            logger.setLevel(this.WARN);\n            Evernote.ConsoleLogger.setNext(Evernote.AlertLogger);\n            logger.setNext(Evernote.ConsoleLogger);\n            return logger;\n        }\n        return Evernote.ConsoleLogger;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Represents page context (have permissions to access and modify DOM objects)\n *\/\n\ntry {\n\n    PageContext = {\n        url: (location &#038;&#038; location.href) ? location.href : document.location.href,\n        title: document.title,\n\n        META: \"evernote-webclipper-extension\",\n\n        getFavIconUrl : function() {\n            var links = document.getElementsByTagName(\"link\");\n            var i;\n            for (i = 0; i < links.length; i++) {\n                if (links[i].rel) {\n                    var rels = links[i].rel.toLowerCase().split(\/\\s+\/);\n                    if (Evernote.ArrayExtension.indexOf(rels, \"icon\") !== -1) {\n                        \/\/ Found it!\n                        return links[i].href;\n                    }\n                }\n            }\n            \/\/Try to get it from google web site\n            var re = new RegExp( \"^[^:]+:\\\/+([^\\\/\" + \":\" + \"]+).*$\" );\n            var domain = PageContext.url.replace( re, \"$1\" );\n            return \"http:\/\/www.google.com\/s2\/favicons?domain=\" + domain.toLowerCase();\n        },\n\n        injectAdditionalTags : function() {\n            var url = document.location.href;\n            if ( url.match( \/^https?:\\\/\\\/[a-z0-9-+\\.]*(evernote|yinxiang)\\.com\\\/\/i ) ) {\n                try {\n                    var metas = document.getElementsByTagName( \"meta\" );\n                    for ( var i = 0; i < metas.length; ++i ) {\n                        if ( metas[i].name == PageContext.META ) {\n                            return;\n                        }\n                    }\n\n                    var meta = document.createElement( \"meta\" );\n                    meta.name = PageContext.META;\n                    meta.content = \"installed\";\n\n                    var head = document.head;\n                    if ( head ) {\n                        head.appendChild( meta );\n                    }\n\n                    if ( document.body ) {\n                        document.body.className += ((document.body.className) ? \" \" : \"\") + PageContext.META;\n                    }\n                }\n                catch ( e ) {\n                    alert( \"PageContext.injectAdditionalTags() failed: \" + e );\n                    throw e;\n                }\n            }\n        }\n    };\n    if((document.readyState == \"complete\" || document.readyState == \"interactive\") &#038;&#038; !window.PageContext) {\n        PageContext.injectAdditionalTags();\n    }\n} catch(e) {\n    \/\/Just ignore exception here\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * String constants used in the project.\n * @type {Object}\n *\/\nConstants = {\n    CLIP_DIALOG_ID : \"evernote-content\",\n    CLIP_DIALOG_NEW_ID : \"evernote-popup-container\",\n    OPTIONS_DIALOG_ID : \"evernote-options-content\",\n    ATTR_DIALOG_ID : \"evernote-attributes-content\",\n    SHARE_DIALOG_ID : \"evernote-share-content\",\n    POST_CLIP_DIALOG_ID : \"evernote-post-clip-content\",\n    EXPAND_SIGN : '+',\n    CONTRACT_SIGN : '&#8211;',\n    NEW_LINE: '\\n'\n};\n\nBrowserNavConstants  = {\n    \/\/ full list:  http:\/\/msdn.microsoft.com\/en-us\/library\/aa768360(v=vs.85).aspx\n    NAVOPENINNEWWINDOW : 0x1,\n    NAVOPENNEWTAB : 0x0800,\n    NAVOPENINBACKGROUNDTAB : 0x1000,\n    NAVOPENNEWFOREGROUNDTAB : 0x10000\n};\n\/\/ ]]><\/script><\/p>\n<p><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*\n    http:\/\/www.JSON.org\/json2.js\n    2008-11-19\n\n    Public Domain.\n\n    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n    See http:\/\/www.JSON.org\/js.html\n\n    This file creates a global JSON object containing two methods: stringify\n    and parse.\n\n        JSON.stringify(value, replacer, space)\n            value       any JavaScript value, usually an object or array.\n\n            replacer    an optional parameter that determines how object\n                        values are stringified for objects. It can be a\n                        function or an array of strings.\n\n            space       an optional parameter that specifies the indentation\n                        of nested structures. If it is omitted, the text will\n                        be packed without extra whitespace. If it is a number,\n                        it will specify the number of spaces to indent at each\n                        level. If it is a string (such as '\\t' or '&nbsp;'),\n                        it contains the characters used to indent at each level.\n\n            This method produces a JSON text from a JavaScript value.\n\n            When an object value is found, if the object contains a toJSON\n            method, its toJSON method will be called and the result will be\n            stringified. A toJSON method does not serialize: it returns the\n            value represented by the name\/value pair that should be serialized,\n            or undefined if nothing should be serialized. The toJSON method\n            will be passed the key associated with the value, and this will be\n            bound to the object holding the key.\n\n            For example, this would serialize Dates as ISO strings.\n\n                Date.prototype.toJSON = function (key) {\n                    function f(n) {\n                        \/\/ Format integers to have at least two digits.\n                        return n < 10 ? '0' + n : n;\n                    }\n\n                    return this.getUTCFullYear()   + '-' +\n                         f(this.getUTCMonth() + 1) + '-' +\n                         f(this.getUTCDate())      + 'T' +\n                         f(this.getUTCHours())     + ':' +\n                         f(this.getUTCMinutes())   + ':' +\n                         f(this.getUTCSeconds())   + 'Z';\n                };\n\n            You can provide an optional replacer method. It will be passed the\n            key and value of each member, with this bound to the containing\n            object. The value that is returned from your method will be\n            serialized. If your method returns undefined, then the member will\n            be excluded from the serialization.\n\n            If the replacer parameter is an array of strings, then it will be\n            used to select the members to be serialized. It filters the results\n            such that only members with keys listed in the replacer array are\n            stringified.\n\n            Values that do not have JSON representations, such as undefined or\n            functions, will not be serialized. Such values in objects will be\n            dropped; in arrays they will be replaced with null. You can use\n            a replacer function to replace those with JSON values.\n            JSON.stringify(undefined) returns undefined.\n\n            The optional space parameter produces a stringification of the\n            value that is filled with line breaks and indentation to make it\n            easier to read.\n\n            If the space parameter is a non-empty string, then that string will\n            be used for indentation. If the space parameter is a number, then\n            the indentation will be that many spaces.\n\n            Example:\n\n            text = JSON.stringify(['e', {pluribus: 'unum'}]);\n            \/\/ text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\n            \/\/ text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n            text = JSON.stringify([new Date()], function (key, value) {\n                return this[key] instanceof Date ?\n                    'Date(' + this[key] + ')' : value;\n            });\n            \/\/ text is '[\"Date(---current time---)\"]'\n\n        JSON.parse(text, reviver)\n            This method parses a JSON text to produce an object or array.\n            It can throw a SyntaxError exception.\n\n            The optional reviver parameter is a function that can filter and\n            transform the results. It receives each of the keys and values,\n            and its return value is used instead of the original value.\n            If it returns what it received, then the structure is not modified.\n            If it returns undefined then the member is deleted.\n\n            Example:\n\n            \/\/ Parse the text. Values that look like ISO date strings will\n            \/\/ be converted to Date objects.\n\n            myData = JSON.parse(text, function (key, value) {\n                var a;\n                if (typeof value === 'string') {\n                    a =\n\/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$\/.exec(value);\n                    if (a) {\n                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n                            +a[5], +a[6]));\n                    }\n                }\n                return value;\n            });\n\n            myData = JSON.parse('[\"Date(09\/09\/2001)\"]', function (key, value) {\n                var d;\n                if (typeof value === 'string' &#038;&#038;\n                        value.slice(0, 5) === 'Date(' &#038;&#038;\n                        value.slice(-1) === ')') {\n                    d = new Date(value.slice(5, -1));\n                    if (d) {\n                        return d;\n                    }\n                }\n                return value;\n            });\n\n    This is a reference implementation. You are free to copy, modify, or\n    redistribute.\n\n    This code should be minified before deployment.\n    See http:\/\/javascript.crockford.com\/jsmin.html\n\n    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n    NOT CONTROL.\n*\/\n\n\/*jslint evil: true *\/\n\n\/*global JSON *\/\n\n\/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\n    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n    lastIndex, length, parse, prototype, push, replace, slice, stringify,\n    test, toJSON, toString, valueOf\n*\/\n\n\/\/ Create a JSON object only if one does not already exist. We create the\n\/\/ methods in a closure to avoid creating global variables.\n\nif (!this.JSON) {\n    JSON = {};\n}\n(function () {\n\n    function f(n) {\n        \/\/ Format integers to have at least two digits.\n        return n < 10 ? '0' + n : n;\n    }\n\n    if (typeof Date.prototype.toJSON !== 'function') {\n\n        Date.prototype.toJSON = function (key) {\n\n            return this.getUTCFullYear()   + '-' +\n                 f(this.getUTCMonth() + 1) + '-' +\n                 f(this.getUTCDate())      + 'T' +\n                 f(this.getUTCHours())     + ':' +\n                 f(this.getUTCMinutes())   + ':' +\n                 f(this.getUTCSeconds())   + 'Z';\n        };\n\n        String.prototype.toJSON =\n        Number.prototype.toJSON =\n        Boolean.prototype.toJSON = function (key) {\n            return this.valueOf();\n        };\n    }\n\n    var cx = \/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]\/g,\n        escapable = \/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]\/g,\n        gap,\n        indent,\n        meta = {    \/\/ table of character substitutions\n            '\\b': '\\\\b',\n            '\\t': '\\\\t',\n            '\\n': '\\\\n',\n            '\\f': '\\\\f',\n            '\\r': '\\\\r',\n            '\"' : '\\\\\"',\n            '\\\\': '\\\\\\\\'\n        },\n        rep;\n\n    function quote(string) {\n\n\/\/ If the string contains no control characters, no quote characters, and no\n\/\/ backslash characters, then we can safely slap some quotes around it.\n\/\/ Otherwise we must also replace the offending characters with safe escape\n\/\/ sequences.\n\n        escapable.lastIndex = 0;\n        return escapable.test(string) ?\n            '\"' + string.replace(escapable, function (a) {\n                var c = meta[a];\n                return typeof c === 'string' ? c :\n                    '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n            }) + '\"' :\n            '\"' + string + '\"';\n    }\n\n    function str(key, holder) {\n\n\/\/ Produce a string from holder[key].\n\n        var i,          \/\/ The loop counter.\n            k,          \/\/ The member key.\n            v,          \/\/ The member value.\n            length,\n            mind = gap,\n            partial,\n            value = holder[key];\n\n\/\/ If the value has a toJSON method, call it to obtain a replacement value.\n\n        if (value &#038;&#038; typeof value === 'object' &#038;&#038;\n                typeof value.toJSON === 'function') {\n            value = value.toJSON(key);\n        }\n\n\/\/ If we were called with a replacer function, then call the replacer to\n\/\/ obtain a replacement value.\n\n        if (typeof rep === 'function') {\n            value = rep.call(holder, key, value);\n        }\n\n\/\/ What happens next depends on the value's type.\n\n        switch (typeof value) {\n        case 'string':\n            return quote(value);\n\n        case 'number':\n\n\/\/ JSON numbers must be finite. Encode non-finite numbers as null.\n\n            return isFinite(value) ? String(value) : 'null';\n\n        case 'boolean':\n        case 'null':\n\n\/\/ If the value is a boolean or null, convert it to a string. Note:\n\/\/ typeof null does not produce 'null'. The case is included here in\n\/\/ the remote chance that this gets fixed someday.\n\n            return String(value);\n\n\/\/ If the type is 'object', we might be dealing with an object or an array or\n\/\/ null.\n\n        case 'object':\n\n\/\/ Due to a specification blunder in ECMAScript, typeof null is 'object',\n\/\/ so watch out for that case.\n\n            if (!value) {\n                return 'null';\n            }\n\n\/\/ Make an array to hold the partial results of stringifying this object value.\n\n            gap += indent;\n            partial = [];\n\n\/\/ Is the value an array?\n\n            if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n\/\/ The value is an array. Stringify every element. Use null as a placeholder\n\/\/ for non-JSON values.\n\n                length = value.length;\n                for (i = 0; i < length; i += 1) {\n                    partial[i] = str(i, value) || 'null';\n                }\n\n\/\/ Join all of the elements together, separated with commas, and wrap them in\n\/\/ brackets.\n\n                v = partial.length === 0 ? '[]' :\n                    gap ? '[\\n' + gap +\n                            partial.join(',\\n' + gap) + '\\n' +\n                                mind + ']' :\n                          '[' + partial.join(',') + ']';\n                gap = mind;\n                return v;\n            }\n\n\/\/ If the replacer is an array, use it to select the members to be stringified.\n\n            if (rep &#038;&#038; typeof rep === 'object') {\n                length = rep.length;\n                for (i = 0; i < length; i += 1) {\n                    k = rep[i];\n                    if (typeof k === 'string') {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            } else {\n\n\/\/ Otherwise, iterate through all of the keys in the object.\n\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            }\n\n\/\/ Join all of the member texts together, separated with commas,\n\/\/ and wrap them in braces.\n\n            v = partial.length === 0 ? '{}' :\n                gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n                        mind + '}' : '{' + partial.join(',') + '}';\n            gap = mind;\n            return v;\n        }\n    }\n\n\/\/ If the JSON object does not yet have a stringify method, give it one.\n\n    if (typeof JSON.stringify !== 'function') {\n        JSON.stringify = function (value, replacer, space) {\n\n\/\/ The stringify method takes a value and an optional replacer, and an optional\n\/\/ space parameter, and returns a JSON text. The replacer can be a function\n\/\/ that can replace values, or an array of strings that will select the keys.\n\/\/ A default replacer method can be provided. Use of the space parameter can\n\/\/ produce text that is more easily readable.\n\n            var i;\n            gap = '';\n            indent = '';\n\n\/\/ If the space parameter is a number, make an indent string containing that\n\/\/ many spaces.\n\n            if (typeof space === 'number') {\n                for (i = 0; i < space; i += 1) {\n                    indent += ' ';\n                }\n\n\/\/ If the space parameter is a string, it will be used as the indent string.\n\n            } else if (typeof space === 'string') {\n                indent = space;\n            }\n\n\/\/ If there is a replacer, it must be a function or an array.\n\/\/ Otherwise, throw an error.\n\n            rep = replacer;\n            if (replacer &#038;&#038; typeof replacer !== 'function' &#038;&#038;\n                    (typeof replacer !== 'object' ||\n                     typeof replacer.length !== 'number')) {\n                throw new Error('JSON.stringify');\n            }\n\n\/\/ Make a fake root object containing our value under the key of ''.\n\/\/ Return the result of stringifying the value.\n\n            return str('', {'': value});\n        };\n    }\n\n\/\/ If the JSON object does not yet have a parse method, give it one.\n\n    if (typeof JSON.parse !== 'function') {\n        JSON.parse = function (text, reviver) {\n\n\/\/ The parse method takes a text and an optional reviver function, and returns\n\/\/ a JavaScript value if the text is a valid JSON text.\n            var j;\n\n            function walk(holder, key) {\n\n\/\/ The walk method is used to recursively walk the resulting structure so\n\/\/ that modifications can be made.\n\n                var k, v, value = holder[key];\n                if (value &#038;&#038; typeof value === 'object') {\n                    for (k in value) {\n                        if (Object.hasOwnProperty.call(value, k)) {\n                            v = walk(value, k);\n                            if (v !== undefined) {\n                                value[k] = v;\n                            } else {\n                                delete value[k];\n                            }\n                        }\n                    }\n                }\n                return reviver.call(holder, key, value);\n            }\n\n\/\/ Parsing happens in four stages. In the first stage, we replace certain\n\/\/ Unicode characters with escape sequences. JavaScript handles many characters\n\/\/ incorrectly, either silently deleting them, or treating them as line endings.\n\n            cx.lastIndex = 0;\n            if (cx.test(text)) {\n                text = text.replace(cx, function (a) {\n                    return '\\\\u' +\n                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n                });\n            }\n\/\/ In the second stage, we run the text against regular expressions that look\n\/\/ for non-JSON patterns. We are especially concerned with '()' and 'new'\n\/\/ because they can cause invocation, and '=' because it can cause mutation.\n\/\/ But just to be safe, we want to reject all unexpected forms.\n\n\/\/ We split the second stage into 4 regexp operations in order to work around\n\/\/ crippling inefficiencies in IE's and Safari's regexp engines. First we\n\/\/ replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\n\/\/ replace all simple value tokens with ']' characters. Third, we delete all\n\/\/ open brackets that follow a colon or comma or that begin the text. Finally,\n\/\/ we look to see that the remaining characters are only whitespace or ']' or\n\/\/ ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\n            if (\/^[\\],:{}\\s]*$\/.\ntest(text.replace(\/\\\\(?:[\"\\\\\\\/bfnrt]|u[0-9a-fA-F]{4})\/g, '@').\nreplace(\/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?\/g, ']').\nreplace(\/(?:^|:|,)(?:\\s*\\[)+\/g, ''))) {\n\n\/\/ In the third stage we use the eval function to compile the text into a\n\/\/ JavaScript structure. The '{' operator is subject to a syntactic ambiguity\n\/\/ in JavaScript: it can begin a block or an object literal. We wrap the text\n\/\/ in parens to eliminate the ambiguity.\n                j = eval('(' + text + ')');\n\n\/\/ In the optional fourth stage, we recursively walk the new structure, passing\n\/\/ each name\/value pair to a reviver function for possible transformation.\n                return typeof reviver === 'function' ?\n                    walk({'': j}, '') : j;\n            }\n\n\/\/ If the text is not JSON parseable, then a SyntaxError is thrown.\n            throw new SyntaxError('JSON.parse');\n        };\n    }\n})();\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*mousewheel*\/\n(function(a){function d(b){var c=b||window.event,d=[].slice.call(arguments,1),e=0,f=!0,g=0,h=0;return b=a.event.fix(c),b.type=\"mousewheel\",c.wheelDelta&#038;&#038;(e=c.wheelDelta\/120),c.detail&#038;&#038;(e=-c.detail\/3),h=e,c.axis!==undefined&#038;&#038;c.axis===c.HORIZONTAL_AXIS&#038;&#038;(h=0,g=-1*e),c.wheelDeltaY!==undefined&#038;&#038;(h=c.wheelDeltaY\/120),c.wheelDeltaX!==undefined&#038;&#038;(g=-1*c.wheelDeltaX\/120),d.unshift(b,e,g,h),(a.event.dispatch||a.event.handle).apply(this,d)}var b=[\"DOMMouseScroll\",\"mousewheel\"];if(a.event.fixHooks)for(var c=b.length;c;)a.event.fixHooks[b[--c]]=a.event.mouseHooks;a.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=b.length;a;)this.addEventListener(b[--a],d,!1);else this.onmousewheel=d},teardown:function(){if(this.removeEventListener)for(var a=b.length;a;)this.removeEventListener(b[--a],d,!1);else this.onmousewheel=null}},a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})})(jQuery);\n\/*custom scrollbar*\/\n(function(c){var b={init:function(e){var f={set_width:false,set_height:false,horizontalScroll:false,scrollInertia:950,mouseWheel:true,mouseWheelPixels:\"auto\",autoDraggerLength:true,autoHideScrollbar:false,alwaysShowScrollbar:false,snapAmount:null,snapOffset:0,scrollButtons:{enable:false,scrollType:\"continuous\",scrollSpeed:\"auto\",scrollAmount:40},advanced:{updateOnBrowserResize:true,updateOnContentResize:false,autoExpandHorizontalScroll:false,autoScrollOnFocus:true,normalizeMouseWheelDelta:false},contentTouchScroll:true,callbacks:{onScrollStart:function(){},onScroll:function(){},onTotalScroll:function(){},onTotalScrollBack:function(){},onTotalScrollOffset:0,onTotalScrollBackOffset:0,whileScrolling:function(){}},theme:\"light\"},e=c.extend(true,f,e);return this.each(function(){var m=c(this);if(e.set_width){m.css(\"width\",e.set_width)}if(e.set_height){m.css(\"height\",e.set_height)}if(!c(document).data(\"mCustomScrollbar-index\")){c(document).data(\"mCustomScrollbar-index\",\"1\")}else{var t=parseInt(c(document).data(\"mCustomScrollbar-index\"));c(document).data(\"mCustomScrollbar-index\",t+1)}m.wrapInner(\"\n\n\n\n<div class='mCustomScrollBox mCS-\"+e.theme+\"' id='mCSB_\"+c(document).data(\"mCustomScrollbar-index\")+\"' style='position:relative; height:100%; overflow:hidden; max-width:100%;' \/>\").addClass(\"mCustomScrollbar _mCS_\"+c(document).data(\"mCustomScrollbar-index\"));var g=m.children(\".mCustomScrollBox\");if(e.horizontalScroll){g.addClass(\"mCSB_horizontal\").wrapInner(\"\n\n\n\n<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' \/>\");var k=g.children(\".mCSB_h_wrapper\");k.wrapInner(\"\n\n\n\n<div class='mCSB_container' style='position:absolute; left:0;' \/>\").children(\".mCSB_container\").css({width:k.children().outerWidth(),position:\"relative\"}).unwrap()}else{g.wrapInner(\"\n\n\n\n<div class='mCSB_container' style='position:relative; top:0;' \/>\")}var o=g.children(\".mCSB_container\");if(c.support.touch){o.addClass(\"mCS_touch\")}o.after(\"\n\n\n\n<div class='mCSB_scrollTools' style='position:absolute;'>\n\n\n\n<div class='mCSB_draggerContainer'>\n\n\n\n<div class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'>\n\n\n\n<div class='mCSB_dragger_bar' style='position:relative;'><\/div>\n\n\n\n<\/div>\n\n\n\n\n\n\n<div class='mCSB_draggerRail'><\/div>\n\n\n\n<\/div>\n\n\n\n<\/div>\n\n\n\n\n\");var l=g.children(\".mCSB_scrollTools\"),h=l.children(\".mCSB_draggerContainer\"),q=h.children(\".mCSB_dragger\");if(e.horizontalScroll){q.data(\"minDraggerWidth\",q.width())}else{q.data(\"minDraggerHeight\",q.height())}if(e.scrollButtons.enable){if(e.horizontalScroll){l.prepend(\"<a class='mCSB_buttonLeft' oncontextmenu='return false;'><\/a>\").append(\"<a class='mCSB_buttonRight' oncontextmenu='return false;'><\/a>\")}else{l.prepend(\"<a class='mCSB_buttonUp' oncontextmenu='return false;'><\/a>\").append(\"<a class='mCSB_buttonDown' oncontextmenu='return false;'><\/a>\")}}g.bind(\"scroll\",function(){if(!m.is(\".mCS_disabled\")){g.scrollTop(0).scrollLeft(0)}});m.data({mCS_Init:true,mCustomScrollbarIndex:c(document).data(\"mCustomScrollbar-index\"),horizontalScroll:e.horizontalScroll,scrollInertia:e.scrollInertia,scrollEasing:\"mcsEaseOut\",mouseWheel:e.mouseWheel,mouseWheelPixels:e.mouseWheelPixels,autoDraggerLength:e.autoDraggerLength,autoHideScrollbar:e.autoHideScrollbar,alwaysShowScrollbar:e.alwaysShowScrollbar,snapAmount:e.snapAmount,snapOffset:e.snapOffset,scrollButtons_enable:e.scrollButtons.enable,scrollButtons_scrollType:e.scrollButtons.scrollType,scrollButtons_scrollSpeed:e.scrollButtons.scrollSpeed,scrollButtons_scrollAmount:e.scrollButtons.scrollAmount,autoExpandHorizontalScroll:e.advanced.autoExpandHorizontalScroll,autoScrollOnFocus:e.advanced.autoScrollOnFocus,normalizeMouseWheelDelta:e.advanced.normalizeMouseWheelDelta,contentTouchScroll:e.contentTouchScroll,onScrollStart_Callback:e.callbacks.onScrollStart,onScroll_Callback:e.callbacks.onScroll,onTotalScroll_Callback:e.callbacks.onTotalScroll,onTotalScrollBack_Callback:e.callbacks.onTotalScrollBack,onTotalScroll_Offset:e.callbacks.onTotalScrollOffset,onTotalScrollBack_Offset:e.callbacks.onTotalScrollBackOffset,whileScrolling_Callback:e.callbacks.whileScrolling,bindEvent_scrollbar_drag:false,bindEvent_content_touch:false,bindEvent_scrollbar_click:false,bindEvent_mousewheel:false,bindEvent_buttonsContinuous_y:false,bindEvent_buttonsContinuous_x:false,bindEvent_buttonsPixels_y:false,bindEvent_buttonsPixels_x:false,bindEvent_focusin:false,bindEvent_autoHideScrollbar:false,mCSB_buttonScrollRight:false,mCSB_buttonScrollLeft:false,mCSB_buttonScrollDown:false,mCSB_buttonScrollUp:false});if(e.horizontalScroll){if(m.css(\"max-width\")!==\"none\"){if(!e.advanced.updateOnContentResize){e.advanced.updateOnContentResize=true}}}else{if(m.css(\"max-height\")!==\"none\"){var s=false,r=parseInt(m.css(\"max-height\"));if(m.css(\"max-height\").indexOf(\"%\")>=0){s=r,r=m.parent().height()*s\/100}m.css(\"overflow\",\"hidden\");g.css(\"max-height\",r)}}m.mCustomScrollbar(\"update\");if(e.advanced.updateOnBrowserResize){var i,j=c(window).width(),u=c(window).height();c(window).bind(\"resize.\"+m.data(\"mCustomScrollbarIndex\"),function(){if(i){clearTimeout(i)}i=setTimeout(function(){if(!m.is(\".mCS_disabled\")&#038;&#038;!m.is(\".mCS_destroyed\")){var w=c(window).width(),v=c(window).height();if(j!==w||u!==v){if(m.css(\"max-height\")!==\"none\"&#038;&#038;s){g.css(\"max-height\",m.parent().height()*s\/100)}m.mCustomScrollbar(\"update\");j=w;u=v}}},150)})}if(e.advanced.updateOnContentResize){var p;if(e.horizontalScroll){var n=o.outerWidth()}else{var n=o.outerHeight()}p=setInterval(function(){if(e.horizontalScroll){if(e.advanced.autoExpandHorizontalScroll){o.css({position:\"absolute\",width:\"auto\"}).wrap(\"\n\n\n\n<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' \/>\").css({width:o.outerWidth(),position:\"relative\"}).unwrap()}var v=o.outerWidth()}else{var v=o.outerHeight()}if(v!=n){m.mCustomScrollbar(\"update\");n=v}},300)}})},update:function(){var n=c(this),k=n.children(\".mCustomScrollBox\"),q=k.children(\".mCSB_container\");q.removeClass(\"mCS_no_scrollbar\");n.removeClass(\"mCS_disabled mCS_destroyed\");k.scrollTop(0).scrollLeft(0);var y=k.children(\".mCSB_scrollTools\"),o=y.children(\".mCSB_draggerContainer\"),m=o.children(\".mCSB_dragger\");if(n.data(\"horizontalScroll\")){var A=y.children(\".mCSB_buttonLeft\"),t=y.children(\".mCSB_buttonRight\"),f=k.width();if(n.data(\"autoExpandHorizontalScroll\")){q.css({position:\"absolute\",width:\"auto\"}).wrap(\"\n\n\n\n<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' \/>\").css({width:q.outerWidth(),position:\"relative\"}).unwrap()}var z=q.outerWidth()}else{var w=y.children(\".mCSB_buttonUp\"),g=y.children(\".mCSB_buttonDown\"),r=k.height(),i=q.outerHeight()}if(i>r&#038;&#038;!n.data(\"horizontalScroll\")){y.css(\"display\",\"block\");var s=o.height();if(n.data(\"autoDraggerLength\")){var u=Math.round(r\/i*s),l=m.data(\"minDraggerHeight\");if(u<=l){m.css({height:l})}else{if(u>=s-10){var p=s-10;m.css({height:p})}else{m.css({height:u})}}m.children(\".mCSB_dragger_bar\").css({\"line-height\":m.height()+\"px\"})}var B=m.height(),x=(i-r)\/(s-B);n.data(\"scrollAmount\",x).mCustomScrollbar(\"scrolling\",k,q,o,m,w,g,A,t);var D=Math.abs(q.position().top);n.mCustomScrollbar(\"scrollTo\",D,{scrollInertia:0,trigger:\"internal\"})}else{if(z>f&#038;&#038;n.data(\"horizontalScroll\")){y.css(\"display\",\"block\");var h=o.width();if(n.data(\"autoDraggerLength\")){var j=Math.round(f\/z*h),C=m.data(\"minDraggerWidth\");if(j<=C){m.css({width:C})}else{if(j>=h-10){var e=h-10;m.css({width:e})}else{m.css({width:j})}}}var v=m.width(),x=(z-f)\/(h-v);n.data(\"scrollAmount\",x).mCustomScrollbar(\"scrolling\",k,q,o,m,w,g,A,t);var D=Math.abs(q.position().left);n.mCustomScrollbar(\"scrollTo\",D,{scrollInertia:0,trigger:\"internal\"})}else{k.unbind(\"mousewheel focusin\");if(n.data(\"horizontalScroll\")){m.add(q).css(\"left\",0)}else{m.add(q).css(\"top\",0)}if(n.data(\"alwaysShowScrollbar\")){if(!n.data(\"horizontalScroll\")){m.css({height:o.height()})}else{if(n.data(\"horizontalScroll\")){m.css({width:o.width()})}}}else{y.css(\"display\",\"none\");q.addClass(\"mCS_no_scrollbar\")}n.data({bindEvent_mousewheel:false,bindEvent_focusin:false})}}},scrolling:function(i,q,n,k,A,f,D,w){var l=c(this);if(!l.data(\"bindEvent_scrollbar_drag\")){var o,p,C,z,e;if(c.support.pointer){C=\"pointerdown\";z=\"pointermove\";e=\"pointerup\"}else{if(c.support.msPointer){C=\"MSPointerDown\";z=\"MSPointerMove\";e=\"MSPointerUp\"}}if(c.support.pointer||c.support.msPointer){k.bind(C,function(K){K.preventDefault();l.data({on_drag:true});k.addClass(\"mCSB_dragger_onDrag\");var J=c(this),M=J.offset(),I=K.originalEvent.pageX-M.left,L=K.originalEvent.pageY-M.top;if(I<J.width()&#038;&#038;I>0&#038;&#038;L<J.height()&#038;&#038;L>0){o=L;p=I}});c(document).bind(z+\".\"+l.data(\"mCustomScrollbarIndex\"),function(K){K.preventDefault();if(l.data(\"on_drag\")){var J=k,M=J.offset(),I=K.originalEvent.pageX-M.left,L=K.originalEvent.pageY-M.top;G(o,p,L,I)}}).bind(e+\".\"+l.data(\"mCustomScrollbarIndex\"),function(x){l.data({on_drag:false});k.removeClass(\"mCSB_dragger_onDrag\")})}else{k.bind(\"mousedown touchstart\",function(K){K.preventDefault();K.stopImmediatePropagation();var J=c(this),N=J.offset(),I,M;if(K.type===\"touchstart\"){var L=K.originalEvent.touches[0]||K.originalEvent.changedTouches[0];I=L.pageX-N.left;M=L.pageY-N.top}else{l.data({on_drag:true});k.addClass(\"mCSB_dragger_onDrag\");I=K.pageX-N.left;M=K.pageY-N.top}if(I<J.width()&#038;&#038;I>0&#038;&#038;M<J.height()&#038;&#038;M>0){o=M;p=I}}).bind(\"touchmove\",function(K){K.preventDefault();K.stopImmediatePropagation();var N=K.originalEvent.touches[0]||K.originalEvent.changedTouches[0],J=c(this),M=J.offset(),I=N.pageX-M.left,L=N.pageY-M.top;G(o,p,L,I)});c(document).bind(\"mousemove.\"+l.data(\"mCustomScrollbarIndex\"),function(K){if(l.data(\"on_drag\")){var J=k,M=J.offset(),I=K.pageX-M.left,L=K.pageY-M.top;G(o,p,L,I)}}).bind(\"mouseup.\"+l.data(\"mCustomScrollbarIndex\"),function(x){l.data({on_drag:false});k.removeClass(\"mCSB_dragger_onDrag\")})}l.data({bindEvent_scrollbar_drag:true})}function G(J,K,L,I){if(l.data(\"horizontalScroll\")){l.mCustomScrollbar(\"scrollTo\",(k.position().left-(K))+I,{moveDragger:true,trigger:\"internal\"})}else{l.mCustomScrollbar(\"scrollTo\",(k.position().top-(J))+L,{moveDragger:true,trigger:\"internal\"})}}if(c.support.touch&#038;&#038;l.data(\"contentTouchScroll\")){if(!l.data(\"bindEvent_content_touch\")){var m,E,s,t,v,F,H;q.bind(\"touchstart\",function(x){x.stopImmediatePropagation();m=x.originalEvent.touches[0]||x.originalEvent.changedTouches[0];E=c(this);s=E.offset();v=m.pageX-s.left;t=m.pageY-s.top;F=t;H=v});q.bind(\"touchmove\",function(x){x.preventDefault();x.stopImmediatePropagation();m=x.originalEvent.touches[0]||x.originalEvent.changedTouches[0];E=c(this).parent();s=E.offset();v=m.pageX-s.left;t=m.pageY-s.top;if(l.data(\"horizontalScroll\")){l.mCustomScrollbar(\"scrollTo\",H-v,{trigger:\"internal\"})}else{l.mCustomScrollbar(\"scrollTo\",F-t,{trigger:\"internal\"})}})}}if(!l.data(\"bindEvent_scrollbar_click\")){n.bind(\"click\",function(I){var x=(I.pageY-n.offset().top)*l.data(\"scrollAmount\"),y=c(I.target);if(l.data(\"horizontalScroll\")){x=(I.pageX-n.offset().left)*l.data(\"scrollAmount\")}if(y.hasClass(\"mCSB_draggerContainer\")||y.hasClass(\"mCSB_draggerRail\")){l.mCustomScrollbar(\"scrollTo\",x,{trigger:\"internal\",scrollEasing:\"draggerRailEase\"})}});l.data({bindEvent_scrollbar_click:true})}if(l.data(\"mouseWheel\")){if(!l.data(\"bindEvent_mousewheel\")){i.bind(\"mousewheel\",function(K,M){var J,I=l.data(\"mouseWheelPixels\"),x=Math.abs(q.position().top),L=k.position().top,y=n.height()-k.height();if(l.data(\"normalizeMouseWheelDelta\")){if(M<0){M=-1}else{M=1}}if(I===\"auto\"){I=100+Math.round(l.data(\"scrollAmount\")\/2)}if(l.data(\"horizontalScroll\")){L=k.position().left;y=n.width()-k.width();x=Math.abs(q.position().left)}if((M>0&#038;&#038;L!==0)||(M<0&#038;&#038;L!==y)){K.preventDefault();K.stopImmediatePropagation()}J=x-(M*I);l.mCustomScrollbar(\"scrollTo\",J,{trigger:\"internal\"})});l.data({bindEvent_mousewheel:true})}}if(l.data(\"scrollButtons_enable\")){if(l.data(\"scrollButtons_scrollType\")===\"pixels\"){if(l.data(\"horizontalScroll\")){w.add(D).unbind(\"mousedown touchstart MSPointerDown pointerdown mouseup MSPointerUp pointerup mouseout MSPointerOut pointerout touchend\",j,h);l.data({bindEvent_buttonsContinuous_x:false});if(!l.data(\"bindEvent_buttonsPixels_x\")){w.bind(\"click\",function(x){x.preventDefault();r(Math.abs(q.position().left)+l.data(\"scrollButtons_scrollAmount\"))});D.bind(\"click\",function(x){x.preventDefault();r(Math.abs(q.position().left)-l.data(\"scrollButtons_scrollAmount\"))});l.data({bindEvent_buttonsPixels_x:true})}}else{f.add(A).unbind(\"mousedown touchstart MSPointerDown pointerdown mouseup MSPointerUp pointerup mouseout MSPointerOut pointerout touchend\",j,h);l.data({bindEvent_buttonsContinuous_y:false});if(!l.data(\"bindEvent_buttonsPixels_y\")){f.bind(\"click\",function(x){x.preventDefault();r(Math.abs(q.position().top)+l.data(\"scrollButtons_scrollAmount\"))});A.bind(\"click\",function(x){x.preventDefault();r(Math.abs(q.position().top)-l.data(\"scrollButtons_scrollAmount\"))});l.data({bindEvent_buttonsPixels_y:true})}}function r(x){if(!k.data(\"preventAction\")){k.data(\"preventAction\",true);l.mCustomScrollbar(\"scrollTo\",x,{trigger:\"internal\"})}}}else{if(l.data(\"horizontalScroll\")){w.add(D).unbind(\"click\");l.data({bindEvent_buttonsPixels_x:false});if(!l.data(\"bindEvent_buttonsContinuous_x\")){w.bind(\"mousedown touchstart MSPointerDown pointerdown\",function(y){y.preventDefault();var x=B();l.data({mCSB_buttonScrollRight:setInterval(function(){l.mCustomScrollbar(\"scrollTo\",Math.abs(q.position().left)+x,{trigger:\"internal\",scrollEasing:\"easeOutCirc\"})},17)})});var j=function(x){x.preventDefault();clearInterval(l.data(\"mCSB_buttonScrollRight\"))};w.bind(\"mouseup touchend MSPointerUp pointerup mouseout MSPointerOut pointerout\",j);D.bind(\"mousedown touchstart MSPointerDown pointerdown\",function(y){y.preventDefault();var x=B();l.data({mCSB_buttonScrollLeft:setInterval(function(){l.mCustomScrollbar(\"scrollTo\",Math.abs(q.position().left)-x,{trigger:\"internal\",scrollEasing:\"easeOutCirc\"})},17)})});var h=function(x){x.preventDefault();clearInterval(l.data(\"mCSB_buttonScrollLeft\"))};D.bind(\"mouseup touchend MSPointerUp pointerup mouseout MSPointerOut pointerout\",h);l.data({bindEvent_buttonsContinuous_x:true})}}else{f.add(A).unbind(\"click\");l.data({bindEvent_buttonsPixels_y:false});if(!l.data(\"bindEvent_buttonsContinuous_y\")){f.bind(\"mousedown touchstart MSPointerDown pointerdown\",function(y){y.preventDefault();var x=B();l.data({mCSB_buttonScrollDown:setInterval(function(){l.mCustomScrollbar(\"scrollTo\",Math.abs(q.position().top)+x,{trigger:\"internal\",scrollEasing:\"easeOutCirc\"})},17)})});var u=function(x){x.preventDefault();clearInterval(l.data(\"mCSB_buttonScrollDown\"))};f.bind(\"mouseup touchend MSPointerUp pointerup mouseout MSPointerOut pointerout\",u);A.bind(\"mousedown touchstart MSPointerDown pointerdown\",function(y){y.preventDefault();var x=B();l.data({mCSB_buttonScrollUp:setInterval(function(){l.mCustomScrollbar(\"scrollTo\",Math.abs(q.position().top)-x,{trigger:\"internal\",scrollEasing:\"easeOutCirc\"})},17)})});var g=function(x){x.preventDefault();clearInterval(l.data(\"mCSB_buttonScrollUp\"))};A.bind(\"mouseup touchend MSPointerUp pointerup mouseout MSPointerOut pointerout\",g);l.data({bindEvent_buttonsContinuous_y:true})}}function B(){var x=l.data(\"scrollButtons_scrollSpeed\");if(l.data(\"scrollButtons_scrollSpeed\")===\"auto\"){x=Math.round((l.data(\"scrollInertia\")+100)\/40)}return x}}}if(l.data(\"autoScrollOnFocus\")){if(!l.data(\"bindEvent_focusin\")){i.bind(\"focusin\",function(){i.scrollTop(0).scrollLeft(0);var x=c(document.activeElement);if(x.is(\"input,textarea,select,button,a[tabindex],area,object\")){var J=q.position().top,y=x.position().top,I=i.height()-x.outerHeight();if(l.data(\"horizontalScroll\")){J=q.position().left;y=x.position().left;I=i.width()-x.outerWidth()}if(J+y<0||J+y>I){l.mCustomScrollbar(\"scrollTo\",y,{trigger:\"internal\"})}}});l.data({bindEvent_focusin:true})}}if(l.data(\"autoHideScrollbar\")&#038;&#038;!l.data(\"alwaysShowScrollbar\")){if(!l.data(\"bindEvent_autoHideScrollbar\")){i.bind(\"mouseenter\",function(x){i.addClass(\"mCS-mouse-over\");d.showScrollbar.call(i.children(\".mCSB_scrollTools\"))}).bind(\"mouseleave touchend\",function(x){i.removeClass(\"mCS-mouse-over\");if(x.type===\"mouseleave\"){d.hideScrollbar.call(i.children(\".mCSB_scrollTools\"))}});l.data({bindEvent_autoHideScrollbar:true})}}},scrollTo:function(e,f){var i=c(this),o={moveDragger:false,trigger:\"external\",callbacks:true,scrollInertia:i.data(\"scrollInertia\"),scrollEasing:i.data(\"scrollEasing\")},f=c.extend(o,f),p,g=i.children(\".mCustomScrollBox\"),k=g.children(\".mCSB_container\"),r=g.children(\".mCSB_scrollTools\"),j=r.children(\".mCSB_draggerContainer\"),h=j.children(\".mCSB_dragger\"),t=draggerSpeed=f.scrollInertia,q,s,m,l;if(!k.hasClass(\"mCS_no_scrollbar\")){i.data({mCS_trigger:f.trigger});if(i.data(\"mCS_Init\")){f.callbacks=false}if(e||e===0){if(typeof(e)===\"number\"){if(f.moveDragger){p=e;if(i.data(\"horizontalScroll\")){e=h.position().left*i.data(\"scrollAmount\")}else{e=h.position().top*i.data(\"scrollAmount\")}draggerSpeed=0}else{p=e\/i.data(\"scrollAmount\")}}else{if(typeof(e)===\"string\"){var v;if(e===\"top\"){v=0}else{if(e===\"bottom\"&#038;&#038;!i.data(\"horizontalScroll\")){v=k.outerHeight()-g.height()}else{if(e===\"left\"){v=0}else{if(e===\"right\"&#038;&#038;i.data(\"horizontalScroll\")){v=k.outerWidth()-g.width()}else{if(e===\"first\"){v=i.find(\".mCSB_container\").find(\":first\")}else{if(e===\"last\"){v=i.find(\".mCSB_container\").find(\":last\")}else{v=i.find(e)}}}}}}if(v.length===1){if(i.data(\"horizontalScroll\")){e=v.position().left}else{e=v.position().top}p=e\/i.data(\"scrollAmount\")}else{p=e=v}}}if(i.data(\"horizontalScroll\")){if(i.data(\"onTotalScrollBack_Offset\")){s=-i.data(\"onTotalScrollBack_Offset\")}if(i.data(\"onTotalScroll_Offset\")){l=g.width()-k.outerWidth()+i.data(\"onTotalScroll_Offset\")}if(p<0){p=e=0;clearInterval(i.data(\"mCSB_buttonScrollLeft\"));if(!s){q=true}}else{if(p>=j.width()-h.width()){p=j.width()-h.width();e=g.width()-k.outerWidth();clearInterval(i.data(\"mCSB_buttonScrollRight\"));if(!l){m=true}}else{e=-e}}var n=i.data(\"snapAmount\");if(n){e=Math.round(e\/n)*n-i.data(\"snapOffset\")}d.mTweenAxis.call(this,h[0],\"left\",Math.round(p),draggerSpeed,f.scrollEasing);d.mTweenAxis.call(this,k[0],\"left\",Math.round(e),t,f.scrollEasing,{onStart:function(){if(f.callbacks&#038;&#038;!i.data(\"mCS_tweenRunning\")){u(\"onScrollStart\")}if(i.data(\"autoHideScrollbar\")&#038;&#038;!i.data(\"alwaysShowScrollbar\")){d.showScrollbar.call(r)}},onUpdate:function(){if(f.callbacks){u(\"whileScrolling\")}},onComplete:function(){if(f.callbacks){u(\"onScroll\");if(q||(s&#038;&#038;k.position().left>=s)){u(\"onTotalScrollBack\")}if(m||(l&#038;&#038;k.position().left<=l)){u(\"onTotalScroll\")}}h.data(\"preventAction\",false);i.data(\"mCS_tweenRunning\",false);if(i.data(\"autoHideScrollbar\")&#038;&#038;!i.data(\"alwaysShowScrollbar\")){if(!g.hasClass(\"mCS-mouse-over\")){d.hideScrollbar.call(r)}}}})}else{if(i.data(\"onTotalScrollBack_Offset\")){s=-i.data(\"onTotalScrollBack_Offset\")}if(i.data(\"onTotalScroll_Offset\")){l=g.height()-k.outerHeight()+i.data(\"onTotalScroll_Offset\")}if(p<0){p=e=0;clearInterval(i.data(\"mCSB_buttonScrollUp\"));if(!s){q=true}}else{if(p>=j.height()-h.height()){p=j.height()-h.height();e=g.height()-k.outerHeight();clearInterval(i.data(\"mCSB_buttonScrollDown\"));if(!l){m=true}}else{e=-e}}var n=i.data(\"snapAmount\");if(n){e=Math.round(e\/n)*n-i.data(\"snapOffset\")}d.mTweenAxis.call(this,h[0],\"top\",Math.round(p),draggerSpeed,f.scrollEasing);d.mTweenAxis.call(this,k[0],\"top\",Math.round(e),t,f.scrollEasing,{onStart:function(){if(f.callbacks&#038;&#038;!i.data(\"mCS_tweenRunning\")){u(\"onScrollStart\")}if(i.data(\"autoHideScrollbar\")&#038;&#038;!i.data(\"alwaysShowScrollbar\")){d.showScrollbar.call(r)}},onUpdate:function(){if(f.callbacks){u(\"whileScrolling\")}},onComplete:function(){if(f.callbacks){u(\"onScroll\");if(q||(s&#038;&#038;k.position().top>=s)){u(\"onTotalScrollBack\")}if(m||(l&#038;&#038;k.position().top<=l)){u(\"onTotalScroll\")}}h.data(\"preventAction\",false);i.data(\"mCS_tweenRunning\",false);if(i.data(\"autoHideScrollbar\")&#038;&#038;!i.data(\"alwaysShowScrollbar\")){if(!g.hasClass(\"mCS-mouse-over\")){d.hideScrollbar.call(r)}}}})}if(i.data(\"mCS_Init\")){i.data({mCS_Init:false})}}}function u(w){if(i.data(\"mCustomScrollbarIndex\")){this.mcs={top:k.position().top,left:k.position().left,draggerTop:h.position().top,draggerLeft:h.position().left,topPct:Math.round((100*Math.abs(k.position().top))\/Math.abs(k.outerHeight()-g.height())),leftPct:Math.round((100*Math.abs(k.position().left))\/Math.abs(k.outerWidth()-g.width()))};switch(w){case\"onScrollStart\":i.data(\"mCS_tweenRunning\",true).data(\"onScrollStart_Callback\").call(i,this.mcs);break;case\"whileScrolling\":i.data(\"whileScrolling_Callback\").call(i,this.mcs);break;case\"onScroll\":i.data(\"onScroll_Callback\").call(i,this.mcs);break;case\"onTotalScrollBack\":i.data(\"onTotalScrollBack_Callback\").call(i,this.mcs);break;case\"onTotalScroll\":i.data(\"onTotalScroll_Callback\").call(i,this.mcs);break}}}},stop:function(){var g=c(this),e=g.children().children(\".mCSB_container\"),f=g.children().children().children().children(\".mCSB_dragger\");d.mTweenAxisStop.call(this,e[0]);d.mTweenAxisStop.call(this,f[0])},disable:function(e){var j=c(this),f=j.children(\".mCustomScrollBox\"),h=f.children(\".mCSB_container\"),g=f.children(\".mCSB_scrollTools\"),i=g.children().children(\".mCSB_dragger\");f.unbind(\"mousewheel focusin mouseenter mouseleave touchend\");h.unbind(\"touchstart touchmove\");if(e){if(j.data(\"horizontalScroll\")){i.add(h).css(\"left\",0)}else{i.add(h).css(\"top\",0)}}g.css(\"display\",\"none\");h.addClass(\"mCS_no_scrollbar\");j.data({bindEvent_mousewheel:false,bindEvent_focusin:false,bindEvent_content_touch:false,bindEvent_autoHideScrollbar:false}).addClass(\"mCS_disabled\")},destroy:function(){var e=c(this);e.removeClass(\"mCustomScrollbar _mCS_\"+e.data(\"mCustomScrollbarIndex\")).addClass(\"mCS_destroyed\").children().children(\".mCSB_container\").unwrap().children().unwrap().siblings(\".mCSB_scrollTools\").remove();c(document).unbind(\"mousemove.\"+e.data(\"mCustomScrollbarIndex\")+\" mouseup.\"+e.data(\"mCustomScrollbarIndex\")+\" MSPointerMove.\"+e.data(\"mCustomScrollbarIndex\")+\" MSPointerUp.\"+e.data(\"mCustomScrollbarIndex\"));c(window).unbind(\"resize.\"+e.data(\"mCustomScrollbarIndex\"))}},d={showScrollbar:function(){this.stop().animate({opacity:1},\"fast\")},hideScrollbar:function(){this.stop().animate({opacity:0},\"fast\")},mTweenAxis:function(g,i,h,f,o,y){var y=y||{},v=y.onStart||function(){},p=y.onUpdate||function(){},w=y.onComplete||function(){};var n=t(),l,j=0,r=g.offsetTop,s=g.style;if(i===\"left\"){r=g.offsetLeft}var m=h-r;q();e();function t(){if(window.performance&#038;&#038;window.performance.now){return window.performance.now()}else{if(window.performance&#038;&#038;window.performance.webkitNow){return window.performance.webkitNow()}else{if(Date.now){return Date.now()}else{return new Date().getTime()}}}}function x(){if(!j){v.call()}j=t()-n;u();if(j>=g._time){g._time=(j>g._time)?j+l-(j-g._time):j+l-1;if(g._time<j+1){g._time=j+1}}if(g._time<f){g._id=_request(x)}else{w.call()}}function u(){if(f>0){g.currVal=k(g._time,r,m,f,o);s[i]=Math.round(g.currVal)+\"px\"}else{s[i]=h+\"px\"}p.call()}function e(){l=1000\/60;g._time=j+l;_request=(!window.requestAnimationFrame)?function(z){u();return setTimeout(z,0.01)}:window.requestAnimationFrame;g._id=_request(x)}function q(){if(g._id==null){return}if(!window.requestAnimationFrame){clearTimeout(g._id)}else{window.cancelAnimationFrame(g._id)}g._id=null}function k(B,A,F,E,C){switch(C){case\"linear\":return F*B\/E+A;break;case\"easeOutQuad\":B\/=E;return -F*B*(B-2)+A;break;case\"easeInOutQuad\":B\/=E\/2;if(B<1){return F\/2*B*B+A}B--;return -F\/2*(B*(B-2)-1)+A;break;case\"easeOutCubic\":B\/=E;B--;return F*(B*B*B+1)+A;break;case\"easeOutQuart\":B\/=E;B--;return -F*(B*B*B*B-1)+A;break;case\"easeOutQuint\":B\/=E;B--;return F*(B*B*B*B*B+1)+A;break;case\"easeOutCirc\":B\/=E;B--;return F*Math.sqrt(1-B*B)+A;break;case\"easeOutSine\":return F*Math.sin(B\/E*(Math.PI\/2))+A;break;case\"easeOutExpo\":return F*(-Math.pow(2,-10*B\/E)+1)+A;break;case\"mcsEaseOut\":var D=(B\/=E)*B,z=D*B;return A+F*(0.499999999999997*z*D+-2.5*D*D+5.5*z+-6.5*D+4*B);break;case\"draggerRailEase\":B\/=E\/2;if(B<1){return F\/2*B*B*B+A}B-=2;return F\/2*(B*B*B+2)+A;break}}},mTweenAxisStop:function(e){if(e._id==null){return}if(!window.requestAnimationFrame){clearTimeout(e._id)}else{window.cancelAnimationFrame(e._id)}e._id=null},rafPolyfill:function(){var f=[\"ms\",\"moz\",\"webkit\",\"o\"],e=f.length;while(--e>-1&#038;&#038;!window.requestAnimationFrame){window.requestAnimationFrame=window[f[e]+\"RequestAnimationFrame\"];window.cancelAnimationFrame=window[f[e]+\"CancelAnimationFrame\"]||window[f[e]+\"CancelRequestAnimationFrame\"]}}};d.rafPolyfill.call();c.support.touch=!!(\"ontouchstart\" in window);c.support.pointer=window.navigator.pointerEnabled;c.support.msPointer=window.navigator.msPointerEnabled;var a=(\"https:\"==document.location.protocol)?\"https:\":\"http:\";c.event.special.mousewheel||document.write('<script src=\"'+a+'\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery-mousewheel\/3.0.6\/jquery.mousewheel.min.js\"><\\\/script>');c.fn.mCustomScrollbar=function(e){if(b[e]){return b[e].apply(this,Array.prototype.slice.call(arguments,1))}else{if(typeof e===\"object\"||!e){return b.init.apply(this,arguments)}else{c.error(\"Method \"+e+\" does not exist\")}}}})(jQuery);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/ HTML5 placeholder plugin version 1.01\n\/\/ Copyright (c) 2010-The End of Time, Mike Taylor, http:\/\/miketaylr.com\n\/\/ MIT Licensed: http:\/\/www.opensource.org\/licenses\/mit-license.php\n\/\/\n\/\/ Enables cross-browser HTML5 placeholder for inputs, by first testing\n\/\/ for a native implementation before building one.\n\/\/\n\/\/\n\/\/ USAGE:\n\/\/$('input[placeholder]').placeholder();\n\n\/\/ <input type=\"text\" placeholder=\"username\">\n(function($){\n    \/\/feature detection\n    var hasPlaceholder = 'placeholder' in document.createElement('input');\n    var placeholderClass = 'evn-placeholder';\n\n    \/\/sniffy sniff sniff -- just to give extra left padding for the older\n    \/\/graphics for type=email and type=url\n    var isOldOpera = $.browser.opera &#038;&#038; $.browser.version < 10.5;\n\n    $.fn.placeholder = function(options) {\n        \/\/merge in passed in options, if any\n        var options = $.extend({}, $.fn.placeholder.defaults, options),\n        \/\/cache the original 'left' value, for use by Opera later\n            o_left = options.placeholderCSS.left;\n\n        \/\/first test for native placeholder support before continuing\n        \/\/feature detection inspired by ye olde jquery 1.4 hawtness, with paul irish\n        return (hasPlaceholder) ? this : this.each(function() {\n\n            \/\/local vars\n            var $this = $(this),\n                inputVal = $.trim($this.val()),\n                inputWidth = $this.width(),\n                inputHeight = $this.height(),\n\n            \/\/grab the inputs id for the <label @for>, or make a new one from the Date\n                inputId = (this.id) ? this.id : 'placeholder' + (+new Date()) + this.className.replace(' ',''),\n                placeholderText = options.placeholderText ? options.placeholderText : $this.attr('placeholder'),\n                placeholder = $('<label class=\"' + placeholderClass + '\" for=\\\"'+ inputId +'\\\">'+ placeholderText + '<\/label>');\n\n            \/\/stuff in some calculated values into the placeholderCSS object\n\/\/            options.placeholderCSS['width'] = inputWidth;\n            options.placeholderCSS['height'] = inputHeight;\n\n            \/\/ adjust position of placeholder\n            options.placeholderCSS.left = (isOldOpera &#038;&#038; (this.type == 'email' || this.type == 'url')) ?\n                '11%' : o_left;\n            placeholder.css(options.placeholderCSS);\n\n            \/\/place the placeholder if the input is empty\n\n            $this.wrap(options.inputWrapper);\n            $this.attr('id', inputId).after(placeholder);\n\n            if(inputVal) {\n                $this.next().hide();\n            }\n\n            \/\/hide placeholder on focus\n            $this.focus(function(){\n                $this.next().hide();\n            });\n\n            \/\/show placeholder if the input is empty\n            $this.blur(function(){\n                if (!$.trim($this.val())){\n                    $this.next().show();\n                };\n            });\n        });\n    };\n\n    \/\/expose defaults\n    $.fn.placeholder.defaults = {\n        \/\/you can pass in a custom wrapper\n        inputWrapper: '\n\n\n\n<div style=\"position:relative;\"><\/div>\n\n\n\n\n',\n        placeholderText: null,\n\n        \/\/more or less just emulating what webkit does here\n        \/\/tweak to your hearts content\n        placeholderCSS: {\n            'font':'0.75em sans-serif',\n            'color':'#bababa',\n            'position': 'absolute',\n            'left':'5px',\n            'top':'3px',\n            'overflow': 'hidden'\n        }\n    };\n})(jQuery);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*!\n *  ClearlyComponent__detect\n *  Evernote Clearly's content-detection algorithm as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      \/\/ define\n *      window.ClearlyComponent__detect = {\n *          'callbacks': {\n *              'finished': someFunction(),\n *          },\n *          'window': window,\n *          'document': document,\n *          'jQuery': window.jQuery\n *      };\n *\n *      \/\/ init -- will return false, if something goes wrong\n *      window.ClearlyComponent__detect = initClearlyComponent__detect(window.ClearlyComponent__detect);\n *\n *      \/\/ call -- returns nothing; callbacks will be used\n *      window.ClearlyComponent__detect.start();\n *\n *      \/\/ publcly available\/overridable\n *      window.ClearlyComponent__detect.debug\n *      window.ClearlyComponent__detect.parseOptions\n *\n *\/\n\n\/*\n    changes:\n    ========\n        $R => $D\n        $R.win => $D.window\n        $R.parsingOptions => $D.parseOptions\n        $R.skipStuffFromDomains__links => $D.parseOptions._skip_link_from_domain\n        $R.skipStuffFromDomain__images => $D.parseOptions._skip_image_from_domain\n        $R.keepStuffFromDomain__video => $D.parseOptions._keep_video_from_domain\n        $R.getContent__processCandidates => $D.getContent__processCandidates__first\n        $R.getContent__computePointsForCandidate => $D.getContent__computePointsForCandidate__first\n        $R.getContent__computeDetailsForCandidate => $D.getContent__computeDetailsForCandidate__first\n        $R.getContent__processCandidatesSecond => $D.getContent__processCandidates__second\n        $R.getContent__computePointsForCandidateSecond => $D.getContent__computePointsForCandidate__second\n        $R.getContent__computeDetailsForCandidateSecond => $D.getContent__computeDetailsForCandidate__second\n        $R.getContent__computePointsForCandidateThird => $D.getContent__computePointsForCandidate__third\n        $R.getContent__computeDetailsForCandidateThird => $D.getContent__computeDetailsForCandidate__third\n\n    to do:\n    ======\n*\/\n\nfunction initClearlyComponent__detect(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================\n\n        \/\/  null; return\n        if (_paramInstance); else { return false; }\n\n        \/\/  shorthand\n        $D = _paramInstance;\n\n    \/\/  global instance reference }\n\n    \/\/  required vars {\n    \/\/  ===============\n\n        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:\n\n        switch (true)\n        {\n            case (!($D.callbacks)):\n            case (!($D.callbacks.finished)):\n\n            case (!($D.window)):\n            case (!($D.document)):\n            case (!($D.document.body)):\n\n            case (!($D.jQuery)):\n\n                if ($D.debug)\n                {\n                    console.log(!($D.callbacks));\n                    console.log(!($D.callbacks.finished));\n\n                    console.log(!($D.window));\n                    console.log(!($D.document));\n                    console.log(!($D.document.body));\n\n                    console.log(!($D.jQuery));\n                }\n\n                \/\/  something's wrong\n                return false;\n        }\n\n    \/\/  required vars }\n\n    \/\/  global vars {\n    \/\/  =============\n\n        $CJ = $D.jQuery;\n\n        $D.$window = $CJ($D.window);\n        $D.$document = $CJ($D.document);\n\n    \/\/  global vars }\n\n    \/\/  parse options {\n    \/\/  ===============   \n\n\t\t$D.parseOptions =\n\t\t{\n\t\t\t'_elements_ignore': \t\t\t        '|button|input|select|textarea|optgroup|command|datalist|--|frame|frameset|noframes|--|style|link|script|noscript|--|canvas|applet|map|--|marquee|area|base|',\n\t\t\t'_elements_ignore_id': \t\t\t\t\t'|evernote-content|evernote-attributes-content|evernote-share-content|evernoteErrorPopup|evernote-post-clip-content|',\n\t\t\t'_elements_ignore_tag': \t\t        '|form|fieldset|details|dir|--|center|font|span|',\n\n\t\t\t'_elements_container': \t\t\t        '|body|--|article|section|--|div|--|td|--|li|--|dd|dt|',\n            '_elements_self_closing': \t\t        '|br|hr|--|img|--|col|--|source|--|embed|param|--|iframe|',\n\n\t\t\t'_elements_visible': \t\t\t        '|article|section|--|ul|ol|li|dd|--|table|tr|td|--|div|--|p|--|h1|h2|h3|h4|h5|h6|--|span|',\n\t\t\t'_elements_too_much_content': \t        '|b|i|em|strong|--|h1|h2|h3|h4|h5|--|td|',\n\t\t\t'_elements_link_density':\t\t        '|div|--|table|ul|ol|--|section|aside|header|',\n\t\t\t'_elements_floating':\t\t\t        '|div|--|table|',\n\t\t\t'_elements_above_target_ignore':        '|br|--|ul|ol|dl|--|table|',\n\n            '_unskippable_attribute':               'clearly__unskippable_element',\n            '_unskippable_attribute_value':         'yes',\n\n            '_use_document_title_attribute':        'clearly__use_document_title_as_article_title',\n            '_use_document_title_attribute_value':  'yes',\n\n            '_elements_keep_attributes':\n\t\t\t{\n\t\t\t\t'a': \t\t['href', 'title', 'name'],\n\t\t\t\t'img': \t\t['src', 'width', 'height', 'alt', 'title'],\n\n\t\t\t\t'video': \t['src', 'width', 'height', 'poster', 'audio', 'preload', 'autoplay', 'loop', 'controls'],\n\t\t\t\t'audio': \t['src', 'preload', 'autoplay', 'loop', 'controls'],\t\t \n\t\t\t\t'source': \t['src', 'type'],\n\n\t\t\t\t'object': \t['data', 'type', 'width', 'height', 'classid', 'codebase', 'codetype'],\t\t\t\t\t\t\n\t\t\t\t'param': \t['name', 'value'],\n\t\t\t\t'embed': \t['src', 'type', 'width', 'height', 'flashvars', 'allowscriptaccess', 'allowfullscreen', 'bgcolor'],\n\n\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],\n\n\t\t\t\t'td':\t\t['colspan', 'rowspan'],\t\t\t\n\t\t\t\t'th':\t\t['colspan', 'rowspan']\n\t\t\t},\n\n\t\t\t'_skip_link_from_domain': [\n                \/* international *\/     'doubleclick.net', 'fastclick.net', 'adbrite.com', 'adbureau.net', 'admob.com', 'bannersxchange.com', 'buysellads.com', 'impact-ad.jp', 'atdmt.com', 'advertising.com', 'serving-sys.com',\n                \/* japan *\/             'itmedia.jp', 'microad.jp', 'adplan-ds.com'\n\t\t\t],\n\n\t\t\t'_skip_image_from_domain': [\n                \/* international *\/     'googlesyndication.com', 'fastclick.net', '.2mdn.net', 'de17a.com', 'content.aimatch.com', 'bannersxchange.com', 'buysellads.com', 'atdmt.com', 'advertising.com', 'serving-sys.com',\n                \/* japan *\/             'impact-ad.jp', 'itmedia.jp', 'microad.jp', 'adplan-ds.com'\n\t\t\t],\n\n\t\t\t'_keep_video_from_domain': [\n                \/* video *\/     'youtube.com', 'youtube-nocookie.com', 'vimeo.com', 'hulu.com', 'flickr.com',\n                \/* other *\/     'yahoo.com', 'newsnetz.ch'\n\t\t\t]\n\t\t};\n\n    \/\/  parse options }\n\n    \/\/  debug {\n    \/\/  =======\n\n        $D.debug = ($D.debug || false);\n\t\t$D.debugRemembered = {};\n        $D.debugTimers = [];\n\n\t\tif ($D.debug)\n\t\t{\n\t\t    \/\/  writeLog\n\t\t    \/\/  ========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(!($D.window.console &#038;&#038; $D.window.console.log))):    $D.writeLog = function (msg) { $D.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($D.window.opera &#038;&#038; $D.window.opera.postError))):  $D.writeLog = function (msg) { $D.window.opera.postError(msg); };   break;\n\t\t\t\t\tdefault:                                                    $D.writeLog = function (msg) {};                                    break;\n\t\t\t\t}\n\n            \/\/  log\n            \/\/  ===\n                $D.log = function ()\n                {\n                    if ($D.debug); else { return; }\n                    for (var i=0, il=arguments.length; i<il ; i++) { $D.writeLog(arguments[i]); }\n                    $D.writeLog('-----------------------------------------');\n                };\n\n            \/\/  remember\n            \/\/  ========\n                $D.debugRemember = function (_k, _v)\n                {\n                    $D.debugRemembered[_k] = _v;\n                };\n\n            \/\/  outline\n            \/\/  =======\n                $D.debugOutline = function (_element, _category, _reason)\n                {\n                    var _outline = '#ff5500', _background = 'rgba(255, 85, 0, 0.5)';\n\n                    switch (true)\n                    {\n                        case (!$D.debug):\n                        case (!(_element.nodeType === 1)):\n                        case (!(_element.tagName > '')):\n                        case (_element.tagName.toLowerCase() == 'onject'):\n                        case (_element.tagName.toLowerCase() == 'embed'):\n                            return;\n                    }\n\n                    switch (true)\n                    {\n                        case (_category == 'target' &#038;&#038; _reason == 'first'):                 _outline = '#00cc00'; _background = 'rgba(0, 255, 0, 0.5)';         break;\n                        case (_category == 'target' &#038;&#038; _reason == 'second'):                _outline = '#0000cc'; _background = 'rgba(0, 0, 255, 0.5)';         break;\n\n                        case (_category == 'target' &#038;&#038; _reason == 'next-page'):             _outline = '#FF80C0'; _background = 'rgba(255, 128, 192, 0.5)';     break;\n                        case (_category == 'target' &#038;&#038; _reason == 'add-above'):             _outline = '#804000'; _background = 'rgba(128, 64, 0, 0.5)';        break;\n\n                        case (_category == 'clean-before' &#038;&#038; _reason == 'floating'):        _outline = '#808080'; _background = 'rgba(128, 128, 128, 0.5)';     break;\n                        case (_category == 'clean-after' &#038;&#038; _reason == 'missing-density'):  _outline = '#C0C0C0'; _background = 'rgba(192, 192, 192, 0.5)';     break;\n                        case (_category == 'clean-after' || _category == 'clean-before'):   _outline = '#000000'; _background = 'rgba(0, 0, 0, 0.5)';           break;\n                    }\n\n                    \/\/  do\n                    $CJ(_element).attr('readable__outline', (_category + ': ' + _reason));\n                    $CJ(_element).css({ 'outline': '5px solid ' + _outline, 'background-color': '' + _background });\n                };\n\n\t\t\/\/\ttimers\n\t\t\/\/\t======\n\n\t\t\t$D.debugTimerStart = function (timerName)\n\t\t\t{\n\t\t\t\t$D.debugTimers.push({\n\t\t\t\t\t'name': timerName,\n\t\t\t\t\t'start': (new Date()).getTime()\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t$D.debugTimerEnd = function ()\n\t\t\t{\n\t\t\t\tvar _t = $D.debugTimers.pop(), _time = ((new Date()).getTime() - _t.start);\n\t\t\t\t$D.log('TIMER \/ '+_t.name+': ' + _time);\n\t\t\t\treturn _time;\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n            $D.writeLog \t\t= function () { return false; };\n            $D.log \t\t\t\t= function () { return false; };\n            $D.debugRemember \t= function () { return false; };\n            $D.debugOutline \t= function () { return false; };\n            $D.debugTimerStart \t= function () { return false; };\n            $D.debugTimerEnd \t= function () { return false; };\n        }\n\n    \/\/  debug }\n\n    \/\/  language {\n    \/\/  ==========\n\n        \/\/  default\n        $D.language = 'general';\n\n        \/\/  text to test\n        \/\/  ============\n\n            \/\/  title\n            $D.textForlanguageDetection = $D.document.title;\n\n            \/\/  snippets\n            \/\/  ...\n\n        \/\/  check\n        \/\/  =====\n            switch (true)\n            {\n                case ($D.textForlanguageDetection.match(\/([\\u3000])\/gi) != null):\n                case ($D.textForlanguageDetection.match(\/([\\u3001])\/gi) != null):\n                case ($D.textForlanguageDetection.match(\/([\\u3002])\/gi) != null):\n                case ($D.textForlanguageDetection.match(\/([\\u301C])\/gi) != null):\n                    $D.language = 'cjk';\n                    break;\n            }\n\n    \/\/  language }\n\n    \/\/  rtl {\n    \/\/  =====\n\n        \/\/  flags\n        $D.rtl = false;\n        $D.maybeRTL = false;\n\n        \/\/  on\/off\n        $D.makeRTL = function () { $D.rtl = true; };\n        $D.makeNotRTL = function () { $D.rtl = false; };\n\n        \/\/\tdetect\n\t\t(function ()\n\t\t{\n\t\t\t\/\/\tdefinitely\n\t\t\t$D.$document.find('html, body').each(function (_i, _e)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase ($CJ(_e).attr('dir') == 'rtl'):\n\t\t\t\t\tcase ($CJ(_e).css('direction') == 'rtl'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'he'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'he-il'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'ar'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'ur'):\n\t\t\t\t\t\t$D.makeRTL();\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t\/\/\tmaybe?\n            if (true\n                &#038;&#038; (!$D.rtl) \n                &#038;&#038; ($D.$document.find(\"div[dir='rtl'], table[dir='rtl'], td[dir='rtl']\").length > 0)\n            ) { $D.maybeRTL = true; }\n\t\t}\n\t\t)();\n\n    \/\/  rtl }\n\n    \/\/  measure text {\n    \/\/  ==============\n\n        \/\/\tasian languages\n        \/\/\t===============\n        \/\/\t    http:\/\/msdn.microsoft.com\/en-us\/goglobal\/bb688158\n        \/\/\t    http:\/\/en.wikipedia.org\/wiki\/Japanese_punctuation\n        \/\/\t    http:\/\/en.wikipedia.org\/wiki\/Japanese_typographic_symbols\n        \/\/\t    http:\/\/unicode.org\/charts\/PDF\/U3000.pdf\n        \/\/\t    CJK: Chnese, Japanese, Korean -- HAN character set\n\n        \/\/\tlength\n        \/\/\t======\n            $D.measureText__getTextLength = function (_the_text)\n            {\n                var _text = _the_text;\n\n                    _text = _text.replace(\/[\\s\\n\\r]+\/gi, '');\n                    \/\/_text = _text.replace(\/\\d+\/, '');\n\n                return _text.length;\n            };\n\n        \/\/\tword count\n        \/\/\t==========\n            $D.measureText__getWordCount = function (_the_text)\n            {\n                var _text = _the_text;\n\n                \/\/\tdo stuff\n                \/\/\t========\n                    _text = _text.replace(\/[\\s\\n\\r]+\/gi, ' ');\n\n                    _text = _text.replace(\/([.,?!:;()\\[\\]'\"\"-])\/gi, ' $1 ');\n\n                    _text = _text.replace(\/([\\u3000])\/gi, \t\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3001])\/gi, \t\t\t\t'[=words(2)]');\n                    _text = _text.replace(\/([\\u3002])\/gi, \t\t\t\t'[=words(4)]');\n                    _text = _text.replace(\/([\\u301C])\/gi, \t\t\t\t'[=words(2)]');\n                    _text = _text.replace(\/([\\u2026|\\u2025])\/gi, \t\t'[=words(2)]');\n                    _text = _text.replace(\/([\\u30FB\\uFF65])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u300C\\u300D])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u300E\\u300F])\/gi,\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3014\\u3015])\/gi,\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3008\\u3009])\/gi,\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u300A\\u300B])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3010\\u3011])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3016\\u3017])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3018\\u3019])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u301A\\u301B])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u301D\\u301E\\u301F])\/gi, \t'[=words(1)]');\n                    _text = _text.replace(\/([\\u30A0])\/gi, \t\t\t\t'[=words(1)]');\n\n                \/\/\tcount\n                \/\/\t=====\n                    var \n                        _count = 0,\n                        _words_match = _text.match(\/([^\\s\\d]{3,})\/gi)\n                    ;\t\n\n                    \/\/\tadd match\n                    _count += (_words_match != null ? _words_match.length : 0);\n\n                    \/\/\tadd manual count\n                    _text.replace(\/\\[=words\\((\\d)\\)\\]\/, function (_match, _plus) { _count += (5 * parseInt(_plus)); });\n\n                \/\/\treturn\n                \/\/\t======\n                    return _count;\n            };\n\n        \/\/\tlevenshtein\n        \/\/\t===========\t\n            $D.levenshteinDistance = function (str1, str2)\n            {\n                var l1 = str1.length, l2 = str2.length, i = 0, j = 0, d = [];\n\n                if (Math.min(l1, l2) === 0)\n                    { return Math.max(l1, l2); }\n\n                for (i = 0 ; i <= l1 ; i++)\n                    { d[i] = []; d[i][0] = i; }\n\n                for (j = 0 ; j <= l2 ; j++)\n                    { d[0][j] = j; }\n\n                for (i = 1 ; i <= l1 ; i++)\n                    { for (j = 1 ; j <= l2 ; j++) { d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + (str1.charAt(i - 1) === str2.charAt(j - 1) ? 0 : 1)); } }\n\n                return d[l1][l2];\n            };\n\n        \/\/\tget first fragment\n        \/\/\t==================\n            $D.nextPage__getFirstFragment = function (_html)\n            {\n                \/\/  remove all tags\n                _html = _html.replace(\/<[^>]+?>\/gi, '');\n\n                \/\/  normalize spaces\n                _html = _html.replace(\/\\s+\/gi, ' ');\n\n                \/\/  return first 1000 characters\n                return _html.substr(0, 2000);\n            };\n\n    \/\/  measure text }\n\n    \/\/  hidden node {\n    \/\/  =============\n\n        $D.isNodeHidden = function (_node, _tag_name)\n        {\n            switch (true)\n            {\n                case (_node.offsetWidth > 0):\n                case (_node.offsetHeight > 0):\n                    break;\n\n                default:\n                    switch (true)\n                    {\n                        case (_node.offsetLeft > 0):\n                        case (_node.offsetTop > 0):\n                            break;\n\n                        default:\n                            \/\/  exclude inline DIVs -- which, stupidly, don't have a width\/height\n                            if (true\n                                &#038;&#038; (_tag_name == 'div') \n                                &#038;&#038; ((_node.style.display || $CJ.css( _node, \"display\" )) == 'inline')\n                            ) { break; }\n\n                            \/\/  it's hidden\n                            return true;\n                    }\n                    break;\n            }\n\n            \/\/  it's not hidden\n            return false;\n        };\n\n    \/\/  hidden node }\n\n    \/\/  compute points for candidate {\n    \/\/  ==============================\n\n        $D.getContent__computePointsForCandidate__do = function (_ratio_remaining, _power, _ratio, _points_history)\n        {\n            var \n                _points_remaining = (_points_history[0] * _ratio_remaining),\n                _points_to_compute = (_points_history[0] - _points_remaining)\n            ;\n\n            if (_ratio < 0)\n            {\n                \/\/_points_return = (0.75 * _points_remaining);\n                _points_return = _points_remaining;\n            }\n            else\n            {\n                _points_return = 0\n                    + _points_remaining\n                    + (_points_to_compute * Math.pow(_ratio, _power))\n                ;\n            }\n\n            \/\/\tadd\n            _points_history.unshift(_points_return);\n        };\n\n    \/\/  compute points for candidate }\n\n    \/\/  process candidates (first) {\n    \/\/  ============================\n\n        $D.getContent__computeDetailsForCandidate__first = function (_e, _main)\n        {\n            var _r = {};\n\n            \/\/\tbad candidate\n            \/\/\t=============\n                if (_e._is__bad) { return _r; }\n\n            \/\/\tparagraphs\n            \/\/\t==========\n                _r['_count__lines_of_65_characters'] = (_e._length__plain_text \/ 65);\n                _r['_count__paragraphs_of_3_lines'] =  (_r._count__lines_of_65_characters \/ 3);\n                _r['_count__paragraphs_of_5_lines'] =  (_r._count__lines_of_65_characters \/ 5);\n\n                _r['_count__paragraphs_of_50_words'] = (_e._count__plain_words \/ 50);\n                _r['_count__paragraphs_of_80_words'] = (_e._count__plain_words \/ 80);\n\n            \/\/\ttotal text\n            \/\/\t==========\n                _r['_ratio__length__plain_text_to_total_plain_text'] =  (_e._length__plain_text \/ _main._length__plain_text);\n                _r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words \/ _main._count__plain_words);\n\n            \/\/\tlinks\n            \/\/\t=====\n                _r['_ratio__length__links_text_to_plain_text'] =  (_e._length__links_text \/ _e._length__plain_text);\n                _r['_ratio__count__links_words_to_plain_words'] = (_e._count__links_words \/ _e._count__plain_words);\n\n                _r['_ratio__length__links_text_to_all_text'] =  (_e._length__links_text \/ _e._length__all_text);\n                _r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words \/ _e._count__all_words);\n\n                _r['_ratio__length__links_text_to_total_links_text'] =  (_e._length__links_text \/ (_main._length__links_text + 1));\n                _r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words \/ (_main._count__links_words + 1));\n\n                _r['_ratio__count__links_to_total_links'] = (_e._count__links \/ (_main._count__links + 1));\n                _r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) \/ _e._count__plain_words);\n\n            \/\/\ttext above\n            \/\/\t==========\n                var \n                    _divide__candidates = Math.max(2, Math.ceil(_e._count__above_candidates * 0.5)),\n\n                    _above_text = ((0\n                        + (_e._length__above_plain_text * 1)\n                        + (_e._length__above_plain_text \/ _divide__candidates)\n                    ) \/ 2),\n\n                    _above_words = ((0\n                        + (_e._count__above_plain_words * 1)\n                        + (_e._count__above_plain_words \/ _divide__candidates)\n                    ) \/ 2)\n                ;\n\n                _r['_ratio__length__above_plain_text_to_total_plain_text'] =  (_above_text \/ _main._length__plain_text);\n                _r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words \/ _main._count__plain_words);\n\n            \/\/\tcandidates\n            \/\/\t==========\n                _r['_ratio__count__candidates_to_total_candidates'] = (_e._count__candidates \/ (_main._count__candidates + 1));\n                _r['_ratio__count__containers_to_total_containers'] = (_e._count__containers \/ (_main._count__containers + 1));\n\n            \/\/\treturn\n            \/\/\t======\n                return _r;\n        };    \n\n        $D.getContent__computePointsForCandidate__first = function (_e, _main)\n        {\n            var \n                _details = _e.__candidate_details,\n                _points_history = [],\n                _really_big = ((_main._length__plain_text \/ 65) > 250)\n            ;\n\n            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }\n\n            \/\/\tthe basics\n            \/\/\t==========\n                _points_history.unshift(((0\n                    + (_details._count__paragraphs_of_3_lines)\n                    + (_details._count__paragraphs_of_5_lines * 1.5)\n                    + (_details._count__paragraphs_of_50_words)\n                    + (_details._count__paragraphs_of_80_words * 1.5)\n                    + (_e._count__images_large * 3)\n                    - ((_e._count__images_skip + _e._count__images_small) * 0.5)\n                ) * 1000));\n\n                \/\/  negative\n                if (_points_history[0] < 0) { return [0]; }\n\n            \/\/  candidates, containers, pieces\n            \/\/  ==============================\n                var \n                    _divide__pieces =     Math.max(5,  Math.ceil(_e._count__pieces *     0.25)),\n                    _divide__candidates = Math.max(5,  Math.ceil(_e._count__candidates * 0.25)),\n                    _divide__containers = Math.max(10, Math.ceil(_e._count__containers * 0.25))\n                ;\n\n                _points_history.unshift(((0\n                    + (_points_history[0] * 3)\n                    + (_points_history[0] \/ _divide__pieces)\n                    + (_points_history[0] \/ _divide__candidates)\n                    + (_points_history[0] \/ _divide__containers)\n                ) \/ 6));\n\n            \/\/\ttotal text\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n                if (_really_big) {\n                $D.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history);\n                }\n\n            \/\/\ttext above\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                if (_really_big) {\n                $D.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n                }\n\n            \/\/\tlinks outer\n            \/\/\t===========\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__length__links_text_to_total_links_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_words_to_total_links_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_to_total_links), _points_history);\n\n            \/\/  links inner\n            \/\/  ===========\n                var __lr = ($D.language == 'cjk' ? 0.75 : 0.50);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history);\n\n            \/\/\tcandidates, containers, pieces\n            \/\/\t==============================\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \/\/\treturn -- will get [0] as the actual final points\n            \/\/\t======\n                return _points_history;\n        };    \n\n        $D.getContent__processCandidates__first = function (_candidatesToProcess)\n        {\n            \/\/\tprocess this var\n            \/\/\t================\n                var _candidates = _candidatesToProcess;\n\n            \/\/\tsort _candidates -- the lower in the dom, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__index < b.__index): return -1;\n                        case (a.__index > b.__index): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\tget first\n            \/\/\t=========\n                var\t_main = _candidates[0]\n                if ($D.debug) { $D.log('should be body', _main, _main.__node); }\n\n            \/\/\tpieces of text -- and points computation\n            \/\/\t==============\n                for (var i=0, _i=_candidates.length; i<_i; i++)\n                {\n                    \/\/\tpieces\n                    \/\/\t======\n                        var \n                            _count__pieces = 0,\n                            _array__pieces = []\n                        ;\n\n                        for (var k=i, _k=_candidates.length; k<_k; k++)\n                        {\n                            if (_candidates[k]._count__candidates > 0) { continue; }\n                            if ($CJ.contains(_candidates[i].__node, _candidates[k].__node)); else { continue; }\n\n                            \/\/\tstore piece, if in debug mode\n                            if ($D.debug) { _array__pieces.push(_candidates[k]); }\n\n                            \/\/\tincement pieces count\n                            _count__pieces++;\n                        }\n\n                    \/\/\tcandidate details\n                    \/\/\t=================\n                        _candidates[i]['__candidate_details'] = $D.getContent__computeDetailsForCandidate__first(_candidates[i], _main);\n\n                    \/\/\tpieces -- do this here because _main doesn't yet have a pieces count\n                    \/\/\t======\n\n                        \/\/\tset pieces\n                        _candidates[i]['_count__pieces'] = _count__pieces;\n                        _candidates[i]['_array__pieces'] = _array__pieces;\n\n                        \/\/\tpieces ratio\n                        _candidates[i]['__candidate_details']['_ratio__count__pieces_to_total_pieces'] = (_count__pieces \/ (_candidates[0]._count__pieces + 1));\n\n                    \/\/  check some more\n                    \/\/  ===============\n                    \/*    switch (true)\n                        {\n                            case (($D.language != 'cjk') &#038;&#038; (_candidates[i]['__candidate_details']['_ratio__length__links_text_to_plain_text'] > 1)):\n                            case (($D.language != 'cjk') &#038;&#038; (_candidates[i]['__candidate_details']['_ratio__count__links_words_to_plain_words'] > 1)):\n                                _candidates[i]._is__bad = true;\n                                break;\n                        }\n                    *\/\n\n                    \/\/\tpoints\n                    \/\/\t======\n                        _candidates[i].__points_history = $D.getContent__computePointsForCandidate__first(_candidates[i], _main);\n                        _candidates[i].__points = _candidates[i].__points_history[0];\n                }\n\n            \/\/\tsort _candidates -- the more points, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__points > b.__points): return -1;\n                        case (a.__points < b.__points): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\treturn\n            \/\/\t======\n                return _candidates;\t\n        };    \n\n    \/\/  process candidates (first) }\n\n    \/\/  process candidates (second) {\n    \/\/  =============================\n\n        $D.getContent__computePointsForCandidate__second = function (_e, _main)\n        {\n            var \n                _details = _e.__candidate_details,\n                _details_second = _e.__candidate_details_second,\n                _points_history = []\n            ;\n\n            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }\n\n            \/\/\tget initial points\n            \/\/\t==================\n                _points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]);\n\n            \/\/  candidates, containers, pieces\n            \/\/  ==============================\n                var \n                    _divide__pieces =     Math.max(5,  Math.ceil(_e._count__pieces *     0.25)),\n                    _divide__candidates = Math.max(5,  Math.ceil(_e._count__candidates * 0.25)),\n                    _divide__containers = Math.max(10, Math.ceil(_e._count__containers * 0.25))\n                ;\n\n                _points_history.unshift(((0\n                    + (_points_history[0] * 3)\n                    + ((_points_history[0] \/ _divide__pieces) * 2)\n                    + ((_points_history[0] \/ _divide__candidates) * 2)\n                    + ((_points_history[0] \/ _divide__containers) * 2)\n                ) \/ 9));\n\n            \/\/\ttotal text\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n            \/\/\ttext above\n            \/\/\t==========\n                var __ar = ($D.language == 'cjk' ? 0.50 : 0.10);\n\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history);\n\n            \/\/\tlinks outer\n            \/\/\t===========\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_to_total_links), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__length__links_text_to_total_links_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_words_to_total_links_words), _points_history);\n\n            \/\/\tlinks inner\n            \/\/\t===========\n                var __lr = ($D.language == 'cjk' ? 0.75 : 0.50);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__length__links_text_to_all_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_words_to_all_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_to_plain_words), _points_history);\n\n            \/\/\tcandidates, containers, pieces\n            \/\/\t==============================\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__candidates_to_total_candidates), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__containers_to_total_containers), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \/\/\treturn -- will get [0] as the actual final points\n            \/\/\t======\n                return _points_history;\n        };    \n\n        $D.getContent__computeDetailsForCandidate__second = function (_e, _main)\n        {\n            var _r = {};\n\n            \/\/\tbad candidate\n            \/\/\t=============\n                if (_e._is__bad) { return _r; }\n\n            \/\/\ttotal text\n            \/\/\t==========\n                _r['_ratio__length__plain_text_to_total_plain_text'] = \t(_e._length__plain_text \/ _main._length__plain_text);\n                _r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words \/ _main._count__plain_words);\n\n            \/\/\tlinks\n            \/\/\t=====\n                _r['_ratio__length__links_text_to_all_text'] =\t(_e._length__links_text \/ _e._length__all_text);\n                _r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words \/ _e._count__all_words);\n\n                _r['_ratio__length__links_text_to_total_links_text'] = \t(_e._length__links_text \/ (_main._length__links_text + 1));\n                _r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words \/ (_main._count__links_words + 1));\n\n                _r['_ratio__count__links_to_total_links'] = (_e._count__links \/ (_main._count__links + 1));\n                _r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) \/ _e._count__plain_words);\n\n            \/\/\ttext above\n            \/\/\t==========\n                var \n                    _divide__candidates = Math.max(2, Math.ceil((_e._count__above_candidates - _main._count__above_candidates) * 0.5)),\n\n                    _above_text = ((0\n                        + (_e.__second_length__above_plain_text * 1)\n                        + (_e.__second_length__above_plain_text \/ _divide__candidates)\n                    ) \/ 2),\n\n                    _above_words = ((0\n                        + (_e.__second_count__above_plain_words * 1)\n                        + (_e.__second_count__above_plain_words \/ _divide__candidates)\n                    ) \/ 2)\n                ;\n\n                _r['_ratio__length__above_plain_text_to_total_plain_text'] =  (_above_text \/ _main._length__plain_text);\n                _r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words \/ _main._count__plain_words);\n\n                _r['_ratio__length__above_plain_text_to_plain_text'] = \t(_above_text \/ _e._length__plain_text);\n                _r['_ratio__count__above_plain_words_to_plain_words'] = (_above_words \/ _e._count__plain_words);\n\n            \/\/\tcandidates\n            \/\/\t==========\n                _r['_ratio__count__candidates_to_total_candidates'] = (Math.max(0, (_e._count__candidates - (_main._count__candidates * 0.25))) \/ (_main._count__candidates + 1));\n                _r['_ratio__count__containers_to_total_containers'] = (Math.max(0, (_e._count__containers - (_main._count__containers * 0.25))) \/ (_main._count__containers + 1));\n                _r['_ratio__count__pieces_to_total_pieces'] =         (Math.max(0, (_e._count__pieces - (_main._count__pieces * 0.25))) \/ (_main._count__pieces + 1));\n\n            \/\/\treturn\n            \/\/\t======\n                return _r;\n        };    \n\n        $D.getContent__processCandidates__second = function (_processedCandidates)\n        {\n            var \n                _candidates = _processedCandidates,\n                _main = _candidates[0]\n            ;\n\n            \/\/\tonly get children of target\n            \/\/\t===========================\n                _candidates = $CJ.map(_candidates, function (_element, _index)\n                {\n                    switch (true)\n                    {\n                        case (!(_index > 0)):\n                        case (!($CJ.contains(_main.__node, _element.__node))):\n                            return null;\n\n                        default:\n                            return _element;\n                    }\n                });\n\n                \/\/  add main - to amke sure the result is never blank\n                _candidates.unshift(_main);\n\n            \/\/\tsort _candidates -- the lower in the dom, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__index < b.__index): return -1;\n                        case (a.__index > b.__index): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\tsecond candidate computation\n            \/\/\t============================\n                for (var i=0, _i=_candidates.length; i<_i; i++)\n                {\n                    \/\/\tadditional numbers\n                    \/\/\t==================\n                        _candidates[i].__second_length__above_plain_text = (_candidates[i]._length__above_plain_text - _main._length__above_plain_text);\n                        _candidates[i].__second_count__above_plain_words = (_candidates[i]._count__above_plain_words - _main._count__above_plain_words);\n\n                    \/\/\tcandidate details\n                    \/\/\t=================\n                        _candidates[i]['__candidate_details_second'] = $D.getContent__computeDetailsForCandidate__second(_candidates[i], _main);\n\n                    \/\/\tcheck some more\n                    \/\/\t===============\n                    \/*\tswitch (true)\n                        {\n                            case (!(_candidates[i]['__candidate_details_second']['_ratio__count__plain_words_to_total_plain_words'] > 0.05)):\n                            case (!(_candidates[i]['__candidate_details_second']['_ratio__length__plain_text_to_total_plain_text'] > 0.05)):\n\n                            \/\/case (!(_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_total_plain_words'] < 0.1)):\n                            \/\/case (!(_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_total_plain_text'] < 0.1)):\n\n                            \/\/case (_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_plain_text'] > 1):\n                            \/\/case (_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_plain_words'] > 1):\n\n                                _candidates[i]._is__bad = true;\n                                \/\/\twil set points to 0, in points computation function\n                                break;\n                        }\n                    *\/\n\n                    \/\/\tpoints\n                    \/\/\t======\n                        _candidates[i].__points_history_second = $D.getContent__computePointsForCandidate__second(_candidates[i], _main);\n                        _candidates[i].__points_second = _candidates[i].__points_history_second[0];\n                }\n\n            \/\/\tsort _candidates -- the more points, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__points_second > b.__points_second): return -1;\n                        case (a.__points_second < b.__points_second): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\treturn\n            \/\/\t======\n                return _candidates;\t\n        };    \n\n    \/\/  process candidates (second) }\n\n    \/\/  process candidates (third) {\n    \/\/  ============================\n\n        $D.getContent__computePointsForCandidate__third = function (_e, _main)\n        {\n            var \n                _details = _e.__candidate_details,\n                _details_second = _e.__candidate_details_second,\n                _points_history = []\n            ;\n\n            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }\n\n            \/\/\tget initial points\n            \/\/\t==================\n                _points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]);\n\n            \/\/  candidates, containers, pieces\n            \/\/  ==============================\n                var \n                    _divide__pieces =     Math.max(2, Math.ceil(_e._count__pieces *     0.25)),\n                    _divide__candidates = Math.max(2, Math.ceil(_e._count__candidates * 0.25)),\n                    _divide__containers = Math.max(4, Math.ceil(_e._count__containers * 0.25))\n                ;\n\n                _points_history.unshift(((0\n                    + (_points_history[0] * 3)\n                    + ((_points_history[0] \/ _divide__pieces) * 2)\n                    + ((_points_history[0] \/ _divide__candidates) * 2)\n                    + ((_points_history[0] \/ _divide__containers) * 2)\n                ) \/ 9));\n\n            \/\/  total text\n            \/\/  ==========\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n            \/\/\ttext above\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history);\n\n            \/\/\tlinks inner\n            \/\/\t===========\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history);\n\n            \/\/\tcandidates, containers, pieces\n            \/\/\t==============================\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \/\/\treturn -- will get [0] as the actual final points\n            \/\/\t======\n                return _points_history;\n        };\n\n    \/\/  process candidates (third) }\n\n    \/\/  explore node and get stuff {\n    \/\/  ============================\n\n        $D.getContent__exploreNodeAndGetStuff = function (_nodeToExplore, _justExploring)\n        {\n            var\t\n                _global__element_index = 0,\n\n                _global__inside_link = false,\n                _global__inside_link__element_index = 0,\n\n                _global__length__above_plain_text = 0,\n                _global__count__above_plain_words = 0,\n                _global__length__above_links_text = 0,\n                _global__count__above_links_words = 0,\n                _global__count__above_candidates = 0,\n                _global__count__above_containers = 0,\n                _global__above__plain_text = '',\n                _global__above__links_text = '',\n\n                _return__containers = [],\n                _return__candidates = [],\n                _return__links = []\n            ;\n\n            \/\/\trecursive function\n            \/\/\t==================\n                var _recursive = function (_node)\n                {\n                    \/\/\tincrement index\n                    \/\/\tstarts with 1\n                    _global__element_index++;\n\n                    var \n                        _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 &#038;&#038; _node.tagName &#038;&#038; _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n\t\t\t\t\t\t_node_id = (_node.id),\n                        _result =\n                        {\n                            '__index': _global__element_index, \n                            '__node': _node, \n\n                            '_is__container': \t\t($D.parseOptions._elements_container.indexOf('|'+_tag_name+'|') > -1),\n                            '_is__candidate': \t\tfalse,\n                            '_is__text': \t\t\tfalse,\n                            '_is__link': \t\t\tfalse,\n                            '_is__link_skip': \t\tfalse,\n                            '_is__image_small': \tfalse,\n                            '_is__image_medium': \tfalse,\n                            '_is__image_large': \tfalse,\n                            '_is__image_skip': \t\tfalse,\n                            '_is__unskippable':     false,\n\n                            '_debug__above__plain_text': _global__above__plain_text,\n                            '_debug__above__links_text': _global__above__links_text,\n\n                            '_length__above_plain_text': _global__length__above_plain_text,\n                            '_count__above_plain_words': _global__count__above_plain_words,\n\n                            '_length__above_links_text': _global__length__above_links_text,\n                            '_count__above_links_words': _global__count__above_links_words,\n\n                            '_length__above_all_text': \t(_global__length__above_plain_text + _global__length__above_links_text),\n                            '_count__above_all_words': \t(_global__count__above_plain_words + _global__count__above_links_words),\n\n                            '_count__above_candidates': _global__count__above_candidates,\n                            '_count__above_containers': _global__count__above_containers,\n\n                            '_length__plain_text': 0,\n                            '_count__plain_words': 0,\n\n                            '_length__links_text': 0,\n                            '_count__links_words': 0,\n\n                            '_length__all_text': 0,\n                            '_count__all_words': 0,\n\n                            '_count__containers': 0,\n                            '_count__candidates': 0,\n\n                            '_count__links': 0,\n                            '_count__links_skip': 0,\n\n                            '_count__images_small': 0,\n                            '_count__images_medium': 0,\n                            '_count__images_large': 0,\n                            '_count__images_skip': 0\n                        };\n\n                    \/\/  unskippable\n                    \/\/  ===========\n                        if (false\n                            || (_result._is__container)\n                            || ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)\n                        ) {\n                            var _unskip = _node.getAttribute($D.parseOptions._unskippable_attribute);\n                            if (_unskip == $D.parseOptions._unskippable_attribute_value) { _result._is__unskippable = true; }\n                        }\n\n                    \/\/\tfast return\n                    \/\/\t===========\n                        switch (true)\n                        {\n                            case ((_tag_name == '#invalid')):\n                            case (($D.parseOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n                                return false;\n\t\t\t\t\t\t\tcase (($D.parseOptions._elements_ignore_id.indexOf('|'+_node_id+'|') > -1)):\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn false;\t\t\t\t\t\t\t\t\n                            case (($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)):\n                                if ($D.isNodeHidden(_node, _tag_name)) { return false; }\n                                break;\n\n                            \/\/\tself-closing -- with some exceptions\n                            case ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1):\n                                switch (true)\n                                {\n                                    case ((_tag_name == 'img')): break;\n                                    default: return false;\n                                }\n                                break;\n                        }\n\n                    \/\/\tdo stuff\n                    \/\/\t========\n                        switch (true)\n                        {\n                            \/\/\ttext node\n                            case ((_tag_name == '#text')):\n                                \/\/\tmark\n                                _result._is__text = true;\n\n                                \/\/\tget\n                                var _nodeText = _node.nodeValue;\n\n                                \/\/\tresult\n                                _result._length__plain_text = $D.measureText__getTextLength(_nodeText);\n                                _result._count__plain_words = $D.measureText__getWordCount(_nodeText);\n\n                                if (_global__inside_link)\n                                {\n                                    _global__length__above_links_text += _result._length__plain_text;\n                                    _global__count__above_links_words += _result._count__plain_words;\t\t\t\t\t\n                                    if (false &#038;&#038; $D.debug) { _global__above__links_text += ' ' + _nodeText; }\n                                }\n                                else\n                                {\n                                    _global__length__above_plain_text += _result._length__plain_text;\n                                    _global__count__above_plain_words += _result._count__plain_words;\t\t\t\t\t\n                                    if (false &#038;&#038; $D.debug) { _global__above__plain_text += ' ' + _nodeText; }\n                                }\n\n                                \/\/\treturn text\n                                return _result;\n\n                            \/\/\tlink\n                            case (_tag_name == 'a'):\n                                var _href = '';\n\n                                try {\n                                    _href = _node.href\n                                } catch (e) {\n                                    _href = $CJ.attr('href');\n                                }\n\n                                \/\/\tsanity\n                                if (_href > ''); else { break; }\n                                if (_href.indexOf); else { break; }\n\n                                _result._is__link = true;\n\n                                \/\/\tskip\n                                for (var i=0, _i=$D.parseOptions._skip_link_from_domain.length; i<_i; i++)\n                                {\n                                    if (_href.indexOf($D.parseOptions._skip_link_from_domain[i]) > -1)\n                                        { _result._is__link_skip = true; break; }\n                                }\n\n                                \/\/\tinside link\n                                if (_global__inside_link); else\n                                {\n                                    _global__inside_link = true;\n                                    _global__inside_link__element_index = _result.__index;\n                                }\n\n                                \/\/\tdone\n                                _return__links.push(_result);\n                                break;\n\n                            \/\/\timage\n                            case (_tag_name == 'img'):\n\n                                \/\/\tskip\n                                if (_node.src &#038;&#038; _node.src.indexOf)\n                                {\n                                    for (var i=0, _i=$D.parseOptions._skip_image_from_domain.length; i<_i; i++)\n                                    {\n                                        if (_node.src.indexOf($D.parseOptions._skip_image_from_domain[i]) > -1)\n                                            { _result._is__image_skip = true; break; }\n                                    }\n                                }\n\n                                \/\/\tsize\n                                var\t_width = $CJ(_node).width(), _height = $CJ(_node).height();\n                                switch (true)\n                                {\n                                    case ((_width * _height) >= 50000):\n                                    case ((_width >= 350) &#038;&#038; (_height >= 75)):\n                                        _result._is__image_large = true;\n                                        break;\n\n                                    case ((_width * _height) >= 20000):\n                                    case ((_width >= 150) &#038;&#038; (_height >= 150)):\n                                        _result._is__image_medium = true;\n                                        break;\n\n                                    case ((_width <= 5) &#038;&#038; (_height <= 5)):\n                                        _result._is__image_skip = true;\n                                        break;\n\n                                    default:\n                                        _result._is__image_small = true;\n                                        break;\n                                }\n\n                                break;\n                        }\n\n                    \/\/\tchild nodes\n                    \/\/\t===========\n                        for (var i=0, _i=_node.childNodes.length; i<_i; i++)\n                        {\n                            var \n                                _child = _node.childNodes[i],\n                                _child_result = _recursive(_child)\n                            ;\n\n                            \/\/\tif false, continue\n                            if (_child_result); else { continue; }\n\n                            \/\/\tadd to result\n                            _result._count__links += \t\t\t_child_result._count__links + \t\t\t(_child_result._is__link ? 1 : 0);\n                            _result._count__links_skip += \t\t_child_result._count__links_skip + \t\t(_child_result._is__link_skip ? 1 : 0);\n\n                            _result._count__images_small += \t_child_result._count__images_small + \t(_child_result._is__image_small ? 1 : 0);\n                            _result._count__images_medium += \t_child_result._count__images_medium + \t(_child_result._is__image_medium ? 1 : 0);\n                            _result._count__images_large += \t_child_result._count__images_large + \t(_child_result._is__image_large ? 1 : 0);\n                            _result._count__images_skip += \t\t_child_result._count__images_skip + \t(_child_result._is__image_skip ? 1 : 0);\n\n                            _result._count__containers += \t\t_child_result._count__containers + \t\t(_child_result._is__container ? 1 : 0);\n                            _result._count__candidates += \t\t_child_result._count__candidates + \t\t(_child_result._is__candidate ? 1 : 0);\n\n                            _result._length__all_text += \t\t_child_result._length__plain_text + \t_child_result._length__links_text;\n                            _result._count__all_words += \t\t_child_result._count__plain_words + \t_child_result._count__links_words;\n\n                            \/\/\tplain text \/ link text\n                            switch (true)\n                            {\n                                case (_child_result._is__link):\n                                    \/\/\tno text to add\n                                    _result._length__links_text += (_child_result._length__plain_text + _child_result._length__links_text);\n                                    _result._count__links_words += (_child_result._count__plain_words + _child_result._count__links_words);\n                                    break;\n\n                                default:\n                                    _result._length__plain_text += \t\t\t_child_result._length__plain_text;\n                                    _result._count__plain_words += \t\t\t_child_result._count__plain_words;\n                                    _result._length__links_text += \t\t\t_child_result._length__links_text;\n                                    _result._count__links_words += \t\t\t_child_result._count__links_words;\n                                    break;\n                            }\n                        }\n\n                    \/\/\tafter child nodes\n                    \/\/\t=================\n\n                        \/\/\tmark as not in link anymore\n                        if (true\n                            &#038;&#038; (_result._is__link) \n                            &#038;&#038; (_global__inside_link__element_index == _result.__index)\n                        ) {\n                            _global__inside_link = false;\n                            _global__inside_link__element_index = 0;\n                        }\n\n                    \/\/\tadd to containers\n                    \/\/\t=================\n                        if (_result._is__container || ((_result.__index == 1) &#038;&#038; (_justExploring == true)))\n                        {\n                            \/\/\tadd to containers\n                            _return__containers.push(_result);\n\n                            \/\/  increase above containers\n                            if (_result._is__container) { _global__count__above_containers++; }\n\n                            \/\/\tadd to candidates\n                            if (_justExploring); else\n                            {\n                                switch (true)\n                                {\n                                    case (($D.language != 'cjk') &#038;&#038; ((_result._count__links * 2) >= _result._count__plain_words)):  \/* link ratio *\/\n\n                                    case (($D.language != 'cjk') &#038;&#038; (_result._length__plain_text < (65 \/ 3))):  \/* text length *\/\n                                    case (($D.language != 'cjk') &#038;&#038; (_result._count__plain_words < 5)):\t\t\t\/* words *\/\n\n                                    case (($D.language == 'cjk') &#038;&#038; (_result._length__plain_text < 10)):\t    \/* text length *\/\n                                    case (($D.language == 'cjk') &#038;&#038; (_result._count__plain_words < 2)):\t\t\t\/* words *\/\n\n                                    \/\/case (_result._length__plain_text == 0):    \/* no text *\/\n                                    \/\/case (_result._count__plain_words == 0):    \/* no words *\/\n\n                                    \/\/case (($D.language == 'cjk') &#038;&#038; ((_result._length__plain_text \/ 65 \/ 3) < 0.1)):\t\t\t\t\/* paragrahs of 3 lines *\/\n                                    \/\/case (($D.language != 'cjk') &#038;&#038; ((_result._count__plain_words \/ 50) < 0.5)):\t\t\t\t\t\/* paragraphs of 50 words *\/\n\n                                        \/\/\tnot a valid candidate\n                                        \/\/if (_tag_name == 'div') { $D.log('bad candidate', _result.__node); }\n\n                                        break;\n\n                                    default:\n                                        \/\/\tgood candidate\n                                        _result._is__candidate = true;\n                                        _return__candidates.push(_result);\n\n                                        \/\/  increase above candidates\n                                        _global__count__above_candidates++;\n\n                                        break;\n                                }\n\n                                \/\/\tspecial case for body -- if it was just skipped\n                                \/\/\t=====================\n                                    if ((_result.__index == 1) &#038;&#038; !(_result._is__candidate))\n                                    {\n                                        _result._is__candidate = true;\n                                        _result._is__bad = true;\n                                        _return__candidates.push(_result);\n                                    }\n                            }\n                        }\n\n                    \/\/\treturn\n                    \/\/\t======\n                        return _result;\n                };\n\n            \/\/\tactually do it\n            \/\/\t==============\n                _recursive(_nodeToExplore);\n\n            \/\/\tjust exploring -- return first thing\n            \/\/\t==============\n                if (_justExploring) { return _return__containers.pop(); }\n\n            \/\/\treturn containers list\n            \/\/\t======================\n                return {\n                    '_containers': \t_return__containers,\n                    '_candidates': \t_return__candidates,\n                    '_links': \t\t_return__links\n                };\n        };\n\n    \/\/  explore node and get stuff }\n\n    \/\/  build html for node {\n    \/\/  =====================\n\n        $D.getContent__buildHTMLForNode = function (_nodeToBuildHTMLFor, _custom_mode)\n        {\n            var \n                _global__element_index = 0,\n                _global__the_html = '',\n                _global__exploreNodeToBuildHTMLFor = $D.getContent__exploreNodeAndGetStuff(_nodeToBuildHTMLFor, true)\n            ;\n\n            \/\/\tcustom\n                switch (_custom_mode)\n                {\n                    case 'above-the-target':\n                        _global__exploreNodeToBuildHTMLFor = false;\n                        break;\n                }\n\n            \/\/\trecursive function\n            \/\/\t==================\n                var _recursive = function (_node)\n                {\n                    \/\/\tincrement index -- starts with 1\n                    \/\/\t===============\n                        _global__element_index++;\n\n                    \/\/\tvars\n                    \/\/\t====\n                        var \n                            _explored = false,\n                            _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 &#038;&#038; _node.tagName &#038;&#038; _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n\t\t\t\t\t\t\t_node_id = _node.id,\n                            _pos__start__before = 0,\n                            _pos__start__after = 0,\n                            _pos__end__before = 0,\n                            _pos__end__after = 0\n                        ;\n\n                    \/\/\tfast return\n                    \/\/\t===========\n                        switch (true)\n                        {\n                            case ((_tag_name == '#invalid')):\n                            case (($D.parseOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n                                return;\n\t\t\t\t\t\t\tcase (($D.parseOptions._elements_ignore_id.indexOf('|'+_node_id+'|') > -1)):\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn;\t\t\t\t\t\t\t\t\t\n\n                            case (_tag_name == '#text'):\n                                _global__the_html += _node.nodeValue\n                                    .replace(\/<\/gi, '&lt;')\n                                    .replace(\/>\/gi, '&gt;')\n                                ;\n                                return;\n                        }\n\n                    \/\/\thidden\n                    \/\/\t======\n                        if (true\n                            &#038;&#038; ($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)\n                            &#038;&#038; $D.isNodeHidden(_node, _tag_name)\n                        ) { return; }\n\n                    \/\/\tclean -- before\n                    \/\/\t=====\n\n                        \/\/\tobjects, embeds, iframes\n                        \/\/\t========================\n                            switch (_tag_name)\n                            {\n                                case ('object'):\n                                case ('embed'):\n                                case ('iframe'):\n                                    var \n                                        _src = (_tag_name == 'object' ? $CJ(_node).find(\"param[name='movie']\").attr('value') : $CJ(_node).attr('src')),\n                                        _skip = ((_src > '') ? false : true)\n                                    ;\n\n                                    if (_skip); else\n                                    {\n                                        \/\/\tdefault skip\n                                        _skip = true;\n\n                                        \/\/\tloop\n                                        for (var i=0, _i=$D.parseOptions._keep_video_from_domain.length; i<_i; i++)\n                                            { if (_src.indexOf($D.parseOptions._keep_video_from_domain[i]) > -1) { _skip = false; break; } }\n                                    }\n\n                                    \/\/\tskip?\n                                    if (_skip)\n                                    {\n                                        _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                        if (_explored &#038;&#038; _explored._is__unskippable); else\n                                        {\n                                            $D.debugOutline(_node, 'clean-before', 'object-embed-iframe');\n                                            return;\n                                        }\n                                    }\n\n                                    break;\n                            }\n\n                        \/\/\tskipped link\n                        \/\/\t============\n                            if (_tag_name == 'a' || _tag_name == 'li')\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._is__link_skip):\n                                        case (((_explored._count__images_small + _explored._count__images_skip) > 0) &#038;&#038; (_explored._length__plain_text < 65)):\n                                            $D.debugOutline(_node, 'clean-before', 'skip-link');\n                                            return;\n                                    }\n                                }\n                            }\n\n                        \/\/\tlink density\n                        \/\/\t============\n                            if ($D.parseOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1)\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._length__plain_text > (65 * 3 * 2)):\n                                        case ($D.language == 'cjk' &#038;&#038; (_explored._length__plain_text > (65 * 3 * 1))):\n                                        case (!(_explored._count__links > 1)):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.5):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.5):\n                                        case ((_explored._length__plain_text == 0) &#038;&#038; (_explored._count__links == 1) &#038;&#038; (_explored._length__links_text < 65)):\n                                        case ((_explored._length__plain_text < 25) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)):\n                                            break;\n\n                                        case ((_explored._length__links_text \/ _explored._length__all_text) < 0.5):\n                                            if (_explored._count__links > 0); else { break; }\n                                            if (_explored._count__links_skip > 0); else { break; }\n                                            if (((_explored._count__links_skip \/ _explored._count__links) > 0.25) &#038;&#038; (_explored._length__links_text \/ _explored._length__all_text) < 0.05) { break; }\n\n                                        default:\n                                            $D.debugOutline(_node, 'clean-before', 'link-density');\n                                            return;\n                                    }\n                                }\n                            }\t\n\n                        \/\/\tfloating\n                        \/\/\t========\n                            if ($D.parseOptions._elements_floating.indexOf('|'+_tag_name+'|') > -1)\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._length__plain_text > (65 * 3 * 2)):\n                                        case ($D.language == 'cjk' &#038;&#038; (_explored._length__plain_text > (65 * 3 * 1))):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.25):\n                                        case ((_explored._length__plain_text < 25) &#038;&#038; (_explored._length__links_text < 25) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)):\n                                        case (_node.getElementsByTagName &#038;&#038; (_explored._length__plain_text < (65 * 3 * 1)) &#038;&#038; ((_node.getElementsByTagName('h1').length + _node.getElementsByTagName('h2').length + _node.getElementsByTagName('h3').length + _node.getElementsByTagName('h4').length) > 0)):\n                                            break;\n\n                                        default:\n                                            var _float = $CJ(_node).css('float');\n                                            if (_float == 'left' || _float == 'right'); else { break; }\n                                            if ((_explored._length__links_text == 0) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)) { break; }\n\n                                            $D.debugOutline(_node, 'clean-before', 'floating');\n                                            return;\n                                    }\n                                }\n                            }\n\n                        \/\/\tabove target\n                        \/\/\t============\n                            if (_custom_mode == 'above-the-target')\n                            {\n                                \/\/  is ignored?\n                                if ($D.parseOptions._elements_above_target_ignore.indexOf('|'+_tag_name+'|') > -1)\n                                {\n                                    _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                    if (_explored &#038;&#038; _explored._is__unskippable); else\n                                    {\n                                        $D.debugOutline(_node, 'clean-before', 'above-target');\n                                        return;\n                                    }\n                                }\n\n                                \/\/  is image?\n                                if (_tag_name == 'img')\n                                {\n                                    _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                    if (_explored &#038;&#038; _explored._is__unskippable); else\n                                    {\n                                        if (_explored._is__image_large); else\n                                        {\n                                            $D.debugOutline(_node, 'clean-before', 'above-target');\n                                            return;\n                                        }\n                                    }\n                                }\n\n                                \/\/  has too many links?\n                                \/\/if (_node.getElementsByTagName &#038;&#038; _node.getElementsByTagName('a').length > 5)\n                                \/\/    { $D.debugOutline(_node, 'clean-before', 'above-target'); return; }\n                            }\n\n                        \/\/  headers that are images\n                        \/\/  =======================\n                            if (_tag_name.match(\/^h(1|2|3|4|5|6)$\/gi))\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case ((_explored._length__plain_text < 10) &#038;&#038; ((_explored._count__images_small + _explored._count__images_medium + _explored._count__images_large + _explored._count__images_skip) > 0)):\n                                            $D.debugOutline(_node, 'clean-before', 'skip-heading');\n                                            return;\n                                    }\n                                }\n                            }\n\n                    \/\/\tstart tag\n                    \/\/\t=========\n                        if ($D.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1); else\n                        {\n                            \/* mark *\/\t_pos__start__before = _global__the_html.length;\n                            \/* add *\/\t_global__the_html += '<'+_tag_name;\n\n                            \/\/\tattributes\n                            \/\/\t==========\n\n                                \/\/\tallowed attributes\n                                if (_tag_name in $D.parseOptions._elements_keep_attributes)\n                                {\n                                    for (var i=0, _i=$D.parseOptions._elements_keep_attributes[_tag_name].length; i<_i; i++)\n                                    {\n                                        var \n                                            _attribute_name = $D.parseOptions._elements_keep_attributes[_tag_name][i],\n                                            _attribute_value = _node.getAttribute(_attribute_name)\n                                        ;\n\n                                        \/\/\tif present\n                                        if (_attribute_value > '')\n                                            { _global__the_html += ' '+_attribute_name+'=\"'+(_attribute_value)+'\"'; }\n                                    }\n                                }\n\n                                \/\/\tkeep ID for all elements\n                                var _id_attribute = _node.getAttribute('id');\n                                if (_id_attribute > '')\n                                    { _global__the_html += ' id=\"'+_id_attribute+'\"'; }\n\n                                \/\/\tlinks target NEW\n                                if (_tag_name == 'a')\n                                    { _global__the_html += ' target=\"_blank\"'; }\n\n                            \/\/\tclose start\n                            \/\/\t===========\n                                if ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' \/>'; }\n                                else { _global__the_html += '>';}\n\n                            \/* mark *\/ _pos__start__after = _global__the_html.length;\n                        }\n\n                    \/\/\tchild nodes\n                    \/\/\t===========\n                        if ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1); else\n                        {\n                            for (var i=0, _i=_node.childNodes.length; i<_i; i++)\n                                { _recursive(_node.childNodes[i]); }\n                        }\n\n                    \/\/\tend tag\n                    \/\/\t=======\n                        switch (true)\n                        {\n                            case (($D.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)):\n                                return;\n\n                            case (($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n                                \/* mark *\/ \t_pos__end__before = _global__the_html.length;\n                                \/* mark *\/ \t_pos__end__after = _global__the_html.length;\n                                break;\n\n                            default:\n                                \/* mark *\/ \t_pos__end__before = _global__the_html.length;\n                                \/* end *\/ \t_global__the_html += '<\/'+_tag_name+'>';\n                                \/* mark *\/ \t_pos__end__after = _global__the_html.length;\n                                break;\n                        }\n\n                    \/\/\tclean -- after\n                    \/\/\t=====\n\n                        \/\/\tlargeObject classes\n                        if (_tag_name == 'iframe' || _tag_name == 'embed' || _tag_name == 'object')\n                        {\n                            _global__the_html = ''\n                                + _global__the_html.substr(0, _pos__start__before)\n                                + '\n\n\n\n<div class=\"readableLargeObjectContainer\">'\n                                + \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before))\n                                + '<\/div>\n\n\n\n\n'\n                            ;\n                            return;\n                        }\n\n                        \/\/\tadd image classes\n                        if (_tag_name == 'img')\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored &#038;&#038; _explored._is__unskippable); else\n                            {\n                                switch (true)\n                                {\n                                    case (_explored._is__image_skip):\n                                        $D.debugOutline(_node, 'clean-after', 'skip-img');\n                                        _global__the_html = _global__the_html.substr(0, _pos__start__before);\n                                        return;\n\n                                    case (_explored._is__image_large):\n\n                                        \/\/  add float class -- for images too narrow\/tall\n                                        \/\/  remove width\/height -- only for large images\n\n                                        \/\/  http:\/\/www.wired.com\/threatlevel\/2011\/05\/gps-gallery\/?pid=89&#038;viewall=true\n                                        \/\/  http:\/\/david-smith.org\/blog\/2012\/03\/10\/ios-5-dot-1-upgrade-stats\/index.html\n                                        \/\/  http:\/\/www.turntablekitchen.com\/2012\/04\/dutch-baby-with-caramelized-vanilla-bean-pears-moving-through-the-decades\/\n\n                                        _global__the_html = ''\n                                            + _global__the_html.substr(0, _pos__start__before)\n                                            + '\n\n\n\n<div class=\"readableLargeImageContainer'\n                                            + \t(($CJ(_node).width() <= 250) &#038;&#038; ($CJ(_node).height() >= 250) ? ' float' : '')\n                                            + '\">'\n                                            + \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before)).replace(\/width=\"([^=]+?)\"\/gi, '').replace(\/height=\"([^=]+?)\"\/gi, '')\n                                            + '<\/div>\n\n\n\n\n'\n                                        ;\n                                        return;\n                                }\n                            }\n                        }\n\n                        \/\/\tlarge images in links\n                        if (_tag_name == 'a')\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            switch (true)\n                            {\n                                case (_explored._count__images_large == 1):\n                                    _global__the_html = ''\n                                        + _global__the_html.substr(0, _pos__start__after-1)\n                                        + ' class=\"readableLinkWithLargeImage\">'\n                                        + \t_global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                        + '<\/a>'\n                                    ;\n                                    return;\n\n                                case (_explored._count__images_medium == 1):\n                                    _global__the_html = ''\n                                        + _global__the_html.substr(0, _pos__start__after-1)\n                                        + ' class=\"readableLinkWithMediumImage\">'\n                                        + \t_global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                        + '<\/a>'\n                                    ;\n                                    return;\n                            }\t\t\n                        }\n\n                        \/\/\ttoo much content\n                        if ($D.parseOptions._elements_too_much_content.indexOf('|'+_tag_name+'|') > -1)\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored &#038;&#038; _explored._is__unskippable); else\n                            {\n                                switch (true)\n                                {\n                                    case (_tag_name == 'h1' &#038;&#038; (_explored._length__all_text > (65 * 2))):\n                                    case (_tag_name == 'h2' &#038;&#038; (_explored._length__all_text > (65 * 2 * 3))):\n                                    case ((_tag_name.match(\/^h(3|4|5|6)$\/) != null) &#038;&#038; (_explored._length__all_text > (65 * 2 * 5))):\n                                    case ((_tag_name.match(\/^(b|i|em|strong)$\/) != null) &#038;&#038; (_explored._length__all_text > (65 * 5 * 5))):\n                                        $D.debugOutline(_node, 'clean-after', 'too-much-content');\n                                        _global__the_html = ''\n                                            + _global__the_html.substr(0, _pos__start__before)\n                                            + _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                        ;\n                                        return;\n                                }\n                            }\n                        }\t\t\n\n                        \/\/\tempty elements\n                        switch (true)\n                        {\n                            case (($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n                            case (($D.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)):\n                            case (_tag_name == 'td'):\n                                break;\n\n                            default:\n                                var _contents = _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after));\n                                    _contents = _contents.replace(\/(<br \\\/>)\/gi, '');\n                                    _contents = _contents.replace(\/(\n\n\n\n\n<hr \\\/>\n\n\n\n)\/gi, '');\n\n                                \/\/  for rows, clear empty cells\n                                if (_tag_name == 'tr')\n                                {\n                                    _contents = _contents.replace(\/\n<td[^>]*?>\/gi, '');\n                                    _contents = _contents.replace(\/<\\\/td>\/gi, '');\n                                }\n\n                                \/\/  for tables, clear empty rows\n                                if (_tag_name == 'table')\n                                {\n                                    _contents = _contents.replace(\/\n<tr[^>]*?>\/gi, '');\n                                    _contents = _contents.replace(\/<\\\/tr>\/gi, '');\n                                }\n\n                                var _contentsLength = $D.measureText__getTextLength(_contents);\n\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_contentsLength == 0 &#038;&#038; _tag_name == 'p'):\n                                            _global__the_html = _global__the_html.substr(0, _pos__start__before) + '\n\n';\n                                            return;\n\n                                        case (_contentsLength == 0):\n                                        case ((_contentsLength < 5) &#038;&#038; ($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)):\n                                            $D.debugOutline(_node, 'clean-after', 'blank');\n                                            _global__the_html = _global__the_html.substr(0, _pos__start__before);\n                                            return;\n                                    }\n                                }\n\n                                break;\n                        }\n\n                        \/\/\ttoo much missing\n                        if ($D.parseOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1)\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored &#038;&#038; _explored._is__unskippable); else\n                            {\n                                var\n                                    _contents = _global__the_html\n                                                .substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                                    .replace(\/(<([^>]+)>)\/gi, ''),\n                                    _contentsLength = $D.measureText__getTextLength(_contents),\n                                    _initialLength = 0\n                                        + _explored._length__all_text \n                                        + (_explored._count__images_small \t\t\t\t\t* 10)\n                                        + (_explored._count__images_skip \t\t\t\t\t* 10)\n                                        + (_node.getElementsByTagName('iframe').length \t\t* 10)\n                                        + (_node.getElementsByTagName('object').length \t\t* 10)\n                                        + (_node.getElementsByTagName('embed').length \t\t* 10)\n                                        + (_node.getElementsByTagName('button').length \t\t* 10)\n                                        + (_node.getElementsByTagName('input').length \t\t* 10)\n                                        + (_node.getElementsByTagName('select').length \t\t* 10)\n                                        + (_node.getElementsByTagName('textarea').length \t* 10)\n                                ;\n\n                                \/\/\ttoo much missing\n                                switch (true)\n                                {\n                                    case (!(_contentsLength > 0)):\n                                    case (!(_initialLength > 0)):\n                                    case (!((_contentsLength \/ _initialLength) < 0.5)):\n                                    case (!(($D.language == 'cjk') &#038;&#038; (_contentsLength \/ _initialLength) < 0.1)):\n                                    case ((_global__exploreNodeToBuildHTMLFor &#038;&#038; ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25))):\n                                    case (($D.language == 'cjk') &#038;&#038; (_global__exploreNodeToBuildHTMLFor &#038;&#038; ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.1))):\n                                        break;\n\n                                    default:\n                                        $D.debugOutline(_node, 'clean-after', 'missing-density');\n                                        _global__the_html = _global__the_html.substr(0, _pos__start__before);\n                                        return;\n                                }\n                            }\n                        }                \n\n                    \/\/\treturn\n                        return;\n                };\n\n            \/\/\tactually do it\n            _recursive(_nodeToBuildHTMLFor);\n\n            \/\/\treturn html\n            return _global__the_html;\n        };\n\n    \/\/  build html for node }\n\n    \/\/  isolate title in html {\n    \/\/  =======================\n\n        $D.articleTitleMarker__start = '\n\n\n\n<div id=\"articleHeader\">\n\n\n\n<h1>';\n        $D.articleTitleMarker__end = '<\/h1>\n\n\n\n<\/div>\n\n\n\n\n';\n\n        $D.getContent__find__hasIsolatedTitleInHTML = function (_html)\n        {\n            return (_html.substr(0, $D.articleTitleMarker__start.length) == $D.articleTitleMarker__start);\n        };\n\n        $D.getContent__find__getIsolatedTitleInHTML = function (_html)\n        {\n            \/\/  is it there?\n            if ($D.getContent__find__hasIsolatedTitleInHTML(_html)); else { return ''; }\n\n            \/\/  regex\n            var \n                _getTitleRegex = new RegExp($D.articleTitleMarker__start + '(.*?)' + $D.articleTitleMarker__end, 'i'),\n                _getTitleMatch = _html.match(_getTitleRegex)\n            ;\n\n            \/\/  match?\n            if (_getTitleMatch); else { return ''; }\n\n            \/\/  return\n            return _getTitleMatch[1];\n        };\n\n        $D.getContent__find__isolateTitleInHTML = function (_html, _document_title)\n        {\n            \/\/  use document title\n            if ($D.$document.find('body').attr($D.parseOptions._use_document_title_attribute) == $D.parseOptions._use_document_title_attribute_value)\n                { return _html; }\n\n            \/\/  can't just use (h1|h2|h3|etc)\n            \/\/      we want to try them in a certain order\n\n            var\n                _heading_pregs = [\n                    \/<(h1)[^>]*?>([\\s\\S]+?)<\\\/\\1>\/gi,\n                    \/<(h2)[^>]*?>([\\s\\S]+?)<\\\/\\1>\/gi,\n                    \/<(h3|h4|h5|h6)[^>]*?>([\\s\\S]+?)<\\\/\\1>\/gi\n                ],\n                _secondary_headings = '|h2|h3|h4|h5|h6|',\n                _search_document_title = ' ' + _document_title.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ') + ' '\n            ;\n\n            \/\/  loop pregs\n            for (var i=0, _i=_heading_pregs.length; i<_i; i++)\n            {\n                \/\/  exec\n                var _match = _heading_pregs[i].exec(_html);\n\n                \/\/  return?\n                switch (true)\n                {\n                    case (!(_match)):\n                    case (!(_heading_pregs[i].lastIndex > -1)):\n                        \/\/  will continue loop\n                        break;\n\n                    default:\n\n                        \/\/  measurements\n                        var\n                            _heading_end_pos = _heading_pregs[i].lastIndex,\n                            _heading_start_pos = (_heading_end_pos - _match[0].length),\n\n                            _heading_type = _match[1],\n                            _heading_text = _match[2].replace(\/<\\s*br[^>]*>\/gi, '').replace(\/[\\n\\r]+\/gi, ''),\n                            _heading_text_plain = _heading_text.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ');\n                            _heading_length = $D.measureText__getTextLength(_heading_text_plain),\n                            _heading_words = [],\n\n                            _to_heading_text = _html.substr(0, _heading_start_pos),\n                            _to_heading_length = $D.measureText__getTextLength(_to_heading_text.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' '))\n                        ;\n\n                        \/\/  return?\n                        switch (true)\n                        {\n                            case (!(_heading_length > 5)):\n                            case (!(_heading_length < (65 * 3))):\n                            case (!(_to_heading_length < (65 * 3 * 2))):\n                                \/\/  will continue for loop\n                                break;\n\n                            case ((_secondary_headings.indexOf('|' + _heading_type + '|') > -1)):\n                                \/\/  words in this heading\n                                _heading_words = _heading_text_plain.split(' ');\n\n                                \/\/  count words present in title\n                                for (var j=0, _j=_heading_words.length, _matched_words=''; j<_j; j++) {\n                                    if (_search_document_title.indexOf(' ' + _heading_words[j] + ' ') > -1) {\n                                        _matched_words += _heading_words[j] + ' ';\n                                    }\n                                }\n\n                                \/\/  break continues for loop\n                                \/\/      nothing goes to switch's default\n\n                                \/\/  no break?\n                                \/\/  =========\n                                    var _no_break = false;\n                                    switch (true)\n                                    {\n                                        \/\/  if it's big enough, and it's a substring of the title, it's good\n                                        case ((_heading_length > 20) &#038;&#038; (_search_document_title.indexOf(_heading_text_plain) > -1)):\n\n                                        \/\/  if it's slightly smaler, but is exactly at the begging or the end\n                                        case ((_heading_length > 10) &#038;&#038; ((_search_document_title.indexOf(_heading_text_plain) == 1) || (_search_document_title.indexOf(_heading_text_plain) == (_search_document_title.length - 1 - _heading_text_plain.length)))):\n\n                                            _no_break = true;\n                                            break;\n                                    }\n\n                                    \/\/  break?\n                                    \/\/  ======\n                                        var _break = false;\n                                        switch (true)\n                                        {\n                                            \/\/  no break?\n                                            case (_no_break):\n                                                break;\n\n                                            \/\/ heading too long? -- if not h2\n                                            case ((_heading_length > ((_search_document_title.length - 2) * 2)) &#038;&#038; (_heading_type != 'h2')):\n\n                                            \/\/  heading long enough?\n                                            case ((_heading_length < Math.ceil((_search_document_title.length - 2) * 0.50))):\n\n                                            \/\/  enough words matched?\n                                            case ((_heading_length < 25) &#038;&#038; (_matched_words.length < Math.ceil(_heading_length * 0.75))):\n                                            case ((_heading_length < 50) &#038;&#038; (_matched_words.length < Math.ceil(_heading_length * 0.65))):\n                                            case ((_matched_words.length < Math.ceil(_heading_length * 0.55))):\n\n                                                _break = true;\n                                                break;\n                                        }\n\n                                    \/\/  break?\n                                    \/\/  ======\n                                        if (_break) { break; }\n\n                            default:\n                                \/\/  this is the title -- do isolation; return\n                                return ''\n                                    + $D.articleTitleMarker__start\n                                    +   _heading_text \n                                    + $D.articleTitleMarker__end\n                                    + $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart(_html.substr(_heading_end_pos))\n                                ;\n                        }\n\n                        break;\n                }\n            }\n\n            \/\/  return unmodified\n            return _html;\n        };\n\n        $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart__substrCount = function (_haystack, _needle, _offset, _length)\n        {\n            \/\/ http:\/\/kevin.vanzonneveld.net\n            \/\/ +   original by: Kevin van Zonneveld (http:\/\/kevin.vanzonneveld.net)\n            \/\/ +   bugfixed by: Onno Marsman\n            \/\/ +   improved by: Brett Zamir (http:\/\/brett-zamir.me)\n            \/\/ +   improved by: Thomas\n            \/\/ *     example 1: substr_count('Kevin van Zonneveld', 'e');\n            \/\/ *     returns 1: 3\n            \/\/ *     example 2: substr_count('Kevin van Zonneveld', 'K', 1);\n            \/\/ *     returns 2: 0\n            \/\/ *     example 3: substr_count('Kevin van Zonneveld', 'Z', 0, 10);\n            \/\/ *     returns 3: false\n\n            var cnt = 0;\n\n            _haystack += '';\n            _needle += '';\n            if (isNaN(_offset)) { _offset = 0; }\n            if (isNaN(_length)) { _length = 0; }\n            if (_needle.length == 0) { return false; }\n\n            _offset--;\n\n            while ((_offset = _haystack.indexOf(_needle, _offset + 1)) != -1) {\n                if (_length > 0 &#038;&#038; (_offset + _needle.length) > _length) {\n                    return false;\n                }\n                cnt++;\n            }\n\n            return cnt;\n        };\n\n        $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart = function (_html)\n        {\n            \/\/  easy; remove all <\/X> at begining\n            var \n                _h = _html.replace(\/^(\\s*<\\s*\\\/\\s*[^>]+>)+\/gi, ''),\n                _r = \/<\\s*\\\/\\s*([^\\s>]+?)[^>]*>\/gi,\n                _the_end_tag = '<\/div>\n\n\n\n\n',\n                _the_start_tag = '\n\n<div',\n                _end_tag_pos = -1,\n                _last_pos = 0\n            ;\n\n            \/\/  remove all unbalanced _end_tags\n            for (var _i=0; _i<100; _i++)\n            {\n                _end_tag_pos = _h.indexOf(_the_end_tag, _last_pos);\n                if (_end_tag_pos > -1); else { break; }\n\n                var \n                    _sub = _h.substr(0, _end_tag_pos),\n                    _start_tags = $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart__substrCount(_sub, _the_start_tag, _last_pos),\n                    _end_tags = ((_start_tags > 0) ? (1 + $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart__substrCount(_sub, _the_end_tag, _last_pos)) : false)\n                ;\n\n                if ((!(_start_tags > 0)) || (_start_tags < _end_tags))\n                {\n                    _h = ''\n                        + _h.substr(0, _end_tag_pos)\n                        + _h.substr(_end_tag_pos + _the_end_tag.length)\n                    ;\n\n                    _last_pos = _end_tag_pos;\n                }\n                else\n                {\n                    _last_pos = _end_tag_pos + 1;\n                }\n            }\n\n            $D.log(_h);\n\n            return _h;\n        };\n\n    \/\/  isolate title in html }\n\n    \/\/  find in page {\n    \/\/  ==============\n\n        $D.getContent__findInPage = function (_pageWindow)\n        {\n            \/\/\tcalculations\n            \/\/\t============\n\n                var\n                    _firstCandidate = false,\n                    _secondCandidate = false,\n                    _targetCandidate = false\n                ;\n\n                $D.debugTimerStart('ExploreAndGetStuff');\n                    var\t_stuff = $D.getContent__exploreNodeAndGetStuff(_pageWindow.document.body);\n                $D.debugRemember('ExploreAndGetStuff', $D.debugTimerEnd()+'ms');\n\n                $D.debugTimerStart('ProcessFirst');\n                    var _processedCandidates = $D.getContent__processCandidates__first(_stuff._candidates);\n                    _firstCandidate = _processedCandidates[0];\n                    _targetCandidate = _firstCandidate;\n                $D.debugRemember('ProcessFirst', $D.debugTimerEnd()+'ms');\n\n                \/\/  debug\n                if ($D.debug)\n                {\n                    \/\/  debug first candidates\n                    $D.log('First 5 Main Candidates:');\n                    for (var x in _processedCandidates)\n                    {\n                        if (x == 5) { break; }\n                        $D.log(_processedCandidates[x], _processedCandidates[x].__node);\n                    }\n\n                    \/\/  highlight first\n                    $D.debugOutline(_firstCandidate.__node, 'target', 'first');\n                }\n\n                \/\/  in case we stop\n                $D.debugRemember('Target', 'first');\n\n                \/\/  do second?\n                switch (true)\n                {\n                    case (!(_firstCandidate._count__containers > 0)):\n                    case (!(_firstCandidate._count__candidates > 0)):\n                    case (!(_firstCandidate._count__pieces > 0)):\n                    case (!(_firstCandidate._count__containers > 25)):\n                        break;\n\n                    default:\n\n                        $D.debugTimerStart('ProcessSecond');\n                            var _processedCandidatesSecond = $D.getContent__processCandidates__second(_processedCandidates);\n                            _secondCandidate = _processedCandidatesSecond[0];\n                        $D.debugRemember('ProcessSecond', $D.debugTimerEnd()+'ms');\n\n                        \/\/  they're the same\n                        if (_firstCandidate.__node == _secondCandidate.__node) { break; }\n\n                        \/\/  debug\n                        if ($D.debug)\n                        {\n                            \/\/  log second candidates\n                            $D.log('First 5 Second Candidates:');\n                            for (var x in _processedCandidatesSecond)\n                            {\n                                if (x == 5) { break; }\n                                $D.log(_processedCandidatesSecond[x], _processedCandidatesSecond[x].__node);\n                            }\n\n                            \/\/  highlight second\n                            $D.debugOutline(_secondCandidate.__node, 'target', 'second');\n                        }\n\n                        \/\/  compute again\n                        \/\/  =============\n                            _firstCandidate['__points_history_final'] = $D.getContent__computePointsForCandidate__third(_firstCandidate, _firstCandidate);\n                            _firstCandidate['__points_final'] = _firstCandidate.__points_history_final[0];\n\n                            _secondCandidate['__points_history_final'] = $D.getContent__computePointsForCandidate__third(_secondCandidate, _firstCandidate);\n                            _secondCandidate['__points_final'] = _secondCandidate.__points_history_final[0];\n\n                        \/\/  log results\n                        \/\/  ===========\n                            if ($D.debug)\n                            {\n                                $D.log('The 2 Candidates:');\n                                $D.log(_firstCandidate);\n                                $D.log(_secondCandidate);\n                            }\n\n                        \/\/  are we selecting _second?\n                        \/\/  =========================\n                            switch (true)\n                            {\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters < 20) &#038;&#038; (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 1):\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 20) &#038;&#038; (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.9):\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 50) &#038;&#038; (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.75):\n                                    _targetCandidate = _secondCandidate;\n                                    $D.debugRemember('Target', 'second');\n                                    break;\n                            }\n\n                        \/\/  print points\n                        \/\/  ============\n                            if ($D.debug)\n                            {\n                                $D.debugRemember('PointsFirst', _firstCandidate['__points_history_final'][0].toFixed(2));\n                                $D.debugRemember('PointsSecond', _secondCandidate['__points_history_final'][0].toFixed(2));\n                            }\n\n                        break;\n                }\n\n                \/\/  highlight target\n                \/\/  ================\n                    if ($D.debug)\n                    {\n                        $CJ(_targetCandidate.__node).css({\n                            'box-shadow': \n                                'inset 0px 0px 50px rgba(255, 255, 0, 0.95), 0px 0px 50px rgba(255, 255, 0, 0.95)'\n                        });\n                    }\n\n            \/\/\tget html\n            \/\/\t========\n                $D.debugTimerStart('BuildHTML');\n                    var _html = $D.getContent__buildHTMLForNode(_targetCandidate.__node, 'the-target');\n                        _html = _html.substr((_html.indexOf('>')+1))\n                        _html = _html.substr(0, _html.lastIndexOf('<'));\n                $D.debugRemember('BuildHTML', $D.debugTimerEnd()+'ms');\n\n                $D.debugTimerStart('BuildHTMLPregs');\n                    _html = _html.replace(\/<(blockquote|div|p|td|li)([^>]*)>(\\s*<br \\\/>)+\/gi, '<$1$2>');\n                    _html = _html.replace(\/(<br \\\/>\\s*)+<\\\/(blockquote|div|p|td|li)>\/gi, '<\/$2>');\n                    _html = _html.replace(\/(<br \\\/>\\s*)+<(blockquote|div|h\\d|ol|p|table|ul|li)([^>]*)>\/gi, '<$2$3>');\n                    _html = _html.replace(\/<\\\/(blockquote|div|h\\d|ol|p|table|ul|li)>(\\s*<br \\\/>)+\/gi, '<\/$1>');\n                    _html = _html.replace(\/(\n\n\n\n\n<hr \\\/>\n\n\n\n\\s*\n\n\n\n\n<hr \\\/>\n\n\n\n\\s*)+\/gi, '\n\n\n\n\n<hr \/>\n\n\n\n\n\n');\n                    _html = _html.replace(\/(<br \\\/>\\s*<br \\\/>\\s*)+\/gi, '\n\n');\n                $D.debugRemember('BuildHTMLPregs', $D.debugTimerEnd()+'ms');\n\n            \/\/\treturn\n            \/\/\t======\n                return {\n                    '_html': _html,\n                    '_links': _stuff._links,\n                    '_targetCandidate': _targetCandidate,\n                    '_firstCandidate': _firstCandidate\n                };\n        };\n\n    \/\/  find in page }\n\n    \/\/  start {\n    \/\/  =======\n\n        $D.start = function ()\n        {\n            \/\/\tget content\n            \/\/\t===========\n                var \n                    _found = $D.getContent__findInPage($D.window),\n                    _found_links = _found._links,\n                    _targetNode = _found._targetCandidate.__node,\n                    _$targetNode = $CJ(_targetNode),\n                    _aboveNodes = []\n                ;\n\n            \/\/\tRTL\n            \/\/\t===\n                switch (true)\n                {\n                    case (_$targetNode.attr('dir') == 'rtl'):\n                    case (_$targetNode.css('direction') == 'rtl'):\n                        $D.makeRTL();\n                        break;\n                }\n\n            \/\/  get html\n            \/\/  ========\n                var \n                    _foundHTML = _found._html,\n                    _firstFragmentBeforeProcessing = $D.nextPage__getFirstFragment(_foundHTML),\n                    _documentTitle = ($D.document.title > '' ? $D.document.title : '')\n                ;\n\n            \/\/  get title\n            \/\/  =========\n\n                \/\/  has title already?\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle);\n                $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                $D.debugRemember('TitleSource', 'target');\n\n                \/\/  get html above?\n                if ($D.articleTitle > ''); else\n                {\n                    \/\/  get html above target?\n                    \/\/  ======================\n\n                        \/\/  global vars:\n                        \/\/      _found\n                        \/\/      _foundHTML\n                        \/\/      _documentTitle\n                        \/\/      _aboveNodes\n\n                        var \n                            _prevNode = _found._targetCandidate.__node,\n                            _prevHTML = '',\n                            _aboveHTML = '',\n                            _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node)\n                        ;\n\n                        (function () \n                        {\n\n                            while (true)\n                            {\n                                \/\/  the end?\n                                switch (true)\n                                {\n                                    case (_prevNode.tagName &#038;&#038; (_prevNode.tagName.toLowerCase() == 'body')):\n                                    case (_differentTargets &#038;&#038; (_prevNode == _found._firstCandidate.__node)):\n                                        \/\/  enough is enough\n                                        return;\n                                }\n\n                                \/\/  up or sideways?\n                                if (_prevNode.previousSibling); else\n                                {\n                                    _prevNode = _prevNode.parentNode;\n                                    continue;\n                                }\n\n                                \/\/\tprevious\n                                _prevNode = _prevNode.previousSibling;\n\n                                \/\/\toutline -- element might be re-outlined, when buildHTML is invoked\n                                if ($D.debug) { $D.debugOutline(_prevNode, 'target', 'add-above'); }\n\n                                \/\/\tget html; add\n                                _prevHTML = $D.getContent__buildHTMLForNode(_prevNode, 'above-the-target');\n                                _aboveHTML = _prevHTML + _aboveHTML;\n                                _aboveNodes.unshift(_prevNode);\n\n                                \/\/  isolate title\n                                _aboveHTML = $D.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle);\n\n                                \/\/\tfinished?\n                                switch (true)\n                                {\n                                    case ($D.measureText__getTextLength(_aboveHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ')) > (65 * 3 * 3)):\n                                    case ($D.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                                        return;\n                                }\n                            }\n\n                        })();\n\n                    \/\/  is what we found any good?\n                    \/\/  ==========================\n                        switch (true)\n                        {\n                            case ($D.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                            case (_differentTargets &#038;&#038; (_aboveHTML.split('<a ').length < 3) &#038;&#038; ($D.measureText__getTextLength(_aboveHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ')) < (65 * 3))):\n                                _foundHTML = _aboveHTML + _foundHTML;\n                                break;\n\n                            default:\n                                _aboveHTML = '';\n                                _aboveNodes = [];\n                                break;\n                        }\n\n                    \/\/  set title\n                    \/\/  =========\n\n                        $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                        $D.debugRemember('TitleSource', 'above_HTML');\n\n                        \/\/  get document title?\n                        if ($D.articleTitle > ''); else\n                        {\n                            \/\/  if all else failed, get document title\n                            \/\/  ======================================\n\n                                \/\/  global vars:\n                                \/\/      _foundHTML\n                                \/\/      _documentTitle\n\n                                (function ()\n                                {\n                                    \/\/  return?\n                                    \/\/  =======\n                                        if (_documentTitle > ''); else { return; }\n\n                                    \/\/  vars\n                                        var\n                                            _doc_title_parts = [],\n                                            _doc_title_pregs =\n                                            [\n                                                \/( [-][-] |( [-] )|( [>][>] )|( [<][<] )|( [|] )|( [\\\/] ))\/i,\n                                                \/(([:] ))\/i\n                                            ]\n                                        ;\n\n                                    \/\/\tloop through pregs\n                                    \/\/  ==================\n                                        for (var i=0, _i=_doc_title_pregs.length; i<_i; i++)\n                                        {\n                                            \/\/\tsplit\n                                            _doc_title_parts = _documentTitle.split(_doc_title_pregs[i]);\n\n                                            \/\/\tbreak if we managed a split\n                                            if (_doc_title_parts.length > 1) { break; }\n                                        }\n\n                                    \/\/\tsort title parts -- longer goes higher up -- i.e. towards 0\n                                    \/\/\t================\n                                        _doc_title_parts.sort(function (a, b)\n                                        {\n                                            switch (true)\n                                            {\n                                                case (a.length > b.length): return -1;\n                                                case (a.length < b.length): return 1;\n                                                default: return 0;\n                                            }\n                                        });\n\n                                    \/\/\tset title -- first part, if more than one word; otherwise, whole\n                                    \/\/  =========\n                                        _foundHTML = ''\n                                            + $D.articleTitleMarker__start\n                                            +   (_doc_title_parts[0].split(\/\\s+\/i).length > 1 ? _doc_title_parts[0] : _documentTitle) \n                                            + $D.articleTitleMarker__end \n                                            + _foundHTML\n                                        ;\n\n                                })();\n\n                            \/\/  set title\n                            \/\/  =========\n\n                                $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                                $D.debugRemember('TitleSource', 'document_title');\n                        }\n                }\n\n            \/\/\tremember\n            \/\/\t========\n                $D.debugRemember('theTarget', _found._targetCandidate.__node);\n                $D.debugRemember('firstCandidate', _found._firstCandidate.__node);\n\n            \/\/\tresult\n            \/\/  ======\n\n                $D.nextPage__firstFragment__firstPage = _firstFragmentBeforeProcessing;\n                $D.nextPage__firstFragment__lastPage = $D.nextPage__getFirstFragment(_foundHTML);\n                $D.nextPage__firstLinks = _found_links;\n\n                var\n                    _result = {\n                        '_html': _foundHTML,\n                        '_title': $D.articleTitle,\n                        '_rtl': $D.rtl\n                    }\n                ;\n\n                \/\/  add elements\n                _result['_elements'] = _aboveNodes;\n                _result['_elements'].push(_found._targetCandidate.__node);\n\n            \/\/  return\n            \/\/  ======\n                $D.callbacks.finished(_result);\n        };\n\n    \/\/  start }    \n\n    \/\/  return self\n    \/\/  ===========\n        return $D;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\n\/*!\n *  ClearlyComponent__highlight\n *  Evernote Clearly's highlighting algorithm\/functionality as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      \/\/ define\n *      window.ClearlyComponent__highlight = {\n *          'callbacks': {\n *              'highlightAdded': someFunction(),\n *              'highlightDeleted': someFunction(),\n *              'arbitraryRangeExclusion': someFunction()\n *          },\n *          'settings': {\n *              'imgPath': 'string',\n *              'onInsertCSSUseThisId': 'string',\n *              'highlightingEnabledCSSClass': 'string',\n *              'highlightElementCSSClass': 'string',\n *              'highlightElementIdAttribute': 'string',\n *              'highlightElementFirstCSSClass': 'string',\n *              'highlightElementLastCSSClass': 'string',\n *              'highlightElementDeleteCSSClass': 'string',\n *              'highlightElementDeleteIdPrefix': 'string',\n *              'highlightCleanHTMLElementStart': 'string',\n *              'highlightCleanHTMLElementEnd': 'string',\n *              'elementWhichMustContainAllHighlights': _dom_element,\n *              'elementsToAttachMouseHandlersTo': [\n *                  _dom_element\n *              ]\n *          },\n *          'window': window,\n *          'document': document,\n *          'jQuery': window.jQuery\n *      };\n *\n *      \/\/ init -- will return false, if something goes wrong\n *      window.ClearlyComponent__highlight = initClearlyComponent__highlight(window.ClearlyComponent__highlight);\n *\n *      \/\/  setup\n *      window.ClearlyComponent__highlight.insertCSS();\n *      window.ClearlyComponent__highlight.addMouseHandlers();\n *\n *      \/\/  enable\n *      window.ClearlyComponent__highlight.enable();\n *\n *      \/\/ publcly available\/overridable\n *      window.ClearlyComponent__highlight.debug\n *\n *\/\n\n\/*\n    changes:\n    ========\n        $R => $H\n        $R.highlight => $H.enabled\n\n    to do:\n    ======\n*\/\n\nfunction initClearlyComponent__highlight(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================\n\n        \/\/  null; return\n        if (_paramInstance); else { return false; }\n\n        \/\/  shorthand\n        $H = _paramInstance;\n\n    \/\/  global instance reference }\n\n    \/\/  required vars {\n    \/\/  ===============\n\n        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:\n\n        switch (true)\n        {\n            case (!($H.settings)):\n            case (!($H.settings.imgPath)):\n\n            case (!($H.window)):\n            case (!($H.document)):\n            case (!($H.document.body)):\n\n            case (!($H.jQuery)):\n\n                if ($H.debug)\n                {\n                    console.log(!($H.settings));\n                    console.log(!($H.settings.imgPath));\n\n                    console.log(!($H.window));\n                    console.log(!($H.document));\n                    console.log(!($H.document.body));\n\n                    console.log(!($H.jQuery));\n                }\n\n                \/\/  something's wrong\n                return false;\n        }\n\n    \/\/  required vars }\n\n    \/\/  missing settings {\n    \/\/  ==================\n\n        \/\/  restrictions\n        if ($H.settings.elementWhichMustContainAllHighlights); else { $H.settings.elementWhichMustContainAllHighlights = $H.document.body; }\n        if ($H.settings.elementsToAttachMouseHandlersTo); else { $H.settings.elementsToAttachMouseHandlersTo = [$H.document.body]; }\n\n        \/\/  names for stuff\n        \/* css id *\/            if ($H.settings.onInsertCSSUseThisId); else             { $H.settings.onInsertCSSUseThisId =            'clearly_highlighting_css'; }\n        \/* enabled *\/           if ($H.settings.highlightingEnabledCSSClass); else      { $H.settings.highlightingEnabledCSSClass =     'clearly_highlighting_enabled'; }\n        \/* element id *\/        if ($H.settings.highlightElementIdAttribute); else      { $H.settings.highlightElementIdAttribute =     'clearly_highlight_id'; }\n        \/* element class *\/     if ($H.settings.highlightElementCSSClass); else         { $H.settings.highlightElementCSSClass =        'clearly_highlight_element'; }\n        \/* element (first) *\/   if ($H.settings.highlightElementFirstCSSClass); else    { $H.settings.highlightElementFirstCSSClass =   'clearly_highlight_first'; }\n        \/* element (first) *\/   if ($H.settings.highlightElementLastCSSClass); else     { $H.settings.highlightElementLastCSSClass =    'clearly_highlight_last'; }\n        \/* delete class *\/      if ($H.settings.highlightElementDeleteCSSClass); else   { $H.settings.highlightElementDeleteCSSClass =  'clearly_highlight_delete_element'; }\n        \/* delete id prefix *\/  if ($H.settings.highlightElementDeleteIdPrefix); else   { $H.settings.highlightElementDeleteIdPrefix =  'clearly_highlight_delete__'; }\n        \/* clean html start *\/  if ($H.settings.highlightCleanHTMLElementStart); else   { $H.settings.highlightCleanHTMLElementStart =  '<span style=\"-evernote-highlighted:true; background-color:#f6ee96\">'; }\n        \/* clean html end *\/    if ($H.settings.highlightCleanHTMLElementEnd); else     { $H.settings.highlightCleanHTMLElementEnd =    '<\/span>'; }\n\n    \/\/  missing settings }\n\n    \/\/  global vars {\n    \/\/  =============\n\n        $CJ = $H.jQuery;\n\n        $H.$window = $CJ($H.window);\n        $H.$document = $CJ($H.document);\n        $H.$html = $H.$document.find('html');\n        $H.$elementWhichMustContainAllHighlights = $CJ($H.settings.elementWhichMustContainAllHighlights);\n\n        $H.enabled = false;\n\n    \/\/  global vars }\n\n    \/\/  parse options {\n    \/\/  ===============   \n\n\t\t$H.parseOptions =\n\t\t{\n\t\t\t'_elements_ignore': \t\t\t        '|button|input|select|textarea|optgroup|command|datalist|--|frame|frameset|noframes|--|style|link|script|noscript|--|canvas|applet|map|--|marquee|area|base|',\n\t\t\t'_elements_ignore_tag': \t\t        '|form|fieldset|details|dir|--|center|font|span|',\n\n\t\t\t'_elements_container': \t\t\t        '|body|--|article|section|--|div|--|td|--|li|--|dd|dt|',\n            '_elements_self_closing': \t\t        '|br|hr|--|img|--|col|--|source|--|embed|param|--|iframe|',\n\n            '_elements_highlight_protect':          '|video|audio|source|--|object|param|embed|',\n\n            '_elements_keep_attributes':\n\t\t\t{\n\t\t\t\t'a': \t\t['href', 'title', 'name'],\n\t\t\t\t'img': \t\t['src', 'width', 'height', 'alt', 'title'],\n\n\t\t\t\t'video': \t['src', 'width', 'height', 'poster', 'audio', 'preload', 'autoplay', 'loop', 'controls'],\n\t\t\t\t'audio': \t['src', 'preload', 'autoplay', 'loop', 'controls'],\n\t\t\t\t'source': \t['src', 'type'],\n\n\t\t\t\t'object': \t['data', 'type', 'width', 'height', 'classid', 'codebase', 'codetype'],\n\t\t\t\t'param': \t['name', 'value'],\n\t\t\t\t'embed': \t['src', 'type', 'width', 'height', 'flashvars', 'allowscriptaccess', 'allowfullscreen', 'bgcolor'],\n\n\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],\n\n\t\t\t\t'td':\t\t['colspan', 'rowspan'],\n\t\t\t\t'th':\t\t['colspan', 'rowspan']\n\t\t\t}\n\n\t\t};\n\n    \/\/  parse options }\n\n    \/\/  debug {\n    \/\/  =======\n\n        $H.debug = ($H.debug || false);\n\n\t\tif ($H.debug)\n\t\t{\n\t\t    \/\/  writeLog\n\t\t    \/\/  ========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(!($H.window.console &#038;&#038; $H.window.console.log))):    $H.writeLog = function (msg) { $H.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($H.window.opera &#038;&#038; $H.window.opera.postError))):  $H.writeLog = function (msg) { $H.window.opera.postError(msg); };   break;\n\t\t\t\t\tdefault:                                                    $H.writeLog = function (msg) {};                                    break;\n\t\t\t\t}\n\n            \/\/  log\n            \/\/  ===\n                $H.log = function ()\n                {\n                    if ($H.debug); else { return; }\n                    for (var i=0, il=arguments.length; i<il ; i++) { $H.writeLog(arguments[i]); }\n                    $H.writeLog('-----------------------------------------');\n                };\n\t\t}\n\t\telse\n\t\t{\n            $H.writeLog \t\t= function () { return false; };\n            $H.log \t\t\t\t= function () { return false; };\n        }\n\n    \/\/  debug }\n\n    \/\/  insert css {\n    \/\/  ============\n\n        $H.insertCSS = function ()\n        {\n            var _cssText = ''\n            +   '\/* selection *\/ '\n            +   'html.'+$H.settings.highlightingEnabledCSSClass+' ::-moz-selection { background: rgba(246, 238, 150, 0.99); } '\n            +   'html.'+$H.settings.highlightingEnabledCSSClass+' ::selection { background: rgba(246, 238, 150, 0.99); } '\n\n            +   '\/* cursor *\/ '\n            +   'html.'+$H.settings.highlightingEnabledCSSClass+' { '\n            +   '   \/* cursor and hot-spot position -- requires a default cursor, after the URL one *\/ '\n            +   '} '\n\n            +   '\/* highlight tag *\/ '\n            +   'em.'+$H.settings.highlightElementCSSClass+' { '\n            +   '   font-style: inherit !important; font-weight: inherit !important; '\n            +   '   background-repeat: repeat-x; background-position: top left; background-size: 100% 100%; '\n            +   '} '\n            +   '\/* the delete-buttons are positioned relative to this *\/ '\n            +   'em.'+$H.settings.highlightElementCSSClass+'.'+$H.settings.highlightElementFirstCSSClass+' { position: relative; } '\n\n            +   '\/* delete buttons *\/ '\n            +   'em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass+' { '\n            +   '   display: none; cursor: pointer; '\n            +   '   padding: 0; margin: 0; line-height: 0; '\n            +   '   position: absolute; width: 34px; height: 34px; left: -17px; top: -17px; '\n            +   '} '\n            +   'em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass+':hover { background-position: -34px 0px; } '\n            ;\n\n            \/\/  create\n            var _cssElement = $H.document.createElement('style');\n            _cssElement.setAttribute('id', $H.settings.onInsertCSSUseThisId);\n            _cssElement.setAttribute('type', 'text\/css');\n            if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                else { _cssElement.appendChild($H.document.createTextNode(_cssText)); }\n\n            \/\/  append\n            $H.$document.find('head').append(_cssElement);\n        };\n\n    \/\/  insert css }\n\n    \/\/  selection {\n    \/\/  ===========\n\n        $H.sel = {};\n\n        $H.sel.getWindowFromDocument = function (theDocument)\n        {\n            if (theDocument); else { return null; }\n\n            if ('defaultView' in theDocument) {\n                arguments.calee = function (theDocument) {\n                    if (theDocument); else { return null; }\n                    return theDocument.defaultView;\n                };\n            }\n            else if ('parentWindow' in theDocument) {\n                arguments.calee = function (theDocument) {\n                    if (theDocument); else { return null; }\n                    return theDocument.parentWindow;\n                };\n            }\n            else {\n                arguments.calee = function (theDocument) {\n                    return null;\n                };\n            }\n\n            return arguments.calee(theDocument);\n        };\n\n        $H.sel.getSelection = function (theWindow)\n        {\n            if (theWindow); else { return null; }\n\n            if ('getSelection' in theWindow) {\n                arguments.calee = function (theWindow) {\n                    if (the\n\/\/ ]]><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veel mensen vasten. Zij doen dat\u00a0steevast met goede bedoelingen. Bijvoorbeeld om zich bewust te worden van de rijkdom of de welstand waarin we verkeren. Anderen doen het wellicht om wat gezonder te leven of om een lichamelijk of geestelijk reinigingsproces door te maken. Ontslakken maar! Ik las zelfs een aanmoediging om gedurende de vasten 110&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1058","post","type-post","status-publish","format-standard","hentry","category-geen-categorie"],"_links":{"self":[{"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=\/wp\/v2\/posts\/1058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1058"}],"version-history":[{"count":12,"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=\/wp\/v2\/posts\/1058\/revisions"}],"predecessor-version":[{"id":1493,"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=\/wp\/v2\/posts\/1058\/revisions\/1493"}],"wp:attachment":[{"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jurgenvandenherik.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}