{"id":7432,"date":"2017-10-23T06:15:48","date_gmt":"2017-10-22T21:15:48","guid":{"rendered":"http:\/\/yonago-k.ed.jp\/?p=7432"},"modified":"2017-10-23T06:15:48","modified_gmt":"2017-10-22T21:15:48","slug":"%e6%9c%ac%e6%97%a5%e3%81%af%e9%80%9a%e5%b8%b8%e9%80%9a%e3%82%8a%e3%81%ae%e4%bf%9d%e8%82%b2%e3%82%92%e8%a1%8c%e3%81%84%e3%81%be%e3%81%9920171023","status":"publish","type":"post","link":"http:\/\/yonago-k.ed.jp\/?p=7432","title":{"rendered":"\u672c\u65e5\u306f\u901a\u5e38\u901a\u308a\u306e\u4fdd\u80b2\u3092\u884c\u3044\u307e\u3059(2017\/10\/23)"},"content":{"rendered":"<p>\n\t\u73fe\u5728\u3001\u671d\uff16\u6642\u306e\u6642\u70b9\u3067\u66b4\u98a8\u8b66\u5831\u304c\u51fa\u3066\u304a\u308a\u307e\u3059\u304c\u3001\u9ce5\u53d6\u770c\u3067\u306f\u53f0\u98a8\u306e\u66b4\u98a8\u570f\u304b\u3089\u96e2\u308c\u3064\u3064\u3042\u308a\u3001\u30d0\u30b9\u306e\u904b\u884c\u6642\u9593\u306e\u9803\u306b\u306f\u5f71\u97ff\u3082\u5c11\u306a\u304f\u306a\u3063\u3066\u3044\u308b\u898b\u8fbc\u307f\u3067\u3059\u306e\u3067\u3001\u901a\u5e38\u901a\u308a\u30d0\u30b9\u306e\u904b\u884c\u3082\u884c\u3044\u307e\u3059\u3002\n<\/p>\n<p>\n\t\u30d0\u30b9\u306f\u901a\u5e38\u901a\u308a\u904b\u884c\u3057\u307e\u3059\u304c\u3001\u307e\u3060\u5c11\u3057\u98a8\u96e8\u306e\u5f71\u97ff\u304c\u6b8b\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\n\t\u30d0\u30b9\u505c\u3067\u306e\u5371\u967a\u9632\u6b62\u306e\u305f\u3081\u3001\u9001\u8fce\u3092\u5e0c\u671b\u3055\u308c\u308b\u65b9\u306f\u65e9\u3081\u306b\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\u3002\n<\/p>\n<div id=\"evernote-post-clip-content\" style=\"display: none;\">\n<div class=\"yui3-cssreset\" id=\"postClipContainer\">\n<div class=\"closeCross\">\n\t\t\t&nbsp;\n\t\t<\/div>\n<div class=\"evn-error-message\">\n<p class=\"evn-error-desc\" message=\"CLIP_ERROR\">\n\t\t\t\t\u30af\u30ea\u30c3\u30d7\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\n\t\t\t<\/p>\n<p id=\"evn-show-logs\" message=\"VIEW_REPORT\">\n\t\t\t\t\u5f37\u5236\u7d42\u4e86\u30ec\u30dd\u30fc\u30c8\u3092\u95b2\u89a7\n\t\t\t<\/p>\n<\/p><\/div>\n<div class=\"clippedMessage\">\n\t\t\t\u30af\u30ea\u30c3\u30d7\u306e\u4fdd\u5b58\u5148: \u65e2\u5b9a\u306e\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\n\t\t<\/div>\n<div class=\"noteTitle\">\n\t\t\t\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30c7\u30a3\u30bf, content, \u30d8\u30eb\u30d7\u306f ALT 0 \u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\n\t\t<\/div>\n<div id=\"shareButtons\">\n<div class=\"shareButton\" id=\"linkedin\">\n\t\t\t\t&nbsp;\n\t\t\t<\/div>\n<div class=\"shareButton\" id=\"facebook\">\n\t\t\t\t&nbsp;\n\t\t\t<\/div>\n<div class=\"shareButton\" id=\"twitter\">\n\t\t\t\t&nbsp;\n\t\t\t<\/div>\n<div class=\"shareButton\" id=\"weibo\">\n\t\t\t\t&nbsp;\n\t\t\t<\/div>\n<div class=\"shareButton\" id=\"clipboard\">\n\t\t\t\t&nbsp;\n\t\t\t<\/div>\n<p>\t\t\t<!--\n\n<div class=\"shareButton\" id=\"email\"><\/div>\n\n-->\n\t\t<\/div>\n<div id=\"evn-clipboardCopy-container\">\n<div class=\"evn-pcp-divider\">\n\t\t\t\t&nbsp;\n\t\t\t<\/div>\n<div class=\"evn-pcp-clipboard-message\" message=\"SOURCE_LINK\">\n\t\t\t\t\u5143\u306e\u30ea\u30f3\u30af\n\t\t\t<\/div>\n<p>\t\t\t<input class=\"evn-pcp-clipboard-input\" readonly=\"true\" type=\"text\" \/><\/p>\n<div class=\"evn-pcp-clipboard-button bottom\" message=\"COPY_TO_CLIPBOARD\">\n\t\t\t\t\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\n\t\t\t<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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    }<\/p>\n<p>    if ( includeConstructorDefs ) {\n        for ( var i in parentClassOrObject.prototype.constructor ) {\n            if ( i != \"parent\" && i != \"prototype\" && parentClassOrObject.constructor[i] != parentClassOrObject.prototype.constructor[ i ]\n                && typeof childConstructor.prototype.constructor[ i ] == 'undefined' ) {\n                childConstructor.prototype.constructor[ i ] = parentClassOrObject.prototype.constructor[ i ];\n            }\n        }\n    }<\/p>\n<p>    if ( typeof childConstructor.handleInheritance == 'function' ) {\n        childConstructor.handleInheritance.apply( childConstructor, arguments );\n    }<\/p>\n<p>    if ( typeof childConstructor.prototype.handleInheritance == 'function' ) {\n        childConstructor.prototype.handleInheritance.apply( childConstructor, arguments );\n    }<\/p>\n<p>    return childConstructor;\n};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.EnClipper = {<\/p>\n<p>    enClipperProcessId: -1,<\/p>\n<p>    init: function() {\n        Evernote.ResponseReceiver.subscribe(this);\n        Evernote.Addin.getProcessID(document);\n        Evernote.Addin.allowSetForegroundWindow(this.enClipperProcessId);\n    },<\/p>\n<p>    onDataReceived: function(data) {\n        if(data && (data.type == \"process_id\")) {\n            Evernote.EnClipper.enClipperProcessId = data.data | 0;\n        }\n    }\n};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.AsyncEngine = {\n    _requests : {},\n    _requestIDCounter: 0,<\/p>\n<p>    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    },<\/p>\n<p>    removeRequest : function(requestID) {\n        this._requests[requestID] = null;\n        delete this._requests[requestID];\n    },<\/p>\n<p>    commonCallback : function(requestID, result) {\n        var object = Evernote.AsyncEngine._requests[requestID];\n        if (object && object.callbackFunc) {\n            object.callbackFunc(result, object.callbackArgs);\n            Evernote.AsyncEngine.removeRequest(requestID);\n        }\n        return 0;\n    }\n};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Proxy object for Evernote ActiveX component\n * @type {Object}\n *\/\nEvernote.Addin = {\n    _addon : null,\n    isAuthenticated: true,<\/p>\n<p>    init : function(addin) {\n        this._addon = addin;\n    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    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    },<\/p>\n<p>    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        }<\/p>\n<p>    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    \/**\n     * Returns document location address\n     * @param document - DOM document\n     * @return {*}\n     *\/\n    getDocumentHref: function(document) {\n        return this._addon.GetDocumentHref(document);\n    },<\/p>\n<p>    allowSetForegroundWindow: function(id) {\n        this._addon.AllowSetForegroundWindow(id);\n    },<\/p>\n<p>    getProcessID: function(doc) {\n        this.ensureAuthenticated();\n        this._addon.GetProcessID(doc, \"EvernoteGlobalReceiver\");\n    },<\/p>\n<p>    resetAuthenticatedState: function() {\n        this.isAuthenticated = true;\n    },<\/p>\n<p>    \/\/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    },<\/p>\n<p>    processError: function(error) {\n        if(error.code == Evernote.ErrorCodes.AUTHENTICATION_ERROR) {\n            this.isAuthenticated = false;\n        }\n        return false;\n    },<\/p>\n<p>    getEvernoteVersion: function(document) {\n        this._addon.GetEvernoteVersion(document, \"EvernoteGlobalReceiver\");\n    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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) {<\/p>\n<p>            }\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    },<\/p>\n<p>    \/**\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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    openLocalFile : function(logPath, flags)\n    {\n        try {\n            if (!flags)\n                flags = 1;<\/p>\n<p>            this._addon.OpenLocalFile(document, logPath, flags);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to open local file due to error \" + e);\n        }\n    },<\/p>\n<p>    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};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.FileLogger = {\n    _addin : Evernote.Addin,<\/p>\n<p>    _log : function(level, message) {\n        if(level >= this.level)\n            this._addin.log(level, \"JS: \" + message);\n    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    setNext : function(logger) {\n        this._next = logger;\n        this._next.setLevel(this.level);\n    },<\/p>\n<p>    setLevel : function(level) {\n        this.level = level;\n    }\n};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    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    },<\/p>\n<p>    setNext : function(logger) {\n        this._next = logger;\n    },<\/p>\n<p>    setLevel : function(level) {\n        this.level = level;\n    }\n};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.AlertLogger = {\n    debug : function(message) {\n        alert(\"Debug: \" + message);\n    },<\/p>\n<p>    info : function(message) {\n        alert(\"Info: \" + message);\n    },<\/p>\n<p>    warn : function(message) {\n        alert(\"Warn: \" + message);\n    },<\/p>\n<p>    error : function(message) {\n        alert(\"Error: \" + message);\n    }\n};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.LoggerConfigurator = {<\/p>\n<p>    DEBUG : 0,\n    INFO : 1,\n    WARN: 2,\n    ERROR: 3,<\/p>\n<p>    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};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Represents page context (have permissions to access and modify DOM objects)\n *\/<\/p>\n<p>try {<\/p>\n<p>    PageContext = {\n        url: (location && location.href) ? location.href : document.location.href,\n        title: document.title,<\/p>\n<p>        META: \"evernote-webclipper-extension\",<\/p>\n<p>        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}<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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};<\/p>\n<p>BrowserNavConstants  = {\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};<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/*! jQuery v1.7.2 jquery.com | jquery.org\/license *\/\n(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f(\"<\"+a+\">\").appendTo(b),e=d.css(\"display\");d.remove();if(e===\"none\"||e===\"\"){ck||(ck=c.createElement(\"iframe\"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?\"<!doctype html>\":\"\")+\"<html><body>\"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,\"display\"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==\"string\"&#038;&#038;(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k===\"*\")k=l;else if(l!==\"*\"&#038;&#038;l!==k){m=l+\" \"+k,n=e[m]||e[\"* \"+k];if(!n){p=b;for(o in e){j=o.split(\" \");if(j[0]===l||j[0]===\"*\"){p=e[j[1]+\" \"+k];if(p){o=e[o],o===!0?n=p:p===!0&#038;&#038;(n=o);break}}}}!n&#038;&#038;!p&#038;&#038;f.error(\"No conversion from \"+m.replace(\" \",\" to \")),n!==!0&#038;&#038;(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&#038;&#038;(c[g[i]]=d[i]);while(f[0]===\"*\")f.shift(),h===b&#038;&#038;(h=a.mimeType||c.getResponseHeader(\"content-type\"));if(h)for(i in e)if(e[i]&#038;&#038;e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+\" \"+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&#038;&#038;f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+\"[\"+(typeof e==\"object\"?b:\"\")+\"]\",e,c,d)});else if(!c&#038;&#038;f.type(b)===\"object\")for(var e in b)b_(a+\"[\"+e+\"]\",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&#038;&#038;((g[d]?a:e||(e={}))[d]=c[d]);e&#038;&#038;f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&#038;&#038;(k||!l);i++)l=h[i](c,d,e),typeof l==\"string\"&#038;&#038;(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&#038;&#038;!g[\"*\"]&#038;&#038;(l=bZ(a,c,d,e,\"*\",g));return l}function bY(a){return function(b,c){typeof b!=\"string\"&#038;&#038;(c=b,b=\"*\");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=\/^\\+\/.test(h),j&#038;&#038;(h=h.substr(1)||\"*\"),i=a[h]=a[h]||[],i[j?\"unshift\":\"push\"](c)}}}function bB(a,b,c){var d=b===\"width\"?a.offsetWidth:a.offsetHeight,e=b===\"width\"?1:0,g=4;if(d>0){if(c!==\"border\")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,\"padding\"+bx[e]))||0),c===\"margin\"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,\"border\"+bx[e]+\"Width\"))||0;return d+\"px\"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,\"padding\"+bx[e]))||0,c!==\"padding\"&#038;&#038;(d+=parseFloat(f.css(a,\"border\"+bx[e]+\"Width\"))||0),c===\"margin\"&#038;&#038;(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+\"px\"}function bo(a){var b=c.createElement(\"div\");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||\"\").toLowerCase();b===\"input\"?bm(a):b!==\"script\"&#038;&#038;typeof a.getElementsByTagName!=\"undefined\"&#038;&#038;f.grep(a.getElementsByTagName(\"input\"),bm)}function bm(a){if(a.type===\"checkbox\"||a.type===\"radio\")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!=\"undefined\"?a.getElementsByTagName(\"*\"):typeof a.querySelectorAll!=\"undefined\"?a.querySelectorAll(\"*\"):[]}function bk(a,b){var c;b.nodeType===1&#038;&#038;(b.clearAttributes&#038;&#038;b.clearAttributes(),b.mergeAttributes&#038;&#038;b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c===\"object\"?b.outerHTML=a.outerHTML:c!==\"input\"||a.type!==\"checkbox\"&#038;&#038;a.type!==\"radio\"?c===\"option\"?b.selected=a.defaultSelected:c===\"input\"||c===\"textarea\"?b.defaultValue=a.defaultValue:c===\"script\"&#038;&#038;b.text!==a.text&#038;&#038;(b.text=a.text):(a.checked&#038;&#038;(b.defaultChecked=b.checked=a.checked),b.value!==a.value&#038;&#038;(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute(\"_submit_attached\"),b.removeAttribute(\"_change_attached\"))}function bj(a,b){if(b.nodeType===1&#038;&#038;!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&#038;&#038;(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,\"table\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function U(a){var b=V.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b==\"string\"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+\"defer\",e=b+\"queue\",g=b+\"mark\",h=f._data(a,d);h&&(c===\"queue\"||!f._data(a,e))&&(c===\"mark\"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b===\"data\"&&f.isEmptyObject(a[b]))continue;if(b!==\"toJSON\")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(k,\"-$1\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(\/\\s+\/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=\/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)\/,j=\/\\S\/,k=\/^\\s+\/,l=\/\\s+$\/,m=\/^<(\\w+)\\s*\\\/?>(?:<\\\/\\1>)?$\/,n=\/^[\\],:{}\\s]*$\/,o=\/\\\\(?:[\"\\\\\\\/bfnrt]|u[0-9a-fA-F]{4})\/g,p=\/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?\/g,q=\/(?:^|:|,)(?:\\s*\\[)+\/g,r=\/(webkit)[ \\\/]([\\w.]+)\/,s=\/(opera)(?:.*version)?[ \\\/]([\\w.]+)\/,t=\/(msie) ([\\w.]+)\/,u=\/(mozilla)(?:.*? rv:([\\w.]+))?\/,v=\/-([a-z]|[0-9])\/ig,w=\/^-ms-\/,x=function(a,b){return(b+\"\").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&#038;&#038;(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&#038;&#038;h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&#038;&#038;(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.7.2\",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&#038;&#038;(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),\"slice\",F.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&#038;&#038;(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&#038;&#038;!e.isFunction(i)&#038;&#038;(i={}),k===j&#038;&#038;(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&#038;&#038;f&#038;&#038;(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&#038;&#038;e.isArray(d)?d:[]):h=d&#038;&#038;e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&#038;&#038;(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&#038;&#038;(a.$=g),b&#038;&#038;a.jQuery===e&#038;&#038;(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&#038;&#038;!--e.readyWait||a!==!0&#038;&#038;!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&#038;&#038;--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").off(\"ready\")}},bindReady:function(){if(!A){A=e.Callbacks(\"once memory\");if(c.readyState===\"complete\")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",B,!1),a.addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"onreadystatechange\",B),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,\"constructor\")&&!D.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,\"@\").replace(p,\"]\").replace(q,\"\")))return(new Function(\"return \"+b))();e.error(\"Invalid JSON: \"+b)},parseXML:function(c){if(typeof c!=\"string\"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,\"text\/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName(\"parsererror\").length)&&e.error(\"Invalid XML: \"+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,\"ms-\").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?\"\":G.call(a)}:function(a){return a==null?\"\":(a+\"\").replace(k,\"\").replace(l,\"\")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d===\"string\"||d===\"function\"||d===\"regexp\"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&#038;&#038;b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==\"number\")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&#038;&#038;d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&#038;&#038;typeof j==\"number\"&#038;&#038;(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&#038;&#038;(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&#038;&#038;(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==\"string\"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&#038;&#038;typeof d==\"object\"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&#038;&#038;e.isFunction(f),k&#038;&#038;(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf(\"compatible\")<0&#038;&#038;u.exec(a)||[];return{browser:b[1]||\"\",version:b[2]||\"0\"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&#038;&#038;f instanceof e&#038;&#038;!(f instanceof a)&#038;&#038;(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(a,b){I[\"[object \"+b+\"]\"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&#038;&#038;(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&#038;&#038;(e.browser.safari=!0),j.test(\"\uff82\uf8f0\")&#038;&#038;(k=\/^[\\s\\xA0]+\/,l=\/[\\s\\xA0]+$\/),h=e(c),c.addEventListener?B=function(){c.removeEventListener(\"DOMContentLoaded\",B,!1),e.ready()}:c.attachEvent&#038;&#038;(B=function(){c.readyState===\"complete\"&#038;&#038;(c.detachEvent(\"onreadystatechange\",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h===\"array\"?n(g):h===\"function\"&#038;&#038;(!a.unique||!p.has(g))&#038;&#038;c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&#038;&#038;m<l;m++)if(c[m].apply(b,f)===!1&#038;&#038;a.stopOnFalse){e=!0;break}j=!1,c&#038;&#038;(a.once?e===!0?p.disable():c=[]:d&#038;&#038;d.length&#038;&#038;(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&#038;&#038;e!==!0&#038;&#038;(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&#038;&#038;f<=l&#038;&#038;(l--,f<=m&#038;&#038;m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&#038;&#038;p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&#038;&#038;(j?a.once||d.push([b,c]):(!a.once||!e)&#038;&#038;o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks(\"once memory\"),c=f.Callbacks(\"once memory\"),d=f.Callbacks(\"memory\"),e=\"pending\",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"reject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&#038;&#038;f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+\"With\"]=g[j].fireWith;i.done(function(){e=\"resolved\"},c.disable,d.lock).fail(function(){e=\"rejected\"},b.disable,d.lock),a&#038;&#038;a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&#038;&#038;a&#038;&#038;f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&#038;&#038;b[c].promise&#038;&#038;f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&#038;&#038;j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement(\"div\"),q=c.documentElement;p.setAttribute(\"className\",\"t\"),p.innerHTML=\"   <link\/>\n<table><\/table>\n<p><a href='\/a' style='top:1px;float:left;opacity:.55;'>a<\/a><input type='checkbox'\/>\",d=p.getElementsByTagName(\"*\"),e=p.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};g=c.createElement(\"select\"),h=g.appendChild(c.createElement(\"option\")),i=p.getElementsByTagName(\"input\")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName(\"tbody\").length,htmlSerialize:!!p.getElementsByTagName(\"link\").length,style:\/top\/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"\/a\",opacity:\/^0.55\/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value===\"on\",optSelected:h.selected,getSetAttribute:p.className!==\"t\",enctype:!!c.createElement(\"form\").enctype,html5Clone:c.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav><\/:nav>\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode===\"CSS1Compat\",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent(\"onclick\")),i=c.createElement(\"input\"),i.value=\"t\",i.setAttribute(\"type\",\"radio\"),b.radioValue=i.value===\"t\",i.setAttribute(\"checked\",\"checked\"),i.setAttribute(\"name\",\"t\"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m=\"on\"+n,o=m in p,o||(p.setAttribute(m,\"return;\"),o=typeof p[m]==\"function\"),b[n+\"Bubbles\"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName(\"body\")[0];!u||(m=1,t=\"padding:0;margin:0;border:\",r=\"position:absolute;top:0;left:0;width:1px;height:1px;\",s=t+\"0;visibility:hidden;\",n=\"style='\"+r+t+\"5px solid #000;\",q=\"<\/p>\n<div \"+n+\"display:block;'>\n<div style='\"+t+\"0;display:block;overflow:hidden;'><\/div>\n<\/div>\n<p>\"+\"<\/p>\n<table \"+n+\"' cellpadding='0' cellspacing='0'>\"+\"<\/p>\n<tr>\n<td><\/td>\n<\/tr>\n<\/table>\n<p>\",d=c.createElement(\"div\"),d.style.cssText=s+\"width:0;height:0;position:static;top:0;margin-top:\"+m+\"px\",u.insertBefore(d,u.firstChild),p=c.createElement(\"div\"),d.appendChild(p),p.innerHTML=\"<\/p>\n<table>\n<tr>\n<td style='\"+t+\"0;display:none'><\/td>\n<td>t<\/td>\n<\/tr>\n<\/table>\n<p>\",k=p.getElementsByTagName(\"td\"),o=k[0].offsetHeight===0,k[0].style.display=\"\",k[1].style.display=\"none\",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML=\"\",l=c.createElement(\"div\"),l.style.width=\"0\",l.style.marginRight=\"0\",p.style.width=\"2px\",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!=\"undefined\"&&(p.innerHTML=\"\",p.style.width=p.style.padding=\"1px\",p.style.border=0,p.style.overflow=\"hidden\",p.style.display=\"inline\",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display=\"block\",p.style.overflow=\"visible\",p.innerHTML=\"<\/p>\n<div style='width:5px;'><\/div>\n<p>\",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position=\"fixed\",g.style.top=\"20px\",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top=\"\",e.style.overflow=\"hidden\",e.style.position=\"relative\",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop=\"1%\",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!==\"1%\"),typeof d.style.zoom!=\"undefined\"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=\/^(?:\\{.*\\}|\\[.*\\])$\/,k=\/([A-Z])\/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(\/\\D\/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c==\"string\",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===\"events\";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(\" \")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&#038;&#038;(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&#038;&#038;a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&#038;&#038;!f._data(j,\"parsedAttrs\")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf(\"data-\")===0&#038;&#038;(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,\"parsedAttrs\",!0)}}return m}if(typeof a==\"object\")return this.each(function(){f.data(this,a)});d=a.split(\".\",2),d[1]=d[1]?\".\"+d[1]:\"\",e=d[1]+\"!\";return f.access(this,function(c){if(c===b){m=this.triggerHandler(\"getData\"+e,[d[0]]),m===b&#038;&#038;j&#038;&#038;(m=f.data(j,a),m=l(j,a,m));return m===b&#038;&#038;d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler(\"setData\"+e,d),f.data(this,a,c),b.triggerHandler(\"changeData\"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||\"fx\")+\"mark\",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||\"fx\";var d=c+\"mark\",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,\"mark\"))}},queue:function(a,b,c){var d;if(a){b=(b||\"fx\")+\"queue\",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||\"fx\";var c=f.queue(a,b),d=c.shift(),e={};d===\"inprogress\"&&(d=c.shift()),d&&(b===\"fx\"&&c.unshift(\"inprogress\"),f._data(a,b+\".run\",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+\"queue \"+b+\".run\",!0),n(a,b,\"queue\"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!=\"string\"&&(c=a,a=\"fx\",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a===\"fx\"&#038;&#038;b[0]!==\"inprogress\"&#038;&#038;f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||\"fx\";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!=\"string\"&#038;&#038;(c=a,a=b),a=a||\"fx\";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+\"defer\",j=a+\"queue\",k=a+\"mark\",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&#038;&#038;f.data(e[g],i,f.Callbacks(\"once memory\"),!0))h++,l.add(m);m();return d.promise(c)}});var o=\/[\\n\\t\\r]\/g,p=\/\\s+\/,q=\/\\r\/g,r=\/^(?:button|input)$\/i,s=\/^(?:button|input|object|select|textarea)$\/i,t=\/^a(?:rea)?$\/i,u=\/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$\/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&#038;&#038;b.length===1)e.className=a;else{g=\" \"+e.className+\" \";for(h=0,i=b.length;h<i;h++)~g.indexOf(\" \"+b[h]+\" \")||(g+=b[h]+\" \");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&#038;&#038;typeof a==\"string\"||a===b){c=(a||\"\").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&#038;&#038;g.className)if(a){h=(\" \"+g.className+\" \").replace(o,\" \");for(i=0,j=c.length;i<j;i++)h=h.replace(\" \"+c[i]+\" \",\" \");g.className=f.trim(h)}else g.className=\"\"}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==\"boolean\";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c===\"string\"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?\"addClass\":\"removeClass\"](e)}else if(c===\"undefined\"||c===\"boolean\")this.className&#038;&#038;f._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":f._data(this,\"__className__\")||\"\"})},hasClass:function(a){var b=\" \"+a+\" \",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&#038;&#038;(\" \"+this[c].className+\" \").replace(o,\" \").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!(\"set\"in c)||c.set(this,h,\"value\")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&\"get\"in c&&(d=c.get(g,\"value\"))!==b)return d;d=g.value;return typeof d==\"string\"?d.replace(q,\"\"):d==null?\"\":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type===\"select-one\";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&#038;&#038;(f.support.optDisabled?!e.disabled:e.getAttribute(\"disabled\")===null)&#038;&#038;(!e.parentNode.disabled||!f.nodeName(e.parentNode,\"optgroup\"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&#038;&#038;!h.length&#038;&#038;i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find(\"option\").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute==\"undefined\")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&\"set\"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,\"\"+d);return d}if(h&&\"get\"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&#038;&#038;(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,\"\"),a.removeAttribute(v?e:c),h&#038;&#038;c in a&#038;&#038;(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&#038;&#038;a.parentNode)f.error(\"type property can't be changed\");else if(!f.support.radioValue&#038;&#038;b===\"radio\"&#038;&#038;f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&#038;&#038;(a.value=c);return b}}},value:{get:function(a,b){if(w&#038;&#038;f.nodeName(a,\"button\"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&#038;&#038;f.nodeName(a,\"button\"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&#038;&#038;i!==3&#038;&#038;i!==8&#038;&#038;i!==2){h=i!==1||!f.isXMLDoc(a),h&#038;&#038;(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&#038;&#038;\"set\"in g&#038;&#038;(e=g.set(a,d,c))!==b?e:a[c]=d:g&#038;&#038;\"get\"in g&#038;&#038;(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabindex\");return c&#038;&#038;c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&#038;&#038;a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!=\"boolean\"&#038;&#038;(d=a.getAttributeNode(c))&#038;&#038;d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&#038;&#038;(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&#038;&#038;(y[c]?d.nodeValue!==\"\":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+\"\"}},f.attrHooks.tabindex.set=w.set,f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===\"\"&#038;&#038;(b=\"false\"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&#038;&#038;(b.selectedIndex,b.parentNode&#038;&#038;b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype=\"encoding\"),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=\/^(?:textarea|input|select)$\/i,A=\/^([^\\.]*)?(?:\\.(.+))?$\/,B=\/(?:^|\\s)hover(\\.\\S+)?\\b\/,C=\/^key\/,D=\/^(?:mouse|contextmenu)|click\/,E=\/^(?:focusinfocus|focusoutblur)$\/,F=\/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$\/,G=function(\na){var b=F.exec(a);b&&(b[1]=(b[1]||\"\").toLowerCase(),b[3]=b[3]&&new RegExp(\"(?:^|\\\\s)\"+b[3]+\"(?:\\\\s|$)\"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c[\"class\"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,\"mouseenter$1 mouseleave$1\")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(\" \");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||\"\").split(\".\").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&#038;&#038;G(g),namespace:n.join(\".\")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&#038;&#038;a.attachEvent(\"on\"+m,i)}s.add&#038;&#038;(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&#038;&#038;f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&#038;&#038;!!(o=g.events)){b=f.trim(I(b||\"\")).split(\" \");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp(\"(^|\\\\.)\"+l.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&#038;&#038;(!c||c.guid===s.guid)&#038;&#038;(!l||l.test(s.namespace))&#038;&#038;(!d||d===s.selector||d===\"**\"&#038;&#038;s.selector)&#038;&#038;(r.splice(n--,1),s.selector&#038;&#038;r.delegateCount--,p.remove&#038;&#038;p.remove.call(a,s));r.length===0&#038;&#038;m!==r.length&#038;&#038;((!p.teardown||p.teardown.call(a,l)===!1)&#038;&#038;f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&#038;&#038;(q=g.handle,q&#038;&#038;(q.elem=null),f.removeData(a,[\"events\",\"handle\"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&#038;&#038;e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf(\"!\")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join(\".\"),c.namespace_re=c.namespace?new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null,o=h.indexOf(\":\")<0?\"on\"+h:\"\";if(!e){j=f.cache;for(l in j)j[l].events&#038;&#038;j[l].events[h]&#038;&#038;f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&#038;&#038;p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&#038;&#038;!p.noBubble&#038;&#038;!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&#038;&#038;n===e.ownerDocument&#038;&#038;r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&#038;&#038;!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,\"events\")||{})[c.type]&#038;&#038;f._data(m,\"handle\"),q&#038;&#038;q.apply(m,d),q=o&#038;&#038;m[o],q&#038;&#038;f.acceptData(m)&#038;&#038;q.apply(m,d)===!1&#038;&#038;c.preventDefault();c.type=h,!g&#038;&#038;!c.isDefaultPrevented()&#038;&#038;(!p._default||p._default.apply(e.ownerDocument,d)===!1)&#038;&#038;(h!==\"click\"||!f.nodeName(e,\"a\"))&#038;&#038;f.acceptData(e)&#038;&#038;o&#038;&#038;e[h]&#038;&#038;(h!==\"focus\"&#038;&#038;h!==\"blur\"||c.target.offsetWidth!==0)&#038;&#038;!f.isWindow(e)&#038;&#038;(n=e[o],n&#038;&#038;(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&#038;&#038;(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,\"events\")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&#038;&#038;!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&#038;&#038;(!c.button||c.type!==\"click\")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&#038;&#038;(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&#038;&#038;r.push(s);r.length&#038;&#038;j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&#038;&#038;!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&#038;&#038;!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&#038;&#038;!s.namespace||c.namespace_re&#038;&#038;c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&#038;&#038;(c.result=o,o===!1&#038;&#038;(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&#038;&#038;i.postDispatch.call(this,c);return c.result}},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){a.which==null&#038;&#038;(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&#038;&#038;d.clientX!=null&#038;&#038;(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&#038;&#038;f.scrollLeft||g&#038;&#038;g.scrollLeft||0)-(f&#038;&#038;f.clientLeft||g&#038;&#038;g.clientLeft||0),a.pageY=d.clientY+(f&#038;&#038;f.scrollTop||g&#038;&#038;g.scrollTop||0)-(f&#038;&#038;f.clientTop||g&#038;&#038;g.clientTop||0)),!a.relatedTarget&#038;&#038;i&#038;&#038;(a.relatedTarget=i===a.target?d.toElement:i),!a.which&#038;&#038;h!==b&#038;&#038;(a.which=h&#038;1?1:h&#038;2?3:h&#038;4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&#038;&#038;(a.target=a.target.parentNode),a.metaKey===b&#038;&#038;(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&#038;&#038;(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&#038;&#038;(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&#038;&#038;c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&#038;&#038;a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&#038;&#038;a.detachEvent(\"on\"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&#038;&#038;a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&#038;&#038;a.getPreventDefault()?K:J):this.type=a,b&#038;&#038;f.extend(this,b),this.timeStamp=a&#038;&#038;a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&#038;&#038;a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&#038;&#038;!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,\"form\"))return!1;f.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=f.nodeName(c,\"input\")||f.nodeName(c,\"button\")?c.form:b;d&#038;&#038;!d._submit_attached&#038;&#038;(f.event.add(d,\"submit._submit\",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&#038;&#038;(delete a._submit_bubble,this.parentNode&#038;&#038;!a.isTrigger&#038;&#038;f.event.simulate(\"submit\",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,\"form\"))return!1;f.event.remove(this,\"._submit\")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\")f.event.add(this,\"propertychange._change\",function(a){a.originalEvent.propertyName===\"checked\"&#038;&#038;(this._just_changed=!0)}),f.event.add(this,\"click._change\",function(a){this._just_changed&#038;&#038;!a.isTrigger&#038;&#038;(this._just_changed=!1,f.event.simulate(\"change\",this,a,!0))});return!1}f.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;z.test(b.nodeName)&#038;&#038;!b._change_attached&#038;&#038;(f.event.add(b,\"change._change\",function(a){this.parentNode&#038;&#038;!a.isSimulated&#038;&#038;!a.isTrigger&#038;&#038;f.event.simulate(\"change\",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==\"radio\"&#038;&#038;b.type!==\"checkbox\")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,\"._change\");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&#038;&#038;c.addEventListener(a,e,!0)},teardown:function(){--d===0&#038;&#038;c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a==\"object\"){typeof c!=\"string\"&#038;&#038;(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&#038;&#038;e==null?(e=c,d=c=b):e==null&#038;&#038;(typeof c==\"string\"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&#038;&#038;(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&#038;&#038;a.preventDefault&#038;&#038;a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+\".\"+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a==\"object\"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c==\"function\")d=c,c=b;d===!1&#038;&#038;(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||\"**\",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,\"**\"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,\"lastToggle\"+a.guid)||0)%d;f._data(this,\"lastToggle\"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){f.fn[b]=function(a,c){c==null&#038;&#038;(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!=\"string\"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&#038;&#038;!g&#038;&#038;(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=\/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)\/g,d=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),e=0,g=Object.prototype.toString,h=!1,i=!0,j=\/\\\\\/g,k=\/\\r\\n\/g,l=\/\\W\/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(\"\"),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]===\"~\"||w[0]===\"+\")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q=\"\",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)===\"[object Array]\")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&#038;&#038;a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!==\"\\\\\"){g[1]=(g[1]||\"\").replace(j,\"\"),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],\"\");break}}}}d||(d=typeof b.getElementsByTagName!=\"undefined\"?b.getElementsByTagName(\"*\"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&#038;&#038;c[0]&#038;&#038;m.isXML(c[0]);while(a&#038;&#038;c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&#038;&#038;f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)===\"\\\\\")continue;s===r&#038;&#038;(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&#038;&#038;(i=k(j,f,n,s),p=e^i,d&#038;&#038;i!=null?p?g=!0:s[n]=!1:p&#038;&#038;(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],\"\");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e=\"\";if(d){if(d===1||d===9||d===11){if(typeof a.textContent==\"string\")return a.textContent;if(typeof a.innerText==\"string\")return a.innerText.replace(k,\"\");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&#038;&#038;(e+=n(c));return e},o=m.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:\/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\/,CLASS:\/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\/,NAME:\/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]\/,ATTR:\/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]\/,TAG:\/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)\/,CHILD:\/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?\/,POS:\/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)\/,PSEUDO:\/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?\/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(a){return a.getAttribute(\"href\")},type:function(a){return a.getAttribute(\"type\")}},relative:{\"+\":function(a,b){var c=typeof b==\"string\",d=c&#038;&#038;!l.test(b),e=c&#038;&#038;!d;d&#038;&#038;(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&#038;&#038;h.nodeType!==1);a[f]=e||h&#038;&#038;h.nodeName.toLowerCase()===b?h||!1:h===b}e&#038;&#038;m.filter(b,a,!0)},\">\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&#038;&#038;(a[e]=d?c.parentNode:c.parentNode===b);d&#038;&#038;m.filter(b,a,!0)}},\"\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&#038;&#038;!l.test(b)&#038;&#038;(b=b.toLowerCase(),d=b,g=w),g(\"parentNode\",b,f,a,d,c)},\"~\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&#038;&#038;!l.test(b)&#038;&#038;(b=b.toLowerCase(),d=b,g=w),g(\"previousSibling\",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=\"undefined\"&#038;&#038;!c){var d=b.getElementById(a[1]);return d&#038;&#038;d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=\"undefined\"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute(\"name\")===a[1]&#038;&#038;c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=\"undefined\")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=\" \"+a[1].replace(j,\"\")+\" \";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&#038;&#038;(e^(h.className&#038;&#038;(\" \"+h.className+\" \").replace(\/[\\t\\n\\r]\/g,\" \").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,\"\")},TAG:function(a,b){return a[1].replace(j,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||m.error(a[0]),a[2]=a[2].replace(\/^\\+|\\s*\/g,\"\");var b=\/(-?)(\\d*)(?:n([+\\-]?\\d*))?\/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!\/\\D\/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,\"\");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(j,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||\/^\\w\/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return\/h\\d\/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return\/input|select|textarea|button\/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e===\"contains\")return(a.textContent||a.innerText||n([a])||\"\").indexOf(b[3])>=0;if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case\"only\":case\"first\":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k===\"first\")return!0;l=a;case\"last\":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case\"nth\":c=b[2],e=b[3];if(c===1&#038;&#038;e===0)return!0;f=b[0],g=a.parentNode;if(g&#038;&#038;(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&#038;&#038;(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&#038;&#038;j\/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":!f&&m.attr?d!=null:f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return\"\\\\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+\/(?![^\\[]*\\])(?![^\\(]*\\))\/.source),o.leftMatch[r]=new RegExp(\/(^(?:.|\\r|\\n)*?)\/.source+o.match[r].source.replace(\/\\\\(\\d+)\/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);else if(typeof a.length==\"number\")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&#038;4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&#038;&#038;b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&#038;&#038;k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement(\"div\"),d=\"script\"+(new Date).getTime(),e=c.documentElement;a.innerHTML=\"<a name='\"+d+\"'\/>\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"<a href='#'><\/a>\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(o.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"<\/p>\n<p class='TEST'>\n<p>\";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=\/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)\/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var k=e,l=e.getAttribute(\"id\"),n=l||d,p=e.parentNode,q=\/^\\s*[+~]\/.test(b);l?n=n.replace(\/'\/g,\"\\\\$&\"):e.setAttribute(\"id\",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll(\"[id='\"+n+\"'] \"+b),f)}catch(r){}finally{l||k.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(\/\\=\\s*([^'\"\\]]*)\\s*\\]\/g,\"='$1']\");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!\/!=\/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"<\/p>\n<div class='test e'><\/div>\n<div class='test'><\/div>\n<p>\";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1)return;o.order.splice(1,0,\"CLASS\"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var y=function(a,b,c){var d,e=[],f=\"\",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,\"\");a=o.relative[a]?a+\"*\":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[\":\"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=\/Until$\/,M=\/^(?:parents|prevUntil|prevAll)\/,N=\/,\/,O=\/^.[^:#\\[\\.,]*$\/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!=\"string\")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack(\"\",\"find\",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),\"not\",a)},filter:function(a){return this.pushStack(T(this,a,!0),\"filter\",a)},is:function(a){return!!a&#038;&#038;(typeof a==\"string\"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&#038;&#038;c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a==\"string\")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",W=\/ jQuery\\d+=\"(?:\\d+|null)\"\/g,X=\/^\\s+\/,Y=\/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\\/>\/ig,Z=\/<([\\w:]+)\/,$=\/\n\n<tbody\/i,_=\/<|&#038;#?\\w+;\/,ba=\/<(?:script|style)\/i,bb=\/<(?:script|object|embed|option|style)\/i,bc=new RegExp(\"<(?:\"+V+\")[\\\\s\/>]\",\"i\"),bd=\/checked\\s*(?:[^=]|=\\s*.checked.)\/i,be=\/\\\/(java|ecma)script\/i,bf=\/^\\s*<!(?:\\[CDATA\\[|\\-\\-)\/,bg={option:[1,\"<select multiple='multiple'>\",\"<\/select>\"],legend:[1,\"<\/p>\n<fieldset>\",\"<\/fieldset>\n<p>\"],thead:[1,\"<\/p>\n<table>\",\"<\/table>\n<p>\"],tr:[2,\"<\/p>\n<table>\n<tbody>\",\"<\/tbody>\n<\/table>\n<p>\"],td:[3,\"<\/p>\n<table>\n<tbody>\n<tr>\",\"<\/tr>\n<\/tbody>\n<\/table>\n<p>\"],col:[2,\"<\/p>\n<table>\n<tbody><\/tbody>\n<colgroup>\",\"<\/colgroup>\n<\/table>\n<p>\"],area:[1,\"<\/p>\n<map>\",\"<\/map>\n<p>\"],_default:[0,\"\",\"\"]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div<\/p>\n<div>\",\"<\/div>\n<p>\"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f\n.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,\"\"):null;if(typeof a==\"string\"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(Y,\"<$1><\/$2>\");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&#038;&#038;(f.cleanData(c.getElementsByTagName(\"*\")),c.innerHTML=a);c=0}catch(g){}}c&#038;&#038;this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&#038;&#038;this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!=\"string\"&#038;&#038;(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),\"replaceWith\",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&#038;&#038;arguments.length===3&#038;&#038;typeof j==\"string\"&#038;&#038;bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&#038;&#038;j.parentNode,f.support.parentNode&#038;&#038;i&#038;&#038;i.nodeType===11&#038;&#038;i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&#038;&#038;f.nodeName(g,\"tr\");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&#038;&#038;f.each(k,function(a,b){b.src?f.ajax({type:\"GET\",global:!1,url:b.src,async:!1,dataType:\"script\"}):f.globalEval((b.text||b.textContent||b.innerHTML||\"\").replace(bf,\"\/*$0*\/\")),b.parentNode&#038;&#038;b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&#038;&#038;b[0]&#038;&#038;(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&#038;&#038;typeof j==\"string\"&#038;&#038;j.length<512&#038;&#038;i===c&#038;&#038;j.charAt(0)===\"<\"&#038;&#038;!bb.test(j)&#038;&#038;(f.support.checkClone||!bd.test(j))&#038;&#038;(f.support.html5Clone||!bc.test(j))&#038;&#038;(g=!0,h=f.fragments[j],h&#038;&#038;h!==1&#038;&#038;(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&#038;&#038;(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&#038;&#038;this[0].parentNode;if(g&#038;&#038;g.nodeType===11&#038;&#038;g.childNodes.length===1&#038;&#038;e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test(\"<\"+a.nodeName+\">\")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l==\"number\"&&(l+=\"\");if(!l)continue;if(typeof l==\"string\")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,\"<$1><\/$2>\");var m=(Z.exec(l)||[\"\",\"\"])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement(\"div\"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m===\"table\"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===\"<\/p>\n<table>\"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],\"tbody\")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)==\"number\")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&#038;&#038;f.nodeName(h,\"script\")&#038;&#038;(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName(\"script\"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&#038;&#038;f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&#038;&#038;b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&#038;&#038;(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&#038;&#038;i.removeAttribute(f.expando),delete d[c]}}}});var bp=\/alpha\\([^)]*\\)\/i,bq=\/opacity=([^)]*)\/,br=\/([A-Z]|^ms)\/g,bs=\/^[\\-+]?(?:\\d*\\.)?\\d+$\/i,bt=\/^-?(?:\\d*\\.)?\\d+(?!px)[^\\d\\s]+$\/i,bu=\/^([\\-+])=([\\-+.\\de]+)\/,bv=\/^margin\/,bw={position:\"absolute\",visibility:\"hidden\",display:\"block\"},bx=[\"Top\",\"Right\",\"Bottom\",\"Left\"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,\"opacity\");return c===\"\"?\"1\":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":f.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&\"get\"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h===\"string\"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h=\"number\");if(d==null||h===\"number\"&&isNaN(d))return;h===\"number\"&&!f.cssNumber[i]&&(d+=\"px\");if(!k||!(\"set\"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c===\"cssFloat\"&&(c=\"float\");if(g&&\"get\"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,\"-$1\").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b===\"fontSize\"?\"1em\":f,f=g.pixelLeft+\"px\",g.left=c,d&&(a.runtimeStyle.left=d));return f===\"\"?\"auto\":f}),by=bz||bA,f.each([\"height\",\"width\"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+\"px\":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)\/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?\"alpha(opacity=\"+b*100+\")\":\"\",g=d&&d.filter||c.filter||\"\";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,\"\"))===\"\"){c.removeAttribute(\"filter\");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:\"inline-block\"},function(){return b?by(a,\"margin-right\"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c==\"string\"?c.split(\" \"):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=\/%20\/g,bD=\/\\[\\]$\/,bE=\/\\r?\\n\/g,bF=\/#.*$\/,bG=\/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$\/mg,bH=\/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$\/i,bI=\/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$\/,bJ=\/^(?:GET|HEAD)$\/,bK=\/^\\\/\\\/\/,bL=\/\\?\/,bM=\/<script\\b[^<]*(?:(?!<\\\/script>)<[^<]*)*<\\\/script>\/gi,bN=\/^(?:select|textarea)\/i,bO=\/\\s+\/,bP=\/([?&])_=[^&]*\/,bQ=\/^([\\w\\+\\.\\-]+:)(?:\\\/\\\/([^\\\/?#:]*)(?::(\\d+))?)?\/,bR=f.fn.load,bS={},bT={},bU,bV,bW=[\"*\/\"]+[\"*\"];try{bU=e.href}catch(bX){bU=c.createElement(\"a\"),bU.href=\"\",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"<\/p>\n<div>\").append(c.replace(bM,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,\"\\r\\n\")}}):{name:b.name,value:c.replace(bE,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:\"GET\",contentType:\"application\/x-www-form-urlencoded; charset=UTF-8\",processData:!0,async:!0,accepts:{xml:\"application\/xml, text\/xml\",html:\"text\/html\",text:\"text\/plain\",json:\"application\/json, text\/javascript\",\"*\":bW},contents:{xml:\/xml\/,html:\/html\/,json:\/json\/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader(\"Last-Modified\"))f.lastModified[k]=y;if(z=v.getResponseHeader(\"Etag\"))f.etag[k]=z}if(a===304)w=\"notmodified\",o=!0;else try{r=cb(d,x),w=\"success\",o=!0}catch(A){w=\"parsererror\",u=A}}else{u=w;if(!w||a)w=\"error\",a<0&#038;&#038;(a=0)}v.status=a,v.statusText=\"\"+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&#038;&#038;g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&#038;&#038;(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&#038;&#038;(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&#038;&#038;(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks(\"once memory\"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&#038;&#038;p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\"\").replace(bF,\"\").replace(bK,bV[1]+\"\/\/\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bO),d.crossDomain==null&#038;&#038;(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&#038;&#038;r[2]==bV[2]&#038;&#038;(r[3]||(r[1]===\"http:\"?80:443))==(bV[3]||(bV[1]===\"http:\"?80:443)))),d.data&#038;&#038;d.processData&#038;&#038;typeof d.data!=\"string\"&#038;&#038;(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&#038;&#038;f.active++===0&#038;&#038;f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&#038;&#038;(d.url+=(bL.test(d.url)?\"&#038;\":\"?\")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,\"$1_=\"+x);d.url=y+(y===d.url?(bL.test(d.url)?\"&#038;\":\"?\")+\"_=\"+x:\"\")}}(d.data&#038;&#038;d.hasContent&#038;&#038;d.contentType!==!1||c.contentType)&#038;&#038;v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&#038;&#038;(k=k||d.url,f.lastModified[k]&#038;&#038;v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&#038;&#038;v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&#038;&#038;d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", \"+bW+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&#038;&#038;(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readyState=1,t&#038;&#038;g.trigger(\"ajaxSend\",[v,d]),d.async&#038;&#038;d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&#038;&#038;(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&#038;&#038;!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join(\"&#038;\").replace(bC,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=\/(\\=)\\?(&#038;|$)|\\?\\?\/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cc++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=typeof b.data==\"string\"&#038;&#038;\/^application\\\/x\\-www\\-form\\-urlencoded\/.test(b.contentType);if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&#038;&#038;(cd.test(b.url)||e&#038;&#038;cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&#038;&#038;(j=j.replace(cd,l),b.url===j&#038;&#038;(e&#038;&#038;(k=k.replace(cd,l)),b.data===k&#038;&#038;(j+=(\/\\?\/.test(j)?\"&#038;\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&#038;&#038;f.isFunction(i)&#038;&#038;a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text\/javascript, application\/javascript, application\/ecmascript, application\/x-ecmascript\"},contents:{script:\/javascript|ecmascript\/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&#038;&#038;(a.cache=!1),a.crossDomain&#038;&#038;(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&#038;&#038;(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||\/loaded|complete\/.test(d.readyState))d.onload=d.onreadystatechange=null,e&#038;&#038;d.parentNode&#038;&#038;e.removeChild(d),d=b,c||g(200,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&#038;&#038;d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&#038;&#038;ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&#038;&#038;\"withCredentials\"in a})}(f.ajaxSettings.xhr()),f.support.ajax&#038;&#038;f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&#038;&#038;h.overrideMimeType&#038;&#038;h.overrideMimeType(c.mimeType),!c.crossDomain&#038;&#038;!e[\"X-Requested-With\"]&#038;&#038;(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&#038;&#038;c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&#038;&#038;(e||h.readyState===4)){d=b,i&#038;&#038;(h.onreadystatechange=f.noop,ce&#038;&#038;delete cg[i]);if(e)h.readyState!==4&#038;&#038;h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&#038;&#038;n.documentElement&#038;&#038;(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=\"\"}!j&#038;&#038;c.isLocal&#038;&#038;!c.crossDomain?j=m.text?200:404:j===1223&#038;&#038;(j=204)}}}catch(p){e||g(-1,p)}m&#038;&#038;g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&#038;&#038;(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&#038;&#038;d(0,1)}}}});var cj={},ck,cl,cm=\/^(?:toggle|show|hide)$\/,cn=\/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$\/i,co,cp=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct(\"show\",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&#038;&#038;(e=d.style.display,!f._data(d,\"olddisplay\")&#038;&#038;e===\"none\"&#038;&#038;(e=d.style.display=\"\"),(e===\"\"&#038;&#038;f.css(d,\"display\")===\"none\"||!f.contains(d.ownerDocument.documentElement,d))&#038;&#038;f._data(d,\"olddisplay\",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===\"\"||e===\"none\")d.style.display=f._data(d,\"olddisplay\")||\"\"}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct(\"hide\",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&#038;&#038;(e=f.css(d,\"display\"),e!==\"none\"&#038;&#038;!f._data(d,\"olddisplay\")&#038;&#038;f._data(d,\"olddisplay\",e));for(g=0;g<h;g++)this[g].style&#038;&#038;(this[g].style.display=\"none\");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a==\"boolean\";f.isFunction(a)&#038;&#038;f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(\":hidden\");f(this)[b?\"show\":\"hide\"]()}):this.animate(ct(\"toggle\",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&#038;&#038;f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&#038;&#038;f(this).is(\":hidden\"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&#038;&#038;(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&#038;&#038;\"expand\"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&#038;&#038;b.specialEasing[g]||b.easing||\"swing\";if(h===\"hide\"&#038;&#038;d||h===\"show\"&#038;&#038;!d)return b.complete.call(this);c&#038;&#038;(g===\"height\"||g===\"width\")&#038;&#038;(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,\"display\")===\"inline\"&#038;&#038;f.css(this,\"float\")===\"none\"&#038;&#038;(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)===\"inline\"?this.style.display=\"inline-block\":this.style.zoom=1))}b.overflow!=null&#038;&#038;(this.style.overflow=\"hidden\");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,\"toggle\"+i)||(h===\"toggle\"?d?\"show\":\"hide\":0),q?(f._data(this,\"toggle\"+i,q===\"show\"?\"hide\":\"show\"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?\"\":\"px\"),p!==\"px\"&#038;&#038;(f.style(this,i,(o||1)+p),n=(o||1)\/j.cur()*n,f.style(this,i,n+p)),m[1]&#038;&#038;(o=(m[1]===\"-=\"?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,\"\"));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!=\"string\"&#038;&#038;(d=c,c=a,a=b),c&#038;&#038;a!==!1&#038;&#038;this.queue(a||\"fx\",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&#038;&#038;g[b].stop&#038;&#038;b.indexOf(\".run\")===b.length-4&#038;&#038;h(this,g,b);else g[b=a+\".run\"]&#038;&#038;g[b].stop&#038;&#038;h(this,g,b);for(b=e.length;b--;)e[b].elem===this&#038;&#038;(a==null||e[b].queue===a)&#038;&#038;(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&#038;&#038;f.dequeue(this,a)})}}),f.each({slideDown:ct(\"show\",1),slideUp:ct(\"hide\",1),slideToggle:ct(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&#038;&#038;typeof a==\"object\"?f.extend({},a):{complete:c||!c&#038;&#038;b||f.isFunction(a)&#038;&#038;a,duration:a,easing:c&#038;&#038;b||b&#038;&#038;!f.isFunction(b)&#038;&#038;b};d.duration=f.fx.off?0:typeof d.duration==\"number\"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue=\"fx\";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&#038;&#038;d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&#038;&#038;f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)\/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&#038;&#038;this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&#038;&#038;(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b===\"auto\"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?\"\":\"px\"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,\"fxshow\"+e.prop)===b&#038;&#038;(e.options.hide?f._data(e.elem,\"fxshow\"+e.prop,e.start):e.options.show&#038;&#038;f._data(e.elem,\"fxshow\"+e.prop,e.end))},h()&#038;&#038;f.timers.push(h)&#038;&#038;!co&#038;&#038;(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,\"fxshow\"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){h.style[\"overflow\"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,\"fxshow\"+b,!0),f.removeData(h,\"toggle\"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c\/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&#038;&#038;b[c]===a&#038;&#038;b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,\"opacity\",a.now)},_default:function(a){a.elem.style&#038;&#038;a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf(\"margin\")&#038;&#038;(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&#038;&#038;f.expr.filters&#038;&#038;(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=\/^t(?:able|d|h)$\/i,cx=\/^(?:body|html)$\/i;\"getBoundingClientRect\"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&#038;&#038;c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&#038;&#038;c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&#038;&#038;a!==h&#038;&#038;a!==c){if(f.support.fixedPosition&#038;&#038;j.position===\"fixed\")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&#038;&#038;(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&#038;&#038;(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&#038;&#038;(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&#038;&#038;d.overflow!==\"visible\"&#038;&#038;(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position===\"relative\"||j.position===\"static\")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&#038;&#038;j.position===\"fixed\"&#038;&#038;(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&#038;&#038;c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&#038;&#038;(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&#038;&#038;(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&#038;&#038;f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\")a=a.offsetParent;return a})}}),f.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,c){var d=\/Y\/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:\"height\",Width:\"width\"},function(a,c){var d=\"client\"+a,e=\"scroll\"+a,g=\"offset\"+a;f.fn[\"inner\"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,\"padding\")):this[c]():null},f.fn[\"outer\"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?\"margin\":\"border\")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return f})})(window);<\/script><br \/>\n<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/*!\n * ClearlyComponent\n * Offer up Clearly's content detection algorithm as an embeddable component.\n *\n * http:\/\/evernote.com\/clearly\/\n * Copyright 2012, Evernote Corporation\n *\n * Requires:\n *   window.jQueryForClearlyComponent -- an instance of jQuery\n *\n * Definition:\n *   window.ClearlyComponent\n *     getContentElementAndHTML(_windowObject, _callbackFunction) {\n *       _callbackFunction({\n *         '_elements':     [ (nodeObjects) ],\n *         '_html':         (string),\n *         '_title':        (string),\n *         '_multiPage':    (bool),\n *         '_rtl':          (bool)\n *       });\n *     }\n *     getOtherPagesHTML(_callbackFunction) {\n *       _callbackFunction(\n *         [\n *           {\n *             '_html': (string),\n *             '_url': (string) \n *           }\n *         ]\n *       );\n *     }\n *\/\nfunction initClearly( window ) { \/* override window object and undefined *\/<\/p>\n<p>    \/\/  set main objects\n    \/\/  ================\n        var $C = { 'version': '3335.890.162' };\n        var $ = window.jQueryForClearlyComponent;\n        var $R = { 'component': true };<\/p>\n<p>    \/\/  getContentElementAndHTML\n    \/\/  ========================\n        $C.getContentElementAndHTML = function (_windowObject, _callbackFunction)\n        {\n            \/\/  we're basically duplicating $R.getContent__find\n            \/\/  ===============================================<\/p>\n<p>            \/\/\tget content\n            \/\/\t===========\n                var \n                    _found = $R.getContent__findInPage($R.win),\n                    _targetNode = _found._targetCandidate.__node,\n                    _$targetNode = $(_targetNode),\n                    _aboveNodes = []\n                ;<\/p>\n<p>            \/\/\tRTL\n            \/\/\t===\n                switch (true)\n                {\n                    case (_$targetNode.attr('dir') == 'rtl'):\n                    case (_$targetNode.css('direction') == 'rtl'):\n                        $R.makeRTL();\n                        break;\n                }<\/p>\n<p>            \/\/  get html\n            \/\/  ========\n                var \n                    _foundHTML = _found._html,\n                    _firstFragmentBefore = $R.getContent__nextPage__getFirstFragment(_foundHTML),\n                    _documentTitle = ($R.document.title > '' ? $R.document.title : '')\n                ;<\/p>\n<p>            \/\/  get title\n            \/\/  =========<\/p>\n<p>                \/\/  has title already?\n                _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle);\n                $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                $R.debugPrint('TitleSource', 'target');<\/p>\n<p>                \/\/  get html above?\n                if ($R.articleTitle > ''); else\n                {<\/p>\n<p>    \/\/  get html above target?\n    \/\/  ======================<\/p>\n<p>    \/\/  global vars:\n    \/\/      _found\n    \/\/      _foundHTML\n    \/\/      _documentTitle\n    \/\/      _aboveNodes<\/p>\n<p>    var \n        _prevNode = _found._targetCandidate.__node,\n        _prevHTML = '',\n        _aboveHTML = '',\n        _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node)\n    ;<\/p>\n<p>    (function () \n    {<\/p>\n<p>        while (true)\n        {\n            \/\/  the end?\n            switch (true)\n            {\n                case (_prevNode.tagName && (_prevNode.tagName.toLowerCase() == 'body')):\n                case (_differentTargets && (_prevNode == _found._firstCandidate.__node)):\n                    \/\/  enough is enough\n                    return;\n            }<\/p>\n<p>            \/\/  up or sideways?\n            if (_prevNode.previousSibling); else\n            {\n                _prevNode = _prevNode.parentNode;\n                continue;\n            }<\/p>\n<p>            \/\/\tprevious\n            _prevNode = _prevNode.previousSibling;<\/p>\n<p>            \/\/\toutline -- element might be re-outlined, when buildHTML is invoked\n            if ($R.debug) { $R.debugOutline(_prevNode, 'target', 'add-above'); }<\/p>\n<p>            \/\/\tget html; add\n            _prevHTML = $R.getContent__buildHTMLForNode(_prevNode, 'above-the-target');\n            _aboveHTML = _prevHTML + _aboveHTML;\n            _aboveNodes.unshift(_prevNode);<\/p>\n<p>            \/\/  isolate title\n            _aboveHTML = $R.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle);<\/p>\n<p>            \/\/\tfinished?\n            switch (true)\n            {\n                case ($R.measureText__getTextLength(_aboveHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ')) > (65 * 3 * 3)):\n                case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                    return;\n            }\n        }<\/p>\n<p>    })();<\/p>\n<p>    \/\/  is what we found any good?\n    \/\/  ==========================\n    switch (true)\n    {\n        case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n        case (_differentTargets && (_aboveHTML.split('<a ').length < 3) &#038;&#038; ($R.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                    $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                    $R.debugPrint('TitleSource', 'above_HTML');\n\n                    \/\/  get document title?\n                    if ($R.articleTitle > ''); else\n                    {<\/p>\n<p>    \/\/  if all else failed, get document title\n    \/\/  ======================================<\/p>\n<p>    \/\/  global vars:\n    \/\/      _foundHTML\n    \/\/      _documentTitle<\/p>\n<p>    (function ()\n    {\n        \/\/  return?\n        \/\/  =======\n            if (_documentTitle > ''); else { return; }<\/p>\n<p>        \/\/  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            }<\/p>\n<p>        \/\/\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            \n                + $R.articleTitleMarker__start\n                +   (_doc_title_parts[0].split(\/\\s+\/i).length > 1 ? _doc_title_parts[0] : _documentTitle) \n                + $R.articleTitleMarker__end <\/p>\n<p>                + _foundHTML\n            ;<\/p>\n<p>    })();\n                        $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                        $R.debugPrint('TitleSource', 'document_title');\n                    }\n                }<\/p>\n<p>            \/\/\tremember\n            \/\/\t========\n                $R.debugRemember['theTarget'] = _found._targetCandidate.__node;\n                $R.debugRemember['firstCandidate'] = _found._firstCandidate.__node;<\/p>\n<p>            \/\/\tnext\n            \/\/\t====\n                $C._nextPages = [];<\/p>\n<p>                $R.nextPage__firstFragment__firstPage = _firstFragmentBefore;\n                $R.nextPage__firstFragment__lastPage = $R.getContent__nextPage__getFirstFragment(_foundHTML);;<\/p>\n<p>                $R.nextPage__loadedPages = [$R.win.location.href];\n                $R.getContent__nextPage__find($R.win, _found._links);<\/p>\n<p>            \/\/\tresult\n            var\n                _result = {\n                    '_html': _foundHTML,\n                    '_title': $R.articleTitle,\n                    '_multiPage': ($R.nextPage__loadedPages.length > 1),\n                    '_rtl': $R.rtl\n                }\n            ;<\/p>\n<p>            \/\/  add elements\n            _result['_elements'] = _aboveNodes;\n            _result['_elements'].push(_found._targetCandidate.__node);<\/p>\n<p>            \/\/  return\n            _callbackFunction(_result);\n        };<\/p>\n<p>    \/\/  getOtherPagesHTML\n    \/\/  =================\n        $C.getOtherPagesHTML = function (_callbackFunction)\n        {\n            \/\/  curent length\n            var \n                _currentLength = $C._nextPages.length\n                _checkFunction = function ()\n                {\n                    if ($C._nextPages.length == _currentLength)\n                    {\n                        \/\/  return\n                        _callbackFunction($C._nextPages);\n                    }\n                    else\n                    {\n                        \/\/  reset\n                        _currentLength = $C._nextPages.length;\n                        window.setTimeout(_checkFunction, 2000);\n                    }\n                }\n            ;<\/p>\n<p>            \/\/  set first timeout\n            window.setTimeout(_checkFunction, 2000);\n        };<\/p>\n<p>    \/\/  includes -- bind to $R\n    \/\/  ========<\/p>\n<p>        \/\/  target\n        \/\/  ======<\/p>\n<p>            \/\/  globals\n            \/\/  =======\n                $R.win = window;\n                $R.document = window.document;<\/p>\n<p>                $R.$win = $($R.win);\n                $R.$document = $($R.document);<\/p>\n<p>            \/\/\tinit\n            \/\/\t====<\/p>\n<p>    \/\/  version\n    \/\/  =======\n        $R.version = '3335.890.162';<\/p>\n<p>\t\/\/\tpaths\t\n\t\/\/\t=====\n\t\t$R.paths = \n\t\t{\n\t\t\t'main':\t\t'none',\n\t\t\t'evernote':\t'https:\/\/www.evernote.com\/'\n\t\t};<\/p>\n<p>\t\/\/\tversioning\n\t\/\/\t==========\n\t\t$R.versioning =\n\t\t{\n\t\t\t'file_name_bulk_js': \t\t    'bulk.js',\n\t\t\t'file_name_bulk_css':\t\t    'bulk.css',\n\t\t\t'file_name_jQuery_js':\t\t    'jQuery.js',\n\t\t\t'file_name_miniColors_js':\t    'jquery.miniColors.js',\n\t\t\t'file_name_miniColors_css':\t    'jquery.miniColors.css',\n\t\t\t'file_name_flexSelect_js':\t    'jquery.flexSelect.js',\n\t\t\t'file_name_liquidMetal_js':\t    'liquidMetal.js',\n\t\t\t'file_name_flexSelect_css':\t    'flexSelect.css',<\/p>\n<p>            'file_name_base--theme-1_css':\t'base--theme-1.css',\n            'file_name_base--theme-2_css':\t'base--theme-2.css',\n            'file_name_base--theme-3_css':\t'base--theme-3.css',\n            'file_name_base--blueprint_css':'base--theme-blueprint.css'\n\t\t};<\/p>\n<p>            \/\/\twrite\n            \/\/\t=====\n                var \n                    _body = $R.document.getElementsByTagName('body')[0],\n                    _component__next_pages_container_element = $R.document.createElement('div'),\n                    _component__in_page_css_element = $R.document.createElement('style'),\n                    _component__in_page_css_text = ''\n                    +\t'#next_pages_container { '\n                    +\t\t'width: 5px; hight: 5px; '\n                    +\t\t'position: absolute; '\n                    +\t\t'top: -100px; left: -100px; '\n                    +\t\t'z-index: 2147483647 !important; '\n                    +\t'} '\n                ;\n                    if(!_body) {\n                        _body = $R.document.getElementsByTagName(\"frameset\")[0];\n                    }<\/p>\n<p>                \/\/  css\n                \/\/  ===\n                    _component__in_page_css_element.setAttribute('id', '_clearly_component__css');\n                    _component__in_page_css_element.setAttribute('type', 'text\/css');<\/p>\n<p>                    if (_component__in_page_css_element.styleSheet) { _component__in_page_css_element.styleSheet.cssText = _component__in_page_css_text; }\n                    else { _component__in_page_css_element.appendChild(document.createTextNode(_component__in_page_css_text)); }<\/p>\n<p>                    _body.appendChild(_component__in_page_css_element);<\/p>\n<p>                \/\/  next pages\n                \/\/  ==========\n                    _component__next_pages_container_element.setAttribute('id', '_clearly_component__next_pages_container');\n                    _body.appendChild(_component__next_pages_container_element);\n                    $R.$nextPages = $('#_clearly_component__next_pages_container');<\/p>\n<p>        \/\/  bulk\n        \/\/  ====<\/p>\n<p>            \/\/\tdebug\n            \/\/\t=====<\/p>\n<p>\t\/\/\tdefaults to false\n\tif ($R.debug); else { $R.debug = false; }<\/p>\n<p>\t\/\/\tmake it faster -- when not debugging\n\t\/\/\t==============\n\tif (!($R.debug))\n\t{\n\t\t$R.debugRemember = {};<\/p>\n<p>\t\t$R.writeLog \t\t= function () { return false; };\n\t\t$R.log \t\t\t\t= function () { return false; };<\/p>\n<p>\t\t$R.debugTimerStart \t= function () { return false; };\n\t\t$R.debugTimerEnd \t= function () { return false; };<\/p>\n<p>\t\t$R.debugPrint \t\t= function () { return false; };\n\t\t$R.printDebugOutput = function () { return false; };<\/p>\n<p>\t\t$R.debugOutline \t= function () { return false; };\n\t}\n\telse\n\t{\n\t\t\/\/\tremember stuff\n\t\t\t$R.debugRemember = {};<\/p>\n<p>\t\t\/\/\tvars\n\t\t\/\/\t====\n\t\t\t$R.debugStuff = [];\n\t\t\t$R.debugTimers = [];<\/p>\n<p>\t\t\/\/\twrite log\n\t\t\/\/\t=========\n\t\t\t$R.initializeWriteLogFunction = function ()\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(!($R.win.console && $R.win.console.log))):\n\t\t\t\t\t\t$R.writeLog = function (msg) { $R.win.console.log(msg); };\n\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\tcase (!(!($R.win.opera && $R.win.opera.postError))):\n\t\t\t\t\t\t$R.writeLog = function (msg) { $R.win.opera.postError(msg); };\n\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\tdefault:\n\t\t\t\t\t\t$R.writeLog = function (msg) {};\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};<\/p>\n<p>\t\t\/\/\tlog\n\t\t\/\/\t===\n\t\t\t$R.initializeWriteLogFunction();\n\t\t\t$R.log = function ()\n\t\t\t{\n                if ($R.debug); else { return; }<\/p>\n<p>\t\t\t\tfor (var i=0, il=arguments.length; i<il ; i++)\n\t\t\t\t\t{ $R.writeLog(arguments[i]); }\n\t\t\t\t\t\n\t\t\t\t$R.writeLog('-----------------------------------------');\n\t\t\t};\n\t\t\n\t\t\/\/\toutline\n\t\t\/\/\t=======\n\t\t\t$R.debugOutline = function (_element, _category, _reason)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n                    case (!$R.debug):\n\t\t\t\t\tcase (!(_element.nodeType === 1)):\n\t\t\t\t\tcase (!(_element.tagName > '')):\n\t\t\t\t\tcase (_element.tagName.toLowerCase() == 'onject'):\n\t\t\t\t\tcase (_element.tagName.toLowerCase() == 'embed'):\n\t\t\t\t\t\treturn;\n                }<\/p>\n<p>                var \n                    _outline = '#ff5500',\n                    _background = 'rgba(255, 85, 0, 0.5)'\n                ;<\/p>\n<p>                \/\/  choose\n                switch (true)\n                {\n                    case (_category == 'target' && _reason == 'first'):\n                        _outline = '#00cc00';\n                        _background = 'rgba(0, 255, 0, 0.5)';\n                        break;<\/p>\n<p>                    case (_category == 'target' && _reason == 'second'):\n                        _outline = '#0000cc';\n                        _background = 'rgba(0, 0, 255, 0.5)';\n                        break;<\/p>\n<p>                    \/\/  =====<\/p>\n<p>                    case (_category == 'target' && _reason == 'next-page'):\n                        _outline = '#FF80C0';\n                        _background = 'rgba(255, 128, 192, 0.5)';\n                        break;<\/p>\n<p>                    case (_category == 'target' && _reason == 'add-above'):\n                        _outline = '#804000';\n                        _background = 'rgba(128, 64, 0, 0.5)';\n                        break;<\/p>\n<p>                    \/\/  =====<\/p>\n<p>                    case (_category == 'clean-before' && _reason == 'floating'):\n                        _outline = '#808080';\n                        _background = 'rgba(128, 128, 128, 0.5)';\n                        break;<\/p>\n<p>                    case (_category == 'clean-after' && _reason == 'missing-density'):\n                        _outline = '#C0C0C0';\n                        _background = 'rgba(192, 192, 192, 0.5)';\n                        break;<\/p>\n<p>                    case (_category == 'clean-after' || _category == 'clean-before'):\n                        _outline = '#000000';\n                        _background = 'rgba(0, 0, 0, 0.5)';\n                        break;\n                }<\/p>\n<p>                \/\/  do\n                $(_element).attr('readable__outline', (_category + ': ' + _reason));\n                $(_element).css({\n                    'outline': '5px solid ' + _outline,\n                    'background-color': '' + _background\n                });\n\t\t\t};<\/p>\n<p>            $R.debugBackground = function (_element, _category, _reason)\n            {\n                if ($R.debug); else { return; }<\/p>\n<p>\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(_element.nodeType === 1)):\n\t\t\t\t\tcase (!(_element.tagName > '')):\n\t\t\t\t\tcase (_element.tagName.toLowerCase() == 'onject'):\n\t\t\t\t\tcase (_element.tagName.toLowerCase() == 'embed'):\n\t\t\t\t\t\t\/\/\tdon't outline\n\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar _color = 'transparent';\n\t\t\t\t\t\tswitch (true)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase (_category == 'target' && _reason == 'first'): \t\t\t\t_color = '';\tbreak;\n\t\t\t\t\t\t\tcase (_category == 'target' && _reason == 'second'): \t\t\t\t_color = '';\tbreak;<\/p>\n<p>\t\t\t\t\t\t\tcase (_category == 'target' && _reason == 'next-page'):\t\t\t\t_color = '#FF80C0'; break;\n\t\t\t\t\t\t\tcase (_category == 'target' && _reason == 'add-above'): \t\t\t_color = '#804000'; break;<\/p>\n<p>\t\t\t\t\t\t\tcase (_category == 'clean-before' && _reason == 'floating'): \t\t_color = '#808080'; break;\n\t\t\t\t\t\t\tcase (_category == 'clean-after' && _reason == 'missing-density'): \t_color = '#C0C0C0'; break;<\/p>\n<p>\t\t\t\t\t\t\tcase (_category == 'clean-after' || _category == 'clean-before'):\t_color = '#000000'; break;\n\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t$(_element).css('outline','5px solid '+_color);\n\t\t\t\t\t\t$(_element).attr('readable__outline', (_category + ': ' + _reason));\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n            };<\/p>\n<p>\t\t\/\/\ttimers\n\t\t\/\/\t======\n\t\t\t$R.debugTimerStart = function (timerName)\n\t\t\t{\n\t\t\t\t$R.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};<\/p>\n<p>\t\t\t$R.debugTimerEnd = function ()\n\t\t\t{\n\t\t\t\tvar _t = $R.debugTimers.pop(), _time = ((new Date()).getTime() - _t.start);\n\t\t\t\t$R.log('TIMER \/ '+_t.name+': ' + _time);\n\t\t\t\treturn _time;\n\t\t\t};<\/p>\n<p>\t\t\/\/\toutput -- will be shown in Show function\n\t\t\/\/\t======\n\t\t\t$R.debugPrint = function (_key, _value)\n\t\t\t\t{ $R.debugStuff[_key] = _value; };<\/p>\n<p>\t\t\t$R.printDebugOutput = function ()\n\t\t\t{\n\t\t\t\t\/\/\treturn\n\t\t\t\t\tif ($R.debug); else { return; }\n\t\t\t\t\tif ($R.customScript) { return; }<\/p>\n<p>\t\t\t\t\/\/\tfirst\n\t\t\t\t\tvar _first =\n\t\t\t\t\t[\n                        'Language',\n\t\t\t\t\t\t'ExploreAndGetStuff',\n\t\t\t\t\t\t'ProcessFirst',\n\t\t\t\t\t\t'ProcessSecond',\n\t\t\t\t\t\t'BuildHTML',\n\t\t\t\t\t\t'BuildHTMLPregs',\n                        'PointsFirst',\n                        'PointsSecond',\n                        'Target',\n\t\t\t\t\t\t'NextPage',\n                        'TitleSource'\n\t\t\t\t\t];<\/p>\n<p>\t\t\t\t\/\/\tget and clean\n\t\t\t\t\t_$debug = $('#debugOutput');\n\t\t\t\t\t_$debug.html('');<\/p>\n<p>\t\t\t\t\/\/\twrite\n\t\t\t\t\tvar _debug_write = function (_key, _value)\n\t\t\t\t\t{\n\t\t\t\t\t\t_$debug.append(''\n\t\t\t\t\t\t\t+ '<\/p>\n<tr>'\n\t\t\t\t\t\t\t+ \t'<\/p>\n<td class=\"caption\">'\n\t\t\t\t\t\t\t+\t\t_key\n\t\t\t\t\t\t\t+ \t'<\/td>\n<p>'\n\t\t\t\t\t\t\t+ \t'<\/p>\n<td id=\"debugOutput__value__'+_key+'\" class=\"value\">'\n\t\t\t\t\t\t\t+\t\t_value\n\t\t\t\t\t\t\t+ \t'<\/td>\n<p>'\n\t\t\t\t\t\t\t+ '<\/tr>\n<p>'\t\n\t\t\t\t\t\t);\n\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\/\/\tfirst\n\t\t\t\t\tfor (var i=0, _i=_first.length; i<_i; i++)\n\t\t\t\t\t\t{ _debug_write(_first[i], $R.debugStuff[_first[i]]); delete($R.debugStuff[_first[i]]); }\n\t\t\t\t\n\t\t\t\t\/\/\tthe rest\n\t\t\t\t\tfor (var _k in $R.debugStuff)\n\t\t\t\t\t\t{ _debug_write(_k, $R.debugStuff[_k]); }\n\t\t\t\t\t\n\t\t\t\t\/\/\tend; stop\n\t\t\t\t\t$R.debugPrint = function () {};\n\t\t\t\t\t$R.printDebugOutput = function () {};\n\t\t\t};\n\t\t\t\n\t\t\/\/\tscriptable scrolling\n\t\t\t$R.debugScroll__before1 = function () { $R.win.scrollTo(0, 0); };\n\t\t\t$R.debugScroll__before2 = function () { $R.win.scrollTo(0, $R.$win.height()); };\n\t\t\t$R.debugScroll__before3 = function () { if ($($R.debugRemember['theTarget']).height() > 0) { $R.debugRemember['theTarget'].scrollIntoView(false); } else { $R.debugRemember['firstCandidate'].scrollIntoView(false); } $R.win.scrollBy(0, 100); };<\/p>\n<p>\t\t\t$R.debugScroll__after1 = function () { window.scrollTo(0, 0); };\n\t\t\t$R.debugScroll__after2 = function () { window.scrollTo(0, $R.$win.height()); };\n\t\t\t$R.debugScroll__after3 = function () { $('#page1').get(0).scrollIntoView(false); window.scrollBy(0, 100); };\n\t}<\/p>\n<p>                $R.debug = false;<\/p>\n<p>            \/\/\tenvironment\n            \/\/\t===========<\/p>\n<p>\t\/\/\tenvirontment\n\t\/\/\t============<\/p>\n<p>\t\t$R.mac = (!$R.iOS && ($R.win.navigator.userAgent.match(\/Macintosh\/i) != null));<\/p>\n<p>        \/\/  get browser<\/p>\n<p>\/\/  var -- gets filled in\n\/\/  ===\n    var __the_browser = 'unknown';<\/p>\n<p>\/\/  possible values -- in this order\n\/\/  ===============\n\/*\n    firefox\n    safari\n    chrome\n    internet_explorer\n    opera<\/p>\n<p>    iphone\n    ipad<\/p>\n<p>    android\n    dolphin\n    firefox_mobile\n    chrome_mobile<\/p>\n<p>    windows_phone\n*\/    <\/p>\n<p>\/\/  doing work    \n\/\/  ==========\n    __the_browser = (function ()\n    {\n        \/\/  ua string\n        \/\/  =========\n            var _ua = window.navigator.userAgent.toLowerCase();<\/p>\n<p>        \/\/  cases\n        \/\/  =====<\/p>\n<p>            if ((_ua.indexOf('windows phone') > -1))                            { return 'windows_phone'; }<\/p>\n<p>            if ((_ua.indexOf('chrome') > -1) && (_ua.indexOf('android') > -1))  { return 'chrome_mobile'; }\n            if ((_ua.indexOf('firefox') > -1) && (_ua.indexOf('fennec') > -1))  { return 'firefox_mobile'; }\n            if ((_ua.indexOf('dolfin') > -1) || (_ua.indexOf('dolphin') > -1))  { return 'dolphin'; }\n            if ((_ua.indexOf('android') > -1))                                  { return 'android'; }<\/p>\n<p>            if ((_ua.indexOf('ipad') > -1))                                     { return 'ipad'; }\n            if ((_ua.indexOf('iphone') > -1))                                   { return 'iphone'; }<\/p>\n<p>            if ($.browser.opera)                                                { return 'opera'; }\n            if ($.browser.msie)                                                 { return 'internet_explorer'; }\n            if ($.browser.webkit && (_ua.indexOf('chrome') > -1))               { return 'chrome'; }\n            if ($.browser.webkit && (_ua.indexOf('safari') > -1))               { return 'safari'; }\n            if ($.browser.mozilla)                                              { return 'firefox'; }\n    })();\n        $R.browser = __the_browser;<\/p>\n<p>    \/\/  language specific stuff\n    \/\/  =======================<\/p>\n<p>        \/\/  default\n        $R.language = 'general';<\/p>\n<p>        \/\/  the text - start with title\n        var _test_text = ' ' + $R.document.title;<\/p>\n<p>        \/\/  add couple of random paragraphs, divs\n        var \n            _ps = $R.document.getElementsByTagName('p'),\n            _ds = $R.document.getElementsByTagName('div')\n        ;<\/p>\n<p>        \/\/  add\n        for (var i=0; i<5; i++) { _test_text += ' ' + $(_ps[Math.floor(Math.random()*_ps.length)]).text(); }\n        for (var i=0; i<5; i++) { _test_text += ' ' + $(_ds[Math.floor(Math.random()*_ds.length)]).text(); }\n        \n        \/\/  check\n        switch (true)\n        {\n        \/\/    case ($R.win.location.host.match(\/\\.jp$\/i) != null):\n        \/\/    case ($R.win.location.host.match(\/\\.cn$\/i) != null):\n        \/\/    case ($R.win.location.host.match(\/\\.tw$\/i) != null):\n        \/\/    case ($R.win.location.host.match(\/\\.hk$\/i) != null):\n        \/\/    case ($R.win.location.host.match(\/\\.kr$\/i) != null):\n\n            case (_test_text.match(\/([\\u3000])\/gi) != null):\n            case (_test_text.match(\/([\\u3001])\/gi) != null):\n            case (_test_text.match(\/([\\u3002])\/gi) != null):\n            case (_test_text.match(\/([\\u301C])\/gi) != null):\n        \n                $R.language = 'cjk';\n                break;\n        }\n        \n        \/\/  in case we stop\n        $R.debugPrint('Language', $R.language);\n\n            \n            \/\/\trtl\n            \/\/\t===\n                \n\t\/\/\tvar\n\t\/\/\t===\n\t\t$R.rtl = false;\n\t\n\n\t\/\/\tfunctions\n\t\/\/\t=========\n\t\t$R.makeRTL = function ()\n\t\t{\n            \/\/  set\n\t\t\t$R.rtl = true;\n\n            \/\/  as component; return\n            if ($R.component) { return; }\n\n            \n            $('#curtain__rtl__radio__rtl').get(0).checked = true;\n            $('#curtain__rtl__radio__ltr').get(0).checked = false;\n\t\t\t\n            $('html')\n\t\t\t\t.attr('dir', 'rtl')\n\t\t\t\t.addClass('couldBeRTL')\n\t\t\t\t.addClass('rtl');\n                \n            $R.$pages\n                .attr('dir', 'rtl')\n                .addClass('rtl');\n\t\t};\n\t\t\n\t\t$R.makeNotRTL = function ()\n\t\t{\n            \/\/  set\n\t\t\t$R.rtl = false;\n\n            \/\/  as component; return\n            if ($R.component) { return; }\n\n            \n\t\t\t$('#curtain__rtl__radio__rtl').get(0).checked = false;\n\t\t\t$('#curtain__rtl__radio__ltr').get(0).checked = true;\n\n            $('html')\n\t\t\t\t.attr('dir', '')\n\t\t\t\t.removeClass('rtl');\n                \n            $R.$pages\n                .attr('dir', '')\n                .removeClass('rtl');\n\t\t};\n\n\t\t\n\t\/\/\tdetect\n\t\/\/\t======\n\t\t(function ()\n\t\t{\n\t\t\t\/\/\tdefinitely rtl\n\t\t\t$R.$document.find('html, body').each(function (_i, _e)\n\t\t\t{\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase ($(_e).attr('dir') == 'rtl'):\n\t\t\t\t\tcase ($(_e).css('direction') == 'rtl'):\n\n\t\t\t\t\tcase ($(_e).attr('lang') == 'he'):\n\t\t\t\t\tcase ($(_e).attr('lang') == 'he-il'):\n\t\t\t\t\tcase ($(_e).attr('lang') == 'ar'):\n\t\t\t\t\tcase ($(_e).attr('lang') == 'ur'):\n\n\t\t\t\t\t\t$R.makeRTL();\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t\t\/\/\tmaybe rtl\n            \/\/  =========\n            if ($R.component); else\n            {\n                if ((!$R.rtl) &#038;&#038; ($R.$document.find(\"div[dir='rtl'], table[dir='rtl'], td[dir='rtl']\").length > 0))\n                    { $('html').addClass('couldBeRTL'); }\n            }\n\t\t})();<\/p>\n<p>\t\/\/\tevents\n\t\/\/\t======\n        if ($R.component); else\n        {\n            $('#curtain__rtl__radio__rtl').change(function(){ $R.makeRTL(); return false; });\n            $('#curtain__rtl__radio__ltr').change(function(){ $R.makeNotRTL(); return false; });\n        }<\/p>\n<p>            \/\/\tmeasure text\n            \/\/\t============<\/p>\n<p>\t\/\/\tasian languages\n\t\/\/\t===============\n\t\/\/\thttp:\/\/msdn.microsoft.com\/en-us\/goglobal\/bb688158\n\t\/\/\thttp:\/\/en.wikipedia.org\/wiki\/Japanese_punctuation\n\t\/\/\thttp:\/\/en.wikipedia.org\/wiki\/Japanese_typographic_symbols\n\t\/\/\thttp:\/\/unicode.org\/charts\/PDF\/U3000.pdf\n\t\/\/\tCJK: Chnese, Japanese, Korean -- HAN character set<\/p>\n<p>\t\/\/\tlength\n\t\/\/\t======\n\t\t$R.measureText__getTextLength = function (_the_text)\n\t\t{\n\t\t\tvar _text = _the_text;<\/p>\n<p>\t\t\t\t_text = _text.replace(\/[\\s\\n\\r]+\/gi, '');\n\t\t\t\t\/\/_text = _text.replace(\/\\d+\/, '');<\/p>\n<p>\t\t\treturn _text.length;\n\t\t};<\/p>\n<p>\t\/\/\tword count\n\t\/\/\t==========\n\t\t$R.measureText__getWordCount = function (_the_text)\n\t\t{\n\t\t\tvar _text = _the_text;<\/p>\n<p>\t\t\t\/\/\tdo stuff\n\t\t\t\/\/\t========\n\t\t\t\t_text = _text.replace(\/[\\s\\n\\r]+\/gi, ' ');<\/p>\n<p>\t\t\t\t_text = _text.replace(\/([.,?!:;()\\[\\]'\"\"-])\/gi, ' $1 ');<\/p>\n<p>\t\t\t\t_text = _text.replace(\/([\\u3000])\/gi, \t\t\t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u3001])\/gi, \t\t\t\t'[=words(2)]');\n\t\t\t\t_text = _text.replace(\/([\\u3002])\/gi, \t\t\t\t'[=words(4)]');\n\t\t\t\t_text = _text.replace(\/([\\u301C])\/gi, \t\t\t\t'[=words(2)]');\n\t\t\t\t_text = _text.replace(\/([\\u2026|\\u2025])\/gi, \t\t'[=words(2)]');\n\t\t\t\t_text = _text.replace(\/([\\u30FB\\uFF65])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u300C\\u300D])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u300E\\u300F])\/gi,\t\t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u3014\\u3015])\/gi,\t\t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u3008\\u3009])\/gi,\t\t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u300A\\u300B])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u3010\\u3011])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u3016\\u3017])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u3018\\u3019])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u301A\\u301B])\/gi, \t\t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u301D\\u301E\\u301F])\/gi, \t'[=words(1)]');\n\t\t\t\t_text = _text.replace(\/([\\u30A0])\/gi, \t\t\t\t'[=words(1)]');<\/p>\n<p>\t\t\t\/\/\tcount\n\t\t\t\/\/\t=====\n\t\t\t\tvar \n\t\t\t\t\t_count = 0,\n\t\t\t\t\t_words_match = _text.match(\/([^\\s\\d]{3,})\/gi)\n\t\t\t\t;\t<\/p>\n<p>\t\t\t\t\/\/\tadd match\n\t\t\t\t_count += (_words_match != null ? _words_match.length : 0);<\/p>\n<p>\t\t\t\t\/\/\tadd manual count\n\t\t\t\t_text.replace(\/\\[=words\\((\\d)\\)\\]\/, function (_match, _plus) { _count += (5 * parseInt(_plus)); });<\/p>\n<p>\t\t\t\/\/\treturn\n\t\t\t\/\/\t======\n\t\t\t\treturn _count;\n\t\t};<\/p>\n<p>\t\/\/\tlevenshtein\n\t\/\/\t===========\t\n\t\t$R.levenshteinDistance = function (str1, str2)\n\t\t{\n\t\t\tvar l1 = str1.length, l2 = str2.length;\n\t\t\tif (Math.min(l1, l2) === 0)\n\t\t\t\t{ return Math.max(l1, l2); }<\/p>\n<p>\t\t\tvar i = 0, j = 0, d = [];\n\t\t\tfor (i = 0 ; i <= l1 ; i++)\n\t\t\t{\n\t\t\t\td[i] = [];\n\t\t\t\td[i][0] = i;\n\t\t\t}\n\t\t\t\n\t\t\tfor (j = 0 ; j <= l2 ; j++)\n\t\t\t\t{ d[0][j] = j; }\n\t\t\t\n\t\t\tfor (i = 1 ; i <= l1 ; i++)\n\t\t\t{\n\t\t\t\tfor (j = 1 ; j <= l2 ; j++)\n\t\t\t\t{\n\t\t\t\t\td[i][j] = Math.min\n\t\t\t\t\t(\n\t\t\t\t\t\td[i - 1][j] + 1,\n\t\t\t\t\t\td[i][j - 1] + 1, \n\t\t\t\t\t\td[i - 1][j - 1] + (str1.charAt(i - 1) === str2.charAt(j - 1) ? 0 : 1)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn d[l1][l2];\n\t\t};\n        \n            \n            \/\/\tcontent\n            \/\/\t=======\n                \n\t$R.footnotedLinksCount = 0;\n\t\n\t$R.getContent = function ()\n\t{\n\t\t\/\/\thomepage?\n\t\tif ($R.win.location.href == ($R.win.location.protocol + '\/\/' + $R.win.location.host + '\/'))\n\t\t\t{ $('html').addClass('showTips'); }\n\t\t\n\t\t\/\/\tselection or whole\n\t\tswitch (true)\n\t\t{\n\t\t\tcase ($R.getContent__manualSelection()):\n\t\t\tcase ($R.getContent__find()):\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\t\/\/\tdebug\n\t\t$R.printDebugOutput();\n\n\t\t\/\/\tshow content\n\t\t$R.showContent();\n\t};\n\n                \n\t$R.getContent__manualSelection = function ()\n\t{\n\t\tvar \n\t\t\t_selection = $R.sel.getSelection($R.win),\n\t\t\t_range = $R.sel.getRange(_selection),\n\t\t\t_html = $R.sel.getRangeHTML(_range),\n\t\t\t_text = $R.sel.getRangeText(_range)\n\t\t;\n\t\t\n\t\tif (_html > '' && _text > ''); else\n\t\t{\n\t\t\t_html = null;\n\t\t\t_text = null;<\/p>\n<p>\t\t\t$R.$document.find('frame, iframe').each(function (_i, _e)\n\t\t\t{\n\t\t\t\tif (_e.getAttribute('id') == 'readable_iframe') { return; }<\/p>\n<p>\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tvar\n\t\t\t\t\t\t__doc = $(_e).contents().get(0),\n\t\t\t\t\t\t__win = $R.sel.getWindowFromDocument(__doc),\n\t\t\t\t\t\t__selection = $R.sel.getSelection(__win),\n\t\t\t\t\t\t__range = $R.sel.getRange(__selection),\n\t\t\t\t\t\t__html = $R.sel.getRangeHTML(__range),\n\t\t\t\t\t\t__text = $R.sel.getRangeText(__range)\n\t\t\t\t\t;<\/p>\n<p>\t\t\t\t\tif (__html > '' && __text > '')\n\t\t\t\t\t{\n\t\t\t\t\t\t_html = __html;\n\t\t\t\t\t\t_text = __text;<\/p>\n<p>\t\t\t\t\t\t\/\/ stop the each\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e) { }\n\t\t\t});\n\t\t}<\/p>\n<p>\t\t\/\/\thaven't found anything\t\t\n\t\tif (_html > '' && _text > ''); else { return false; }<\/p>\n<p>\t\t\/\/\tprobably selected something by mistake\n\t\tif ($R.measureText__getTextLength(_text) > (65 * 3 * 1.5)); else { return false; }<\/p>\n<p>\t\t\/\/\tdisplay\n\t\t\/\/\t=======\n\t\t\t$R.$pages.html('');\n\t\t\t$R.displayPageHTML(_html, 1, 'selection');<\/p>\n<p>\t\t\/\/\treturn true\n\t\treturn true;\n\t};<\/p>\n<p>\/\/\tfunctions\n\/\/\t=========<\/p>\n<p>\t$R.sel = {};<\/p>\n<p>\t$R.sel.getWindowFromDocument = function (theDocument)\n\t{\n\t\tif (theDocument); else { return null; }<\/p>\n<p>\t\tif ('defaultView' in theDocument) {\n\t\t\targuments.calee = function (theDocument) {\n\t\t\t\tif (theDocument); else { return null; }\n\t\t\t\treturn theDocument.defaultView;\n\t\t\t};\n\t\t}\n\t\telse if ('parentWindow' in theDocument) {\n\t\t\targuments.calee = function (theDocument) {\n\t\t\t\tif (theDocument); else { return null; }\n\t\t\t\treturn theDocument.parentWindow;\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\targuments.calee = function (theDocument) {\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}<\/p>\n<p>\t\treturn arguments.calee(theDocument);\n\t};<\/p>\n<p>\t$R.sel.getSelection = function (theWindow)\n\t{\n\t\tif (theWindow); else { return null; }<\/p>\n<p>\t\tif ('getSelection' in theWindow) {\n\t\t\targuments.calee = function (theWindow) {\n\t\t\t\tif (theWindow); else { return null; }\n\t\t\t\treturn theWindow.getSelection();\n\t\t\t};\n\t\t}\n\t\telse if ('selection' in theWindow.document) {\n\t\t\targuments.calee = function (theWindow) {\n\t\t\t\tif (theWindow); else { return null; }\n\t\t\t\treturn theWindow.document.selection;\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\targuments.calee = function (theWindow) {\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}<\/p>\n<p>\t\treturn arguments.calee(theWindow);\n\t};<\/p>\n<p>\t$R.sel.getRange = function (selection)\n\t{\n\t\tif (selection); else { return null; }<\/p>\n<p>\t\tif ('getRangeAt' in selection) {\n\t\t\targuments.calee = function (selection) {\n\t\t\t\tif (selection); else { return null; }\n\t\t\t\tif (selection.rangeCount > 0) { return selection.getRangeAt(0); }\n\t\t\t\telse { return null; }\n\t\t\t\t\/\/\tdoesn't work in old versions of safari \n\t\t\t\t\/\/\t... I don't care\n\t\t\t};\n\t\t}\n\t\telse if ('createRange' in selection) {\n\t\t\targuments.calee = function (selection) {\n\t\t\t\tif (selection); else { return null; }\n\t\t\t\treturn selection.createRange();\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\targuments.calee = function (selection) {\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}<\/p>\n<p>\t\treturn arguments.calee(selection);\n\t};<\/p>\n<p>\t$R.sel.getRangeHTML = function (range)\n\t{\n\t\tif (range); else { return null; }<\/p>\n<p>\t\tif ('htmlText' in range) {\n\t\t\targuments.calee = function (range) {\n\t\t\t\tif (range); else { return null; }\n\t\t\t\treturn range.htmlText;\n\t\t\t};\n\t\t}\n\t\telse if ('surroundContents' in range) {\n\t\t\targuments.calee = function (range) {\n\t\t\t\tif (range); else { return null; }\n\t\t\t\tvar dummy = range.commonAncestorContainer.ownerDocument.createElement(\"div\");\n\t\t\t\tdummy.appendChild(range.cloneContents());\n\t\t\t\treturn dummy.innerHTML;\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\targuments.calee = function (range) {\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}<\/p>\n<p>\t\treturn arguments.calee(range);\n\t};<\/p>\n<p>\t$R.sel.getRangeText = function (range)\n\t{\n\t\tif (range); else { return null; }<\/p>\n<p>\t\tif ('text' in range) {\n\t\t\targuments.calee = function (range) {\n\t\t\t\tif (range); else { return null; }\n\t\t\t\treturn range.text;\n\t\t\t};\n\t\t}\n\t\telse if ('surroundContents' in range) {\n\t\t\targuments.calee = function (range) {\n\t\t\t\tif (range); else { return null; }\n\t\t\t\tvar dummy = range.commonAncestorContainer.ownerDocument.createElement(\"div\");\n\t\t\t\tdummy.appendChild(range.cloneContents());\n\t\t\t\treturn dummy.textContent;\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\targuments.calee = function (range) {\n\t\t\t\treturn null;\n\t\t\t};\n\t\t}<\/p>\n<p>\t\treturn arguments.calee(range);\n\t};<\/p>\n<p>\t\/\/\toptions\n\t\/\/\t=======\n\t\t$R.parsingOptions =\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\t\t\t'_elements_self_closing': \t\t'|br|hr|--|img|--|col|--|source|--|embed|param|--|iframe|',\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_container': \t\t\t'|body|--|article|section|--|div|--|td|--|li|--|dd|dt|',\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\t\t\t'_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'],<\/p>\n<p>\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'],<\/p>\n<p>\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'],<\/p>\n<p>\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],<\/p>\n<p>\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\t\t};<\/p>\n<p>\t\/\/\tnext page keywords -- (?? charCodeAt() > 127)\n\t\/\/\t==================\n\t\t$R.nextPage__captionKeywords = \n\t\t[\n\t\t\t\/* english *\/\n\t\t\t'next page', 'next',<\/p>\n<p>\t\t\t\/* german *\/\n\t\t\t'vorw&#228;rts', 'weiter',<\/p>\n<p>\t\t\t\/* japanese *\/\n\t\t\t'&#27425;&#12408;'\n\t\t];<\/p>\n<p>\t\t$R.nextPage__captionKeywords__not =\n\t\t[\n\t\t\t\/* english *\/\n\t\t\t'article', 'story', 'post', 'comment', 'section', 'chapter'<\/p>\n<p>\t\t];<\/p>\n<p>\t\/\/\tskip links\n\t\/\/\t==========\n\t\t$R.skipStuffFromDomains__links = \n\t\t[\n\t\t\t'doubleclick.net',\n            'fastclick.net',\n\t\t\t'adbrite.com',\n\t\t\t'adbureau.net',\n\t\t\t'admob.com',\n\t\t\t'bannersxchange.com',\n\t\t\t'buysellads.com',\n\t\t\t'impact-ad.jp',\n\t\t\t'atdmt.com',\n\t\t\t'advertising.com',\n\t\t\t'itmedia.jp',\n\t\t\t'microad.jp',\n\t\t\t'serving-sys.com',\n            'adplan-ds.com'\n\t\t];<\/p>\n<p>\t\/\/\tskip images\n\t\/\/\t===========\n\t\t$R.skipStuffFromDomain__images = \n\t\t[\n\t\t\t'googlesyndication.com',\n            'fastclick.net',\n\t\t\t'.2mdn.net',\n\t\t\t'de17a.com',\n\t\t\t'content.aimatch.com',\n\t\t\t'bannersxchange.com',\n\t\t\t'buysellads.com',\n\t\t\t'impact-ad.jp',\n\t\t\t'atdmt.com',\n\t\t\t'advertising.com',\n\t\t\t'itmedia.jp',\n\t\t\t'microad.jp',\n\t\t\t'serving-sys.com',\n            'adplan-ds.com'\n\t\t];<\/p>\n<p>\t\/\/\tkeep video\n\t\/\/\t==========<\/p>\n<p>\t\t$R.keepStuffFromDomain__video = \n\t\t[\n\t\t\t'youtube.com',\n\t\t\t'youtube-nocookie.com',<\/p>\n<p>\t\t\t'vimeo.com',\n\t\t\t'hulu.com',\n\t\t\t'yahoo.com',\n\t\t\t'flickr.com',\n\t\t\t'newsnetz.ch'\n\t\t];<\/p>\n<p>\t$R.getContent__exploreNodeAndGetStuff = function (_nodeToExplore, _justExploring)\n\t{\n\t\tvar\t\n\t\t\t_global__element_index = 0,<\/p>\n<p>\t\t\t_global__inside_link = false,\n\t\t\t_global__inside_link__element_index = 0,<\/p>\n<p>\t\t\t_global__length__above_plain_text = 0,\n\t\t\t_global__count__above_plain_words = 0,\n\t\t\t_global__length__above_links_text = 0,\n\t\t\t_global__count__above_links_words = 0,\n            _global__count__above_candidates = 0,\n            _global__count__above_containers = 0,\n\t\t\t_global__above__plain_text = '',\n\t\t\t_global__above__links_text = '',<\/p>\n<p>\t\t\t_return__containers = [],\n\t\t\t_return__candidates = [],\n\t\t\t_return__links = []\n\t\t;<\/p>\n<p>\t\t\/\/\trecursive function\n\t\t\/\/\t==================\n\t\tvar _recursive = function (_node)\n\t\t{\n\t\t\t\/\/\tincrement index\n\t\t\t\/\/\tstarts with 1\n\t\t\t_global__element_index++;<\/p>\n<p>\t\t\tvar \n\t\t\t\t_tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 && _node.tagName && _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n\t\t\t\t_result =\n\t\t\t\t{\n\t\t\t\t\t'__index': _global__element_index, \n\t\t\t\t\t'__node': _node, <\/p>\n<p>\t\t\t\t\t'_is__container': \t\t($R.parsingOptions._elements_container.indexOf('|'+_tag_name+'|') > -1),\n\t\t\t\t\t'_is__candidate': \t\tfalse,\n\t\t\t\t\t'_is__text': \t\t\tfalse,\n\t\t\t\t\t'_is__link': \t\t\tfalse,\n\t\t\t\t\t'_is__link_skip': \t\tfalse,\n\t\t\t\t\t'_is__image_small': \tfalse,\n\t\t\t\t\t'_is__image_medium': \tfalse,\n\t\t\t\t\t'_is__image_large': \tfalse,\n\t\t\t\t\t'_is__image_skip': \t\tfalse,<\/p>\n<p>\t\t\t\t\t'_debug__above__plain_text': _global__above__plain_text,\n\t\t\t\t\t'_debug__above__links_text': _global__above__links_text,<\/p>\n<p>\t\t\t\t\t'_length__above_plain_text': _global__length__above_plain_text,\n\t\t\t\t\t'_count__above_plain_words': _global__count__above_plain_words,<\/p>\n<p>\t\t\t\t\t'_length__above_links_text': _global__length__above_links_text,\n\t\t\t\t\t'_count__above_links_words': _global__count__above_links_words,<\/p>\n<p>\t\t\t\t\t'_length__above_all_text': \t(_global__length__above_plain_text + _global__length__above_links_text),\n\t\t\t\t\t'_count__above_all_words': \t(_global__count__above_plain_words + _global__count__above_links_words),<\/p>\n<p>                    '_count__above_candidates': _global__count__above_candidates,\n                    '_count__above_containers': _global__count__above_containers,<\/p>\n<p>\t\t\t\t\t'_length__plain_text': 0,\n\t\t\t\t\t'_count__plain_words': 0,<\/p>\n<p>\t\t\t\t\t'_length__links_text': 0,\n\t\t\t\t\t'_count__links_words': 0,<\/p>\n<p>\t\t\t\t\t'_length__all_text': 0,\n\t\t\t\t\t'_count__all_words': 0,<\/p>\n<p>\t\t\t\t\t'_count__containers': 0,\n\t\t\t\t\t'_count__candidates': 0,<\/p>\n<p>\t\t\t\t\t'_count__links': 0,\n\t\t\t\t\t'_count__links_skip': 0,<\/p>\n<p>\t\t\t\t\t'_count__images_small': 0,\n\t\t\t\t\t'_count__images_medium': 0,\n\t\t\t\t\t'_count__images_large': 0,\n\t\t\t\t\t'_count__images_skip': 0\n\t\t\t\t};<\/p>\n<p>\t\t\t\/\/\tfast return\n\t\t\t\/\/\t===========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase ((_tag_name == '#invalid')):\n\t\t\t\t\tcase (($R.parsingOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\t\t\t\treturn;<\/p>\n<p>\t\t\t\t\tcase (($R.parsingOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)):<\/p>\n<p>\t\/\/\tincluded inline\n\t\/\/\t_node, _tag_name must be defined\n\t\/\/\twill return, if node is hidden<\/p>\n<p>\tswitch (true)\n\t{\n\t\tcase (_node.offsetWidth > 0):\n\t\tcase (_node.offsetHeight > 0):\n\t\t\tbreak;<\/p>\n<p>\t\tdefault:\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_node.offsetLeft > 0):\n\t\t\t\tcase (_node.offsetTop > 0):\n\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\tdefault:\n                    \/\/  exclude inline DIVs -- which, stupidly, don't have a width\/height\n                    if ((_tag_name == 'div') && ((_node.style.display || $.css( _node, \"display\" )) == 'inline'))\n                        { break; }<\/p>\n<p>                    \/\/  it's hidden; exit current scope\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\t}<\/p>\n<p>\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\t\/\/\tself-closing -- with some exceptions\n\t\t\t\t\tcase ($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1):\n\t\t\t\t\t\tswitch (true)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase ((_tag_name == 'img')): break;\n\t\t\t\t\t\t\tdefault: return;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}<\/p>\n<p>\t\t\t\/\/\tdo stuff\n\t\t\t\/\/\t========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\t\/\/\ttext node\n\t\t\t\t\t\/\/\t=========\n\t\t\t\t\t\tcase ((_tag_name == '#text')):\n\t\t\t\t\t\t\t\/\/\tmark\n\t\t\t\t\t\t\t_result._is__text = true;<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tget\n\t\t\t\t\t\t\tvar _nodeText = _node.nodeValue;<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tresult\n\t\t\t\t\t\t\t_result._length__plain_text = $R.measureText__getTextLength(_nodeText);\n\t\t\t\t\t\t\t_result._count__plain_words = $R.measureText__getWordCount(_nodeText);<\/p>\n<p>\t\t\t\t\t\t\tif (_global__inside_link)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_global__length__above_links_text += _result._length__plain_text;\n\t\t\t\t\t\t\t\t_global__count__above_links_words += _result._count__plain_words;\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (false && $R.debug) { _global__above__links_text += ' ' + _nodeText; }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_global__length__above_plain_text += _result._length__plain_text;\n\t\t\t\t\t\t\t\t_global__count__above_plain_words += _result._count__plain_words;\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (false && $R.debug) { _global__above__plain_text += ' ' + _nodeText; }\n\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\/\/\treturn text\n\t\t\t\t\t\t\treturn _result;<\/p>\n<p>\t\t\t\t\t\/\/\tlink\n\t\t\t\t\t\/\/\t====\n                    case (_tag_name == 'a'):\n                        var _href = \"\";\n                        try {\n                            _href = _node.href;\n                        } catch(e) {\n                            Evernote.Logger.warn(\"Clearly: failed to get href of link element\" + e);\n                        }<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tsanity\n\t\t\t\t\t\t\tif (_href > ''); else { break; }\n\t\t\t\t\t\t\tif (_href.indexOf); else { break; }<\/p>\n<p>\t\t\t\t\t\t\t_result._is__link = true;<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tskip\n\t\t\t\t\t\t\tfor (var i=0, _i=$R.skipStuffFromDomains__links.length; i<_i; i++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (_node.href.indexOf($R.skipStuffFromDomains__links[i]) > -1)\n\t\t\t\t\t\t\t\t\t{ _result._is__link_skip = true; break; }\n\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tinside link\n\t\t\t\t\t\t\tif (_global__inside_link); else\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_global__inside_link = true;\n\t\t\t\t\t\t\t\t_global__inside_link__element_index = _result.__index;\n\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tdone\n\t\t\t\t\t\t\t_return__links.push(_result);\n\t\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\t\/\/\timage\n\t\t\t\t\t\/\/\t=====\n\t\t\t\t\t\tcase (_tag_name == 'img'):<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tskip\n\t\t\t\t\t\t\t\/\/\t====\n\t\t\t\t\t\t\t\tif (_node.src && _node.src.indexOf)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tfor (var i=0, _i=$R.skipStuffFromDomain__images.length; i<_i; i++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_node.src.indexOf($R.skipStuffFromDomain__images[i]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _result._is__image_skip = true; break; }\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\/\/\tsize\n\t\t\t\t\t\t\t\/\/\t====\n\t\t\t\t\t\t\t\tvar\t_width = $(_node).width(), _height = $(_node).height();\n\t\t\t\t\t\t\t\tswitch (true)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase ((_width * _height) >= 50000):\n\t\t\t\t\t\t\t\t\tcase ((_width >= 350) && (_height >= 75)):\n\t\t\t\t\t\t\t\t\t\t_result._is__image_large = true;\n\t\t\t\t\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\t\t\t\t\tcase ((_width * _height) >= 20000):\n\t\t\t\t\t\t\t\t\tcase ((_width >= 150) && (_height >= 150)):\n\t\t\t\t\t\t\t\t\t\t_result._is__image_medium = true;\n\t\t\t\t\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\t\t\t\t\tcase ((_width <= 5) &#038;&#038; (_height <= 5)):\n\t\t\t\t\t\t\t\t\t\t_result._is__image_skip = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t_result._is__image_small = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\n\t\t\t\/\/\tchild nodes\n\t\t\t\/\/\t===========\n\t\t\t\tfor (var i=0, _i=_node.childNodes.length; i<_i; i++)\n\t\t\t\t{\n\t\t\t\t\tvar \n\t\t\t\t\t\t_child = _node.childNodes[i],\n\t\t\t\t\t\t_child_result = _recursive(_child)\n\t\t\t\t\t;\n\t\t\t\t\t\n\t\t\t\t\t\/\/\tif false, continue\n\t\t\t\t\t\/\/\t==================\n\t\t\t\t\t\tif (_child_result); else { continue; }\n\n\t\t\t\t\t\n\t\t\t\t\t\/\/\tadd to result\n\t\t\t\t\t\/\/\t=============\n\t\t\t\t\t\t_result._count__links += \t\t\t_child_result._count__links + \t\t\t(_child_result._is__link ? 1 : 0);\n\t\t\t\t\t\t_result._count__links_skip += \t\t_child_result._count__links_skip + \t\t(_child_result._is__link_skip ? 1 : 0);\n\t\t\t\t\t\t\n\t\t\t\t\t\t_result._count__images_small += \t_child_result._count__images_small + \t(_child_result._is__image_small ? 1 : 0);\n\t\t\t\t\t\t_result._count__images_medium += \t_child_result._count__images_medium + \t(_child_result._is__image_medium ? 1 : 0);\n\t\t\t\t\t\t_result._count__images_large += \t_child_result._count__images_large + \t(_child_result._is__image_large ? 1 : 0);\n\t\t\t\t\t\t_result._count__images_skip += \t\t_child_result._count__images_skip + \t(_child_result._is__image_skip ? 1 : 0);\n\t\t\t\n\t\t\t\t\t\t_result._count__containers += \t\t_child_result._count__containers + \t\t(_child_result._is__container ? 1 : 0);\n\t\t\t\t\t\t_result._count__candidates += \t\t_child_result._count__candidates + \t\t(_child_result._is__candidate ? 1 : 0);\n\n\t\t\t\t\t\t_result._length__all_text += \t\t_child_result._length__plain_text + \t_child_result._length__links_text;\n\t\t\t\t\t\t_result._count__all_words += \t\t_child_result._count__plain_words + \t_child_result._count__links_words;\n\n\t\t\t\t\t\t\/\/\tplain text \/ link text\n\t\t\t\t\t\t\/\/\t======================\n\t\t\t\t\t\t\tswitch (true)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase (_child_result._is__link):\n\t\t\t\t\t\t\t\t\t\/\/\tno text to add\n\t\t\t\t\t\t\t\t\t_result._length__links_text += (_child_result._length__plain_text + _child_result._length__links_text);\n\t\t\t\t\t\t\t\t\t_result._count__links_words += (_child_result._count__plain_words + _child_result._count__links_words);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t_result._length__plain_text += \t\t\t_child_result._length__plain_text;\n\t\t\t\t\t\t\t\t\t_result._count__plain_words += \t\t\t_child_result._count__plain_words;\n\t\t\t\t\t\t\t\t\t_result._length__links_text += \t\t\t_child_result._length__links_text;\n\t\t\t\t\t\t\t\t\t_result._count__links_words += \t\t\t_child_result._count__links_words;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\n\t\t\t\/\/\tafter child nodes\n\t\t\t\/\/\t=================\n\t\t\t\n\t\t\t\t\/\/\tmark as not in link anymore\n\t\t\t\t\/\/\t===========================\n\t\t\t\t\tif (true\n\t\t\t\t\t\t&#038;&#038; (_result._is__link) \n\t\t\t\t\t\t&#038;&#038; (_global__inside_link__element_index == _result.__index)\n\t\t\t\t\t) {\n\t\t\t\t\t\t_global__inside_link = false;\n\t\t\t\t\t\t_global__inside_link__element_index = 0;\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\/\/\tadd to containers\n\t\t\t\/\/\t=================\n\t\t\t\tif (_result._is__container || ((_result.__index == 1) &#038;&#038; (_justExploring == true)))\n\t\t\t\t{\n\t\t\t\t\t\/\/\tadd to containers\n\t\t\t\t\t_return__containers.push(_result);\n\t\t\t\t\n                    \/\/  increase above containers\n                    if (_result._is__container) { _global__count__above_containers++; }\n                \n\t\t\t\t\t\/\/\tadd to candidates\n\t\t\t\t\tif (_justExploring); else\n\t\t\t\t\t{\n\t\t\t\t\t\tswitch (true)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase (($R.language != 'cjk') &#038;&#038; ((_result._count__links * 2) >= _result._count__plain_words)):  \/* link ratio *\/<\/p>\n<p>                            case (($R.language != 'cjk') && (_result._length__plain_text < (65 \/ 3))):  \/* text length *\/\n\t\t\t\t\t\t\tcase (($R.language != 'cjk') &#038;&#038; (_result._count__plain_words < 5)):\t\t\t\/* words *\/\n\n                            case (($R.language == 'cjk') &#038;&#038; (_result._length__plain_text < 10)):\t    \/* text length *\/\n\t\t\t\t\t\t\tcase (($R.language == 'cjk') &#038;&#038; (_result._count__plain_words < 2)):\t\t\t\/* words *\/\n\n\n\t\t\t\t\t\t\t\/\/case (_result._length__plain_text == 0):    \/* no text *\/\n\t\t\t\t\t\t\t\/\/case (_result._count__plain_words == 0):    \/* no words *\/\n\n                            \/\/case (($R.language == 'cjk') &#038;&#038; ((_result._length__plain_text \/ 65 \/ 3) < 0.1)):\t\t\t\t\/* paragrahs of 3 lines *\/\n\t\t\t\t\t\t\t\/\/case (($R.language != 'cjk') &#038;&#038; ((_result._count__plain_words \/ 50) < 0.5)):\t\t\t\t\t\/* paragraphs of 50 words *\/\n\t\t\t\t\t\t\t\n                                \/\/\tnot a valid candidate\n                                \/\/if (_tag_name == 'div') { $R.log('bad candidate', _result.__node); }\n\t\t\t\t\t\t\t\t\n                                break;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\/\/\tgood candidate\n\t\t\t\t\t\t\t\t_result._is__candidate = true;\n\t\t\t\t\t\t\t\t_return__candidates.push(_result);\n                                \n                                \/\/  increase above candidates\n                                _global__count__above_candidates++;\n                                \n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/\tspecial case for body -- if it was just skipped\n\t\t\t\t\t\t\/\/\t=====================\n\t\t\t\t\t\t\tif ((_result.__index == 1) &#038;&#038; !(_result._is__candidate))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_result._is__candidate = true;\n\t\t\t\t\t\t\t\t_result._is__bad = true;\n\t\t\t\t\t\t\t\t_return__candidates.push(_result);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\/\/\treturn\n\t\t\t\/\/\t======\n\t\t\t\treturn _result;\n\t\t};\n\n\t\t\n\t\t\/\/\tactually do it\n\t\t\/\/\t==============\n\t\t\t_recursive(_nodeToExplore);\n\n\t\t\/\/\tjust exploring -- return first thing\n\t\t\/\/\t==============\n\t\t\tif (_justExploring) { return _return__containers.pop(); }\n\t\t\n\t\t\/\/\treturn containers list\n\t\t\/\/\t======================\n\t\t\treturn {\n\t\t\t\t'_containers': \t_return__containers,\n\t\t\t\t'_candidates': \t_return__candidates,\n\t\t\t\t'_links': \t\t_return__links\n\t\t\t};\n\t};\n\n\n                \n\t$R.getContent__processCandidates = function (_candidatesToProcess)\n\t{\n\t\t\/\/\tprocess this var\n\t\t\/\/\t================\n\t\t\tvar _candidates = _candidatesToProcess;\n\t\t\n\t\t\n\t\t\/\/\tsort _candidates -- the lower in the dom, the closer to position 0\n\t\t\/\/\t================\n\t\t\t_candidates.sort(function (a, b)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (a.__index < b.__index): return -1;\n\t\t\t\t\tcase (a.__index > b.__index): return 1;\n\t\t\t\t\tdefault: return 0;\n\t\t\t\t}\n\t\t\t});<\/p>\n<p>\t\t\/\/\tget first\n\t\t\/\/\t=========\n\t\t\tvar\t_main = _candidates[0]\n\t\t\tif ($R.debug) { $R.log('should be body', _main, _main.__node); }<\/p>\n<p>\t\t\/\/\tpieces of text\n\t\t\/\/\tand points computation\n\t\t\/\/\t======================\n\t\t\tfor (var i=0, _i=_candidates.length; i<_i; i++)\n\t\t\t{\n\t\t\t\t\/\/\tpieces\n\t\t\t\t\/\/\t======\n\t\t\t\t\tvar \n\t\t\t\t\t\t_count__pieces = 0,\n\t\t\t\t\t\t_array__pieces = []\n\t\t\t\t\t;\n\t\t\t\t\n\t\t\t\t\tfor (var k=i, _k=_candidates.length; k<_k; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (_candidates[k]._count__candidates > 0) { continue; }\n\t\t\t\t\t\tif ($.contains(_candidates[i].__node, _candidates[k].__node)); else { continue; }<\/p>\n<p>\t\t\t\t\t\t\/\/\tstore piece, if in debug mode\n\t\t\t\t\t\tif ($R.debug) { _array__pieces.push(_candidates[k]); }<\/p>\n<p>\t\t\t\t\t\t\/\/\tincement pieces count\n\t\t\t\t\t\t_count__pieces++;\n\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\/\/\tcandidate details\n\t\t\t\t\/\/\t=================\n\t\t\t\t\t_candidates[i]['__candidate_details'] = $R.getContent__computeDetailsForCandidate(_candidates[i], _main);<\/p>\n<p>\t\t\t\t\/\/\tpieces -- do this here because _main doesn't yet have a pieces count\n\t\t\t\t\/\/\t======<\/p>\n<p>\t\t\t\t\t\/\/\tset pieces\n\t\t\t\t\t_candidates[i]['_count__pieces'] = _count__pieces;\n\t\t\t\t\t_candidates[i]['_array__pieces'] = _array__pieces;<\/p>\n<p>\t\t\t\t\t\/\/\tpieces ratio\n\t\t\t\t\t_candidates[i]['__candidate_details']['_ratio__count__pieces_to_total_pieces'] = (_count__pieces \/ (_candidates[0]._count__pieces + 1));<\/p>\n<p>                \/\/  check some more\n                \/\/  ===============\n                \/*    switch (true)\n                    {\n                        case (($R.language != 'cjk') && (_candidates[i]['__candidate_details']['_ratio__length__links_text_to_plain_text'] > 1)):\n                        case (($R.language != 'cjk') && (_candidates[i]['__candidate_details']['_ratio__count__links_words_to_plain_words'] > 1)):\n                            _candidates[i]._is__bad = true;\n                            break;\n                    }*\/<\/p>\n<p>\t\t\t\t\/\/\tpoints\n\t\t\t\t\/\/\t======\n\t\t\t\t\t_candidates[i].__points_history = $R.getContent__computePointsForCandidate(_candidates[i], _main);\n\t\t\t\t\t_candidates[i].__points = _candidates[i].__points_history[0];\n\t\t\t}<\/p>\n<p>\t\t\/\/\tsort _candidates -- the more points, the closer to position 0\n\t\t\/\/\t================\n\t\t\t_candidates.sort(function (a, b)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (a.__points > b.__points): return -1;\n\t\t\t\t\tcase (a.__points < b.__points): return 1;\n\t\t\t\t\tdefault: return 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\n\t\t\/\/\treturn\n\t\t\/\/\t======\n\t\t\treturn _candidates;\t\n\t};\n\n                \n\t$R.getContent__computeDetailsForCandidate = function (_e, _main)\n\t{\n\t\tvar _r = {};\n\t\t\n\t\t\n\t\t\/\/\tbad candidate\n\t\t\/\/\t=============\n\t\t\tif (_e._is__bad) { return _r; }\n\t\t\n\t\t\n\t\t\/\/\tparagraphs\n\t\t\/\/\t==========\n\t\t\t_r['_count__lines_of_65_characters'] = (_e._length__plain_text \/ 65);\n\t\t\t_r['_count__paragraphs_of_3_lines'] =  (_r._count__lines_of_65_characters \/ 3);\n\t\t\t_r['_count__paragraphs_of_5_lines'] =  (_r._count__lines_of_65_characters \/ 5);\n\n\t\t\t_r['_count__paragraphs_of_50_words'] = (_e._count__plain_words \/ 50);\n\t\t\t_r['_count__paragraphs_of_80_words'] = (_e._count__plain_words \/ 80);\n\n\n\t\t\/\/\ttotal text\n\t\t\/\/\t==========\n\t\t\t_r['_ratio__length__plain_text_to_total_plain_text'] =  (_e._length__plain_text \/ _main._length__plain_text);\n\t\t\t_r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words \/ _main._count__plain_words);\n\n\t\t\n\t\t\/\/\tlinks\n\t\t\/\/\t=====\n\t\t\t_r['_ratio__length__links_text_to_plain_text'] =  (_e._length__links_text \/ _e._length__plain_text);\n\t\t\t_r['_ratio__count__links_words_to_plain_words'] = (_e._count__links_words \/ _e._count__plain_words);\n\n\t\t\t_r['_ratio__length__links_text_to_all_text'] =  (_e._length__links_text \/ _e._length__all_text);\n\t\t\t_r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words \/ _e._count__all_words);\n\n\t\t\t_r['_ratio__length__links_text_to_total_links_text'] =  (_e._length__links_text \/ (_main._length__links_text + 1));\n\t\t\t_r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words \/ (_main._count__links_words + 1));\n\t\t\t\n\t\t\t_r['_ratio__count__links_to_total_links'] = (_e._count__links \/ (_main._count__links + 1));\n\t\t\t_r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) \/ _e._count__plain_words);\n\t\t\n\n\t\t\/\/\ttext above\n\t\t\/\/\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\t\t\t_r['_ratio__length__above_plain_text_to_total_plain_text'] =  (_above_text \/ _main._length__plain_text);\n\t\t\t_r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words \/ _main._count__plain_words);\n\n\t\t\n\t\t\/\/\tcandidates\n\t\t\/\/\t==========\n\t\t\t_r['_ratio__count__candidates_to_total_candidates'] = (_e._count__candidates \/ (_main._count__candidates + 1));\n\t\t\t_r['_ratio__count__containers_to_total_containers'] = (_e._count__containers \/ (_main._count__containers + 1));\n\t\t\n\t\n\t\t\/\/\treturn\n\t\t\/\/\t======\n\t\t\treturn _r;\n\t};\n\n                \n\t$R.getContent__computePointsForCandidate = function (_e, _main)\n\t{\n\t\tvar \n\t\t\t_details = _e.__candidate_details,\n\t\t\t_points_history = [],\n            _really_big = ((_main._length__plain_text \/ 65) > 250)\n\t\t;<\/p>\n<p>\t\t\/\/\tbad candidate\n\t\tif (_e._is__bad) { return [0]; }<\/p>\n<p>\t\t\/\/\tthe basics\n\t\t\/\/\t==========\n\t\t\t_points_history.unshift(((0\n\t\t\t\t+ (_details._count__paragraphs_of_3_lines)\n\t\t\t\t+ (_details._count__paragraphs_of_5_lines * 1.5)\n\t\t\t\t+ (_details._count__paragraphs_of_50_words)\n\t\t\t\t+ (_details._count__paragraphs_of_80_words * 1.5)\n\t\t\t\t+ (_e._count__images_large * 3)\n\t\t\t\t- ((_e._count__images_skip + _e._count__images_small) * 0.5)\n\t\t\t) * 1000));<\/p>\n<p>            \/\/  negative\n            if (_points_history[0] < 0) { return [0]; }\n            \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\t\t\n\t\t\/\/\ttotal text\n\t\t\/\/\t==========\n\t\t\t$R.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\t\t\t\n            if (_really_big) {\n            $R.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history);\n            }\n\n            \n\t\t\/\/\ttext above\n\t\t\/\/\t==========\n\t\t\t$R.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n\t\t\t$R.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            $R.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n            }\n\n            \n\t\t\/\/\tlinks outer\n\t\t\/\/\t===========\n            $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__length__links_text_to_total_links_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_words_to_total_links_words), _points_history);\n\n            $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_to_total_links), _points_history);\n\n            \n        \/\/  links inner\n        \/\/  ===========\n            var __lr = ($R.language == 'cjk' ? 0.75 : 0.50);\n            \n            $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n            $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history);\n\n            $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history);\n            \n\t\t\t\n\t\t\/\/\tcandidates, containers, pieces\n\t\t\/\/\t==============================\n\t\t\t$R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history);\n\t\t\n\t\t\n\t\t\/\/\treturn -- will get [0] as the actual final points\n\t\t\/\/\t======\n\t\t\treturn _points_history;\n\t};\n\n\n                \n\t$R.getContent__processCandidatesSecond = function (_processedCandidates)\n\t{\n\t\tvar \n\t\t\t_candidates = _processedCandidates,\n\t\t\t_main = _candidates[0]\n\t\t;\n\n\t\t\/\/\tonly get children of target\n\t\t\/\/\t===========================\n\t\t\t_candidates = $.map(_candidates, function (_element, _index)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(_index > 0)):\n\t\t\t\t\tcase (!($.contains(_main.__node, _element.__node))):\n\t\t\t\t\t\treturn null;<\/p>\n<p>\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn _element;\n\t\t\t\t}\n\t\t\t});<\/p>\n<p>            \/\/  add main - to amke sure the result is never blank\n            _candidates.unshift(_main);<\/p>\n<p>\t\t\/\/\tsort _candidates -- the lower in the dom, the closer to position 0\n\t\t\/\/\t================\n\t\t\t_candidates.sort(function (a, b)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (a.__index < b.__index): return -1;\n\t\t\t\t\tcase (a.__index > b.__index): return 1;\n\t\t\t\t\tdefault: return 0;\n\t\t\t\t}\n\t\t\t});<\/p>\n<p>\t\t\/\/\tsecond candidate computation\n\t\t\/\/\t============================\n\t\t\tfor (var i=0, _i=_candidates.length; i<_i; i++)\n\t\t\t{\n\t\t\t\t\/\/\tadditional numbers\n\t\t\t\t\/\/\t==================\n\t\t\t\t\t_candidates[i].__second_length__above_plain_text = (_candidates[i]._length__above_plain_text - _main._length__above_plain_text);\n\t\t\t\t\t_candidates[i].__second_count__above_plain_words = (_candidates[i]._count__above_plain_words - _main._count__above_plain_words);\n\t\n\t\t\t\t\/\/\tcandidate details\n\t\t\t\t\/\/\t=================\n\t\t\t\t\t_candidates[i]['__candidate_details_second'] = $R.getContent__computeDetailsForCandidateSecond(_candidates[i], _main);\n\t\t\t\t\t\n\t\t\t\t\/\/\tcheck some more\n\t\t\t\t\/\/\t===============\n\t\t\t\t\/*\tswitch (true)\n\t\t\t\t\t{\n                        case (!(_candidates[i]['__candidate_details_second']['_ratio__count__plain_words_to_total_plain_words'] > 0.05)):\n\t\t\t\t\t\tcase (!(_candidates[i]['__candidate_details_second']['_ratio__length__plain_text_to_total_plain_text'] > 0.05)):<\/p>\n<p>\t\t\t\t\t\t\/\/case (!(_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_total_plain_words'] < 0.1)):\n\t\t\t\t\t\t\/\/case (!(_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_total_plain_text'] < 0.1)):\n\t\t\t\t\t\t\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):<\/p>\n<p>                            _candidates[i]._is__bad = true;\n\t\t\t\t\t\t\t\/\/\twil set points to 0, in points computation function\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}*\/<\/p>\n<p>\t\t\t\t\/\/\tpoints\n\t\t\t\t\/\/\t======\n\t\t\t\t\t_candidates[i].__points_history_second = $R.getContent__computePointsForCandidateSecond(_candidates[i], _main);\n\t\t\t\t\t_candidates[i].__points_second = _candidates[i].__points_history_second[0];\n\t\t\t}<\/p>\n<p>\t\t\/\/\tsort _candidates -- the more points, the closer to position 0\n\t\t\/\/\t================\n\t\t\t_candidates.sort(function (a, b)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (a.__points_second > b.__points_second): return -1;\n\t\t\t\t\tcase (a.__points_second < b.__points_second): return 1;\n\t\t\t\t\tdefault: return 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\n\t\t\/\/\treturn\n\t\t\/\/\t======\n\t\t\treturn _candidates;\t\n\t};\n\n                \n\t$R.getContent__computeDetailsForCandidateSecond = function (_e, _main)\n\t{\n\t\tvar _r = {};\n\n\t\t\n\t\t\/\/\tbad candidate\n\t\t\/\/\t=============\n\t\t\tif (_e._is__bad) { return _r; }\n\t\t\n\t\t\n\t\t\/\/\ttotal text\n\t\t\/\/\t==========\n\t\t\t_r['_ratio__length__plain_text_to_total_plain_text'] = \t(_e._length__plain_text \/ _main._length__plain_text);\n\t\t\t_r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words \/ _main._count__plain_words);\n\n\t\t\t\n\t\t\/\/\tlinks\n\t\t\/\/\t=====\n\t\t\t_r['_ratio__length__links_text_to_all_text'] =\t(_e._length__links_text \/ _e._length__all_text);\n\t\t\t_r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words \/ _e._count__all_words);\n\n\t\t\t_r['_ratio__length__links_text_to_total_links_text'] = \t(_e._length__links_text \/ (_main._length__links_text + 1));\n\t\t\t_r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words \/ (_main._count__links_words + 1));\n\t\t\t\t\n\t\t\t_r['_ratio__count__links_to_total_links'] = (_e._count__links \/ (_main._count__links + 1));\n\t\t\t_r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) \/ _e._count__plain_words);\n\n\t\t\t\n\t\t\/\/\ttext above\n\t\t\/\/\t==========\n\t\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\t\t\t_r['_ratio__length__above_plain_text_to_total_plain_text'] =  (_above_text \/ _main._length__plain_text);\n\t\t\t_r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words \/ _main._count__plain_words);\n\n\t\t\t_r['_ratio__length__above_plain_text_to_plain_text'] = \t(_above_text \/ _e._length__plain_text);\n\t\t\t_r['_ratio__count__above_plain_words_to_plain_words'] = (_above_words \/ _e._count__plain_words);\n            \n\t\t\n\t\t\/\/\tcandidates\n\t\t\/\/\t==========\n\t\t\t_r['_ratio__count__candidates_to_total_candidates'] = (Math.max(0, (_e._count__candidates - (_main._count__candidates * 0.25))) \/ (_main._count__candidates + 1));\n\t\t\t_r['_ratio__count__containers_to_total_containers'] = (Math.max(0, (_e._count__containers - (_main._count__containers * 0.25))) \/ (_main._count__containers + 1));\n\t\t\t_r['_ratio__count__pieces_to_total_pieces'] =         (Math.max(0, (_e._count__pieces - (_main._count__pieces * 0.25))) \/ (_main._count__pieces + 1));\n\t\n\t\t\n\t\t\/\/\treturn\n\t\t\/\/\t======\n\t\t\treturn _r;\n\t};\n\n                \n\t$R.getContent__computePointsForCandidateSecond = function (_e, _main)\n\t{\n\t\tvar \n\t\t\t_details = _e.__candidate_details,\n\t\t\t_details_second = _e.__candidate_details_second,\n\t\t\t_points_history = []\n\t\t;\n\t\n\t\t\/\/\tbad candidate\n\t\tif (_e._is__bad) { return [0]; }\n\t\n\t\n\t\t\/\/\tget initial points\n\t\t\/\/\t==================\n\t\t\t_points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]);\n\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\t\t\n\t\t\/\/\ttotal text\n\t\t\/\/\t==========\n\t\t\t$R.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n            \n\t\t\/\/\ttext above\n\t\t\/\/\t==========\n            var __ar = ($R.language == 'cjk' ? 0.50 : 0.10);\n\n\t\t\t$R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\t\t\n\t\t\t$R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history);\n\n            \n\t\t\/\/\tlinks outer\n\t\t\/\/\t===========\n\t\t\t$R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_to_total_links), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__length__links_text_to_total_links_text), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_words_to_total_links_words), _points_history);\n            \n\t\t\t\n\t\t\/\/\tlinks inner\n\t\t\/\/\t===========\n            var __lr = ($R.language == 'cjk' ? 0.75 : 0.50);\n        \n\t\t\t$R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n\t\t\t$R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__length__links_text_to_all_text), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_words_to_all_words), _points_history);\n\n\t\t\t$R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_to_plain_words), _points_history);\n\t\t\n\n\t\t\/\/\tcandidates, containers, pieces\n\t\t\/\/\t==============================\n\t\t\t$R.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__candidates_to_total_candidates), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__containers_to_total_containers), _points_history);\n\t\t\t$R.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__pieces_to_total_pieces), _points_history);\n\n\t\t\n\t\t\/\/\treturn -- will get [0] as the actual final points\n\t\t\/\/\t======\n\t\t\treturn _points_history;\n\t};\n\n\n                \n\t$R.getContent__computePointsForCandidateThird = function (_e, _main)\n\t{\n\t\tvar \n\t\t\t_details = _e.__candidate_details,\n\t\t\t_details_second = _e.__candidate_details_second,\n\t\t\t_points_history = []\n\t\t;\n\n\t\t\/\/\tbad candidate\n\t\tif (_e._is__bad) { return [0]; }\n\n        \n\t\t\/\/\tget initial points\n\t\t\/\/\t==================\n\t\t\t_points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]);\n\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        \n        \/\/  total text\n        \/\/  ==========\n            $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history);\n        \n        \n        \/\/\ttext above\n        \/\/\t==========\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n            $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n            $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history);\n            \n            \n        \/\/\tlinks inner\n        \/\/\t===========\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history);\n\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n            \n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history);\n            \n            \n        \/\/\tcandidates, containers, pieces\n        \/\/\t==============================\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history);\n            $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \n\t\t\/\/\treturn -- will get [0] as the actual final points\n\t\t\/\/\t======\n\t\t\treturn _points_history;\n    };\n\n\n                \n    $R.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                \n                \n\t$R.getContent__buildHTMLForNode = function (_nodeToBuildHTMLFor, _custom_mode)\n\t{\n\t\tvar \n\t\t\t_global__element_index = 0,\n\t\t\t_global__the_html = '',\n\t\t\t_global__exploreNodeToBuildHTMLFor = $R.getContent__exploreNodeAndGetStuff(_nodeToBuildHTMLFor, true)\n\t\t;\n\n\t\t\/\/\tcustom\n\t\t\/\/\t======\n\t\tswitch (_custom_mode)\n\t\t{\n\t\t\tcase 'above-the-target':\n\t\t\t\t_global__exploreNodeToBuildHTMLFor = false;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\t\/\/\trecursive function\n\t\t\/\/\t==================\n\t\tvar _recursive = function (_node)\n\t\t{\n\t\t\t\/\/\tincrement index -- starts with 1\n\t\t\t\/\/\t===============\n\t\t\t\t_global__element_index++;\n\n\t\t\t\/\/\tvars\n\t\t\t\/\/\t====\n\t\t\t\tvar \n\t\t\t\t\t_explored = false,\n\t\t\t\t\t_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_pos__start__before = 0,\n\t\t\t\t\t_pos__start__after = 0,\n\t\t\t\t\t_pos__end__before = 0,\n\t\t\t\t\t_pos__end__after = 0\n\t\t\t\t;<\/p>\n<p>\t\t\t\/\/\tfast return\n\t\t\t\/\/\t===========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase ((_tag_name == '#invalid')):\n\t\t\t\t\tcase (($R.parsingOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\t\t\t\treturn;<\/p>\n<p>\t\t\t\t\tcase (_tag_name == '#text'):\n\t\t\t\t\t\t_global__the_html += _node.nodeValue\n\t\t\t\t\t\t\t.replace(\/<\/gi, '&lt;')\n\t\t\t\t\t\t\t.replace(\/>\/gi, '&gt;')\n\t\t\t\t\t\t;\n\t\t\t\t\t\treturn;\n\t\t\t\t}<\/p>\n<p>\t\t\t\/\/\thidden\n\t\t\t\/\/\t======\n\t\t\t\tif ($R.parsingOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)\n\t\t\t\t\t{ \t\n\t\/\/\tincluded inline\n\t\/\/\t_node, _tag_name must be defined\n\t\/\/\twill return, if node is hidden<\/p>\n<p>\tswitch (true)\n\t{\n\t\tcase (_node.offsetWidth > 0):\n\t\tcase (_node.offsetHeight > 0):\n\t\t\tbreak;<\/p>\n<p>\t\tdefault:\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_node.offsetLeft > 0):\n\t\t\t\tcase (_node.offsetTop > 0):\n\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\tdefault:\n                    \/\/  exclude inline DIVs -- which, stupidly, don't have a width\/height\n                    if ((_tag_name == 'div') && ((_node.style.display || $.css( _node, \"display\" )) == 'inline'))\n                        { break; }<\/p>\n<p>                    \/\/  it's hidden; exit current scope\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\t}\n }<\/p>\n<p>\t\t\t\/\/\tclean -- before\n\t\t\t\/\/\t=====<\/p>\n<p>\t\/\/\tjust a return will skip the whol element\n\t\/\/\tincluding children<\/p>\n<p>\t\/\/\tobjects, embeds, iframes\n\t\/\/\t========================\n\t\tswitch (_tag_name)\n\t\t{\n\t\t\tcase ('object'):\n\t\t\tcase ('embed'):\n\t\t\tcase ('iframe'):\n\t\t\t\tvar \n\t\t\t\t\t_src = (_tag_name == 'object' ? $(_node).find(\"param[name='movie']\").attr('value') : $(_node).attr('src')),\n\t\t\t\t\t_skip = ((_src > '') ? false : true)\n\t\t\t\t;<\/p>\n<p>\t\t\t\tif (_skip); else\n\t\t\t\t{\n\t\t\t\t\t\/\/\tdefault skip\n\t\t\t\t\t_skip = true;<\/p>\n<p>\t\t\t\t\t\/\/\tloop\n\t\t\t\t\tfor (var i=0, _i=$R.keepStuffFromDomain__video.length; i<_i; i++)\n\t\t\t\t\t\t{ if (_src.indexOf($R.keepStuffFromDomain__video[i]) > -1) { _skip = false; break; } }\n\t\t\t\t}<\/p>\n<p>\t\t\t\t\/\/\tskip?\n\t\t\t\tif (_skip)\n\t\t\t\t\t{ $R.debugOutline(_node, 'clean-before', 'object-embed-iframe'); return; }<\/p>\n<p>\t\t\t\tbreak;\n\t\t}<\/p>\n<p>\t\/\/\tskipped link\n\t\/\/\t============\n\t\tif (_tag_name == 'a' || _tag_name == 'li')\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_explored._is__link_skip):\n\t\t\t\tcase (((_explored._count__images_small + _explored._count__images_skip) > 0) && (_explored._length__plain_text < 65)):\n\t\t\t\t\t$R.debugOutline(_node, 'clean-before', 'skip-link');\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\n\t\/\/\tlink density\n\t\/\/\t============\n\t\tif ($R.parsingOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1)\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n                case (_explored._length__plain_text > (65 * 3 * 2)):\n                case ($R.language == 'cjk' && (_explored._length__plain_text > (65 * 3 * 1))):\n\t\t\t\tcase (!(_explored._count__links > 1)):\n\t\t\t\tcase (_global__exploreNodeToBuildHTMLFor && (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.5):\n\t\t\t\tcase (_global__exploreNodeToBuildHTMLFor && (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.5):\n\t\t\t\tcase ((_explored._length__plain_text == 0) && (_explored._count__links == 1) && (_explored._length__links_text < 65)):\n\t\t\t\tcase ((_explored._length__plain_text < 25) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)):\n\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\tcase ((_explored._length__links_text \/ _explored._length__all_text) < 0.5):\n\t\t\t\t\tif (_explored._count__links > 0); else { break; }\n\t\t\t\t\tif (_explored._count__links_skip > 0); else { break; }\n\t\t\t\t\tif (((_explored._count__links_skip \/ _explored._count__links) > 0.25) && (_explored._length__links_text \/ _explored._length__all_text) < 0.05) { break; }\n\t\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\t$R.debugOutline(_node, 'clean-before', 'link-density');\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\t\n\n\t\/\/\tfloating\n\t\/\/\t========\n\t\tif ($R.parsingOptions._elements_floating.indexOf('|'+_tag_name+'|') > -1)\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_explored._length__plain_text > (65 * 3 * 2)):\n                case ($R.language == 'cjk' && (_explored._length__plain_text > (65 * 3 * 1))):\n\t\t\t\tcase (_global__exploreNodeToBuildHTMLFor && (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25):\n\t\t\t\tcase (_global__exploreNodeToBuildHTMLFor && (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.25):\n\t\t\t\tcase ((_explored._length__plain_text < 25) &#038;&#038; (_explored._length__links_text < 25) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)):\n\t\t\t\tcase (_node.getElementsByTagName && (_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;<\/p>\n<p>\t\t\t\tdefault:\n\t\t\t\t\tvar _float = $(_node).css('float');\n\t\t\t\t\tif (_float == 'left' || _float == 'right'); else { break; }\n\t\t\t\t\tif ((_explored._length__links_text == 0) && ((_explored._count__images_large + _explored._count__images_medium) > 0)) { break; }<\/p>\n<p>\t\t\t\t\t$R.debugOutline(_node, 'clean-before', 'floating');\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}<\/p>\n<p>\t\/\/\tabove target\n\t\/\/\t============\n\t\tif (_custom_mode == 'above-the-target')\n\t\t{\n            \/\/  is ignored?\n\t\t\tif ($R.parsingOptions._elements_above_target_ignore.indexOf('|'+_tag_name+'|') > -1)\n\t\t\t\t{ $R.debugOutline(_node, 'clean-before', 'above-target'); return; }<\/p>\n<p>            \/\/  is image?\n\t\t\tif (_tag_name == 'img')\n\t\t\t{\n\t\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\t\tif (_explored._is__image_large); else\n\t\t\t\t\t{ $R.debugOutline(_node, 'clean-before', 'above-target'); return; }\n\t\t\t}<\/p>\n<p>            \/\/  has too many links?\n            \/\/if (_node.getElementsByTagName && _node.getElementsByTagName('a').length > 5)\n            \/\/    { $R.debugOutline(_node, 'clean-before', 'above-target'); return; }\n\t\t}<\/p>\n<p>    \/\/  headers that are images\n    \/\/  =======================\n\t\tif (_tag_name.match(\/^h(1|2|3|4|5|6)$\/gi))\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase ((_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\t\t\t\t\t$R.debugOutline(_node, 'clean-before', 'skip-heading');\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}<\/p>\n<p>\t\t\t\/\/\tstart tag\n\t\t\t\/\/\t=========\n\t\t\t\tif ($R.parsingOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1); else\n\t\t\t\t{\n\t\t\t\t\t\/* mark *\/\t_pos__start__before = _global__the_html.length;\n\t\t\t\t\t\/* add *\/\t_global__the_html += '<'+_tag_name;\n\t\t\t\t\t\n\t\t\t\t\t\/\/\tattributes\n\t\t\t\t\t\/\/\t==========\n\t\t\t\t\t\t\n\t\/\/\tallowed attributes\n\t\/\/\t==================\n\t\tif (_tag_name in $R.parsingOptions._elements_keep_attributes)\n\t\t{\n\t\t\tfor (var i=0, _i=$R.parsingOptions._elements_keep_attributes[_tag_name].length; i<_i; i++)\n\t\t\t{\n\t\t\t\tvar \n\t\t\t\t\t_attribute_name = $R.parsingOptions._elements_keep_attributes[_tag_name][i],\n\t\t\t\t\t_attribute_value = _node.getAttribute(_attribute_name)\n\t\t\t\t;\n\t\t\t\t\n\t\t\t\t\/\/\tif present\n\t\t\t\tif (_attribute_value > '')\n\t\t\t\t\t{ _global__the_html += ' '+_attribute_name+'=\"'+(_attribute_value)+'\"'; }\n\t\t\t}\n\t\t}<\/p>\n<p>\t\/\/\tkeep ID for all elements\n\t\/\/\t========================\n\t\tvar _id_attribute = _node.getAttribute('id');\n\t\tif (_id_attribute > '')\n\t\t\t{ _global__the_html += ' id=\"'+_id_attribute+'\"'; }<\/p>\n<p>\t\/\/\tlinks target NEW\n\t\/\/\t================\n\t\tif (_tag_name == 'a')\n\t\t\t{ _global__the_html += ' target=\"_blank\"'; }<\/p>\n<p>\t\t\t\t\t\/\/\tclose start\n\t\t\t\t\t\/\/\t===========\n\t\t\t\t\t\tif ($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' \/>'; }\n\t\t\t\t\t\telse { _global__the_html += '>';}<\/p>\n<p>\t\t\t\t\t\/* mark *\/ _pos__start__after = _global__the_html.length;\n\t\t\t\t}<\/p>\n<p>\t\t\t\/\/\tchild nodes\n\t\t\t\/\/\t===========\n\t\t\t\tif ($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1); else\n\t\t\t\t{\n\t\t\t\t\tfor (var i=0, _i=_node.childNodes.length; i<_i; i++)\n\t\t\t\t\t\t{ _recursive(_node.childNodes[i]); }\n\t\t\t\t}\n\n\t\t\t\/\/\tend tag\n\t\t\t\/\/\t=======\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (($R.parsingOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\t\t\t\treturn;<\/p>\n<p>\t\t\t\t\tcase (($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\t\t\t\t\/* mark *\/ \t_pos__end__before = _global__the_html.length;\n\t\t\t\t\t\t\/* mark *\/ \t_pos__end__after = _global__the_html.length;\n\t\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\t\tdefault:\n\t\t\t\t\t\t\/* mark *\/ \t_pos__end__before = _global__the_html.length;\n\t\t\t\t\t\t\/* end *\/ \t_global__the_html += '<\/'+_tag_name+'>';\n\t\t\t\t\t\t\/* mark *\/ \t_pos__end__after = _global__the_html.length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}<\/p>\n<p>\t\t\t\/\/\tclean -- after\n\t\t\t\/\/\t=====<\/p>\n<p>\t\/\/\twe need to actually cut things out of \n\t\/\/\t\"_global__the_html\", for stuff to not be there<\/p>\n<p>\t\/\/\tlargeObject classes\n\t\/\/\t===================\n\t\tif (_tag_name == 'iframe' || _tag_name == 'embed' || _tag_name == 'object')\n\t\t{\n\t\t\t_global__the_html = ''\n\t\t\t\t+ _global__the_html.substr(0, _pos__start__before)\n\t\t\t\t+ '<\/p>\n<div class=\"readableLargeObjectContainer\">'\n\t\t\t\t+ \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before))\n\t\t\t\t+ '<\/div>\n<p>'\n\t\t\t;\n\t\t\treturn;\n\t\t}<\/p>\n<p>\t\/\/\tadd image classes\n\t\/\/\t=================\n\t\tif (_tag_name == 'img')\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_explored._is__image_skip):\n\t\t\t\t\t$R.debugOutline(_node, 'clean-after', 'skip-img');\n\t\t\t\t\t_global__the_html = _global__the_html.substr(0, _pos__start__before);\n\t\t\t\t\treturn;<\/p>\n<p>\t\t\t\tcase (_explored._is__image_large):<\/p>\n<p>                    \/\/  add float class -- for images too narrow\/tall\n                    \/\/  remove width\/height -- only for large images<\/p>\n<p>                    \/\/  http:\/\/www.wired.com\/threatlevel\/2011\/05\/gps-gallery\/?pid=89&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\/<\/p>\n<p>                    _global__the_html = ''\n\t\t\t\t\t\t+ _global__the_html.substr(0, _pos__start__before)\n\t\t\t\t\t\t+ '<\/p>\n<div class=\"readableLargeImageContainer'\n\t\t\t\t\t\t+ \t(($(_node).width() <= 250) &#038;&#038; ($(_node).height() >= 250) ? ' float' : '')\n\t\t\t\t\t\t+ '\">'\n\t\t\t\t\t\t+ \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before)).replace(\/width=\"([^=]+?)\"\/gi, '').replace(\/height=\"([^=]+?)\"\/gi, '')\n\t\t\t\t\t\t+ '<\/div>\n<p>'\n\t\t\t\t\t;\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}<\/p>\n<p>\t\/\/\tlarge images in links\n\t\/\/\t=====================\n\t\tif (_tag_name == 'a')\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_explored._count__images_large == 1):\n\t\t\t\t\t_global__the_html = ''\n\t\t\t\t\t\t+ _global__the_html.substr(0, _pos__start__after-1)\n\t\t\t\t\t\t+ ' class=\"readableLinkWithLargeImage\">'\n\t\t\t\t\t\t+ \t_global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n\t\t\t\t\t\t+ '<\/a>'\n\t\t\t\t\t;\n\t\t\t\t\treturn;<\/p>\n<p>\t\t\t\tcase (_explored._count__images_medium == 1):\n\t\t\t\t\t_global__the_html = ''\n\t\t\t\t\t\t+ _global__the_html.substr(0, _pos__start__after-1)\n\t\t\t\t\t\t+ ' class=\"readableLinkWithMediumImage\">'\n\t\t\t\t\t\t+ \t_global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n\t\t\t\t\t\t+ '<\/a>'\n\t\t\t\t\t;\n\t\t\t\t\treturn;\n\t\t\t}\t\t\n\t\t}<\/p>\n<p>\t\/\/\ttoo much content\n\t\/\/\t================\n\t\tif ($R.parsingOptions._elements_too_much_content.indexOf('|'+_tag_name+'|') > -1)\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_tag_name == 'h1' && (_explored._length__all_text > (65 * 2))):\n\t\t\t\tcase (_tag_name == 'h2' && (_explored._length__all_text > (65 * 2 * 3))):\n\t\t\t\tcase ((_tag_name.match(\/^h(3|4|5|6)$\/) != null) && (_explored._length__all_text > (65 * 2 * 5))):\n\t\t\t\tcase ((_tag_name.match(\/^(b|i|em|strong)$\/) != null) && (_explored._length__all_text > (65 * 5 * 5))):\n\t\t\t\t\t$R.debugOutline(_node, 'clean-after', 'too-much-content');\n\t\t\t\t\t_global__the_html = ''\n\t\t\t\t\t\t+ _global__the_html.substr(0, _pos__start__before)\n\t\t\t\t\t\t+ _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n\t\t\t\t\t;\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\t\t<\/p>\n<p>\t\/\/\tempty elements\n\t\/\/\t==============\n\t\tswitch (true)\n\t\t{\n\t\t\tcase (($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\tcase (($R.parsingOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\tcase (_tag_name == 'td'):\n\t\t\t\tbreak;<\/p>\n<p>\t\t\tdefault:\n\t\t\t\tvar _contents = _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after));\n\t\t\t\t\t_contents = _contents.replace(\/(<br \\\/>)\/gi, '');\n\t\t\t\t\t_contents = _contents.replace(\/(<\/p>\n<hr \\\/>)\/gi, '');<\/p>\n<p>                    \/\/  for rows, clear empty cells\n                    if (_tag_name == 'tr')\n                    {\n                        _contents = _contents.replace(\/<td[^>]*?>\/gi, '');\n                        _contents = _contents.replace(\/<\\\/td>\/gi, '');\n                    }<\/p>\n<p>                    \/\/  for tables, clear empty rows\n                    if (_tag_name == 'table')\n                    {\n                        _contents = _contents.replace(\/<tr[^>]*?>\/gi, '');\n                        _contents = _contents.replace(\/<\\\/tr>\/gi, '');\n                    }<\/p>\n<p>\t\t\t\tvar _contentsLength = $R.measureText__getTextLength(_contents);<\/p>\n<p>\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (_contentsLength == 0 && _tag_name == 'p'):\n\t\t\t\t\t\t_global__the_html = _global__the_html.substr(0, _pos__start__before) + '<\/p>\n<p>';\n\t\t\t\t\t\treturn;<\/p>\n<p>\t\t\t\t\tcase (_contentsLength == 0):\n\t\t\t\t\tcase ((_contentsLength < 5) &#038;&#038; ($R.parsingOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)):\n\t\t\t\t\t\t$R.debugOutline(_node, 'clean-after', 'blank');\n\t\t\t\t\t\t_global__the_html = _global__the_html.substr(0, _pos__start__before);\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}<\/p>\n<p>\t\/\/\ttoo much missing\n\t\/\/\t================\n\t\tif ($R.parsingOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1)\n\t\t{\n\t\t\t_explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true));\n\t\t\tvar\n\t\t\t\t_contents = _global__the_html\n\t\t\t\t\t\t\t.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n\t\t\t\t\t\t\t\t.replace(\/(<([^>]+)>)\/gi, ''),\n\t\t\t\t_contentsLength = $R.measureText__getTextLength(_contents),\n\t\t\t\t_initialLength = 0\n\t\t\t\t\t+ _explored._length__all_text \n\t\t\t\t\t+ (_explored._count__images_small \t\t\t\t\t* 10)\n\t\t\t\t\t+ (_explored._count__images_skip \t\t\t\t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('iframe').length \t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('object').length \t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('embed').length \t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('button').length \t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('input').length \t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('select').length \t\t* 10)\n\t\t\t\t\t+ (_node.getElementsByTagName('textarea').length \t* 10)\n\t\t\t;<\/p>\n<p>\t\t\t\/\/\ttoo much missing\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (!(_contentsLength > 0)):\n\t\t\t\tcase (!(_initialLength > 0)):\n\t\t\t\tcase (!((_contentsLength \/ _initialLength) < 0.5)):\n\t\t\t\tcase (!(($R.language == 'cjk') &#038;&#038; (_contentsLength \/ _initialLength) < 0.1)):\n\t\t\t\tcase ((_global__exploreNodeToBuildHTMLFor &#038;&#038; ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25))):\n\t\t\t\tcase (($R.language == 'cjk') && (_global__exploreNodeToBuildHTMLFor && ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.1))):\n\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\tdefault:\n\t\t\t\t\t$R.debugOutline(_node, 'clean-after', 'missing-density');\n\t\t\t\t\t_global__the_html = _global__the_html.substr(0, _pos__start__before);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}<\/p>\n<p>\t\t\t\/\/\treturn\n\t\t\t\treturn;\n\t\t};<\/p>\n<p>\t\t\/\/\tactually do it\n\t\t_recursive(_nodeToBuildHTMLFor);<\/p>\n<p>\t\t\/\/\treturn html\n\t\treturn _global__the_html;\n\t};<\/p>\n<p>    \/\/  article title marker\n    \/\/  ====================\n    $R.articleTitleMarker__start = '<\/p>\n<div id=\"articleHeader\">\n<h1>';\n    $R.articleTitleMarker__end = '<\/h1>\n<\/div>\n<p>';<\/p>\n<p>    \/\/  article title check function\n    \/\/  ============================\n    $R.getContent__find__hasIsolatedTitleInHTML = function (_html)\n    {\n        return (_html.substr(0, $R.articleTitleMarker__start.length) == $R.articleTitleMarker__start);\n    };<\/p>\n<p>    \/\/  article title get function\n    \/\/  ============================\n    $R.getContent__find__getIsolatedTitleInHTML = function (_html)\n    {\n        \/\/  is it there?\n        if ($R.getContent__find__hasIsolatedTitleInHTML(_html)); else { return ''; }<\/p>\n<p>        \/\/  regex\n        var \n            _getTitleRegex = new RegExp($R.articleTitleMarker__start + '(.*?)' + $R.articleTitleMarker__end, 'i'),\n            _getTitleMatch = _html.match(_getTitleRegex)\n        ;<\/p>\n<p>        \/\/  match?\n        if (_getTitleMatch); else { return ''; }<\/p>\n<p>        \/\/  return\n        return _getTitleMatch[1];\n    };<\/p>\n<p>    \/\/  find title in arbitrary html\n    \/\/  ============================\n    $R.getContent__find__isolateTitleInHTML = function (_html, _document_title)\n    {\n        \/\/  can't just use (h1|h2|h3|etc) -- 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        ;<\/p>\n<p>        \/\/  loop pregs\n        \/\/  ==========\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;<\/p>\n<p>                default:<\/p>\n<p>                    \/\/  measurements\n                    var\n                        _heading_end_pos = _heading_pregs[i].lastIndex,\n                        _heading_start_pos = (_heading_end_pos - _match[0].length),<\/p>\n<p>                        _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 = $R.measureText__getTextLength(_heading_text_plain),\n                        _heading_words = [],<\/p>\n<p>                        _to_heading_text = _html.substr(0, _heading_start_pos),\n                        _to_heading_length = $R.measureText__getTextLength(_to_heading_text.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' '))\n                    ;<\/p>\n<p>                    \/\/  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(' ');<\/p>\n<p>                            \/\/  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                            }<\/p>\n<p>                            \/\/  break continues for loop\n                            \/\/  nothing goes to switch's default\n                            \/\/  ================================<\/p>\n<p>                                \/\/  no break?\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) && (_search_document_title.indexOf(_heading_text_plain) > -1)):<\/p>\n<p>                                    \/\/  if it's slightly smaler, but is exactly at the begging or the end\n                                    case ((_heading_length > 10) && ((_search_document_title.indexOf(_heading_text_plain) == 1) || (_search_document_title.indexOf(_heading_text_plain) == (_search_document_title.length - 1 - _heading_text_plain.length)))):<\/p>\n<p>                                        _no_break = true;\n                                        break;\n                                }<\/p>\n<p>                                \/\/  break?\n                                var _break = false;\n                                switch (true)\n                                {\n                                    \/\/  no break?\n                                    case (_no_break):\n                                        break;<\/p>\n<p>                                    \/\/ heading too long? -- if not h2\n                                    case ((_heading_length > ((_search_document_title.length - 2) * 2)) && (_heading_type != 'h2')):<\/p>\n<p>                                    \/\/  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                                if (_break) { break; }\n                                \n                            \n                        default:\n                            \/\/  this is the title -- do isolation; return\n                            \/\/  =================\n                            return ''\n                            \n                                + $R.articleTitleMarker__start\n                                +   _heading_text \n                                + $R.articleTitleMarker__end\n                                \n                                + _html.substr(_heading_end_pos)\n                            ;\n                    }\n                \n                    break;\n            }\n        }\n        \n        \/\/  return unmodified\n        return _html;\n    };\n\n                \n\t$R.getContent__find = function ()\n\t{\n\t\t\/\/\tget content\n\t\t\/\/\t===========\n\t\t\tvar \n\t\t\t\t_found = $R.getContent__findInPage($R.win),\n\t\t\t\t_targetNode = _found._targetCandidate.__node,\n\t\t\t\t_$targetNode = $(_targetNode),\n                _aboveNodes = []\n\t\t\t;\n\n\t\t\/\/\tRTL\n\t\t\/\/\t===\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (_$targetNode.attr('dir') == 'rtl'):\n\t\t\t\tcase (_$targetNode.css('direction') == 'rtl'):\n\t\t\t\t\t$R.makeRTL();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\/\/  get html\n        \/\/  ========\n            var \n                _foundHTML = _found._html,\n                _firstFragmentBefore = $R.getContent__nextPage__getFirstFragment(_foundHTML),\n                _documentTitle = ($R.document.title > '' ? $R.document.title : '')\n            ;<\/p>\n<p>        \/\/  get title\n        \/\/  =========<\/p>\n<p>            \/\/  has title already?\n            _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle);\n            $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n            $R.debugPrint('TitleSource', 'target');<\/p>\n<p>            \/\/  get html above?\n            if ($R.articleTitle > ''); else\n            {<\/p>\n<p>    \/\/  get html above target?\n    \/\/  ======================<\/p>\n<p>    \/\/  global vars:\n    \/\/      _found\n    \/\/      _foundHTML\n    \/\/      _documentTitle\n    \/\/      _aboveNodes<\/p>\n<p>    var \n        _prevNode = _found._targetCandidate.__node,\n        _prevHTML = '',\n        _aboveHTML = '',\n        _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node)\n    ;<\/p>\n<p>    (function () \n    {<\/p>\n<p>        while (true)\n        {\n            \/\/  the end?\n            switch (true)\n            {\n                case (_prevNode.tagName && (_prevNode.tagName.toLowerCase() == 'body')):\n                case (_differentTargets && (_prevNode == _found._firstCandidate.__node)):\n                    \/\/  enough is enough\n                    return;\n            }<\/p>\n<p>            \/\/  up or sideways?\n            if (_prevNode.previousSibling); else\n            {\n                _prevNode = _prevNode.parentNode;\n                continue;\n            }<\/p>\n<p>            \/\/\tprevious\n            _prevNode = _prevNode.previousSibling;<\/p>\n<p>            \/\/\toutline -- element might be re-outlined, when buildHTML is invoked\n            if ($R.debug) { $R.debugOutline(_prevNode, 'target', 'add-above'); }<\/p>\n<p>            \/\/\tget html; add\n            _prevHTML = $R.getContent__buildHTMLForNode(_prevNode, 'above-the-target');\n            _aboveHTML = _prevHTML + _aboveHTML;\n            _aboveNodes.unshift(_prevNode);<\/p>\n<p>            \/\/  isolate title\n            _aboveHTML = $R.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle);<\/p>\n<p>            \/\/\tfinished?\n            switch (true)\n            {\n                case ($R.measureText__getTextLength(_aboveHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ')) > (65 * 3 * 3)):\n                case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                    return;\n            }\n        }<\/p>\n<p>    })();<\/p>\n<p>    \/\/  is what we found any good?\n    \/\/  ==========================\n    switch (true)\n    {\n        case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n        case (_differentTargets && (_aboveHTML.split('<a ').length < 3) &#038;&#038; ($R.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                $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                $R.debugPrint('TitleSource', 'above_HTML');\n\n                \/\/  get document title?\n                if ($R.articleTitle > ''); else\n                {<\/p>\n<p>    \/\/  if all else failed, get document title\n    \/\/  ======================================<\/p>\n<p>    \/\/  global vars:\n    \/\/      _foundHTML\n    \/\/      _documentTitle<\/p>\n<p>    (function ()\n    {\n        \/\/  return?\n        \/\/  =======\n            if (_documentTitle > ''); else { return; }<\/p>\n<p>        \/\/  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            }<\/p>\n<p>        \/\/\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            \n                + $R.articleTitleMarker__start\n                +   (_doc_title_parts[0].split(\/\\s+\/i).length > 1 ? _doc_title_parts[0] : _documentTitle) \n                + $R.articleTitleMarker__end <\/p>\n<p>                + _foundHTML\n            ;<\/p>\n<p>    })();\n                    $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                    $R.debugPrint('TitleSource', 'document_title');\n                }\n            }<\/p>\n<p>\t\t\/\/\tdisplay\n\t\t\/\/\t=======\n\t\t\t$R.$pages.html('');\n\t\t\t$R.displayPageHTML(_foundHTML, 1, $R.win.location.href);<\/p>\n<p>\t\t\/\/\tremember\n\t\t\/\/\t========\n\t\t\t$R.debugRemember['theTarget'] = _found._targetCandidate.__node;\n\t\t\t$R.debugRemember['firstCandidate'] = _found._firstCandidate.__node;<\/p>\n<p>\t\t\/\/\tnext\n\t\t\/\/\t====\n            $R.nextPage__firstFragment__firstPage = _firstFragmentBefore;\n            $R.nextPage__firstFragment__lastPage = $R.getContent__nextPage__getFirstFragment(_foundHTML);;<\/p>\n<p>\t\t\t$R.nextPage__loadedPages = [$R.win.location.href];\n\t\t\t$R.getContent__nextPage__find($R.win, _found._links);<\/p>\n<p>\t\t\/\/\treturn\n\t\treturn true;\n\t};<\/p>\n<p>\t$R.getContent__findInPage = function (_pageWindow)\n\t{\n\t\t\/\/\tcalculations\n\t\t\/\/\t============<\/p>\n<p>\t\t\tvar\n\t\t\t\t_firstCandidate = false,\n\t\t\t\t_secondCandidate = false,\n\t\t\t\t_targetCandidate = false\n\t\t\t;<\/p>\n<p>\t\t\t$R.debugTimerStart('ExploreAndGetStuff');\n\t\t\t\tvar\t_stuff = $R.getContent__exploreNodeAndGetStuff(_pageWindow.document.body);\n\t\t\t$R.debugPrint('ExploreAndGetStuff', $R.debugTimerEnd()+'ms');<\/p>\n<p>\t\t\t$R.debugTimerStart('ProcessFirst');\n\t\t\t\tvar _processedCandidates = $R.getContent__processCandidates(_stuff._candidates);\n\t\t\t\t_firstCandidate = _processedCandidates[0];\n\t\t\t\t_targetCandidate = _firstCandidate;\n\t\t\t$R.debugPrint('ProcessFirst', $R.debugTimerEnd()+'ms');<\/p>\n<p>            \/\/  debug\n\t\t\tif ($R.debug)\n\t\t\t{\n                \/\/  debug first candidates\n                $R.log('First 5 Main Candidates:');\n\t\t\t\tfor (var x in _processedCandidates)\n                {\n                    if (x == 5) { break; }\n                    $R.log(_processedCandidates[x], _processedCandidates[x].__node);\n                }<\/p>\n<p>                \/\/  highlight first\n                $R.debugOutline(_firstCandidate.__node, 'target', 'first');\n            }<\/p>\n<p>            \/\/  in case we stop\n            $R.debugPrint('Target', 'first');<\/p>\n<p>\t\t\t\/\/  do second?\n\t\t\tswitch (true)\n\t\t\t{\n\t\t\t\tcase (!(_firstCandidate._count__containers > 0)):\n\t\t\t\tcase (!(_firstCandidate._count__candidates > 0)):\n\t\t\t\tcase (!(_firstCandidate._count__pieces > 0)):\n\t\t\t\tcase (!(_firstCandidate._count__containers > 25)):\n\t\t\t\t\tbreak;<\/p>\n<p>\t\t\t\tdefault:<\/p>\n<p>                    $R.debugTimerStart('ProcessSecond');\n                        var _processedCandidatesSecond = $R.getContent__processCandidatesSecond(_processedCandidates);\n                        _secondCandidate = _processedCandidatesSecond[0];\n                    $R.debugPrint('ProcessSecond', $R.debugTimerEnd()+'ms');<\/p>\n<p>                    \/\/  they're the same\n                    if (_firstCandidate.__node == _secondCandidate.__node) { break; }<\/p>\n<p>                    \/\/  debug\n                    if ($R.debug)\n                    {\n                        \/\/  log second candidates\n                        $R.log('First 5 Second Candidates:');\n                        for (var x in _processedCandidatesSecond)\n                        {\n                            if (x == 5) { break; }\n                            $R.log(_processedCandidatesSecond[x], _processedCandidatesSecond[x].__node);\n                        }<\/p>\n<p>                        \/\/  highlight second\n                        $R.debugOutline(_secondCandidate.__node, 'target', 'second');\n                    }<\/p>\n<p>                    \/\/  compute again\n                    \/\/  =============\n                        _firstCandidate['__points_history_final'] = $R.getContent__computePointsForCandidateThird(_firstCandidate, _firstCandidate);\n                        _firstCandidate['__points_final'] = _firstCandidate.__points_history_final[0];<\/p>\n<p>                        _secondCandidate['__points_history_final'] = $R.getContent__computePointsForCandidateThird(_secondCandidate, _firstCandidate);\n                        _secondCandidate['__points_final'] = _secondCandidate.__points_history_final[0];<\/p>\n<p>                    \/\/  log results\n                    \/\/  ===========\n                        if ($R.debug)\n                        {\n                            $R.log('The 2 Candidates:');\n                            $R.log(_firstCandidate);\n                            $R.log(_secondCandidate);\n                        }<\/p>\n<p>                    \/\/  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) && (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.9):\n                            case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 50) && (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.75):\n                                _targetCandidate = _secondCandidate;\n                                $R.debugPrint('Target', 'second');\n                                break;\n                        }<\/p>\n<p>                    \/\/  print points\n                    \/\/  ============\n                        if ($R.debug)\n                        {\n                            $R.debugPrint('PointsFirst', _firstCandidate['__points_history_final'][0].toFixed(2));\n                            $R.debugPrint('PointsSecond', _secondCandidate['__points_history_final'][0].toFixed(2));\n                        }<\/p>\n<p>\t\t\t\t\tbreak;\n\t\t\t}<\/p>\n<p>            \/\/  highlight target\n            \/\/  ================\n                if ($R.debug)\n                {\n                    $(_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                }<\/p>\n<p>\t\t\/\/\tget html\n\t\t\/\/\t========\n\t\t\t$R.debugTimerStart('BuildHTML');\n\t\t\t\tvar _html = $R.getContent__buildHTMLForNode(_targetCandidate.__node, 'the-target');\n\t\t\t\t\t_html = _html.substr((_html.indexOf('>')+1))\n                    _html = _html.substr(0, _html.lastIndexOf('<'));\n\t\t\t$R.debugPrint('BuildHTML', $R.debugTimerEnd()+'ms');\n\n\t\t\t$R.debugTimerStart('BuildHTMLPregs');\n\t\t\t\t_html = _html.replace(\/<(blockquote|div|p|td|li)([^>]*)>(\\s*<br \\\/>)+\/gi, '<$1$2>');\n\t\t\t\t_html = _html.replace(\/(<br \\\/>\\s*)+<\\\/(blockquote|div|p|td|li)>\/gi, '<\/$2>');\n\t\t\t\t_html = _html.replace(\/(<br \\\/>\\s*)+<(blockquote|div|h\\d|ol|p|table|ul|li)([^>]*)>\/gi, '<$2$3>');\n\t\t\t\t_html = _html.replace(\/<\\\/(blockquote|div|h\\d|ol|p|table|ul|li)>(\\s*<br \\\/>)+\/gi, '<\/$1>');\n\t\t\t\t_html = _html.replace(\/(<\/p>\n<hr \\\/>\\s*<\/p>\n<hr \\\/>\\s*)+\/gi, '<\/p>\n<hr \/>\n<p>');\n\t\t\t\t_html = _html.replace(\/(<br \\\/>\\s*<br \\\/>\\s*)+\/gi, '<\/p>\n<p>');\n\t\t\t$R.debugPrint('BuildHTMLPregs', $R.debugTimerEnd()+'ms');<\/p>\n<p>\t\t\/\/\treturn\n\t\t\/\/\t======\n\t\t\treturn {\n\t\t\t\t'_html': _html,\n\t\t\t\t'_links': _stuff._links,\n\t\t\t\t'_targetCandidate': _targetCandidate,\n\t\t\t\t'_firstCandidate': _firstCandidate\n\t\t\t};\n\t};<\/p>\n<p>    \/\/  get first page fragment\n    \/\/  =======================<\/p>\n<p>        $R.getContent__nextPage__getFirstFragment = function (_html)\n        {\n            \/\/  remove all tags\n            _html = _html.replace(\/<[^>]+?>\/gi, '');<\/p>\n<p>            \/\/  normalize spaces\n            _html = _html.replace(\/\\s+\/gi, ' ');<\/p>\n<p>            \/\/  return first 1000 characters\n            return _html.substr(0, 2000);\n        };<\/p>\n<p>    \/\/  get link parts\n    \/\/  ==============<\/p>\n<p>        \/\/  substr starting with the first slash after \/\/\n\t\t$R.getURLPath = function (_url)\n\t\t{\n\t\t\treturn _url.substr(_url.indexOf('\/', (_url.indexOf('\/\/') + 2)));\n\t\t};<\/p>\n<p>        \/\/  substr until the first slash after \/\/\n\t\t$R.getURLDomain = function (_url)\n\t\t{\n\t\t\treturn _url.substr(0, _url.indexOf('\/', (_url.indexOf('\/\/') + 2)))\n\t\t};<\/p>\n<p>\t\/\/\tfind\n\t\/\/\t====\n\t\t$R.getContent__nextPage__find = function (_currentPageWindow, _linksInCurrentPage)\n\t\t{\n\t\t\t\/\/\tpage id\n\t\t\t\tvar _pageNr = ($R.nextPage__loadedPages.length + 1);<\/p>\n<p>\t\t\t\/\/\tget\n\t\t\t\/\/\t===\n\t\t\t\tvar _possible = [];\n\t\t\t\tif (_possible.length > 0); else { _possible = $R.getContent__nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.5); }\n\t\t\t\t\/\/if (_possible.length > 0); else { _possible = $R.getContent__nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.50); }<\/p>\n<p>\t\t\t\t\/\/\tnone\n\t\t\t\tif (_possible.length > 0); else\n\t\t\t\t\t{ if ($R.debug) { $R.log('no next link found'); } return; }<\/p>\n<p>\t\t\t\tif ($R.debug) { $R.log('possible next', _possible); }<\/p>\n<p>\t\t\t\/\/\tthe one\n\t\t\t\/\/\t=======\n\t\t\t\tvar _nextLink = false;<\/p>\n<p>\t\t\t\/\/\tnext keyword?\n\t\t\t\/\/\t=============\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }<\/p>\n<p>\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var j=0, _j=$R.nextPage__captionKeywords.length; j<_j; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_possible[i]._caption.indexOf($R.nextPage__captionKeywords[j]) > -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\/\/\tlength\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\tif (_possible[i]._caption.length > $R.nextPage__captionKeywords[j].length * 2)\n\t\t\t\t\t\t\t\t\t\t{ continue; }<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tnot keywords\n\t\t\t\t\t\t\t\t\/\/\t============\n\t\t\t\t\t\t\t\t\tfor (var z=0, _z=$R.nextPage__captionKeywords__not.length; z<_z; z++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_possible[i]._caption.indexOf($R.nextPage__captionKeywords__not[z]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _nextLink = false; return; }\n\t\t\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tgot it\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\t_nextLink = _possible[i];\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\t<\/p>\n<p>\t\t\t\/\/\tcaption matched page number\n\t\t\t\/\/\t===========================\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }<\/p>\n<p>\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (_possible[i]._caption == (''+_pageNr))\n\t\t\t\t\t\t\t{ _nextLink = _possible[i]; return; }\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\/\/\tnext keyword in title\n\t\t\t\/\/\t=====================\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }\n\n\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\t\/\/\tsanity\n\t\t\t\t\t\tif (_possible[i]._title > ''); else { continue; }\n\t\t\t\t\t\tif ($R.measureText__getTextLength(_possible[i]._caption) <= 2); else { continue; }\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var j=0, _j=$R.nextPage__captionKeywords.length; j<_j; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_possible[i]._title.indexOf($R.nextPage__captionKeywords[j]) > -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\/\/\tlength\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\tif (_possible[i]._title.length > $R.nextPage__captionKeywords[j].length * 2)\n\t\t\t\t\t\t\t\t\t\t{ continue; }<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tnot keywords\n\t\t\t\t\t\t\t\t\/\/\t============\n\t\t\t\t\t\t\t\t\tfor (var z=0, _z=$R.nextPage__captionKeywords__not.length; z<_z; z++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_possible[i]._title.indexOf($R.nextPage__captionKeywords__not[z]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _nextLink = false; return; }\n\t\t\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tgot it\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\t_nextLink = _possible[i];\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();<\/p>\n<p>\t\t\t\/\/\treturn?\n\t\t\t\/\/\t=======\n\t\t\t\tif (_nextLink); else { return; }<\/p>\n<p>\t\t\t\/\/\tmark\n\t\t\t\/\/\t====\n\t\t\t\t$R.debugPrint('NextPage', 'true');<\/p>\n<p>\t\t\t\tif ($R.debug)\n\t\t\t\t{\n\t\t\t\t\t$R.debugOutline(_nextLink._node, 'target', 'next-page');\n\t\t\t\t\t$R.log('NextPage Link', _nextLink, _nextLink._node);\n\t\t\t\t}<\/p>\n<p>\t\t\t\/\/\tprocess page\n\t\t\t\/\/\t============\n\t\t\t\t$R.getContent__nextPage__loadToFrame(_pageNr, _nextLink._href);\n\t\t\t\t$R.nextPage__loadedPages.push(_nextLink._href);\n\t\t};<\/p>\n<p>\t\/\/\tfind with similarity\n\t\/\/\t====================\n\t\t$R.getContent__nextPage__find__possible = function (_currentPageWindow, _linksInCurrentPage, _distanceFactor)\n\t\t{\n\t\t\tvar \n\t\t\t\t_mainPageHref = $R.win.location.href,\n\t\t\t\t_mainPageDomain = $R.getURLDomain(_mainPageHref),\n\t\t\t\t_mainPagePath = $R.getURLPath(_mainPageHref)\n\t\t\t;<\/p>\n<p>\t\t\tvar _links = $.map\n\t\t\t(\n\t\t\t\t_linksInCurrentPage,\n\t\t\t\tfunction (_element, _index)\n\t\t\t\t{\n\t\t\t\t\tvar \n\t\t\t\t\t\t_href = _element.__node.href,\n\t\t\t\t\t\t_path = $R.getURLPath(_href),\n\t\t\t\t\t\t_title = (_element.__node.title > '' ? _element.__node.title.toLowerCase() : ''),\n\t\t\t\t\t\t_caption = _element.__node.innerHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\&[^\\&\\s;]{1,10};\/gi, '').replace(\/\\s+\/gi, ' ').replace(\/^ \/, '').replace(\/ $\/, '').toLowerCase(),\n\t\t\t\t\t\t_distance = $R.levenshteinDistance(_mainPagePath, _path)\n\t\t\t\t\t;<\/p>\n<p>\t\t\t\t\tvar _caption2 = '';\n\t\t\t\t\tfor (var i=0, _i=_caption.length, _code=0; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\t_code = _caption.charCodeAt(i);\n\t\t\t\t\t\t_caption2 += (_code > 127 ? ('&#'+_code+';') : _caption.charAt(i));\n\t\t\t\t\t}\n\t\t\t\t\t_caption = _caption2;<\/p>\n<p>\t\t\t\t\tswitch (true)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase (!(_href > '')):\n\t\t\t\t\t\tcase (_mainPageHref.length > _href.length):\n\t\t\t\t\t\tcase (_mainPageDomain != $R.getURLDomain(_href)):\n\t\t\t\t\t\tcase (_href.substr(_mainPageHref.length).substr(0, 1) == '#'):\n\t\t\t\t\t\tcase (_distance > Math.ceil(_distanceFactor * _path.length)):\n\t\t\t\t\t\t\treturn null;<\/p>\n<p>\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\/\/\tskip if already loaded as next page\n\t\t\t\t\t\t\tfor (var i=0, _i=$R.nextPage__loadedPages.length; i<_i; i++)\n\t\t\t\t\t\t\t\t{ if ($R.nextPage__loadedPages[i] == _href) { return null; } }\n\n\t\t\t\t\t\t\t\/\/\treturn\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t'_node': _element.__node,\n\t\t\t\t\t\t\t\t'_href': _href,\n\t\t\t\t\t\t\t\t'_title': _title,\n\t\t\t\t\t\t\t\t'_caption': _caption,\n\t\t\t\t\t\t\t\t'_distance': _distance\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\t\/\/\tsort -- the less points, the closer to position 0\n\t\t\t\/\/\t====\n\t\t\t\t_links.sort(function (a, b)\n\t\t\t\t{\n\t\t\t\t\tswitch (true)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase (a._distance < b._distance): return -1;\n\t\t\t\t\t\tcase (a._distance > b._distance): return 1;\n\t\t\t\t\t\tdefault: return 0;\n\t\t\t\t\t}\n\t\t\t\t});<\/p>\n<p>\t\t\t\/\/\treturn\n\t\t\t\treturn _links;\n\t\t};<\/p>\n<p>\t\/\/\tload to frame\n\t\/\/\t=============\n\t\t$R.getContent__nextPage__loadToFrame = function (_pageNr, _nextPageURL)\n\t\t{\n\t\t\t\/\/\tdo ajax\n\t\t\t\/\/\t=======\n\t\t\t\t$.ajax\n\t\t\t\t({\n\t\t\t\t\t'url' : _nextPageURL,<\/p>\n<p>\t\t\t\t\t'type' : 'GET',\n\t\t\t\t\t'dataType' : 'html',\n\t\t\t\t\t'async' : true,\n\t\t\t\t\t'timeout': (10 * 1000),<\/p>\n<p>\t\t\t\t\t\/\/'headers': { 'Referrer': _nextPageURL },<\/p>\n<p>\t\t\t\t\t'success' : function (_response, _textStatus, _xhr)\t{ $R.getContent__nextPage__ajaxComplete(_pageNr, _response, _textStatus, _xhr); },\n\t\t\t\t\t'error' : \tfunction (_xhr, _textStatus, _error)\t{ $R.getContent__nextPage__ajaxError(_pageNr, _xhr, _textStatus, _error); }\n\t\t\t\t});\n\t\t};<\/p>\n<p>\t\/\/\tajax calbacks\n\t\/\/\t=============\n\t\t$R.getContent__nextPage__ajaxError = function (_pageNr, _xhr, _textStatus, _error)\n\t\t{\n\t\t};<\/p>\n<p>\t\t$R.getContent__nextPage__ajaxComplete = function (_pageNr, _response, _textStatus, _xhr)\n\t\t{\n\t\t\t\/\/\tvalid?\n\t\t\t\/\/\t======\n\t\t\t\tif (_response > ''); else { return; }<\/p>\n<p>\t\t\t\/\/\tscript\n\t\t\t\/\/\t======\n\t\t\t\tvar _script = ''\n\t\t\t\t\t+ '<script type=\"text\/javascript\">'\n\t\t\t\t\t+ ' function __this_page_loaded()'\n\t\t\t\t\t+ '\t{'\n\t\t\t\t\t+ ' \twindow.setTimeout('\n\t\t\t\t\t+ ' \t\tfunction () {'\n                    +               ($R.component ? 'window.parent.' : 'window.parent.parent.')\n                    +                   '$readable.getContent__nextPage__loadedInFrame(\"'+_pageNr+'\", window); }, '\n\t\t\t\t\t+ ' \t\t250'\n\t\t\t\t\t+ ' \t);'\n\t\t\t\t\t+ ' } '<\/p>\n<p>\t\t\t\t\t+ ' if (document.readyState); else { __this_page_loaded(); } '<\/p>\n<p>\t\t\t\t\t+ ' function __this_page_loaded_ready(delayedNrTimes)'\n\t\t\t\t\t+ ' {'\n\t\t\t\t\t+ ' \tif (document.readyState != \"complete\" && delayedNrTimes < 30)'\n\t\t\t\t\t+ '\t\t\t{ setTimeout(function () { __this_page_loaded_ready(delayedNrTimes+1); }, 100); return; }'\n\t\t\t\t\t\n\t\t\t\t\t+ ' \t__this_page_loaded();'\n\t\t\t\t\t+ ' }'\n\t\t\t\t\t\n\t\t\t\t\t+ ' __this_page_loaded_ready(0);'\n\t\t\t\t\t+ '<\/script><\/p>\n<p>\n\t&#39; ; \/\/ get html \/\/ ======== var _html = _response; \/\/ normalize \/\/ ========= _html = _html.replace(\/<\\s+>\/gi, &#39;&gt;&#39;); _html = _html.replace(\/\\s+\\\/&gt;\/gi, &#39;\/&gt;&#39;); \/\/ remove \/\/ ====== _html = _html.replace(\/<script[^>]*?&gt;([\\s\\S]*?)<\\>\/gi, &#39;&#39;); _html = _html.replace(\/<script[^>]*?\\\/&gt;\/gi, &#39;&#39;); _html = _html.replace(\/<noscript[^>]*?&gt;([\\s\\S]*?)<\\>\/gi, &#39;&#39;); _html = _html.replace(\/&#39; ); \/\/ write to frame \/\/ ============== var _doc = $(&#39;#nextPageFrame__&#39;+_pageNr).contents().get(0); _doc.open(); _doc.write(_html); _doc.close(); }; \/\/ loaded in frame \/\/ =============== $R.getContent__nextPage__loadedInFrame = function (_pageNr, _pageWindow) { \/\/ find \/\/ ==== var _found = $R.getContent__findInPage(_pageWindow), _foundHTML = _found._html, _removeTitleRegex = new RegExp($R.articleTitleMarker__start + &#39;(.*?)&#39; + $R.articleTitleMarker__end, &#39;i&#39;) ; \/\/ get first fragment \/\/ ================== var _firstFragment = $R.getContent__nextPage__getFirstFragment(_foundHTML); \/\/ gets first 2000 characters \/\/ diff set at 100 -- 0.05 switch (true) { case ($R.levenshteinDistance(_firstFragment, $R.nextPage__firstFragment__firstPage) &lt; 100): case ($R.levenshteinDistance(_firstFragment, $R.nextPage__firstFragment__lastPage) &lt; 100): \/\/ mark $R.debugPrint(&#39;NextPage&#39;, &#39;false&#39;); \/\/ mark again if ($R.debug) { $(&#39;#debugOutput__value__NextPage&#39;).html(&#39;false&#39;); } \/\/ pop page $R.nextPage__loadedPages.pop(); \/\/ break return false; default: \/\/ add to first fragemnts $R.nextPage__firstFragment__lastPage = _firstFragment; break; } \/\/ remove title -- do it twice \/\/ ============ \/\/ once with document title _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, ($R.document.title &gt; &#39;&#39; ? $R.document.title : &#39;&#39;)); _foundHTML = _foundHTML.replace(_removeTitleRegex, &#39;&#39;); \/\/ once with article title _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, $R.articleTitle); _foundHTML = _foundHTML.replace(_removeTitleRegex, &#39;&#39;); \/\/ display \/\/ ======= $R.displayPageHTML(_foundHTML, _pageNr, _pageWindow.location.href); \/\/ next \/\/ ==== $R.getContent__nextPage__find(_pageWindow, _found._links); }; \/\/ rewrites \/\/ ======== \/\/ rewrite displayPageHTML -- for multi-page articles \/\/ ======================= $R.displayPageHTML = function (_processedPageHTML, _pageNr, _pageURL) { \/\/ skip first if (_pageNr &gt; 1); else { return; } \/\/ push to pages $C._nextPages.push({ &#39;_html&#39;: _processedPageHTML, &#39;_url&#39;: _pageURL }); }; \/\/ rewrite makeRTL -- for right-to-left pages \/\/ =============== $R.makeRTL = function () { $R.rtl = true; }; $R.makeNotRTL = function () { $R.rtl = false; } \/\/ set component object \/\/ ==================== window.ClearlyComponent = $C; window.$readable = $R; }\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/*\n    http:\/\/www.JSON.org\/json2.js\n    2008-11-19<\/p>\n<p>    Public Domain.<\/p>\n<p>    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.<\/p>\n<p>    See http:\/\/www.JSON.org\/js.html<\/p>\n<p>    This file creates a global JSON object containing two methods: stringify\n    and parse.<\/p>\n<p>        JSON.stringify(value, replacer, space)\n            value       any JavaScript value, usually an object or array.<\/p>\n<p>            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.<\/p>\n<p>            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.<\/p>\n<p>            This method produces a JSON text from a JavaScript value.<\/p>\n<p>            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.<\/p>\n<p>            For example, this would serialize Dates as ISO strings.<\/p>\n<p>                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\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\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\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\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\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\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})();\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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&&(e=c.wheelDelta\/120),c.detail&&(e=-c.detail\/3),h=e,c.axis!==undefined&&c.axis===c.HORIZONTAL_AXIS&&(h=0,g=-1*e),c.wheelDeltaY!==undefined&&(h=c.wheelDeltaY\/120),c.wheelDeltaX!==undefined&&(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(\"<\/p>\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(\"<\/p>\n<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' \/>\");var k=g.children(\".mCSB_h_wrapper\");k.wrapInner(\"<\/p>\n<div class='mCSB_container' style='position:absolute; left:0;' \/>\").children(\".mCSB_container\").css({width:k.children().outerWidth(),position:\"relative\"}).unwrap()}else{g.wrapInner(\"<\/p>\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(\"<\/p>\n<div class='mCSB_scrollTools' style='position:absolute;'>\n<div class='mCSB_draggerContainer'>\n<div class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'>\n<div class='mCSB_dragger_bar' style='position:relative;'><\/div>\n<\/div>\n<div class='mCSB_draggerRail'><\/div>\n<\/div>\n<\/div>\n<p>\");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\")&&!m.is(\".mCS_destroyed\")){var w=c(window).width(),v=c(window).height();if(j!==w||u!==v){if(m.css(\"max-height\")!==\"none\"&&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(\"<\/p>\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(\"<\/p>\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&&!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&&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&&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&&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&&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&&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\")&&!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\"&&!i.data(\"horizontalScroll\")){v=k.outerHeight()-g.height()}else{if(e===\"left\"){v=0}else{if(e===\"right\"&&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&&!i.data(\"mCS_tweenRunning\")){u(\"onScrollStart\")}if(i.data(\"autoHideScrollbar\")&&!i.data(\"alwaysShowScrollbar\")){d.showScrollbar.call(r)}},onUpdate:function(){if(f.callbacks){u(\"whileScrolling\")}},onComplete:function(){if(f.callbacks){u(\"onScroll\");if(q||(s&&k.position().left>=s)){u(\"onTotalScrollBack\")}if(m||(l&&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&&!i.data(\"mCS_tweenRunning\")){u(\"onScrollStart\")}if(i.data(\"autoHideScrollbar\")&&!i.data(\"alwaysShowScrollbar\")){d.showScrollbar.call(r)}},onUpdate:function(){if(f.callbacks){u(\"whileScrolling\")}},onComplete:function(){if(f.callbacks){u(\"onScroll\");if(q||(s&&k.position().top>=s)){u(\"onTotalScrollBack\")}if(m||(l&&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&&!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);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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();<\/p>\n<p>\/\/ <input type=\"text\" placeholder=\"username\">\n(function($){\n    \/\/feature detection\n    var hasPlaceholder = 'placeholder' in document.createElement('input');\n    var placeholderClass = 'evn-placeholder';<\/p>\n<p>    \/\/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 && $.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>');<\/p>\n<p>            \/\/stuff in some calculated values into the placeholderCSS object\n\/\/            options.placeholderCSS['width'] = inputWidth;\n            options.placeholderCSS['height'] = inputHeight;<\/p>\n<p>            \/\/ adjust position of placeholder\n            options.placeholderCSS.left = (isOldOpera && (this.type == 'email' || this.type == 'url')) ?\n                '11%' : o_left;\n            placeholder.css(options.placeholderCSS);<\/p>\n<p>            \/\/place the placeholder if the input is empty<\/p>\n<p>            $this.wrap(options.inputWrapper);\n            $this.attr('id', inputId).after(placeholder);<\/p>\n<p>            if(inputVal) {\n                $this.next().hide();\n            }<\/p>\n<p>            \/\/hide placeholder on focus\n            $this.focus(function(){\n                $this.next().hide();\n            });<\/p>\n<p>            \/\/show placeholder if the input is empty\n            $this.blur(function(){\n                if (!$.trim($this.val())){\n                    $this.next().show();\n                };\n            });\n        });\n    };<\/p>\n<p>    \/\/expose defaults\n    $.fn.placeholder.defaults = {\n        \/\/you can pass in a custom wrapper\n        inputWrapper: '<\/p>\n<div style=\"position:relative;\"><\/div>\n<p>',\n        placeholderText: null,<\/p>\n<p>        \/\/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);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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 *\/<\/p>\n<p>\/*\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<\/p>\n<p>    to do:\n    ======\n*\/<\/p>\n<p>function initClearlyComponent__detect(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================<\/p>\n<p>        \/\/  null; return\n        if (_paramInstance); else { return false; }<\/p>\n<p>        \/\/  shorthand\n        $D = _paramInstance;<\/p>\n<p>    \/\/  global instance reference }<\/p>\n<p>    \/\/  required vars {\n    \/\/  ===============<\/p>\n<p>        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:<\/p>\n<p>        switch (true)\n        {\n            case (!($D.callbacks)):\n            case (!($D.callbacks.finished)):<\/p>\n<p>            case (!($D.window)):\n            case (!($D.document)):\n            case (!($D.document.body)):<\/p>\n<p>            case (!($D.jQuery)):<\/p>\n<p>                if ($D.debug)\n                {\n                    console.log(!($D.callbacks));\n                    console.log(!($D.callbacks.finished));<\/p>\n<p>                    console.log(!($D.window));\n                    console.log(!($D.document));\n                    console.log(!($D.document.body));<\/p>\n<p>                    console.log(!($D.jQuery));\n                }<\/p>\n<p>                \/\/  something's wrong\n                return false;\n        }<\/p>\n<p>    \/\/  required vars }<\/p>\n<p>    \/\/  global vars {\n    \/\/  =============<\/p>\n<p>        $CJ = $D.jQuery;<\/p>\n<p>        $D.$window = $CJ($D.window);\n        $D.$document = $CJ($D.document);<\/p>\n<p>    \/\/  global vars }<\/p>\n<p>    \/\/  parse options {\n    \/\/  ===============   <\/p>\n<p>\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|',<\/p>\n<p>\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|',<\/p>\n<p>\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|',<\/p>\n<p>            '_unskippable_attribute':               'clearly__unskippable_element',\n            '_unskippable_attribute_value':         'yes',<\/p>\n<p>            '_use_document_title_attribute':        'clearly__use_document_title_as_article_title',\n            '_use_document_title_attribute_value':  'yes',<\/p>\n<p>            '_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'],<\/p>\n<p>\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'],<\/p>\n<p>\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'],<\/p>\n<p>\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],<\/p>\n<p>\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},<\/p>\n<p>\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],<\/p>\n<p>\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],<\/p>\n<p>\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};<\/p>\n<p>    \/\/  parse options }<\/p>\n<p>    \/\/  debug {\n    \/\/  =======<\/p>\n<p>        $D.debug = ($D.debug || false);\n\t\t$D.debugRemembered = {};\n        $D.debugTimers = [];<\/p>\n<p>\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 && $D.window.console.log))):    $D.writeLog = function (msg) { $D.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($D.window.opera && $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}<\/p>\n<p>            \/\/  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                    }<\/p>\n<p>                    switch (true)\n                    {\n                        case (_category == 'target' && _reason == 'first'):                 _outline = '#00cc00'; _background = 'rgba(0, 255, 0, 0.5)';         break;\n                        case (_category == 'target' && _reason == 'second'):                _outline = '#0000cc'; _background = 'rgba(0, 0, 255, 0.5)';         break;<\/p>\n<p>                        case (_category == 'target' && _reason == 'next-page'):             _outline = '#FF80C0'; _background = 'rgba(255, 128, 192, 0.5)';     break;\n                        case (_category == 'target' && _reason == 'add-above'):             _outline = '#804000'; _background = 'rgba(128, 64, 0, 0.5)';        break;<\/p>\n<p>                        case (_category == 'clean-before' && _reason == 'floating'):        _outline = '#808080'; _background = 'rgba(128, 128, 128, 0.5)';     break;\n                        case (_category == 'clean-after' && _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                    }<\/p>\n<p>                    \/\/  do\n                    $CJ(_element).attr('readable__outline', (_category + ': ' + _reason));\n                    $CJ(_element).css({ 'outline': '5px solid ' + _outline, 'background-color': '' + _background });\n                };<\/p>\n<p>\t\t\/\/\ttimers\n\t\t\/\/\t======<\/p>\n<p>\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};<\/p>\n<p>\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        }<\/p>\n<p>    \/\/  debug }<\/p>\n<p>    \/\/  language {\n    \/\/  ==========<\/p>\n<p>        \/\/  default\n        $D.language = 'general';<\/p>\n<p>        \/\/  text to test\n        \/\/  ============<\/p>\n<p>            \/\/  title\n            $D.textForlanguageDetection = $D.document.title;<\/p>\n<p>            \/\/  snippets\n            \/\/  ...<\/p>\n<p>        \/\/  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            }<\/p>\n<p>    \/\/  language }<\/p>\n<p>    \/\/  rtl {\n    \/\/  =====<\/p>\n<p>        \/\/  flags\n        $D.rtl = false;\n        $D.maybeRTL = false;<\/p>\n<p>        \/\/  on\/off\n        $D.makeRTL = function () { $D.rtl = true; };\n        $D.makeNotRTL = function () { $D.rtl = false; };<\/p>\n<p>        \/\/\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});<\/p>\n<p>\t\t\t\/\/\tmaybe?\n            if (true\n                && (!$D.rtl) \n                && ($D.$document.find(\"div[dir='rtl'], table[dir='rtl'], td[dir='rtl']\").length > 0)\n            ) { $D.maybeRTL = true; }\n\t\t}\n\t\t)();<\/p>\n<p>    \/\/  rtl }<\/p>\n<p>    \/\/  measure text {\n    \/\/  ==============<\/p>\n<p>        \/\/\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<\/p>\n<p>        \/\/\tlength\n        \/\/\t======\n            $D.measureText__getTextLength = function (_the_text)\n            {\n                var _text = _the_text;<\/p>\n<p>                    _text = _text.replace(\/[\\s\\n\\r]+\/gi, '');\n                    \/\/_text = _text.replace(\/\\d+\/, '');<\/p>\n<p>                return _text.length;\n            };<\/p>\n<p>        \/\/\tword count\n        \/\/\t==========\n            $D.measureText__getWordCount = function (_the_text)\n            {\n                var _text = _the_text;<\/p>\n<p>                \/\/\tdo stuff\n                \/\/\t========\n                    _text = _text.replace(\/[\\s\\n\\r]+\/gi, ' ');<\/p>\n<p>                    _text = _text.replace(\/([.,?!:;()\\[\\]'\"\"-])\/gi, ' $1 ');<\/p>\n<p>                    _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)]');<\/p>\n<p>                \/\/\tcount\n                \/\/\t=====\n                    var \n                        _count = 0,\n                        _words_match = _text.match(\/([^\\s\\d]{3,})\/gi)\n                    ;\t<\/p>\n<p>                    \/\/\tadd match\n                    _count += (_words_match != null ? _words_match.length : 0);<\/p>\n<p>                    \/\/\tadd manual count\n                    _text.replace(\/\\[=words\\((\\d)\\)\\]\/, function (_match, _plus) { _count += (5 * parseInt(_plus)); });<\/p>\n<p>                \/\/\treturn\n                \/\/\t======\n                    return _count;\n            };<\/p>\n<p>        \/\/\tlevenshtein\n        \/\/\t===========\t\n            $D.levenshteinDistance = function (str1, str2)\n            {\n                var l1 = str1.length, l2 = str2.length, i = 0, j = 0, d = [];<\/p>\n<p>                if (Math.min(l1, l2) === 0)\n                    { return Math.max(l1, l2); }<\/p>\n<p>                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            \n        \/\/\tget first fragment\n        \/\/\t==================\n            $D.nextPage__getFirstFragment = function (_html)\n            {\n                \/\/  remove all tags\n                _html = _html.replace(\/<[^>]+?>\/gi, '');<\/p>\n<p>                \/\/  normalize spaces\n                _html = _html.replace(\/\\s+\/gi, ' ');<\/p>\n<p>                \/\/  return first 1000 characters\n                return _html.substr(0, 2000);\n            };<\/p>\n<p>    \/\/  measure text }<\/p>\n<p>    \/\/  hidden node {\n    \/\/  =============<\/p>\n<p>        $D.isNodeHidden = function (_node, _tag_name)\n        {\n            switch (true)\n            {\n                case (_node.offsetWidth > 0):\n                case (_node.offsetHeight > 0):\n                    break;<\/p>\n<p>                default:\n                    switch (true)\n                    {\n                        case (_node.offsetLeft > 0):\n                        case (_node.offsetTop > 0):\n                            break;<\/p>\n<p>                        default:\n                            \/\/  exclude inline DIVs -- which, stupidly, don't have a width\/height\n                            if (true\n                                && (_tag_name == 'div') \n                                && ((_node.style.display || $CJ.css( _node, \"display\" )) == 'inline')\n                            ) { break; }<\/p>\n<p>                            \/\/  it's hidden\n                            return true;\n                    }\n                    break;\n            }<\/p>\n<p>            \/\/  it's not hidden\n            return false;\n        };<\/p>\n<p>    \/\/  hidden node }<\/p>\n<p>    \/\/  compute points for candidate {\n    \/\/  ==============================<\/p>\n<p>        $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            ;<\/p>\n<p>            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\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            ;<\/p>\n<p>            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }<\/p>\n<p>            \/\/\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));<\/p>\n<p>                \/\/  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                });<\/p>\n<p>            \/\/\tget first\n            \/\/\t=========\n                var\t_main = _candidates[0]\n                if ($D.debug) { $D.log('should be body', _main, _main.__node); }<\/p>\n<p>            \/\/\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; }<\/p>\n<p>                            \/\/\tstore piece, if in debug mode\n                            if ($D.debug) { _array__pieces.push(_candidates[k]); }<\/p>\n<p>                            \/\/\tincement pieces count\n                            _count__pieces++;\n                        }<\/p>\n<p>                    \/\/\tcandidate details\n                    \/\/\t=================\n                        _candidates[i]['__candidate_details'] = $D.getContent__computeDetailsForCandidate__first(_candidates[i], _main);<\/p>\n<p>                    \/\/\tpieces -- do this here because _main doesn't yet have a pieces count\n                    \/\/\t======<\/p>\n<p>                        \/\/\tset pieces\n                        _candidates[i]['_count__pieces'] = _count__pieces;\n                        _candidates[i]['_array__pieces'] = _array__pieces;<\/p>\n<p>                        \/\/\tpieces ratio\n                        _candidates[i]['__candidate_details']['_ratio__count__pieces_to_total_pieces'] = (_count__pieces \/ (_candidates[0]._count__pieces + 1));<\/p>\n<p>                    \/\/  check some more\n                    \/\/  ===============\n                    \/*    switch (true)\n                        {\n                            case (($D.language != 'cjk') && (_candidates[i]['__candidate_details']['_ratio__length__links_text_to_plain_text'] > 1)):\n                            case (($D.language != 'cjk') && (_candidates[i]['__candidate_details']['_ratio__count__links_words_to_plain_words'] > 1)):\n                                _candidates[i]._is__bad = true;\n                                break;\n                        }\n                    *\/<\/p>\n<p>                    \/\/\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                }<\/p>\n<p>            \/\/\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\t\n    \/\/  process candidates (first) }\n\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;<\/p>\n<p>                        default:\n                            return _element;\n                    }\n                });<\/p>\n<p>                \/\/  add main - to amke sure the result is never blank\n                _candidates.unshift(_main);<\/p>\n<p>            \/\/\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                });<\/p>\n<p>            \/\/\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)):<\/p>\n<p>                            \/\/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):<\/p>\n<p>                                _candidates[i]._is__bad = true;\n                                \/\/\twil set points to 0, in points computation function\n                                break;\n                        }\n                    *\/<\/p>\n<p>                    \/\/\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                }<\/p>\n<p>            \/\/\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\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    \n    \/\/  process candidates (third) }\n\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, <\/p>\n<p>                            '_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,<\/p>\n<p>                            '_debug__above__plain_text': _global__above__plain_text,\n                            '_debug__above__links_text': _global__above__links_text,<\/p>\n<p>                            '_length__above_plain_text': _global__length__above_plain_text,\n                            '_count__above_plain_words': _global__count__above_plain_words,<\/p>\n<p>                            '_length__above_links_text': _global__length__above_links_text,\n                            '_count__above_links_words': _global__count__above_links_words,<\/p>\n<p>                            '_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),<\/p>\n<p>                            '_count__above_candidates': _global__count__above_candidates,\n                            '_count__above_containers': _global__count__above_containers,<\/p>\n<p>                            '_length__plain_text': 0,\n                            '_count__plain_words': 0,<\/p>\n<p>                            '_length__links_text': 0,\n                            '_count__links_words': 0,<\/p>\n<p>                            '_length__all_text': 0,\n                            '_count__all_words': 0,<\/p>\n<p>                            '_count__containers': 0,\n                            '_count__candidates': 0,<\/p>\n<p>                            '_count__links': 0,\n                            '_count__links_skip': 0,<\/p>\n<p>                            '_count__images_small': 0,\n                            '_count__images_medium': 0,\n                            '_count__images_large': 0,\n                            '_count__images_skip': 0\n                        };<\/p>\n<p>                    \/\/  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                        }<\/p>\n<p>                    \/\/\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;<\/p>\n<p>                            \/\/\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                        }<\/p>\n<p>                    \/\/\tdo stuff\n                    \/\/\t========\n                        switch (true)\n                        {\n                            \/\/\ttext node\n                            case ((_tag_name == '#text')):\n                                \/\/\tmark\n                                _result._is__text = true;<\/p>\n<p>                                \/\/\tget\n                                var _nodeText = _node.nodeValue;<\/p>\n<p>                                \/\/\tresult\n                                _result._length__plain_text = $D.measureText__getTextLength(_nodeText);\n                                _result._count__plain_words = $D.measureText__getWordCount(_nodeText);<\/p>\n<p>                                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 && $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 && $D.debug) { _global__above__plain_text += ' ' + _nodeText; }\n                                }<\/p>\n<p>                                \/\/\treturn text\n                                return _result;<\/p>\n<p>                            \/\/\tlink\n                            case (_tag_name == 'a'):\n                                var _href = '';<\/p>\n<p>                                try {\n                                    _href = _node.href\n                                } catch (e) {\n                                    _href = $CJ.attr('href');\n                                }<\/p>\n<p>                                \/\/\tsanity\n                                if (_href > ''); else { break; }\n                                if (_href.indexOf); else { break; }<\/p>\n<p>                                _result._is__link = true;<\/p>\n<p>                                \/\/\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                                }<\/p>\n<p>                                \/\/\tinside link\n                                if (_global__inside_link); else\n                                {\n                                    _global__inside_link = true;\n                                    _global__inside_link__element_index = _result.__index;\n                                }<\/p>\n<p>                                \/\/\tdone\n                                _return__links.push(_result);\n                                break;<\/p>\n<p>                            \/\/\timage\n                            case (_tag_name == 'img'):<\/p>\n<p>                                \/\/\tskip\n                                if (_node.src && _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                                }<\/p>\n<p>                                \/\/\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) && (_height >= 75)):\n                                        _result._is__image_large = true;\n                                        break;<\/p>\n<p>                                    case ((_width * _height) >= 20000):\n                                    case ((_width >= 150) && (_height >= 150)):\n                                        _result._is__image_medium = true;\n                                        break;<\/p>\n<p>                                    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 *\/<\/p>\n<p>                                    case (($D.language != 'cjk') && (_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\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                        ;<\/p>\n<p>                    \/\/\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<\/p>\n<p>                            case (_tag_name == '#text'):\n                                _global__the_html += _node.nodeValue\n                                    .replace(\/<\/gi, '&lt;')\n                                    .replace(\/>\/gi, '&gt;')\n                                ;\n                                return;\n                        }<\/p>\n<p>                    \/\/\thidden\n                    \/\/\t======\n                        if (true\n                            && ($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)\n                            && $D.isNodeHidden(_node, _tag_name)\n                        ) { return; }<\/p>\n<p>                    \/\/\tclean -- before\n                    \/\/\t=====<\/p>\n<p>                        \/\/\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                                    ;<\/p>\n<p>                                    if (_skip); else\n                                    {\n                                        \/\/\tdefault skip\n                                        _skip = true;<\/p>\n<p>                                        \/\/\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                                    }<\/p>\n<p>                                    \/\/\tskip?\n                                    if (_skip)\n                                    {\n                                        _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                        if (_explored && _explored._is__unskippable); else\n                                        {\n                                            $D.debugOutline(_node, 'clean-before', 'object-embed-iframe');\n                                            return;\n                                        }\n                                    }<\/p>\n<p>                                    break;\n                            }<\/p>\n<p>                        \/\/\tskipped link\n                        \/\/\t============\n                            if (_tag_name == 'a' || _tag_name == 'li')\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored && _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) && (_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 && _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._length__plain_text > (65 * 3 * 2)):\n                                        case ($D.language == 'cjk' && (_explored._length__plain_text > (65 * 3 * 1))):\n                                        case (!(_explored._count__links > 1)):\n                                        case (_global__exploreNodeToBuildHTMLFor && (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.5):\n                                        case (_global__exploreNodeToBuildHTMLFor && (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.5):\n                                        case ((_explored._length__plain_text == 0) && (_explored._count__links == 1) && (_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;<\/p>\n<p>                                        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) && (_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 && _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._length__plain_text > (65 * 3 * 2)):\n                                        case ($D.language == 'cjk' && (_explored._length__plain_text > (65 * 3 * 1))):\n                                        case (_global__exploreNodeToBuildHTMLFor && (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25):\n                                        case (_global__exploreNodeToBuildHTMLFor && (_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 && (_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;<\/p>\n<p>                                        default:\n                                            var _float = $CJ(_node).css('float');\n                                            if (_float == 'left' || _float == 'right'); else { break; }\n                                            if ((_explored._length__links_text == 0) && ((_explored._count__images_large + _explored._count__images_medium) > 0)) { break; }<\/p>\n<p>                                            $D.debugOutline(_node, 'clean-before', 'floating');\n                                            return;\n                                    }\n                                }\n                            }<\/p>\n<p>                        \/\/\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 && _explored._is__unskippable); else\n                                    {\n                                        $D.debugOutline(_node, 'clean-before', 'above-target');\n                                        return;\n                                    }\n                                }<\/p>\n<p>                                \/\/  is image?\n                                if (_tag_name == 'img')\n                                {\n                                    _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                    if (_explored && _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                                }<\/p>\n<p>                                \/\/  has too many links?\n                                \/\/if (_node.getElementsByTagName && _node.getElementsByTagName('a').length > 5)\n                                \/\/    { $D.debugOutline(_node, 'clean-before', 'above-target'); return; }\n                            }<\/p>\n<p>                        \/\/  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 && _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                            }<\/p>\n<p>                    \/\/\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                                }<\/p>\n<p>                                \/\/\tkeep ID for all elements\n                                var _id_attribute = _node.getAttribute('id');\n                                if (_id_attribute > '')\n                                    { _global__the_html += ' id=\"'+_id_attribute+'\"'; }<\/p>\n<p>                                \/\/\tlinks target NEW\n                                if (_tag_name == 'a')\n                                    { _global__the_html += ' target=\"_blank\"'; }<\/p>\n<p>                            \/\/\tclose start\n                            \/\/\t===========\n                                if ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' \/>'; }\n                                else { _global__the_html += '>';}<\/p>\n<p>                            \/* mark *\/ _pos__start__after = _global__the_html.length;\n                        }<\/p>\n<p>                    \/\/\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;<\/p>\n<p>                            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;<\/p>\n<p>                            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                        }<\/p>\n<p>                    \/\/\tclean -- after\n                    \/\/\t=====<\/p>\n<p>                        \/\/\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                                + '<\/p>\n<div class=\"readableLargeObjectContainer\">'\n                                + \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before))\n                                + '<\/div>\n<p>'\n                            ;\n                            return;\n                        }<\/p>\n<p>                        \/\/\tadd image classes\n                        if (_tag_name == 'img')\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored && _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;<\/p>\n<p>                                    case (_explored._is__image_large):<\/p>\n<p>                                        \/\/  add float class -- for images too narrow\/tall\n                                        \/\/  remove width\/height -- only for large images<\/p>\n<p>                                        \/\/  http:\/\/www.wired.com\/threatlevel\/2011\/05\/gps-gallery\/?pid=89&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\/<\/p>\n<p>                                        _global__the_html = ''\n                                            + _global__the_html.substr(0, _pos__start__before)\n                                            + '<\/p>\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<p>'\n                                        ;\n                                        return;\n                                }\n                            }\n                        }<\/p>\n<p>                        \/\/\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;<\/p>\n<p>                                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                        }<\/p>\n<p>                        \/\/\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 && _explored._is__unskippable); else\n                            {\n                                switch (true)\n                                {\n                                    case (_tag_name == 'h1' && (_explored._length__all_text > (65 * 2))):\n                                    case (_tag_name == 'h2' && (_explored._length__all_text > (65 * 2 * 3))):\n                                    case ((_tag_name.match(\/^h(3|4|5|6)$\/) != null) && (_explored._length__all_text > (65 * 2 * 5))):\n                                    case ((_tag_name.match(\/^(b|i|em|strong)$\/) != null) && (_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<\/p>\n<p>                        \/\/\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;<\/p>\n<p>                            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(\/(<\/p>\n<hr \\\/>)\/gi, '');<\/p>\n<p>                                \/\/  for rows, clear empty cells\n                                if (_tag_name == 'tr')\n                                {\n                                    _contents = _contents.replace(\/<td[^>]*?>\/gi, '');\n                                    _contents = _contents.replace(\/<\\\/td>\/gi, '');\n                                }<\/p>\n<p>                                \/\/  for tables, clear empty rows\n                                if (_tag_name == 'table')\n                                {\n                                    _contents = _contents.replace(\/<tr[^>]*?>\/gi, '');\n                                    _contents = _contents.replace(\/<\\\/tr>\/gi, '');\n                                }<\/p>\n<p>                                var _contentsLength = $D.measureText__getTextLength(_contents);<\/p>\n<p>                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored && _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_contentsLength == 0 && _tag_name == 'p'):\n                                            _global__the_html = _global__the_html.substr(0, _pos__start__before) + '<\/p>\n<p>';\n                                            return;<\/p>\n<p>                                        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                                }<\/p>\n<p>                                break;\n                        }<\/p>\n<p>                        \/\/\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 && _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                                ;<\/p>\n<p>                                \/\/\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') && (_global__exploreNodeToBuildHTMLFor && ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.1))):\n                                        break;<\/p>\n<p>                                    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                        }                <\/p>\n<p>                    \/\/\treturn\n                        return;\n                };<\/p>\n<p>            \/\/\tactually do it\n            _recursive(_nodeToBuildHTMLFor);<\/p>\n<p>            \/\/\treturn html\n            return _global__the_html;\n        };<\/p>\n<p>    \/\/  build html for node }<\/p>\n<p>    \/\/  isolate title in html {\n    \/\/  =======================<\/p>\n<p>        $D.articleTitleMarker__start = '<\/p>\n<div id=\"articleHeader\">\n<h1>';\n        $D.articleTitleMarker__end = '<\/h1>\n<\/div>\n<p>';<\/p>\n<p>        $D.getContent__find__hasIsolatedTitleInHTML = function (_html)\n        {\n            return (_html.substr(0, $D.articleTitleMarker__start.length) == $D.articleTitleMarker__start);\n        };<\/p>\n<p>        $D.getContent__find__getIsolatedTitleInHTML = function (_html)\n        {\n            \/\/  is it there?\n            if ($D.getContent__find__hasIsolatedTitleInHTML(_html)); else { return ''; }<\/p>\n<p>            \/\/  regex\n            var \n                _getTitleRegex = new RegExp($D.articleTitleMarker__start + '(.*?)' + $D.articleTitleMarker__end, 'i'),\n                _getTitleMatch = _html.match(_getTitleRegex)\n            ;<\/p>\n<p>            \/\/  match?\n            if (_getTitleMatch); else { return ''; }<\/p>\n<p>            \/\/  return\n            return _getTitleMatch[1];\n        };<\/p>\n<p>        $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; }<\/p>\n<p>            \/\/  can't just use (h1|h2|h3|etc)\n            \/\/      we want to try them in a certain order<\/p>\n<p>            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            ;<\/p>\n<p>            \/\/  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;<\/p>\n<p>                    default:<\/p>\n<p>                        \/\/  measurements\n                        var\n                            _heading_end_pos = _heading_pregs[i].lastIndex,\n                            _heading_start_pos = (_heading_end_pos - _match[0].length),<\/p>\n<p>                            _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 = [],<\/p>\n<p>                            _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                        ;<\/p>\n<p>                        \/\/  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(' ');<\/p>\n<p>                                \/\/  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                                }<\/p>\n<p>                                \/\/  break continues for loop\n                                \/\/      nothing goes to switch's default<\/p>\n<p>                                \/\/  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) && (_search_document_title.indexOf(_heading_text_plain) > -1)):<\/p>\n<p>                                        \/\/  if it's slightly smaler, but is exactly at the begging or the end\n                                        case ((_heading_length > 10) && ((_search_document_title.indexOf(_heading_text_plain) == 1) || (_search_document_title.indexOf(_heading_text_plain) == (_search_document_title.length - 1 - _heading_text_plain.length)))):<\/p>\n<p>                                            _no_break = true;\n                                            break;\n                                    }<\/p>\n<p>                                    \/\/  break?\n                                    \/\/  ======\n                                        var _break = false;\n                                        switch (true)\n                                        {\n                                            \/\/  no break?\n                                            case (_no_break):\n                                                break;<\/p>\n<p>                                            \/\/ heading too long? -- if not h2\n                                            case ((_heading_length > ((_search_document_title.length - 2) * 2)) && (_heading_type != 'h2')):<\/p>\n<p>                                            \/\/  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 && (_offset + _needle.length) > _length) {\n                    return false;\n                }\n                cnt++;\n            }<\/p>\n<p>            return cnt;\n        };<\/p>\n<p>        $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<p>',\n                _the_start_tag = '<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; }<\/p>\n<p>                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                ;<\/p>\n<p>                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\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;<\/p>\n<p>                    default:<\/p>\n<p>                        $D.debugTimerStart('ProcessSecond');\n                            var _processedCandidatesSecond = $D.getContent__processCandidates__second(_processedCandidates);\n                            _secondCandidate = _processedCandidatesSecond[0];\n                        $D.debugRemember('ProcessSecond', $D.debugTimerEnd()+'ms');<\/p>\n<p>                        \/\/  they're the same\n                        if (_firstCandidate.__node == _secondCandidate.__node) { break; }<\/p>\n<p>                        \/\/  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                            }<\/p>\n<p>                            \/\/  highlight second\n                            $D.debugOutline(_secondCandidate.__node, 'target', 'second');\n                        }<\/p>\n<p>                        \/\/  compute again\n                        \/\/  =============\n                            _firstCandidate['__points_history_final'] = $D.getContent__computePointsForCandidate__third(_firstCandidate, _firstCandidate);\n                            _firstCandidate['__points_final'] = _firstCandidate.__points_history_final[0];<\/p>\n<p>                            _secondCandidate['__points_history_final'] = $D.getContent__computePointsForCandidate__third(_secondCandidate, _firstCandidate);\n                            _secondCandidate['__points_final'] = _secondCandidate.__points_history_final[0];<\/p>\n<p>                        \/\/  log results\n                        \/\/  ===========\n                            if ($D.debug)\n                            {\n                                $D.log('The 2 Candidates:');\n                                $D.log(_firstCandidate);\n                                $D.log(_secondCandidate);\n                            }<\/p>\n<p>                        \/\/  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) && (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.9):\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 50) && (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.75):\n                                    _targetCandidate = _secondCandidate;\n                                    $D.debugRemember('Target', 'second');\n                                    break;\n                            }<\/p>\n<p>                        \/\/  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                            }<\/p>\n<p>                        break;\n                }<\/p>\n<p>                \/\/  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                    }<\/p>\n<p>            \/\/\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(\/(<\/p>\n<hr \\\/>\\s*<\/p>\n<hr \\\/>\\s*)+\/gi, '<\/p>\n<hr \/>\n<p>');\n                    _html = _html.replace(\/(<br \\\/>\\s*<br \\\/>\\s*)+\/gi, '<\/p>\n<p>');\n                $D.debugRemember('BuildHTMLPregs', $D.debugTimerEnd()+'ms');<\/p>\n<p>            \/\/\treturn\n            \/\/\t======\n                return {\n                    '_html': _html,\n                    '_links': _stuff._links,\n                    '_targetCandidate': _targetCandidate,\n                    '_firstCandidate': _firstCandidate\n                };\n        };<\/p>\n<p>    \/\/  find in page }<\/p>\n<p>    \/\/  start {\n    \/\/  =======<\/p>\n<p>        $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                ;<\/p>\n<p>            \/\/\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                }<\/p>\n<p>            \/\/  get html\n            \/\/  ========\n                var \n                    _foundHTML = _found._html,\n                    _firstFragmentBeforeProcessing = $D.nextPage__getFirstFragment(_foundHTML),\n                    _documentTitle = ($D.document.title > '' ? $D.document.title : '')\n                ;<\/p>\n<p>            \/\/  get title\n            \/\/  =========<\/p>\n<p>                \/\/  has title already?\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle);\n                $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                $D.debugRemember('TitleSource', 'target');<\/p>\n<p>                \/\/  get html above?\n                if ($D.articleTitle > ''); else\n                {\n                    \/\/  get html above target?\n                    \/\/  ======================<\/p>\n<p>                        \/\/  global vars:\n                        \/\/      _found\n                        \/\/      _foundHTML\n                        \/\/      _documentTitle\n                        \/\/      _aboveNodes<\/p>\n<p>                        var \n                            _prevNode = _found._targetCandidate.__node,\n                            _prevHTML = '',\n                            _aboveHTML = '',\n                            _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node)\n                        ;<\/p>\n<p>                        (function () \n                        {<\/p>\n<p>                            while (true)\n                            {\n                                \/\/  the end?\n                                switch (true)\n                                {\n                                    case (_prevNode.tagName && (_prevNode.tagName.toLowerCase() == 'body')):\n                                    case (_differentTargets && (_prevNode == _found._firstCandidate.__node)):\n                                        \/\/  enough is enough\n                                        return;\n                                }<\/p>\n<p>                                \/\/  up or sideways?\n                                if (_prevNode.previousSibling); else\n                                {\n                                    _prevNode = _prevNode.parentNode;\n                                    continue;\n                                }<\/p>\n<p>                                \/\/\tprevious\n                                _prevNode = _prevNode.previousSibling;<\/p>\n<p>                                \/\/\toutline -- element might be re-outlined, when buildHTML is invoked\n                                if ($D.debug) { $D.debugOutline(_prevNode, 'target', 'add-above'); }<\/p>\n<p>                                \/\/\tget html; add\n                                _prevHTML = $D.getContent__buildHTMLForNode(_prevNode, 'above-the-target');\n                                _aboveHTML = _prevHTML + _aboveHTML;\n                                _aboveNodes.unshift(_prevNode);<\/p>\n<p>                                \/\/  isolate title\n                                _aboveHTML = $D.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle);<\/p>\n<p>                                \/\/\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                            }<\/p>\n<p>                        })();<\/p>\n<p>                    \/\/  is what we found any good?\n                    \/\/  ==========================\n                        switch (true)\n                        {\n                            case ($D.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                            case (_differentTargets && (_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                            \/\/  ======================================<\/p>\n<p>                                \/\/  global vars:\n                                \/\/      _foundHTML\n                                \/\/      _documentTitle<\/p>\n<p>                                (function ()\n                                {\n                                    \/\/  return?\n                                    \/\/  =======\n                                        if (_documentTitle > ''); else { return; }<\/p>\n<p>                                    \/\/  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                                        }<\/p>\n<p>                                    \/\/\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                                        ;<\/p>\n<p>                                })();<\/p>\n<p>                            \/\/  set title\n                            \/\/  =========<\/p>\n<p>                                $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                                $D.debugRemember('TitleSource', 'document_title');\n                        }\n                }<\/p>\n<p>            \/\/\tremember\n            \/\/\t========\n                $D.debugRemember('theTarget', _found._targetCandidate.__node);\n                $D.debugRemember('firstCandidate', _found._firstCandidate.__node);<\/p>\n<p>            \/\/\tresult\n            \/\/  ======<\/p>\n<p>                $D.nextPage__firstFragment__firstPage = _firstFragmentBeforeProcessing;\n                $D.nextPage__firstFragment__lastPage = $D.nextPage__getFirstFragment(_foundHTML);\n                $D.nextPage__firstLinks = _found_links;<\/p>\n<p>                var\n                    _result = {\n                        '_html': _foundHTML,\n                        '_title': $D.articleTitle,\n                        '_rtl': $D.rtl\n                    }\n                ;<\/p>\n<p>                \/\/  add elements\n                _result['_elements'] = _aboveNodes;\n                _result['_elements'].push(_found._targetCandidate.__node);<\/p>\n<p>            \/\/  return\n            \/\/  ======\n                $D.callbacks.finished(_result);\n        };<\/p>\n<p>    \/\/  start }    <\/p>\n<p>    \/\/  return self\n    \/\/  ===========\n        return $D;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\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 *\/<\/p>\n<p>\/*\n    changes:\n    ========\n        $R => $H\n        $R.highlight => $H.enabled<\/p>\n<p>    to do:\n    ======\n*\/<\/p>\n<p>function initClearlyComponent__highlight(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================<\/p>\n<p>        \/\/  null; return\n        if (_paramInstance); else { return false; }<\/p>\n<p>        \/\/  shorthand\n        $H = _paramInstance;<\/p>\n<p>    \/\/  global instance reference }<\/p>\n<p>    \/\/  required vars {\n    \/\/  ===============<\/p>\n<p>        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:<\/p>\n<p>        switch (true)\n        {\n            case (!($H.settings)):\n            case (!($H.settings.imgPath)):<\/p>\n<p>            case (!($H.window)):\n            case (!($H.document)):\n            case (!($H.document.body)):<\/p>\n<p>            case (!($H.jQuery)):<\/p>\n<p>                if ($H.debug)\n                {\n                    console.log(!($H.settings));\n                    console.log(!($H.settings.imgPath));<\/p>\n<p>                    console.log(!($H.window));\n                    console.log(!($H.document));\n                    console.log(!($H.document.body));<\/p>\n<p>                    console.log(!($H.jQuery));\n                }<\/p>\n<p>                \/\/  something's wrong\n                return false;\n        }<\/p>\n<p>    \/\/  required vars }<\/p>\n<p>    \/\/  missing settings {\n    \/\/  ==================<\/p>\n<p>        \/\/  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]; }<\/p>\n<p>        \/\/  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>'; }<\/p>\n<p>    \/\/  missing settings }<\/p>\n<p>    \/\/  global vars {\n    \/\/  =============<\/p>\n<p>        $CJ = $H.jQuery;<\/p>\n<p>        $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);<\/p>\n<p>        $H.enabled = false;<\/p>\n<p>    \/\/  global vars }<\/p>\n<p>    \/\/  parse options {\n    \/\/  ===============   <\/p>\n<p>\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|',<\/p>\n<p>\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|',<\/p>\n<p>            '_elements_highlight_protect':          '|video|audio|source|--|object|param|embed|',<\/p>\n<p>            '_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'],<\/p>\n<p>\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'],<\/p>\n<p>\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'],<\/p>\n<p>\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],<\/p>\n<p>\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}<\/p>\n<p>\t\t};<\/p>\n<p>    \/\/  parse options }<\/p>\n<p>    \/\/  debug {\n    \/\/  =======<\/p>\n<p>        $H.debug = ($H.debug || false);<\/p>\n<p>\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 && $H.window.console.log))):    $H.writeLog = function (msg) { $H.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($H.window.opera && $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}<\/p>\n<p>            \/\/  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    \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 (theWindow); else { return null; }\n                    return theWindow.getSelection();\n                };\n            }\n            else if ('selection' in theWindow.document) {\n                arguments.calee = function (theWindow) {\n                    if (theWindow); else { return null; }\n                    return theWindow.document.selection;\n                };\n            }\n            else {\n                arguments.calee = function (theWindow) {\n                    return null;\n                };\n            }\n            \n            return arguments.calee(theWindow);\n        };\n        \n        $H.sel.getRange = function (selection)\n        {\n            if (selection); else { return null; }\n        \n            if ('getRangeAt' in selection) {\n                arguments.calee = function (selection) {\n                    if (selection); else { return null; }\n                    if (selection.rangeCount > 0) { return selection.getRangeAt(0); }\n                    else { return null; }\n                    \/\/\tdoesn't work in old versions of safari \n                    \/\/\t... I don't care\n                };\n            }\n            else if ('createRange' in selection) {\n                arguments.calee = function (selection) {\n                    if (selection); else { return null; }\n                    return selection.createRange();\n                };\n            }\n            else {\n                arguments.calee = function (selection) {\n                    return null;\n                };\n            }<\/p>\n<p>            return arguments.calee(selection);\n        };<\/p>\n<p>        $H.sel.getRangeHTML = function (range)\n        {\n            if (range); else { return null; }<\/p>\n<p>            if ('htmlText' in range) {\n                arguments.calee = function (range) {\n                    if (range); else { return null; }\n                    return range.htmlText;\n                };\n            }\n            else if ('surroundContents' in range) {\n                arguments.calee = function (range) {<\/p>\n<p>                    if (range); else { return null; }\n                    if (range.commonAncestorContainer && range.commonAncestorContainer.ownerDocument); else { return null; }<\/p>\n<p>                    var dummy = range.commonAncestorContainer.ownerDocument.createElement(\"div\");\n                    dummy.appendChild(range.cloneContents());\n                    return dummy.innerHTML;\n                };\n            }\n            else {\n                arguments.calee = function (range) {\n                    return null;\n                };\n            }<\/p>\n<p>            return arguments.calee(range);\n        };<\/p>\n<p>        $H.sel.getRangeText = function (range)\n        {\n            if (range); else { return null; }<\/p>\n<p>            if ('text' in range) {\n                arguments.calee = function (range) {\n                    if (range); else { return null; }\n                    return range.text;\n                };\n            }\n            else if ('surroundContents' in range) {\n                arguments.calee = function (range) {<\/p>\n<p>                    if (range); else { return null; }\n                    if (range.commonAncestorContainer && range.commonAncestorContainer.ownerDocument); else { return null; }<\/p>\n<p>                    var dummy = range.commonAncestorContainer.ownerDocument.createElement(\"div\");\n                    dummy.appendChild(range.cloneContents());\n                    return dummy.textContent;\n                };\n            }\n            else {\n                arguments.calee = function (range) {\n                    return null;\n                };\n            }<\/p>\n<p>            return arguments.calee(range);\n        };<\/p>\n<p>    \/\/  selection }<\/p>\n<p>    \/\/  helpers {\n    \/\/  =========<\/p>\n<p>        $H.rand = function (_min, _max)\n        {\n            return (Math.floor(Math.random() * (_max - _min + 1)) + _min);\n        };<\/p>\n<p>        $H.highlight__deleteSpansFromParents = function (_parents)\n        {\n            var _done = [], _this_done = false, _inner = '';<\/p>\n<p>            \/\/  main loop\n            for (var i=0, _i=_parents.length; i<_i; i++)\n            {\n                \/\/  init\n                _this_done = false;\n            \n                \/\/  check\n                for (var ii=0, _ii=_done.length; ii<_ii; ii++)\n                {\n                    if (_done[ii] == _parents[i])\n                    {\n                        _this_done = true;\n                        break;\n                    }\n                }    \n             \n                \/\/  skip\n                if (_this_done) { continue; }\n            \n            \n                \/\/  actually do\n                \/\/  ===========\n            \n                    \/\/  add\n                    _done.push(_parents[i]);\n            \n                    \/\/  get\n                    _inner = _parents[i].innerHTML;\n            \n                    \/\/  check\n                    if (_inner.indexOf('<span') > -1); else { continue; }<\/p>\n<p>                    \/\/  replace\n                    _inner = _inner.replace(\/<span([^>]*?)>\/gi, '');\n                    _inner = _inner.replace(\/<\\\/span>\/gi, '');\n                    _parents[i].innerHTML = _inner;\n            }\n        };<\/p>\n<p>        $H.highlight__getDeepestTextNode = function (_node)\n        {\n            var _n = _node;<\/p>\n<p>            while (true)\n            {\n                switch (true)\n                {\n                    \/\/  text\n                    case (_n.nodeType && _n.nodeType == 3): return _n;<\/p>\n<p>                    \/\/  single child\n                    case (_n.nodeType && _n.nodeType == 1 && _n.childNodes.length > 0): _n = _n.childNodes[0]; break;<\/p>\n<p>                    \/\/  no children but has sibling\n                    case (_n.nodeType && _n.nodeType == 1 && _n.childNodes.length == 0 && _n.nextSibling): _n = _n.nextSibling; break;<\/p>\n<p>                    \/\/  default\n                    default: return _node;\n                }\n            }\n        };<\/p>\n<p>        $H.highlight__getCommonAncestorContainerForNodes = function (_node1, _node2, _fallback)\n        {\n            var _parent1 = _node1, _parent2 = _node2;<\/p>\n<p>            while (true)\n            {\n                \/\/  next\n                _parent1 = _parent1.parentNode;\n                _parent2 = _parent2.parentNode;<\/p>\n<p>                \/\/  break\n                switch (true)\n                {\n                    case (!(_parent1)):\n                    case (!(_parent2)):\n                    case (_parent1 == _fallback):\n                    case (_parent2 == _fallback):\n                        return _fallback;\n                }<\/p>\n<p>                \/\/  maybe\n                switch (true)\n                {\n                    case (_parent1 == _parent2): return _parent1;<\/p>\n<p>                    case ($CJ.contains(_parent1, _node2)): return _parent1;\n                    case ($CJ.contains(_parent2, _node1)): return _parent2;<\/p>\n<p>                    case ($CJ.contains(_parent1, _parent2)): return _parent1;\n                    case ($CJ.contains(_parent2, _parent1)): return _parent2;\n                }\n            }\n        };<\/p>\n<p>        $H.highlight__getParentElementOfNode = function (_thisNode)\n        {\n            var _element = _thisNode;\n            while (true) {\n                \/\/  correct\n                if (_element.nodeType == 1) { break; }<\/p>\n<p>                \/\/  continue\n                _element = _element.parentNode;\n            }\n            return _element;\n        };<\/p>\n<p>        $H.highlight__getParentElementOfNodeWithThisParent = function (_thisNode, _thisParent)\n        {\n            \/\/  impossible\n            switch (true)\n            {\n                case (_thisNode == _thisParent):\n                    return _thisNode;<\/p>\n<p>                case (!($CJ.contains(_thisParent, _thisNode))):  \/\/ always false in IE\n                    \/\/return _thisNode;\n            }<\/p>\n<p>            \/\/  do\n            var _element = _thisNode;\n            while (true) {\n                \/\/  correct\n                if (_element.parentNode == _thisParent) { break; }<\/p>\n<p>                \/\/  continue\n                _element = _element.parentNode;\n            }\n            return _element;\n        };<\/p>\n<p>    \/\/  helpers }<\/p>\n<p>    \/\/  build html for element with selected range {\n    \/\/  ============================================<\/p>\n<p>        $H.highlight__buildHTMLForElementWithSelectedRange = function (_elementToBuildHTMLFor, _modeToBuildHTMLIn, _rangeToBuildHTMLWith)\n        {\n            var \n                _global__element_index = 0,\n                _global__the_html = '',\n                _global__highlight_on = ((_modeToBuildHTMLIn == 'boundry-end') ? true : false)\n            ;<\/p>\n<p>            \/\/\trecursive function\n            \/\/\t==================\n                var _recursive = function (_node)\n                {\n                    \/\/\tincrement index -- starts with 1\n                    \/\/\t===============\n                        _global__element_index++;<\/p>\n<p>                    \/\/\tvars\n                    \/\/\t====\n                        var \n                            _explored = false,\n                            _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 && _node.tagName && _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n                            _tag_is_ignored = ($H.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1),\n                            _tag_is_ignored = (_tag_is_ignored ? ((_tag_name == 'span') ? false : true) : false),\n                            _pos__start__before = 0,\n                            _pos__start__after = 0,\n                            _pos__end__before = 0,\n                            _pos__end__after = 0,\n                            _to_write = '',\n                            _selection_starts_here = false,\n                            _selection_ends_here = false\n                        ;<\/p>\n<p>                    \/\/\tfast return\n                    \/\/\t===========\n                        switch (true)\n                        {\n                            case ((_tag_name == '#invalid')):\n                            case (($H.parseOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n                                return;<\/p>\n<p>                            case (_tag_name == '#text'):\n                                \/\/  get value\n                                \/\/  =========\n                                    _to_write = _node.nodeValue.replace(\/<\/gi, '&lt;').replace(\/>\/gi, '&gt;');<\/p>\n<p>                                \/\/  mode?\n                                \/\/  =====\n                                    switch (true)\n                                    {\n                                        case (_modeToBuildHTMLIn == 'nothing'):\n                                            break;<\/p>\n<p>                                        case (_modeToBuildHTMLIn == 'everything'):\n                                            _to_write = ''\n                                                + '<highlight>' \n                                                +   _to_write \n                                                + '<\/highlight>'\n                                            ;\n                                            break;<\/p>\n<p>                                        case (_modeToBuildHTMLIn == 'boundry-start'):\n                                        case (_modeToBuildHTMLIn == 'boundry-end'):\n                                        case (_modeToBuildHTMLIn == 'boundry-both'):<\/p>\n<p>                                            \/\/  end of range?\n                                            \/\/  =============\n                                                if (_node == _rangeToBuildHTMLWith.endContainer)\n                                                {\n                                                    _to_write = ''\n                                                        + '<highlight>'\n                                                        +   _to_write.substr(0, _rangeToBuildHTMLWith.endOffset)\n                                                        + '<\/highlight>'\n                                                        + _to_write.substr(_rangeToBuildHTMLWith.endOffset)\n                                                    ;<\/p>\n<p>                                                    _global__highlight_on = false;\n                                                    _selection_ends_here = true;\n                                                }<\/p>\n<p>                                            \/\/  start of range?\n                                            \/\/  ===============\n                                                if (_node == _rangeToBuildHTMLWith.startContainer)\n                                                {\n                                                    _to_write = ''\n                                                        + _to_write.substr(0, _rangeToBuildHTMLWith.startOffset)\n                                                        + '<highlight>'\n                                                        +   _to_write.substr(_rangeToBuildHTMLWith.startOffset)\n                                                        + '<\/highlight>'  \n                                                    ;<\/p>\n<p>                                                    _global__highlight_on = true;\n                                                    _selection_starts_here = true;\n                                                }<\/p>\n<p>                                            \/\/  correction\n                                            \/\/  ==========\n                                                if (_selection_starts_here && _selection_ends_here)\n                                                {\n                                                    _to_write = _node.nodeValue.replace(\/<\/gi, '&lt;').replace(\/>\/gi, '&gt;');\n                                                    _to_write = ''\n                                                        + _to_write.substr(0, _rangeToBuildHTMLWith.startOffset)\n                                                        + '<highlight>'\n                                                        +   _to_write.substr(_rangeToBuildHTMLWith.startOffset, (_rangeToBuildHTMLWith.endOffset - _rangeToBuildHTMLWith.startOffset))\n                                                        + '<\/highlight>'\n                                                        + _to_write.substr(_rangeToBuildHTMLWith.endOffset)\n                                                    ;<\/p>\n<p>                                                    _global__highlight_on = false;\n                                                }<\/p>\n<p>                                            \/\/  snap-to\n                                            \/\/  =======\n                                                if (_selection_starts_here && (_rangeToBuildHTMLWith.startOffset > 0))\n                                                {\n                                                    \/\/  before\n                                                    _to_write = _to_write.replace(\/([ .,;?!])([a-z0-9]{1,2})<highlight>\/gi, '$1<highlight>$2');<\/p>\n<p>                                                    \/\/  space at begining\n                                                    _to_write = _to_write.replace(\/<highlight>([\\s])([^\\s])\/gi, '$1<highlight>$2');<\/p>\n<p>                                                    \/\/  too much\n                                                    _to_write = _to_write.replace(\/<highlight>([a-z0-9])([ ])([a-z0-9])\/gi, '$1$2<highlight>$3');\n                                                }<\/p>\n<p>                                                if (_selection_ends_here && (_rangeToBuildHTMLWith.endOffset > 0))\n                                                {\n                                                    var _do_end = true;<\/p>\n<p>                                                    if (_rangeToBuildHTMLWith.endContainer && _rangeToBuildHTMLWith.endContainer.nodeValue && _rangeToBuildHTMLWith.endContainer.nodeValue.length)\n                                                        { _do_end = (_rangeToBuildHTMLWith.endOffset < _rangeToBuildHTMLWith.endContainer.nodeValue.length); }\n                                        \n                                                    if (_do_end)\n                                                    {\n                                                        \/\/  after\n                                                        _to_write = _to_write.replace(\/<\\\/highlight>([a-z0-9]{0,2})([ .,;?!])\/gi, '$1$2<\/highlight>');<\/p>\n<p>                                                        \/\/  space at end\n                                                        _to_write = _to_write.replace(\/([^\\s])([\\s])<\\\/highlight>\/gi, '$1<\/highlight>$2');<\/p>\n<p>                                                        \/\/  too much\n                                                        _to_write = _to_write.replace(\/([ ])([a-z0-9])<\\\/highlight>([a-z0-9])\/gi, '<\/highlight>$1$2$3');\n                                                    }\n                                                }<\/p>\n<p>                                            \/\/  other\n                                            \/\/  =====\n                                                if (!(_selection_starts_here) && !(_selection_ends_here))\n                                                {\n                                                    _to_write = _node.nodeValue.replace(\/<\/gi, '&lt;').replace(\/>\/gi, '&gt;');\n                                                    if (_global__highlight_on)\n                                                    {\n                                                        _to_write = ''\n                                                            + '<highlight>' \n                                                            +   _to_write \n                                                            + '<\/highlight>'\n                                                        ;\n                                                    }\n                                                }<\/p>\n<p>                                            break;\n                                    }<\/p>\n<p>                                \/\/  write value\n                                \/\/  ===========\n                                    _global__the_html += _to_write;<\/p>\n<p>                                return;\n                        }<\/p>\n<p>                    \/\/  range anchors are elements instead of text-nodes\n                    \/\/  ================================================<\/p>\n<p>                        \/\/  end of range?\n                        if ((_rangeToBuildHTMLWith.endContainer.nodeType == 1) && (_node == _rangeToBuildHTMLWith.endContainer)) {\n                            _global__highlight_on = false;\n                            _selection_ends_here = true;\n                        }<\/p>\n<p>                        \/\/  start of range?\n                        if ((_rangeToBuildHTMLWith.startContainer.nodeType == 1) && (_node == _rangeToBuildHTMLWith.startContainer)) {\n                            _global__highlight_on = true;\n                            _selection_starts_here = true;\n                        }<\/p>\n<p>                        \/\/  correction\n                        if (_selection_starts_here && _selection_ends_here) {\n                            _global__highlight_on = false;\n                        }<\/p>\n<p>                    \/\/\tstart tag\n                    \/\/\t=========\n                        if (_tag_is_ignored); 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 $H.parseOptions._elements_keep_attributes)\n                                {\n                                    for (var i=0, _i=$H.parseOptions._elements_keep_attributes[_tag_name].length; i<_i; i++)\n                                    {\n                                        var \n                                            _attribute_name = $H.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                                }<\/p>\n<p>                                \/\/\tkeep ID for all elements\n                                var _id_attribute = _node.getAttribute('id');\n                                if (_id_attribute > '')\n                                    { _global__the_html += ' id=\"'+_id_attribute+'\"'; }<\/p>\n<p>                                \/\/\tlinks target NEW\n                                if (_tag_name == 'a')\n                                    { _global__the_html += ' target=\"_blank\"'; }<\/p>\n<p>                            \/\/  add class name\n                            \/\/  ==============\n                                var _class_attribute = _node.getAttribute('class');\n                                if (_class_attribute > '')\n                                    { _global__the_html += ' class=\"'+_class_attribute+'\"'; }<\/p>\n<p>                            \/\/  add highlight id -- for EMs that are outside the global highlight\n                            \/\/  ================\n                                if (_tag_name == 'em' && _modeToBuildHTMLIn != 'everything')\n                                {\n                                    \/\/  with a fix for when an em is the first thing inside a parent element<\/p>\n<p>                                    switch (true)\n                                    {\n                                        case (_global__highlight_on):\n                                        case ((_rangeToBuildHTMLWith.startOffset == 0) && (_node.firstChild) && (_node.firstChild == _rangeToBuildHTMLWith.startContainer)):\n                                            break;<\/p>\n<p>                                        default:\n                                            var _highlight_id_attribute = _node.getAttribute($H.settings.highlightElementIdAttribute);\n                                            if (_highlight_id_attribute > '')\n                                                { _global__the_html += ' '+$H.settings.highlightElementIdAttribute+'=\"'+_highlight_id_attribute+'\"'; }\n                                            break;\n                                    }\n                                }<\/p>\n<p>                            \/\/\tclose start\n                            \/\/\t===========\n                                if ($H.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' \/>'; }\n                                else { _global__the_html += '>';}<\/p>\n<p>                            \/* mark *\/ _pos__start__after = _global__the_html.length;\n                        }<\/p>\n<p>                    \/\/\tchild nodes\n                    \/\/\t===========\n                        if ($H.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 (_tag_is_ignored):\n                                return;\n                        \n                            case (($H.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;<\/p>\n<p>                            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                        }<\/p>\n<p>                    \/\/  protected elements\n                    \/\/  ==================\n                        switch (true)\n                        {\n                            \/\/  some elemnts are protected from highlighting\n                            case (($H.parseOptions._elements_highlight_protect.indexOf('|'+_tag_name+'|') > -1)):\n                            case ((_tag_name == 'em') && $CJ(_node).hasClass($H.settings.highlightElementCSSClass)):<\/p>\n<p>                                \/\/  so, if highlights are inside an already highlighted element --or an unhighlightable one-- remove<\/p>\n<p>                                _global__the_html = ''\n                                    + _global__the_html.substr(0, _pos__start__after)\n                                    +   _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                            .replace(\/<highlight>\/gi, '')\n                                            .replace(\/<\\\/highlight>\/gi, '')\n                                    + _global__the_html.substr(_pos__end__before)\n                                ;<\/p>\n<p>                                break;<\/p>\n<p>                            \/\/  some elements are invalid completely\n                            case ((_tag_name == 'a') && (_node.className == 'deleteHighlight')):<\/p>\n<p>                                _global__the_html = ''\n                                    + _global__the_html.substr(0, _pos__start__before)\n                                    + _global__the_html.substr(_pos__end__after)\n                                ;<\/p>\n<p>                                break;<\/p>\n<p>                            \/\/  some elements need to have their tags ignored\n                            \/*case (_tag_name == 'span'):<\/p>\n<p>                                _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                                    + _global__the_html.substr(_pos__end__after)\n                                ;<\/p>\n<p>                                break;*\/\n                        }<\/p>\n<p>                    \/\/\treturn\n                        return;\n                };<\/p>\n<p>            \/\/\tactually do it\n            _recursive(_elementToBuildHTMLFor);<\/p>\n<p>            \/\/  use em, instead of highlight\n            _global__the_html = _global__the_html\n                .replace(\/<highlight>\/gi, '<em class=\"'+$H.settings.highlightElementCSSClass+'\">')\n                .replace(\/<\\\/highlight>\/gi, '<\/em>')\n            ;<\/p>\n<p>            \/\/\treturn\n            return _global__the_html;\n        };    <\/p>\n<p>    \/\/  build html for element with selected range }<\/p>\n<p>    \/\/  do range {\n    \/\/  ==========<\/p>\n<p>        $H.highlight__doRange = function (_range_to_highlight)\n        {\n            \/\/  get referrence elements\n            var\n                _commonAncestorElement = $H.highlight__getParentElementOfNode(_range_to_highlight.commonAncestorContainer),\n                _startElement = $H.highlight__getParentElementOfNodeWithThisParent(_range_to_highlight.startContainer, _commonAncestorElement),\n                _endElement = $H.highlight__getParentElementOfNodeWithThisParent(_range_to_highlight.endContainer, _commonAncestorElement)\n            ;<\/p>\n<p>            \/\/  range not in container element\n            if (true\n                && (_commonAncestorElement.tagName) \n                && !($CJ.contains($H.settings.elementWhichMustContainAllHighlights, _commonAncestorElement))\n            ) {\n                return false;\n            }<\/p>\n<p>            \/\/  arbitrary range exclusion\n            if ($H.callbacks.arbitraryRangeExclusion) {\n                if ($H.callbacks.arbitraryRangeExclusion(_range_to_highlight, _commonAncestorElement, _startElement, _endElement) === false) {\n                    return false;\n                }\n            }<\/p>\n<p>            \/* $H.log(\n                _range.startContainer, _range.endContainer, _range.startOffset, _range.endOffset, \n                _range_to_highlight, \n                _commonAncestorElement, _startElement, _endElement\n            ); *\/<\/p>\n<p>            \/\/  selection id\n            var _selection_id = $H.rand(1, 1000);\n            while (true)\n            {\n                \/\/  nothing found\n                if ($H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+'['+$H.settings.highlightElementIdAttribute+'=\"'+_selection_id+'\"]').length > 0); else { break; }<\/p>\n<p>                \/\/  new id\n                _selection_id = $H.rand(1, 1000);\n            }<\/p>\n<p>            \/\/  chainging elements\n            \/\/  ==================<\/p>\n<p>                var _chaingingElements = [], _currElement = _startElement, _currChainging = false;<\/p>\n<p>                while (true)\n                {\n                    \/\/  object\n                    _currChainging = {\n                        '_element': _currElement,\n                        '_tagName': (_currElement.nodeType === 3 ? '#text' : ((_currElement.nodeType === 1 && _currElement.tagName && _currElement.tagName > '') ? _currElement.tagName.toLowerCase() : '#invalid'))\n                    };<\/p>\n<p>                    \/\/  add\n                    _chaingingElements.push(_currChainging);<\/p>\n<p>                    \/\/  break\n                    if (_currElement == _endElement) { break; }<\/p>\n<p>                    \/\/  next\n                    _currElement = _currElement.nextSibling;<\/p>\n<p>                    \/\/  error?\n                    if (_currElement); else { break; }\n                }<\/p>\n<p>            \/\/  rewrite elements\n            \/\/  ================\n                var _parents_to_clean = [];\n                for (var i=0, _i=_chaingingElements.length, _currElement=false; i<_i; i++)\n                {\n                    var \n                        _currElement = _chaingingElements[i],\n                        _currNode = _currElement._element,\n                        _currTag = _currElement._tagName,\n                        _boundry_mode = '',\n                        _currBuiltHTML = false,\n                        _resNode = false\n                    ;\n\n                    \/\/  get html \/ mode\n                    \/\/  ===============\n                        switch (true)\n                        {\n                            case ((_i == 1) &#038;&#038; (i == 0)):       _boundry_mode = 'boundry-both';     break;\n                            case ((_i > 1) && (i == 0)):        _boundry_mode = 'boundry-start';    break;\n                            case ((_i > 1) && (i == (_i-1))):   _boundry_mode = 'boundry-end';      break;\n                            default:                            _boundry_mode = 'everything';       break;\n                        }<\/p>\n<p>                    \/\/  get html\n                    \/\/  ========\n                        _currBuiltHTML = $H.highlight__buildHTMLForElementWithSelectedRange(_currNode, _boundry_mode, _range_to_highlight);<\/p>\n<p>                    \/\/  write\n                    \/\/  =====\n                        switch (true)\n                        {\n                            case ((_currTag == '#text')):<\/p>\n<p>                                \/\/  resulting html might be something like \"<em>something<\/em> something else\"\n                                \/\/  so we create a dummy span tag to eomcompass it, and then repalce the old text node with that<\/p>\n<p>                                \/\/  create\n                                var _newElement = $H.document.createElement('span');\n                                    _newElement.innerHTML = _currBuiltHTML;<\/p>\n<p>                                \/\/  result\n                                _resNode = _newElement;<\/p>\n<p>                               \/* with (Evernote.evernotePopup) {\n                                    console.log(' ~~~ highlight.js gadit before |'  + docSelection + \"|\");\n                                    console.log(' ~~~ from ' +docSelection.startOffset + ' to  ' + docSelection.endOffset);\n                                }*\/<\/p>\n<p>                                Evernote.Utils.sendMessageToPopup('highlightDomChangesStart');\n                                \/\/  replace\n                                _currNode.parentNode.replaceChild(_resNode, _currNode);<\/p>\n<p>                                Evernote.Utils.sendMessageToPopup('highlightDomChangesEnd');\n\/*\n                                with (Evernote.evernotePopup) {\n                                    console.log(' ~~~ highlight.js nagadil |'  + docSelection + \"|\");\n                                    console.log(' ~~~ from ' +docSelection.startOffset + ' to  ' + docSelection.endOffset);\n                                }*\/<\/p>\n<p>                                break;<\/p>\n<p>                            case (($H.parseOptions._elements_self_closing.indexOf('|'+_currTag+'|') > -1)):<\/p>\n<p>                                \/\/  result\n                                _resNode = _currNode;<\/p>\n<p>                                \/* nothing *\/ \/*\n                                    var _newElement = $H.document.createElement('em');\n                                        _newElement.className = $H.settings.highlightElementCSSClass;\n                                        _newElement.innerHTML = _currBuiltHTML;\n                                    _currNode.parentNode.replaceChild(_newElement, _currNode);\n                                *\/<\/p>\n<p>                                break;<\/p>\n<p>                            default:<\/p>\n<p>                                \/\/  result\n                                _resNode = _currNode;<\/p>\n<p>                                \/\/  innerHTML\n                                _currBuiltHTML = _currBuiltHTML.substr((_currBuiltHTML.indexOf('>')+1));\n                                _currBuiltHTML = _currBuiltHTML.substr(0, _currBuiltHTML.lastIndexOf('<'));\n                            \n                                \/\/  highlighted anything?\n                                if (_currBuiltHTML.indexOf('<em class=\"'+$H.settings.highlightElementCSSClass+'\">') > - 1); else { break; }<\/p>\n<p>                                \/\/  do it\n                                _currNode.innerHTML = _currBuiltHTML;\n                                break;\n                        }<\/p>\n<p>                    \/\/  set highlight class \n                    \/\/  ===================<\/p>\n<p>                        \/\/  inside node\n                        $CJ(_resNode).find('em.'+$H.settings.highlightElementCSSClass+':not(['+$H.settings.highlightElementIdAttribute+'])').attr($H.settings.highlightElementIdAttribute, _selection_id);<\/p>\n<p>                        \/\/  on node\n                        if ((_currTag == 'em') && $CJ(_resNode).hasClass($H.settings.highlightElementCSSClass))\n                            { $CJ(_resNode).attr($H.settings.highlightElementIdAttribute, _selection_id); }<\/p>\n<p>                        \/\/  clean::add\n                        _parents_to_clean.push(_resNode.parentNode);\n                }<\/p>\n<p>                \/\/  clean::do\n                $H.highlight__deleteSpansFromParents(_parents_to_clean);\n        };<\/p>\n<p>    \/\/  do range }<\/p>\n<p>    \/\/  do current selection {\n    \/\/  ======================<\/p>\n<p>        $H.highlight__doCurentSelection = function ()\n        {\n            \/\/  vars\n            \/\/  ====\n                var \n                    _selection = $H.sel.getSelection($H.window),\n                    _range = $H.sel.getRange(_selection),\n                    _text = $H.sel.getRangeText(_range),<\/p>\n<p>                    _good_range = (_range ? {\n                        'commonAncestorContainer':  _range.commonAncestorContainer,\n                        'startContainer':           _range.startContainer,\n                        'endContainer':             _range.endContainer,\n                        'startOffset':              _range.startOffset,\n                        'endOffset':                _range.endOffset\n                    } : false)\n                ;<\/p>\n<p>            \/\/  some exception rules\n            \/\/  ====================\n                switch (true)\n                {\n                    case (!(_text)):\n                    case (!(_text.length > 0)):\n                    case (!(_good_range)):\n                        return false;\n                }<\/p>\n<p>            \/\/  some corrections\n            \/\/  ================<\/p>\n<p>                \/\/  Firefox fucks up -- https:\/\/developer.mozilla.org\/en\/DOM\/range.startOffset\n                \/\/  Offsets mean two differet things<\/p>\n<p>                \/\/  start container\n                if (_good_range.startContainer.nodeType == 1)\n                {\n                    if (_good_range.startContainer.childNodes[_good_range.startOffset])\n                    {\n                        _good_range.startContainer = _good_range.startContainer.childNodes[_good_range.startOffset];\n                        _good_range.startOffset = 0;\n                    }\n                }<\/p>\n<p>                \/\/  end container\n                if (_good_range.endContainer.nodeType == 1)\n                {\n                    if (_good_range.endContainer.childNodes[_good_range.endOffset])\n                    {\n                        _good_range.endContainer = _good_range.endContainer.childNodes[_good_range.endOffset];\n                        _good_range.endOffset = 0;\n                    }\n                }<\/p>\n<p>            \/\/  highlight range\n            \/\/  ===============\n                var _highlighted_range = $H.highlight__doRange(_good_range);\n                if (_highlighted_range === false) { return false; }<\/p>\n<p>            \/\/  clear selection\n            \/\/  ===============\n                try { _selection.removeAllRanges(); } catch (e) {}<\/p>\n<p>            \/\/  correct double highlights\n            \/\/  =========================\n                var _parents_double_to_clean = [];\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+' em.'+$H.settings.highlightElementCSSClass).each(function (_i, _e)\n                {\n                    \/\/  remove inner button\n                        $CJ(_e).find('a.'+$H.settings.highlightElementDeleteCSSClass).remove();<\/p>\n<p>                    \/\/  create\n                    var _newElement = $H.document.createElement('span');\n                        _newElement.innerHTML = _e.innerHTML;<\/p>\n<p>                    \/\/  repalce\n                    _e.parentNode.replaceChild(_newElement, _e);<\/p>\n<p>                    \/\/  add\n                    _parents_double_to_clean.push(_newElement.parentNode);\n                });<\/p>\n<p>                \/\/  clean\n                $H.highlight__deleteSpansFromParents(_parents_double_to_clean);<\/p>\n<p>            \/\/  remove buttons and classes\n            \/\/  ==========================\n                \/\/  delete buttons\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass).remove();<\/p>\n<p>                \/\/  first, last\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+'.'+$H.settings.highlightElementFirstCSSClass).removeClass($H.settings.highlightElementFirstCSSClass);\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+'.'+$H.settings.highlightElementLastCSSClass).removeClass($H.settings.highlightElementLastCSSClass);<\/p>\n<p>            \/\/  add buttons and classes\n            \/\/  =======================\n                var \n                    _highlights_collection = $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass),\n                    _highlights_collection_ids = [],\n                    _curr_delete_button = false\n                ;<\/p>\n<p>                \/\/  get all ids\n                _highlights_collection.each(function (_i, _e) {\n                    _highlights_collection_ids.push($CJ(_e).attr($H.settings.highlightElementIdAttribute));\n                });<\/p>\n<p>                \/\/  add button, classes\n                _highlights_collection.each(function (_i, _e)\n                {\n                    var\n                        _isFirst = (_highlights_collection_ids[(_i-1)] ? (_highlights_collection_ids[_i] != _highlights_collection_ids[(_i-1)]) : true),\n                        _isLast = (_highlights_collection_ids[(_i+1)] ? (_highlights_collection_ids[_i] != _highlights_collection_ids[(_i+1)]) : true)\n                    ;<\/p>\n<p>                    if (_isFirst)\n                    {\n                        \/\/  class\n                        $CJ(_e).addClass($H.settings.highlightElementFirstCSSClass);<\/p>\n<p>                        \/\/  create button\n                        _curr_delete_button = $H.document.createElement('a');\n                        _curr_delete_button.className = $H.settings.highlightElementDeleteCSSClass;\n                        _curr_delete_button.id = $H.settings.highlightElementDeleteIdPrefix + _highlights_collection_ids[_i];<\/p>\n<p>                        \/\/  add button\n                        _e.insertBefore(_curr_delete_button, _e.firstChild);\n                    }<\/p>\n<p>                    if (_isLast)\n                    {\n                        \/\/  class\n                        $CJ(_e).addClass($H.settings.highlightElementLastCSSClass);\n                    }\n                });\n        };<\/p>\n<p>    \/\/  do current selection }<\/p>\n<p>    \/\/  delete highlight {\n    \/\/  ==================<\/p>\n<p>        $H.highlight__deleteAllHighlights = function ()\n        {\n            $H.highlight__deleteHighlight('all');\n        };<\/p>\n<p>        $H.highlight__deleteHighlight = function (_highlight_id)\n        {\n            var \n                _expression = 'em.' + $H.settings.highlightElementCSSClass + (_highlight_id == 'all' ? '' : '['+$H.settings.highlightElementIdAttribute+'=\"'+_highlight_id+'\"]'),\n                _parents_to_clean = []\n            ;<\/p>\n<p>            \/\/  collection\n            $H.$elementWhichMustContainAllHighlights.find(_expression).each(function (_index, _e)\n            {\n                \/\/  create\n                var _s = $H.document.createElement('span');\n                    _s.innerHTML = _e.innerHTML;<\/p>\n<p>                \/\/  do\n                _e.parentNode.replaceChild(_s, _e);<\/p>\n<p>                \/\/  parents\n                _parents_to_clean.push(_s.parentNode);\n            });<\/p>\n<p>            \/\/  delete spans\n            $H.highlight__deleteSpansFromParents(_parents_to_clean);\n        };<\/p>\n<p>    \/\/  delete highlight }<\/p>\n<p>    \/\/  enable \/ disable {\n    \/\/  ==================<\/p>\n<p>        $H.enable = function ()\n        {\n            if ($H.enabled) { return; }\n            $H.enabled = true;\n            $H.$html.addClass($H.settings.highlightingEnabledCSSClass);\n        };<\/p>\n<p>        $H.disable = function ()\n        {\n            if ($H.enabled); else { return; }\n            $H.enabled = false;\n            $H.$html.removeClass($H.settings.highlightingEnabledCSSClass);\n        };<\/p>\n<p>    \/\/  enable \/ disable }<\/p>\n<p>    \/\/  add mouse handlers {\n    \/\/  ====================<\/p>\n<p>        \/\/  globals\n        $H.highlight__mouseUp_timeout = false;\n        $H.highlight__deleteButton__byId__mouseEnter_timeout = {};\n        $H.highlight__deleteButton__byId__mouseLeave_timeout = {};<\/p>\n<p>        \/\/  containers mouse up\n        $H.highlight__mouseUp = function ()\n        {\n            \/\/  not in highlight mode\n            if ($H.enabled); else { return; }<\/p>\n<p>            \/\/  timeout\n            $H.highlight__mouseUp_timeout = $H.window.setTimeout\n            (\n                function ()\n                {\n                    \/\/  try\n                    $H.highlight__mouseUp_timeout = false;\n                    var _didSelection = $H.highlight__doCurentSelection();<\/p>\n<p>                    \/\/  callback\n                    if (_didSelection === false); else {\n                        if ($H.callbacks.highlightAdded) {\n                            $H.callbacks.highlightAdded();\n                        }\n                    }\n                }, \n                250\n            );\n        };<\/p>\n<p>        \/\/  containers mouse down\n        $H.highlight__mouseDown = function ()\n        {\n            \/\/  not in highlight mode\n            if ($H.enabled); else { return; }<\/p>\n<p>            \/\/  timeout\n            $H.window.clearTimeout($H.highlight__mouseUp_timeout);\n        };<\/p>\n<p>        \/\/  delete buttons show\/hide\n        $H.highlight__deleteButton__show = function (_highlight_id) { $H.$elementWhichMustContainAllHighlights.find('#' + $H.settings.highlightElementDeleteIdPrefix + _highlight_id).fadeIn(250); };\n        $H.highlight__deleteButton__hide = function (_highlight_id) { $H.$elementWhichMustContainAllHighlights.find('#' + $H.settings.highlightElementDeleteIdPrefix + _highlight_id).fadeOut(250); };<\/p>\n<p>        \/\/  add mouse handlers\n        $H.addMouseHandlers = function ()\n        {\n            \/\/  mouse up\/down\n            for (var i=0, _i=$H.settings.elementsToAttachMouseHandlersTo.length; i<_i; i++)\n            {\n                $CJ($H.settings.elementsToAttachMouseHandlersTo[i])\n                    .mouseup($H.highlight__mouseUp)\n                    .mousedown($H.highlight__mouseDown)\n                ;\n            }\n            \n            \/\/  highlight mouse enter\n            $H.$elementWhichMustContainAllHighlights.on('mouseenter', 'em.'+$H.settings.highlightElementCSSClass, function ()\n            {\n                var _highlight_id = $CJ(this).attr($H.settings.highlightElementIdAttribute);\n            \n                $H.window.clearTimeout($H.highlight__deleteButton__byId__mouseLeave_timeout[_highlight_id]);\n            \n                $H.highlight__deleteButton__byId__mouseEnter_timeout[_highlight_id] = $H.window.setTimeout(\n                    function ()\n                    {\n                        $H.highlight__deleteButton__byId__mouseEnter_timeout[_highlight_id] = false;\n                        $H.highlight__deleteButton__show(_highlight_id);\n                    },\n                    250\n                );\n            });\n\n            \/\/  highlight mouse leave\n            $H.$elementWhichMustContainAllHighlights.on('mouseleave', 'em.'+$H.settings.highlightElementCSSClass, function ()\n            {\n                var _highlight_id = $CJ(this).attr($H.settings.highlightElementIdAttribute);\n\n                $H.window.clearTimeout($H.highlight__deleteButton__byId__mouseEnter_timeout[_highlight_id]);\n\n                $H.highlight__deleteButton__byId__mouseLeave_timeout[_highlight_id] = $H.window.setTimeout(\n                    function ()\n                    {\n                        $H.highlight__deleteButton__byId__mouseLeave_timeout[_highlight_id] = false;\n                        $H.highlight__deleteButton__hide(_highlight_id);\n                    },\n                    250\n                );\n            });\n\n            \/\/  highlight delete click        \n            $H.$elementWhichMustContainAllHighlights.on('click', 'em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass, function ()\n            {\n                \/\/  get id\n                var _id = $CJ(this.parentNode).attr($H.settings.highlightElementIdAttribute);\n            \n                \/\/  remove self\n                $CJ(this).remove();\n            \n                \/\/  delete\n                $H.highlight__deleteHighlight(_id);\n            \n                \/\/  callback\n                if ($H.callbacks.highlightDeleted) {\n                    $H.callbacks.highlightDeleted();\n                }\n            });\n        };\n    \n    \/\/  add mouse handlers }\n\n\n    \/\/  get clean html {\n    \/\/  ================\n    \n        $H.getCleanHTML = function (_rawHTML)\n        {\n            \/\/  html\n            var _html = _rawHTML;\n            \n            \/\/  remove all spans -- spans hold deleted highlights, or useless helper elements\n            _html = _html.replace(\/<span([^>]*?)>\/gi, '');\n            _html = _html.replace(\/<\\\/span>\/gi, '');<\/p>\n<p>            \/\/  remove highlight-delete buttons\n            var _highlight_delete_reg = new RegExp('<a ([^>]*?)'+$H.settings.highlightElementDeleteCSSClass+'([^>]*?)><\/a>', 'gi');\n            _html = _html.replace(_highlight_delete_reg, '');<\/p>\n<p>            \/\/  highlight element\n            var _highlight_element_reg = new RegExp('<em ([^>]*?)'+$H.settings.highlightElementCSSClass+'([^>]*?)>([^>]+?)<\/em>', 'gi');\n            _html = _html.replace(_highlight_element_reg, '<highlight>$3<\/highlight>');<\/p>\n<p>            \/\/  double EMs\n            var _two_highlights_reg = new RegExp('<highlight>([\\\\s\\\\S]*?)<\/highlight>([ \\\\n\\\\r\\\\t]*?)<highlight>([\\\\s\\\\S]*?)<\/highlight>', 'gi');\n            while (true && _html.match(_two_highlights_reg)) {\n                _html = _html.replace(_two_highlights_reg, '<highlight>$1$3<\/highlight>');\n            }<\/p>\n<p>            \/\/  replace EMs\n            var _highlight_reg = new RegExp('<highlight>([\\\\s\\\\S]*?)<\/highlight>', 'gi');\n            _html = _html.replace(_highlight_reg, $H.settings.highlightCleanHTMLElementStart+'$1'+$H.settings.highlightCleanHTMLElementEnd);<\/p>\n<p>            return _html;\n        };<\/p>\n<p>    \/\/  get clean html }\t\t<\/p>\n<p>    \/\/  return self\n    \/\/  ===========\n        return $H;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/*!\n *  ClearlyComponent__next\n *  Evernote Clearly's next-page algorithm as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      The Next-pages Clearly-component works hand-in-hand with the clearly Detect Component.\n *      So its init\/usage pattern needs to come after the normal init\/usage pattern for the Detect Component.\n *      Like this:\n *\n *      First \"Detect\":\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 *      Then \"Next\":\n *      ============\n *\n *          \/\/ define\n *          window.ClearlyComponent__next = {\n *              'callbacks': {\n *                  'newPageFound': someFunction()\n *              },\n *\n *              'settings': { \n *                  'onCreateNextPagesContainerUseThisId': 'string',\n *                  'onCreateNextPagesContainerDoNotInsertCSS': true\n *              },\n *\n *              'detectComponentInstance': window.ClearlyComponent__detect\n *          };\n *\n *          \/\/ init -- will return false, if something goes wrong\n *          window.ClearlyComponent__next = initClearlyComponent__next(window.ClearlyComponent__next);\n *\n *          \/\/ call -- returns nothing; callbacks will be used\n *          window.ClearlyComponent__next.createNextPagesContainer()\n *          window.ClearlyComponent__next.start();\n *\n *\/<\/p>\n<p>\/*\n    changes:\n    ========\n        $R => $N, $D\n*\/<\/p>\n<p>function initClearlyComponent__next(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================<\/p>\n<p>        \/\/  null; return\n        if (_paramInstance); else { return false; }<\/p>\n<p>        \/\/  shorthand\n        $N = _paramInstance;<\/p>\n<p>    \/\/  global instance reference }<\/p>\n<p>    \/\/  required vars {\n    \/\/  ===============<\/p>\n<p>        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:<\/p>\n<p>        switch (true)\n        {\n            case (!($N.detectComponentInstance)):<\/p>\n<p>            case (!($N.callbacks)):\n            case (!($N.callbacks.newPageFound)):<\/p>\n<p>                \/\/  something's wrong\n                return false;\n        }<\/p>\n<p>    \/\/  required vars }<\/p>\n<p>    \/\/  missing settings {\n    \/\/  ==================<\/p>\n<p>        if ($N.settings); else { $N.settings = {}; }<\/p>\n<p>        \/\/  names for stuff\n        \/* frames id *\/               if ($N.settings.onCreateNextPageFramesUseThisIdPrefix); else           { $N.settings.onCreateNextPageFramesUseThisIdPrefix =          'clearly_next_page_frame__'; }\n        \/* container id *\/            if ($N.settings.onCreateNextPagesContainerUseThisId); else             { $N.settings.onCreateNextPagesContainerUseThisId =            'clearly_next_pages_container'; }\n        \/* insert container css *\/    if ($N.settings.onCreateNextPagesContainerDoNotInsertCSS); else        { $N.settings.onCreateNextPagesContainerDoNotInsertCSS =       false; }\n        \/* frames attribute *\/        if ($N.settings.onLoadingNextPageFramesUseThisAttribute); else         { $N.settings.onLoadingNextPageFramesUseThisAttribute =        'clearly_next_page_loaded'; }\n        \/* frames attribute value *\/  if ($N.settings.onLoadingNextPageFramesUseThisAttributeValue); else    { $N.settings.onLoadingNextPageFramesUseThisAttributeValue =   'yes'; }<\/p>\n<p>    \/\/  missing settings }<\/p>\n<p>    \/\/  global vars {\n    \/\/  =============<\/p>\n<p>        $D = $N.detectComponentInstance;\n        $CJ = $D.jQuery;<\/p>\n<p>        $N.pages = [];<\/p>\n<p>    \/\/  global vars }<\/p>\n<p>    \/\/  parse options {\n    \/\/  =============   <\/p>\n<p>\t\t$N.parseOptions =\n\t\t{\n\t\t\t'_next_page_keywords': [\n                \/* english *\/   'next page', 'next',\n                \/* german *\/    'vorw&#228;rts', 'weiter',\n                \/* japanese *\/  '&#27425;&#12408;'\n\t\t\t],<\/p>\n<p>\t\t\t'_next_page_keywords_not': [\n\t\t\t    \/* english *\/   'article', 'story', 'post', 'comment', 'section', 'chapter'\n\t\t\t]\n\t\t};<\/p>\n<p>    \/\/  parse options }<\/p>\n<p>    \/\/  create next pages container {\n    \/\/  =============================<\/p>\n<p>        $N.createNextPagesContainer = function ()\n        {\n            \/\/  default id\n            \/\/  ==========\n                _container_id = $N.settings.onCreateNextPagesContainerUseThisId;<\/p>\n<p>            \/\/\tcontainer\n            \/\/\t=========\n                var _containerElement = $D.document.createElement('div');\n                    _containerElement.setAttribute('id', _container_id);<\/p>\n<p>            \/\/\tcss\n            \/\/\t===\n                if ($N.settings.onCreateNextPagesContainerDoNotInsertCSS); else\n                {\n                    var \n                        _cssElement = $D.document.createElement('style'),\n                        _cssText = ''\n                        +\t'#'+_container_id+' { '\n                        +\t\t'margin: 0; padding: 0; border: none; '\n                        +\t\t'position: absolute; '\n                        +\t\t'width: 10px; height: 10px; '\n                        +\t\t'top: -100px; left: -100px; '\n                        +\t'} '\n                        +\t'#'+_container_id+' iframe { '\n                        +\t\t'margin: 0; padding: 0; border: none; '\n                        +\t\t'position: absolute; '\n                        +\t\t'width: 10px; height: 10px; '\n                        +\t\t'top: -100px; left: -100px; '\n                        +\t'} '\n                    ;\n                    _cssElement.setAttribute('id', _container_id + '__css');\n                    _cssElement.setAttribute('type', 'text\/css');\n                    if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                        else { _cssElement.appendChild($D.document.createTextNode(_cssText)); }\n                }<\/p>\n<p>            \/\/\twrite\n            \/\/\t=====\n                var _body = $D.document.getElementsByTagName('body')[0];\n                    \/* css *\/       if (_cssElement) { _body.appendChild(_cssElement); }\n                    \/* container *\/ _body.appendChild(_containerElement);<\/p>\n<p>            \/\/  set\n            \/\/  ===\n                $N.nextPages = _containerElement;\n                $N.$nextPages = $CJ($N.nextPages);\n        };<\/p>\n<p>    \/\/  create next pages container }<\/p>\n<p>\t\/\/  helpers {\n\t\/\/  =========<\/p>\n<p>        \/\/  substr starting with the first slash after \/\/\n\t\t$N.getURLPath = function (_url) { return _url.substr(_url.indexOf('\/', (_url.indexOf('\/\/') + 2))); };<\/p>\n<p>        \/\/  substr until the first slash after \/\/\n\t\t$N.getURLDomain = function (_url) { return _url.substr(0, _url.indexOf('\/', (_url.indexOf('\/\/') + 2))); };<\/p>\n<p>\t\/\/  helpers }<\/p>\n<p>\t\/\/  load page {\n\t\/\/  ===========<\/p>\n<p>        $N.nextPage__loadToFrame = function (_pageNr, _nextPageURL)\n        {\n            \/\/\tdo ajax\n            \/\/\t=======\n                $CJ.ajax\n                ({\n                    'url' : _nextPageURL,<\/p>\n<p>                    'type' : 'GET',\n                    'dataType' : 'html',\n                    'async' : true,\n                    'timeout': (10 * 1000),<\/p>\n<p>                    \/\/'headers': { 'Referrer': _nextPageURL },<\/p>\n<p>                    'success' : function (_response, _textStatus, _xhr)\t{ $N.nextPage__ajaxComplete(_pageNr, _response, _textStatus, _xhr); },\n                    'error' : \tfunction (_xhr, _textStatus, _error)\t{ $N.nextPage__ajaxError(_pageNr, _xhr, _textStatus, _error); }\n                });\n        };<\/p>\n<p>        $N.nextPage__ajaxError = function (_pageNr, _xhr, _textStatus, _error) { };<\/p>\n<p>        $N.nextPage__ajaxComplete = function (_pageNr, _response, _textStatus, _xhr)\n        {\n            \/\/\tvalid?\n            \/\/\t======\n                if (_response > ''); else { return; }<\/p>\n<p>            \/\/\tget html\n            \/\/\t========\n                var _html = _response;<\/p>\n<p>                \/\/\tnormalize\n                \/\/\t=========\n                    _html = _html.replace(\/<\\s+\/gi, '<');\n                    _html = _html.replace(\/\\s+>\/gi, '>');\n                    _html = _html.replace(\/\\s+\\\/>\/gi, '\/>');<\/p>\n<p>                \/\/\tremove\n                \/\/\t======\n                    _html = _html.replace(\/<script[^>]*?>([\\s\\S]*?)<\\\/script>\/gi, '');\n                    _html = _html.replace(\/<script[^>]*?\\\/>\/gi, '');\n                    _html = _html.replace(\/<noscript[^>]*?>([\\s\\S]*?)<\\\/noscript>\/gi, '');<\/p>\n<p>            \/\/\tappend frame\n            \/\/\t============\n                $N.$nextPages.append(''\n                    + '<iframe'\n                    + ' id=\"'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr+'\"'\n                    + ' scrolling=\"no\" frameborder=\"0\"'\n                    + '><\/iframe>'\n                );\t\t<\/p>\n<p>            \/\/\twrite to frame\n            \/\/\t==============\n                var _doc = $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).contents().get(0);\n                    _doc.open();\n                    _doc.write(_html);\n                    _doc.close();<\/p>\n<p>            \/\/\tadd load handler\n            \/\/\t================\n                $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).bind('load', function ()\n                {\n                    \/\/  done?\n                    if ($N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).attr($N.settings.onLoadingNextPageFramesUseThisAttribute) == $N.settings.onLoadingNextPageFramesUseThisAttributeValue) { return; }<\/p>\n<p>                    \/\/  can do?\n                    var _doc = $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).contents().get(0);\n                    if (_doc); else { return; }\n                    if (_doc.readyState == 'interactive' || _doc.readyState == 'complete'); else { return; }<\/p>\n<p>                    \/\/  mark\n                    $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).attr($N.settings.onLoadingNextPageFramesUseThisAttribute, $N.settings.onLoadingNextPageFramesUseThisAttributeValue);<\/p>\n<p>                    \/\/ do\n                    $N.nextPage__loadedInFrame(_pageNr, _doc.defaultView);                  \n                });\n        };<\/p>\n<p>        $N.nextPage__loadedInFrame = function (_pageNr, _pageWindow)\n        {\n            \/\/\tfind\n            \/\/\t====\n                var \n                    _found = $D.getContent__findInPage(_pageWindow),\n                    _foundHTML = _found._html,\n                    _removeTitleRegex = new RegExp($D.articleTitleMarker__start + '(.*?)' + $D.articleTitleMarker__end, 'i')\n                ;<\/p>\n<p>            \/\/  get first fragment\n            \/\/  ==================\n                var _firstFragment = $D.nextPage__getFirstFragment(_foundHTML);<\/p>\n<p>                \/\/  gets first 2000 characters\n                \/\/  diff set at 100 -- 0.05\n                switch (true)\n                {\n                    case ($D.levenshteinDistance(_firstFragment, $N.nextPage__firstFragment__firstPage) < 100):\n                    case ($D.levenshteinDistance(_firstFragment, $N.nextPage__firstFragment__lastPage) < 100):\n                        \/\/  break\n                        return false;\n                    \n                    default:\n                        \/\/  add to first fragemnts\n                        $N.nextPage__firstFragment__lastPage = _firstFragment;\n                        break;\n                }\n\n            \/\/  remove title -- do it twice\n            \/\/  ============\n\n                \/\/  once with document title\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, ($D.document.title > '' ? $D.document.title : ''));\n                _foundHTML = _foundHTML.replace(_removeTitleRegex, '');<\/p>\n<p>                \/\/  once with article title\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, $D.articleTitle);\n                _foundHTML = _foundHTML.replace(_removeTitleRegex, '');<\/p>\n<p>            \/\/\treturn\n            \/\/\t======\n                var _page = {\n                    '_url':         _pageWindow.location.href,\n                    '_html':        _foundHTML,\n                    '_elements':    [_found._targetCandidate.__node]\n                };<\/p>\n<p>                $N.pages.push(_page);\n                if ($N.callbacks.newPageFound) { $N.callbacks.newPageFound(_page); }<\/p>\n<p>            \/\/\tnext\n            \/\/\t====\n                $N.nextPage__find(_pageWindow, _found._links);\n        };<\/p>\n<p>\t\/\/  load }<\/p>\n<p>    \/\/  find {\n    \/\/  ======<\/p>\n<p>\t\t$N.nextPage__find = function (_currentPageWindow, _linksInCurrentPage)\n\t\t{\n\t\t\t\/\/\tpage id\n\t\t\t\tvar _pageNr = ($N.pages.length + 1);<\/p>\n<p>\t\t\t\/\/\tget\n\t\t\t\/\/\t===\n\t\t\t\tvar _possible = [];\n\t\t\t\tif (_possible.length > 0); else { _possible = $N.nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.5); }\n\t\t\t\t\/\/if (_possible.length > 0); else { _possible = $N.nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.50); }<\/p>\n<p>\t\t\t\t\/\/\tnone\n\t\t\t\tif (_possible.length > 0); else\n\t\t\t\t\t{ if ($D.debug) { $D.log('no next link found'); } return; }<\/p>\n<p>\t\t\t\t\/\/  log\n\t\t\t\tif ($D.debug) { $D.log('possible next', _possible); }<\/p>\n<p>\t\t\t\/\/\tthe one\n\t\t\t\/\/\t=======\n\t\t\t\tvar _nextLink = false;<\/p>\n<p>\t\t\t\/\/\tnext keyword?\n\t\t\t\/\/\t=============\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }<\/p>\n<p>\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var j=0, _j=$N.parseOptions._next_page_keywords.length; j<_j; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_possible[i]._caption.indexOf($N.parseOptions._next_page_keywords[j]) > -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\/\/\tlength\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\tif (_possible[i]._caption.length > $N.parseOptions._next_page_keywords[j].length * 2)\n\t\t\t\t\t\t\t\t\t\t{ continue; }<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tnot keywords\n\t\t\t\t\t\t\t\t\/\/\t============\n\t\t\t\t\t\t\t\t\tfor (var z=0, _z=$N.parseOptions._next_page_keywords_not.length; z<_z; z++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_possible[i]._caption.indexOf($N.parseOptions._next_page_keywords_not[z]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _nextLink = false; return; }\n\t\t\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tgot it\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\t_nextLink = _possible[i];\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\t<\/p>\n<p>\t\t\t\/\/\tcaption matched page number\n\t\t\t\/\/\t===========================\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }<\/p>\n<p>\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (_possible[i]._caption == (''+_pageNr))\n\t\t\t\t\t\t\t{ _nextLink = _possible[i]; return; }\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\/\/\tnext keyword in title\n\t\t\t\/\/\t=====================\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }\n\n\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\t\/\/\tsanity\n\t\t\t\t\t\tif (_possible[i]._title > ''); else { continue; }\n\t\t\t\t\t\tif ($D.measureText__getTextLength(_possible[i]._caption) <= 2); else { continue; }\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var j=0, _j=$N.parseOptions._next_page_keywords.length; j<_j; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_possible[i]._title.indexOf($N.parseOptions._next_page_keywords[j]) > -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\/\/\tlength\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\tif (_possible[i]._title.length > $N.parseOptions._next_page_keywords[j].length * 2)\n\t\t\t\t\t\t\t\t\t\t{ continue; }<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tnot keywords\n\t\t\t\t\t\t\t\t\/\/\t============\n\t\t\t\t\t\t\t\t\tfor (var z=0, _z=$N.parseOptions._next_page_keywords_not.length; z<_z; z++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_possible[i]._title.indexOf($N.parseOptions._next_page_keywords_not[z]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _nextLink = false; return; }\n\t\t\t\t\t\t\t\t\t}<\/p>\n<p>\t\t\t\t\t\t\t\t\/\/\tgot it\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\t_nextLink = _possible[i];\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();<\/p>\n<p>\t\t\t\/\/\treturn?\n\t\t\t\/\/\t=======\n\t\t\t\tif (_nextLink); else { return; }<\/p>\n<p>\t\t\t\/\/\tmark\n\t\t\t\/\/\t====\n\t\t\t\tif ($D.debug)\n\t\t\t\t{\n\t\t\t\t\t$D.debugOutline(_nextLink._node, 'target', 'next-page');\n\t\t\t\t\t$D.log('NextPage Link', _nextLink, _nextLink._node);\n\t\t\t\t}<\/p>\n<p>\t\t\t\/\/\tprocess page\n\t\t\t\/\/\t============\n\t\t\t\t$N.nextPage__loadToFrame(_pageNr, _nextLink._href);\n\t\t};<\/p>\n<p>\t\t$N.nextPage__find__possible = function (_currentPageWindow, _linksInCurrentPage, _distanceFactor)\n\t\t{\n\t\t\tvar \n\t\t\t\t_mainPageHref = $D.window.location.href,\n\t\t\t\t_mainPageDomain = $N.getURLDomain(_mainPageHref),\n\t\t\t\t_mainPagePath = $N.getURLPath(_mainPageHref)\n\t\t\t;<\/p>\n<p>\t\t\tvar _links = $CJ.map\n\t\t\t(\n\t\t\t\t_linksInCurrentPage,\n\t\t\t\tfunction (_element, _index)\n\t\t\t\t{\n\t\t\t\t\tvar \n\t\t\t\t\t\t_href = _element.__node.href,\n\t\t\t\t\t\t_path = $N.getURLPath(_href),\n\t\t\t\t\t\t_title = (_element.__node.title > '' ? _element.__node.title.toLowerCase() : ''),\n\t\t\t\t\t\t_caption = _element.__node.innerHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\&[^\\&\\s;]{1,10};\/gi, '').replace(\/\\s+\/gi, ' ').replace(\/^ \/, '').replace(\/ $\/, '').toLowerCase(),\n\t\t\t\t\t\t_distance = $D.levenshteinDistance(_mainPagePath, _path)\n\t\t\t\t\t;<\/p>\n<p>\t\t\t\t\tvar _caption2 = '';\n\t\t\t\t\tfor (var i=0, _i=_caption.length, _code=0; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\t_code = _caption.charCodeAt(i);\n\t\t\t\t\t\t_caption2 += (_code > 127 ? ('&#'+_code+';') : _caption.charAt(i));\n\t\t\t\t\t}\n\t\t\t\t\t_caption = _caption2;<\/p>\n<p>\t\t\t\t\tswitch (true)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase (!(_href > '')):\n\t\t\t\t\t\tcase (_mainPageHref.length > _href.length):\n\t\t\t\t\t\tcase (_mainPageDomain != $N.getURLDomain(_href)):\n\t\t\t\t\t\tcase (_href.substr(_mainPageHref.length).substr(0, 1) == '#'):\n\t\t\t\t\t\tcase (_distance > Math.ceil(_distanceFactor * _path.length)):\n\t\t\t\t\t\t\treturn null;<\/p>\n<p>\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\/\/\tskip if already loaded as next page\n\t\t\t\t\t\t\tfor (var i=0, _i=$N.pages.length; i<_i; i++)\n\t\t\t\t\t\t\t\t{ if ($N.pages[i]._url == _href) { return null; } }\n\n\t\t\t\t\t\t\t\/\/\treturn\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t'_node': _element.__node,\n\t\t\t\t\t\t\t\t'_href': _href,\n\t\t\t\t\t\t\t\t'_title': _title,\n\t\t\t\t\t\t\t\t'_caption': _caption,\n\t\t\t\t\t\t\t\t'_distance': _distance\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\t\/\/\tsort -- the less points, the closer to position 0\n\t\t\t\/\/\t====\n\t\t\t\t_links.sort(function (a, b)\n\t\t\t\t{\n\t\t\t\t\tswitch (true)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase (a._distance < b._distance): return -1;\n\t\t\t\t\t\tcase (a._distance > b._distance): return 1;\n\t\t\t\t\t\tdefault: return 0;\n\t\t\t\t\t}\n\t\t\t\t});<\/p>\n<p>\t\t\t\/\/\treturn\n\t\t\t\treturn _links;\n\t\t};<\/p>\n<p>    \/\/  find }<\/p>\n<p>    \/\/  start {\n    \/\/  =======<\/p>\n<p>        $N.start = function ()\n        {\n            \/\/  first fragments\n                $N.nextPage__firstFragment__firstPage = $D.nextPage__firstFragment__firstPage;\n                $N.nextPage__firstFragment__lastPage = $D.nextPage__firstFragment__lastPage;<\/p>\n<p>            \/\/  first page\n                $N.pages = [{ '_url': $D.window.location.href }];<\/p>\n<p>            \/\/  start\n                $N.nextPage__find($D.window, $D.nextPage__firstLinks);\n        };<\/p>\n<p>    \/\/  start }<\/p>\n<p>    \/\/  return self\n    \/\/  ===========\n        return $N;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/*!\n *  ClearlyComponent__reformat\n *  Evernote Clearly's display as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      \/\/ define\n *      window.ClearlyComponent__reformat = {\n *          'callbacks': {\n *              'frameCreated': someFunction(),\n *              'pageAdded': someFunction(),\n *          },\n *\n *          'settings': { \n *              'cssPath': 'string',\n *              'pageLabel': 'string'.\n *              'onCreateFrameUseThisId': 'string',\n *              'onCreateFrameDoNotInsertCSS': true\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__reformat = initClearlyComponent__reformat(window.ClearlyComponent__reformat);\n *\n *      \/\/ create frame\n *      window.ClearlyComponent__detect.createFrame();\n *\n *      \/\/ apply options\n *      window.ClearlyComponent__detect.applyOptions(_options_object);\n *\n *      \/\/ add page\n *      window.ClearlyComponent__detect.addNewPage(_html, _source_url);\n *\n *\/<\/p>\n<p>\/*\n    changes:\n    ========\n        $R => $R\n        $R.win => $R.window<\/p>\n<p>    to do:\n    ======\n*\/<\/p>\n<p>function initClearlyComponent__reformat(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================<\/p>\n<p>        \/\/  null; return\n        if (_paramInstance); else { return false; }<\/p>\n<p>        \/\/  shorthand\n        $R = _paramInstance;<\/p>\n<p>    \/\/  global instance reference }<\/p>\n<p>    \/\/  required vars {\n    \/\/  ===============<\/p>\n<p>        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:<\/p>\n<p>        switch (true)\n        {\n            case (!($R.settings)):\n            case (!($R.settings.cssPath)):<\/p>\n<p>            case (!($R.window)):\n            case (!($R.document)):\n            case (!($R.document.body)):<\/p>\n<p>            case (!($R.jQuery)):<\/p>\n<p>                if ($R.debug)\n                {\n                    console.log(!($R.settings));\n                    console.log(!($R.settings.cssPath));<\/p>\n<p>                    console.log(!($R.window));\n                    console.log(!($R.document));\n                    console.log(!($R.document.body));<\/p>\n<p>                    console.log(!($R.jQuery));\n                }<\/p>\n<p>                \/\/  something's wrong\n                return false;\n        }<\/p>\n<p>    \/\/  required vars }<\/p>\n<p>    \/\/  missing settings {\n    \/\/  ==================<\/p>\n<p>        \/\/  names for stuff\n        \/* frame id *\/            if ($R.settings.onCreateFrameUseThisId); else             { $R.settings.onCreateFrameUseThisId =            'clearly_frame'; }\n        \/* insert frame css *\/    if ($R.settings.onCreateFrameDoNotInsertCSS); else        { $R.settings.onCreateFrameDoNotInsertCSS =       false; }\n        \/* page label *\/          if ($R.settings.pageLabel); else                          { $R.settings.pageLabel =                         'Page '; }<\/p>\n<p>    \/\/  missing settings }<\/p>\n<p>    \/\/  global vars {\n    \/\/  =============<\/p>\n<p>        $CJ = $R.jQuery;<\/p>\n<p>        $R.$window = $CJ($R.window);\n        $R.$document = $CJ($R.document);<\/p>\n<p>        $R.pagesCount = 0;\n        $R.footnotedLinksCount;<\/p>\n<p>        \/*\n            .iframe, .$iframe\n            .iframeWindow, .$iframeWindow\n            .iframeDocument, .$iframeDocument\n            .$iframeBackground, .$iframeBox, .$iframePages\n        *\/<\/p>\n<p>    \/\/  global vars }<\/p>\n<p>    \/\/  debug {\n    \/\/  =======<\/p>\n<p>        $R.debug = ($R.debug || false);\n\t\t$R.debugRemembered = {};\n        $R.debugTimers = [];<\/p>\n<p>\t\tif ($R.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 (!(!($R.window.console && $R.window.console.log))):    $R.writeLog = function (msg) { $R.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($R.window.opera && $R.window.opera.postError))):  $R.writeLog = function (msg) { $R.window.opera.postError(msg); };   break;\n\t\t\t\t\tdefault:                                                    $R.writeLog = function (msg) {};                                    break;\n\t\t\t\t}<\/p>\n<p>            \/\/  log\n            \/\/  ===\n                $R.log = function ()\n                {\n                    if ($R.debug); else { return; }\n                    for (var i=0, il=arguments.length; i<il ; i++) { $R.writeLog(arguments[i]); }\n                    $R.writeLog('-----------------------------------------');\n                };\n                \n            \/\/  remember\n            \/\/  ========\n                $R.debugRemember = function (_k, _v)\n                {\n                    $R.debugRemembered[_k] = _v;\n                };\n\t\t}\n\t\telse\n\t\t{\n            $R.writeLog \t\t= function () { return false; };\n            $R.log \t\t\t\t= function () { return false; };\n            $R.debugRemember \t= function () { return false; };\n        }\n\n    \/\/  debug }\n\n\n    \/\/  encode \/ decode {\n    \/\/  =================\n\n\t\t$R.encode = function (_string)\n\t\t{\n\t\t\t\/\/\tnone\n\t\t\tif (_string == '') { return 'none'; }\n\t\t\t\n\t\t\t\/\/\tencode\n\t\t\treturn encodeURIComponent(_string)\n\t\t\t\t.replace(\/!\/g, '%21')\n\t\t\t\t.replace(\/'\/g, '%27')\n\t\t\t\t.replace(\/\\(\/g, '%28')\n\t\t\t\t.replace(\/\\)\/g, '%29')\n\t\t\t\t.replace(\/\\*\/g, '%2A')\n\t\t\t;\n\t\t};\n\t\t\n\t\t$R.decode = function (_string)\n\t\t{\n\t\t\t\/\/\tnone\n\t\t\tif (_string == 'none') { return ''; }\n\t\t\t\n\t\t\t\/\/\tdecode\n\t\t\treturn decodeURIComponent(_string);\n\t\t};\n    \n    \/\/  encode \/ decode }\n\n\n    \/\/  themes {\n    \/\/  ========\n\n        (function ()\n        {\n            \/\/  themes already set\n            if ($R.availableThemes) { return; } \n            \n            \/\/  set themes\n            $R.availableThemes = {\n                'newsprint': {\n                    'text_font': \t\t\t$R.encode('\"PT Serif\"'),\n                    'text_font_header': \t$R.encode('\"PT Serif\"'),\n                    'text_font_monospace': \t$R.encode('Inconsolata'),\n                    'text_size': \t\t\t$R.encode('16px'),\n                    'text_line_height': \t$R.encode('1.5em'),\n                    'box_width': \t\t\t$R.encode('36em'),\n                    'color_background': \t$R.encode('#f3f2ee'),\n                    'color_text': \t\t\t$R.encode('#1f0909'),\n                    'color_links': \t\t\t$R.encode('#065588'),\n                    'text_align': \t\t\t$R.encode('normal'),\n                    'base': \t\t\t\t$R.encode('base__newsprint'),\n                    'footnote_links': \t\t$R.encode('on_print'),\n                    'large_graphics': \t\t$R.encode('do_nothing'),\n                    'custom_css': \t\t\t$R.encode(''\n                                            + '#text #articleHeader { border-color: #c5c5c5; }'\n                                            + '#text #relatedNotes { border-color: rgba(197, 197, 197, 0.5); }'\n                                            + '#text blockquote { border-color: #bababa; color: #656565; }'\n                                            + '#text thead { background-color: #dadada; }'\n                                            + '#text tr:nth-child(even) { background: #e8e7e7; }'\n                                            + '#text hr { border-color: #c5c5c5; }')\n                },\n                'notable': {\n                    'text_font': \t\t\t$R.encode('Helvetica, Arial'),\n                    'text_font_header': \t$R.encode('Helvetica, Arial'),\n                    'text_font_monospace': \t$R.encode('\"Droid Sans Mono\"'),\n                    'text_size': \t\t\t$R.encode('14px'),\n                    'text_line_height': \t$R.encode('1.5em'),\n                    'box_width': \t\t\t$R.encode('42em'),\n                    'color_background': \t$R.encode('#fff'),\n                    'color_text': \t\t\t$R.encode('#333'),\n                    'color_links': \t\t\t$R.encode('#090'),\n                    'text_align': \t\t\t$R.encode('normal'),\n                    'base': \t\t\t\t$R.encode('base__notable'),\n                    'footnote_links': \t\t$R.encode('on_print'),\n                    'large_graphics': \t\t$R.encode('do_nothing'),\n                    'custom_css': \t\t\t$R.encode(''\n                                            + '#text #articleHeader { border-color: #000; }'\n                                            + '#text #relatedNotes { border-color: rgba(0, 0, 0, 0.25); }'\n                                            + '#text h1 { color: #000; }'\n                                            + '#text h2, #text h3, #text h4, #text h5, #text h6 { color: #444; }'\n                                            + '#text blockquote { border-color: #d1d1d1; }'\n                                            + '#text thead { background-color: #444; color: #fff; }'\n                                            + '#text tr:nth-child(even) { background: #d1d1d1; }'\n                                            + '#text hr { border-color: #000; }')\n                },\n                'night_owl': {\n                    'text_font': \t\t\t$R.encode('\"PT Serif\"'),\n                    'text_font_header': \t$R.encode('\"PT Serif\"'),\n                    'text_font_monospace': \t$R.encode('Inconsolata'),\n                    'text_size': \t\t\t$R.encode('16px'),\n                    'text_line_height': \t$R.encode('1.5em'),\n                    'box_width': \t\t\t$R.encode('36em'),\n                    'color_background': \t$R.encode('#2d2d2d'),\n                    'color_text': \t\t\t$R.encode('#e3e3e3'),\n                    'color_links': \t\t\t$R.encode('#e3e3e3'),\n                    'text_align': \t\t\t$R.encode('normal'),\n                    'base': \t\t\t\t$R.encode('base__night_owl'),\n                    'footnote_links': \t\t$R.encode('on_print'),\n                    'large_graphics': \t\t$R.encode('do_nothing'),\n                    'custom_css': \t\t\t$R.encode(''\n                                            + '#text #articleHeader { border-color: #c5c5c5; }'\n                                            + '#text #relatedNotes { border-color: rgba(197, 197, 197, 0.5); }'\n                                            + '#text a:link { -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -o-transition: all 0.3s ease; }'\n                                            + '#text #relatedNotes a { -webkit-transition-duration: 0s; -moz-transition-duration: 0s; -o-transition-duration: 0s; }'\n                                            + '#text a:hover, #text a:active {\tcolor: #44bde8; }'\n                                            + '#text blockquote { color: #c1bfbf; border-color: #c1bfbf; }'\n                                            + '#text thead { background-color: #4f4f4f; }'\n                                            + '#text tr:nth-child(even) { background: #404040; }'\n                                            + '#text hr { border-color: #c5c5c5; }')\n                }\n            };\n        })();\n\n    \/\/  themes }\n\n\n    \/\/  font sizes {\n    \/\/  ============\n    \n        (function ()\n        {\n            \/\/  font sizes already set\n            if ($R.availableFontSizes) { return; } \n            \n            \/\/  set font sizes\n            $R.availableFontSizes = {\n                'small':    { 'newsprint': '12px', 'notable': '12px', 'night_owl': '12px' },\n                'medium':   { 'newsprint': '16px', 'notable': '16px', 'night_owl': '16px' },\n                'large':    { 'newsprint': '20px', 'notable': '20px', 'night_owl': '20px' }\n            };\n        })();\n    \n    \/\/  font sizes }\n\n\n    \/\/  google fonts {\n    \/\/  ==============\n    \n        (function ()\n        {\n            \/\/  google fonts already set\n            if ($R.availableGoogleFonts) { return; }\n            \n            \/\/  set google fonts to these\n            var __google_fonts_array = [\n                \/* serif *\/ 'Arvo', 'Bentham', 'Cardo', 'Copse', 'Corben', 'Crimson Text', 'Droid Serif', 'Goudy Bookletter 1911', 'Gruppo', 'IM Fell', 'Josefin Slab', 'Kreon', 'Meddon', 'Merriweather', 'Neuton', 'OFL Sorts Mill Goudy TT', 'Old Standard TT', 'Philosopher', 'PT Serif', 'Radley', 'Tinos', 'Vollkorn',\n                \/* sans  *\/ 'Allerta', 'Anton', 'Arimo', 'Bevan', 'Buda', 'Cabin', 'Cantarell', 'Coda', 'Cuprum', 'Droid Sans', 'Geo', 'Josefin Sans', 'Lato', 'Lekton', 'Molengo', 'Nobile', 'Orbitron', 'PT Sans', 'Puritan', 'Raleway', 'Syncopate', 'Ubuntu', 'Yanone Kaffeesatz',\n                \/* fixed *\/ 'Anonymous Pro', 'Cousine', 'Droid Sans Mono', 'Inconsolata'\n            ];\n            \n            \/\/  set\n            $R.availableGoogleFonts = {};\n            for (var i=0, ii=__google_fonts_array.length; i<ii; i++){\n                $R.availableGoogleFonts[__google_fonts_array[i]] = 1;\n            }\n        })();\n    \n    \/\/  google fonts }\n  \n  \n    \/\/  default options {\n    \/\/  =================\n\n        $R.defaultOptions = \n        {\n            'text_font': \t\t\t$R.encode('\"PT Serif\"'),\n            'text_font_header': \t$R.encode('\"PT Serif\"'),\n            'text_font_monospace': \t$R.encode('Inconsolata'),\n            'text_size': \t\t\t$R.encode('16px'),\n            'text_line_height': \t$R.encode('1.5em'),\n            'box_width': \t\t\t$R.encode('36em'),\n            'color_background': \t$R.encode('#f3f2ee'),\n            'color_text': \t\t\t$R.encode('#1f0909'),\n            'color_links': \t\t\t$R.encode('#065588'),\n            'text_align': \t\t\t$R.encode('normal'),            \/* normal, justified *\/\n            'base': \t\t\t\t$R.encode('base__newsprint'),   \/* base__ newsprint, notable, night_owl *\/\n            'footnote_links': \t\t$R.encode('on_print'),          \/* on_print, always, never *\/\n            'large_graphics': \t\t$R.encode('do_nothing'),        \/* do_nothing, hide_on_print, hide_always *\/\n            'custom_css': \t\t\t('')\n        };\n        \n    \n    \/\/  default options }\n\n\n    \/\/  get css from options {\n    \/\/  ======================\n\n        $R.getCSSFromOptions = function (_options)\n        {\n            var _cssText = (''\n            +\t'#body { '\n            +\t\t'font-family: [=text_font]; '\n            +\t\t'font-size: [=text_size]; '\n            +\t\t'line-height: [=text_line_height]; '\n            +\t\t'color: [=color_text]; '\n            +\t\t'text-align: '+(_options['text_align'] == 'justified' ? 'justify' : 'left')+'; '\n            +\t'} '\n        \n            +\t'#background { background-color: [=color_background]; } '\n        \n            +\t'.setTextColorAsBackgroundColor { background-color: [=color_text]; } '\n            +\t'.setBackgroundColorAsTextColor { color: [=color_background]; } '\n        \n            +\t'#box, .setBoxWidth { width: [=box_width]; } '\n        \n            +\t'a { color: [=color_links]; } '\n            +\t'a:visited { color: [=color_text]; } '\n        \n            +\t'@media print { body.footnote_links__on_print a, body.footnote_links__on_print a:hover { color: [=color_text] !important; text-decoration: none !important; } } '\n            +\t'body.footnote_links__always a, body.footnote_links__always a:hover { color: [=color_text] !important; text-decoration: none !important; } '\n        \n            +\t'img { border-color: [=color_text]; } '\n            +\t'a img { border-color: [=color_links]; } '\n            +\t'a:visited img { border-color: [=color_text]; } '\n\n            +\t'h1 a, h2 a, a h1, a h2 { color: [=color_text]; } '\n            +\t'h1, h2, h3, h4, h5, h6 { font-family: [=text_font_header]; } '\n\n            +\t'pre { background-color: [=color_background]; } '\n            +\t'pre, code { font-family: [=text_font_monospace]; } '\n            +\t'hr { border-color: [=color_text]; } '\n\n            +\t'html.rtl #body #text { text-align: ' + (_options['text_align'] == 'justified' ? 'justify' : 'right')+' !important; } '\n            +\t'h1, h2, h3, h4, h5, h6 { text-align: left; } '\n            +\t'html.rtl h1, html.rtl h2, html.rtl h3, html.rtl h4, html.rtl h5, html.rtl h6 { text-align: right !important; } '\n\n            +\t'[=custom_css] '\n            ).replace(\n                \/\\[=([a-z_]+?)\\]\/gi,\n                function (_match, _key) { return _options[_key]; }\n            );\n        \n            return _cssText;\n        }\n    \n    \/\/  get css from options }\n\n\n    \/\/  apply options {\n    \/\/  ===============\n    \n        \/\/\tvar\n        \/\/\t===\n\n            \/\/  _encodedOptions and _decodeOptions hold the options to be applied\n            \/\/\t$R.appliedOptions holds the options currently applied (encoded)\n            \/\/\t$R.loadedGoogleFonts holds the  currently loaded Google fonts URLs\n\n            $R.appliedOptions = {};\n            $R.loadedGoogleFonts = {};\n        \n        \/\/\tapply options\n        \/\/\t=============\n            $R.applyOptions = function (_encodedOptions)\n            {\n                \/\/  possible options\n                \/\/  =================\n                    var _possible_options = $R.defaultOptions;\n                    \n                \/\/  our themes        \n                \/\/  ==========\n                    var _ourOwnThemes = '|theme-1|theme-2|theme-3|';\n                \n                \/\/\tnull\n                \/\/\t====\n                    if (_encodedOptions); else { _encodedOptions = {}; }\n                \n                \/\/  blank, invalid\n                \/\/  ==============\n                    for (var _option in _possible_options)\n                    {\n                        switch (true)\n                        {\n                            case (!(_option in _encodedOptions)):\n                            case (!(_encodedOptions[_option] > '')):\n                                \/\/  either current, or default\n                                _encodedOptions[_option] = ($R.appliedOptions[_option] ? $R.appliedOptions[_option] : _possible_options[_option]);\n                                break;\n                        }\n                    }<\/p>\n<p>                \/\/\twhat to do\n                \/\/\t==========<\/p>\n<p>                    var \n                        _resetBase = false,\n                        _resetOptions = false, \n                        _decodedOptions = {}\n                    ;<\/p>\n<p>                \/\/  set stuff\n                \/\/  =========<\/p>\n<p>                    \/\/\t_resetBase\n                    switch (true)\n                    {\n                        case (!('base' in  $R.appliedOptions)):\n                        case (!(_encodedOptions['base'] == $R.appliedOptions['base'])):\n                            _resetBase = true;\n                            break;\n                    }<\/p>\n<p>                    \/\/\t_resetOptions\n                    for (var _option in _possible_options)\n                    {\n                        switch (true)\n                        {\n                            case (!(_option in $R.appliedOptions)):\n                            case (!(_encodedOptions[_option] == $R.appliedOptions[_option])):\n                                _resetOptions = true;\n                                break;\n                        }<\/p>\n<p>                        \/\/\tstop\n                        if (_resetOptions) { break; }\n                    }\t<\/p>\n<p>                    \/\/\tappliedOptions and optionsToApply\n                    for (var _option in _possible_options)\n                    {\n                        $R.appliedOptions[_option] = _encodedOptions[_option];\n                        _decodedOptions[_option] = $R.decode(_encodedOptions[_option]);\n                    }<\/p>\n<p>                \/\/\tapply stuff\n                \/\/\t===========<\/p>\n<p>                    \/\/  base\n                    if (_resetBase)\n                    {\n                        \/\/\tremove old\n                        $R.$iframeDocument.find('#baseCSS').remove();<\/p>\n<p>                        \/\/\tadd new\n                        if (_decodedOptions['base'] > '')\n                        {\n                            $R.$iframeDocument.find('head').append(''\n                                + '<link id=\"baseCSS\" href=\"'\n                                + $R.settings.cssPath + _decodedOptions['base']+'.css'\n                                + '\" rel=\"stylesheet\" type=\"text\/css\" \/>'\n                            );\n                        }\n                    }<\/p>\n<p>                    \/\/\toptions\n                    if (_resetOptions)\n                    {\n                        var _cssText = $R.getCSSFromOptions(_decodedOptions);<\/p>\n<p>                        \/\/\tremove old\n                        \/\/\t==========\n                            $R.$iframeDocument.find('#optionsCSS').remove();<\/p>\n<p>                        \/\/\tnew\n                        \/\/\t===\n                            var _cssElement = document.createElement('style');\n                                _cssElement.setAttribute('type', 'text\/css');\n                                _cssElement.setAttribute('id', 'optionsCSS');<\/p>\n<p>                            if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                                else { _cssElement.appendChild(document.createTextNode(_cssText)); }<\/p>\n<p>                            $R.$iframeDocument.find('head').append(_cssElement);<\/p>\n<p>                        \/\/\tbody classes\n                        \/\/\t============\n                            $R.$iframeDocument.find('body')\n                                .removeClass('footnote_links__on_print footnote_links__always footnote_links__never')\n                                .removeClass('large_graphics__do_nothing large_graphics__hide_on_print large_graphics__hide_always')\n                                .addClass('footnote_links__'+_decodedOptions['footnote_links'])\n                                .addClass('large_graphics__'+_decodedOptions['large_graphics'])\n                            ;\n                    }\t\n            };<\/p>\n<p>    \/\/  apply options }<\/p>\n<p>    \/\/  apply google fonts  {\n    \/\/  =====================<\/p>\n<p>        $R.getGoogleFontsFromOptions = function (_options)\n        {\n            var \n                _fonts = {},\n                _fonts_urls = [],\n                _check_font = function (_match, _font) {\n                    if (_font in $R.availableGoogleFonts) { _fonts[_font] = 1; }\n                }\n            ;<\/p>\n<p>            \/\/\tbody\n            \/\/\t====\n                _options['text_font'].replace(\/\"([^\",]+)\"\/gi, _check_font);\n                _options['text_font'].replace(\/([^\",\\s]+)\/gi, _check_font);\t\t\t\t<\/p>\n<p>            \/\/\theaders\n            \/\/\t=======\n                _options['text_font_header'].replace(\/\"([^\",]+)\"\/gi, _check_font);\n                _options['text_font_header'].replace(\/([^\",\\s]+)\/gi, _check_font);\t\t\t\t<\/p>\n<p>            \/\/\tmonospace\n            \/\/\t=========\n                _options['text_font_monospace'].replace(\/\"([^\",]+)\"\/gi, _check_font);\n                _options['text_font_monospace'].replace(\/([^\",\\s]+)\/gi, _check_font);\t\t\t\t<\/p>\n<p>            \/\/\tcustom css\n            \/\/\t==========\n                _options['custom_css'].replace(\/font-family: \"([^\",]+)\"\/gi, _check_font);\n                _options['custom_css'].replace(\/font-family: ([^\",\\s]+)\/gi, _check_font);<\/p>\n<p>            \/\/\treturn\n            \/\/\t======<\/p>\n<p>                \/\/\ttransform to array\n                for (var _font in _fonts)\n                {\n                    _fonts_urls.push(''\n                        + 'http:\/\/fonts.googleapis.com\/css?family='\n                        + _font.replace(\/\\s+\/g, '+')\n                        + ':regular,bold,italic'\n                    );\n                }<\/p>\n<p>                \/\/\treturn\n                return _fonts_urls;\n        };<\/p>\n<p>        $R.loadGoogleFontsRequiredByAppliedOptions = function ()\n        {\n            \/\/  decode options\n            var _decodedOptions = {};\n            for (var _option in $R.appliedOptions)\n                { _decodedOptions[_option] = $R.decode($R.appliedOptions[_option]); }<\/p>\n<p>            \/\/\tget\n            var _fonts_urls = $R.getGoogleFontsFromOptions(_decodedOptions);<\/p>\n<p>            \/\/\tapply\n            for (var i=0,_i=_fonts_urls.length; i<_i; i++) {\n                \/* loaded *\/    if ($R.loadedGoogleFonts[_fonts_urls[i]]) { continue; }\n                \/* load *\/      $R.$iframeDocument.find('head').append('<link href=\"'+_fonts_urls[i]+'\" rel=\"stylesheet\" type=\"text\/css\" \/>');\n                \/* mark *\/      $R.loadedGoogleFonts[_fonts_urls[i]] = 1;\n            }\n        };<\/p>\n<p>    \/\/  apply google fonts }<\/p>\n<p>    \/\/  create frame {\n    \/\/  ==============<\/p>\n<p>        $R.createFrame = function ()\n        {\n            \/\/  default id\n            \/\/  ==========\n                _frame_id = $R.settings.onCreateFrameUseThisId;<\/p>\n<p>            \/\/\tiframe\n            \/\/\t======\n                var\n                    _iframeElement = $R.document.createElement('div'),\n                    _iframeHTML = ''\n                    +\t'<\/p>\n<div id=\"html\">'\n                    +\t    '<\/p>\n<div id=\"body\">'\n                    +\t    \t'<\/p>\n<div id=\"bodyContent\">'<\/p>\n<p>                    +\t            '<\/p>\n<div id=\"box\">'\n                    +\t    \t        '<\/p>\n<div id=\"box_inner\">'\n                    +\t    \t\t        '<\/p>\n<div id=\"text\">'\n                    +\t    \t\t\t        '<\/p>\n<div id=\"pages\"><\/div>\n<p>'\n                    +\t    \t\t\t        '<\/p>\n<ol id=\"footnotedLinks\"><\/ol>\n<p>'\n                    +\t    \t\t        '<\/p><\/div>\n<p>'\n                    +\t    \t        '<\/p><\/div>\n<p>'\n                    +\t            '<\/p><\/div>\n<p>'\n                    +\t            '<\/p>\n<div id=\"background\"><\/div>\n<p>'\n                    +           '<\/p><\/div>\n<p>'\n                    +\t    '<\/p><\/div>\n<p>'\n                    +\t'<\/p><\/div>\n<p>'\n                ;\n                _iframeElement.setAttribute('id', _frame_id);<\/p>\n<p>            \/\/\tcss\n            \/\/\t===<\/p>\n<p>                if ($R.settings.onCreateFrameDoNotInsertCSS); else\n                {\n                    var \n                        _cssElement = $R.document.createElement('style'),\n                        _cssText = ''\n                        +\t'#'+_frame_id+' { '\n                        +\t\t'margin: 0; padding: 0; border: none; '\n                        +\t\t'position: absolute; '\n                        +\t\t'width: 10px; height: 10px; '\n                        +\t\t'top: -100px; left: -100px; '\n                        +\t'} '\n                    ;\n                    _cssElement.setAttribute('id', _frame_id + '__css');\n                    _cssElement.setAttribute('type', 'text\/css');\n                    if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                        else { _cssElement.appendChild($R.document.createTextNode(_cssText)); }\n                }<\/p>\n<p>            \/\/\twrite\n            \/\/\t=====<\/p>\n<p>                var _body = $R.document.getElementsByTagName('body')[0];\n                    \/* css *\/   if (_cssElement) { _body.appendChild(_cssElement); }\n                    \/* frame *\/ _body.appendChild(_iframeElement);<\/p>\n<p>                var _iframe = $R.document.getElementById(_frame_id);\n                var _doc;\n                _iframe.innerHTML = _iframeHTML;<\/p>\n<p>            \/\/  callback & variables\n            \/\/  ====================\n                var _check_interval = false;\n                var _check = function ()\n                {\n                    \/\/  iframe\n                        var _iframe = $R.document.getElementById(_frame_id);\n                        if (_iframe); else { return; }<\/p>\n<p>                    \/\/  body\n                        var _body = $CJ(_iframe).find('#bodyContent')[0];<\/p>\n<p>                        if (_body); else { return; }<\/p>\n<p>                    \/\/  clear interval\n                        $R.window.clearInterval(_check_interval);<\/p>\n<p>                    \/\/  global vars\n                        $R.iframe = _iframe;\n                        $R.$iframe = $CJ($R.iframe);<\/p>\n<p>                        $R.iframeDocument = _iframe;\n                        $R.$iframeDocument = $CJ($R.iframeDocument);<\/p>\n<p>                        $R.iframeWindow = _iframe;\n                        $R.$iframeWindow = $CJ($R.iframeWindow);<\/p>\n<p>                        $R.$iframeBox = $R.$iframeDocument.find('#box');\n                        $R.$iframePages = $R.$iframeDocument.find('#pages');\n                        $R.$iframeBackground = $R.$iframeDocument.find('#background');\n                        $R.$iframeFootnotedLinks = $R.$iframeDocument.find('#footnotedLinks');<\/p>\n<p>                    \/\/  callback\n                        if ($R.callbacks.frameCreated) { $R.callbacks.frameCreated(); }\n                };<\/p>\n<p>                \/\/  set interval\n                _check_interval = $R.window.setInterval(_check, 250);\n        };<\/p>\n<p>    \/\/  create frame }<\/p>\n<p>    \/\/  add page {\n    \/\/  ==========<\/p>\n<p>        $R.addNewPage = function (_pageHTML, _pageURL)\n        {\n            \/\/  update page count\n            \/\/  =================\n                var _pageNr = $R.pagesCount + 1;\n                $R.pagesCount++;<\/p>\n<p>            \/\/\tseparator\n            \/\/\t=========\n                if (_pageNr > 1)\n                {\n                    $R.$iframePages.append(''\n                        + '<\/p>\n<div class=\"pageSeparator\">'\n                        +\t'<\/p>\n<div class=\"pageSeparatorLine setTextColorAsBackgroundColor\"><\/div>\n<p>'\n                        + \t'<\/p>\n<div class=\"pageSeparatorLabel\"><em>'+$R.settings.pageLabel+_pageNr+'<\/em><\/div>\n<p>'\n                        + '<\/p><\/div>\n<p>'\n                    );\n                }<\/p>\n<p>            \/\/\tappend page\n            \/\/\t===========\n                $R.$iframePages.append(''\n                    + '<\/p>\n<div class=\"page\" id=\"page'+_pageNr+'\">'\n                    +     '<\/p>\n<div class=\"page_content\">'\n                    + \t      _pageHTML\n                    +     '<\/div>\n<p>'\n                    + '<\/p><\/div>\n<p>'\n                );<\/p>\n<p>            \/\/  this new page\n            \/\/  =============<\/p>\n<p>                \/\/  cache\n                var _$page = $R.$iframeDocument.find('#page'+_pageNr);<\/p>\n<p>                \/\/\tlinks as footnotes\n                _$page.find('a').each(function (_index, _element)\n                {\n                    \/\/\tcheck\n                    var _href = _element.href;\n                    if (_href > ''); else { return; }\n                    if (_href.indexOf); else { return; }\n                    if (_href.indexOf('#') > -1) { return; }<\/p>\n<p>                    \/\/\tcount\n                    var _nr = ++$R.footnotedLinksCount;<\/p>\n<p>                    \/\/\tadd\n                    $CJ(_element).append(' <sup class=\"readableLinkFootnote\">['+_nr+']<\/sup>');\n                    $R.$iframeFootnotedLinks.append('<\/p>\n<li>'+_href+'<\/li>\n<p>');\n                });\n        };<\/p>\n<p>    \/\/  add page }<\/p>\n<p>    \/\/  clear all pages {\n    \/\/  =================<\/p>\n<p>        $R.clearAllPages = function ()\n        {\n            \/\/  reset pages count\n            $R.pagesCount = 0;<\/p>\n<p>            \/\/  delete all pages\n            $R.$iframePages.get(0).innerHTML = '';<\/p>\n<p>            \/\/  reset footnote count\n            $R.footnotedLinksCount = 0;<\/p>\n<p>            \/\/  delete all footnotes\n            $R.$iframeFootnotedLinks.get(0).innerHTML = '';\n        };<\/p>\n<p>    \/\/  clear all pages }<\/p>\n<p>    \/\/  return self\n    \/\/  ===========\n        return $R;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ClearlyController = {\n    _created : false,\n    _visible : false,\n    _logEnabled : false,\n    _detectResult : null,<\/p>\n<p>    logger : function(text) {\n        if (!this._logEnabled) return;\n        console.log('[Clearly] : ' + text);\n    },<\/p>\n<p>    getSimplifiedArticle : function() {\n        this.logger('getSimplifiedArticle()');\n        return Evernote.JQuery('#evernoteClearlyArticle #box #text').get(0);\n    },<\/p>\n<p>    changeFrameClassTo : function(className) {\n        this.clearlyFrame[0].className = '';\n        this.clearlyFrame.addClass(className);\n    },<\/p>\n<p>    hide : function() {\n        this.logger('hide()');\n        var self = this;\n        if (this._created && this._visible) {\n            this.clearlyBackground.stop();\n            this.changeFrameClassTo('processing');\n            this.clearlyBackground.animate({right:'100%'}, 500, null,\n                function() {\n                    self.changeFrameClassTo('temphidden');\n                    window.focus();\n                }\n            );\n            this._visible = false;\n        }\n    },<\/p>\n<p>    show : function() {\n        this.logger('show()');\n        var self = this;\n        if (this._created && !this._visible) {\n            this.clearlyBackground.stop();\n            this.changeFrameClassTo('processing');\n            this.clearlyBackground.animate({ right: \"0px\" }, 500, null,\n                function() {\n                    self.changeFrameClassTo('visible');\n                    window.focus();\n                }\n            );\n            this._visible = true;\n        }\n    },<\/p>\n<p>    detectComponent : function(callback) {\n        this.logger('detectComponent()');\n        window.ClearlyComponent__detect = {\n            callbacks: {\n                finished: function(data) {\n                    if (callback) callback(data);\n                }\n            },\n            window: window,\n            document: document,\n            jQuery: Evernote.JQuery\n        };<\/p>\n<p>        window.ClearlyComponent__detect = initClearlyComponent__detect(window.ClearlyComponent__detect);\n        window.ClearlyComponent__detect.start();\n    },<\/p>\n<p>    reformatComponent : function(callback){\n        this.logger('reformatComponent()');\n        window.ClearlyComponent__reformat = {\n            callbacks: {\n                frameCreated: function(data) {\n                    if (callback) callback(data);\n                }\n            },\n            settings: {\n                cssPath: 'css\/clearly',\n                pageLabel: \"page \",\n                onCreateFrameUseThisId: \"evernoteClearlyArticle\",\n                onCreateFrameDoNotInsertCSS: true\n            },\n            window: window,\n            document: document,\n            jQuery: Evernote.JQuery\n        };<\/p>\n<p>        window.ClearlyComponent__reformat = initClearlyComponent__reformat(window.ClearlyComponent__reformat);\n        window.ClearlyComponent__reformat.createFrame();\n    },<\/p>\n<p>    getContentElementAndHTML : function (callback) {\n        this.logger('getContentElementAndHTML()');\n        this.detectComponent(callback);\n    },<\/p>\n<p>    getClearlyArticleText : function(callback) {\n        this.logger('getClearlyArticleText()');\n        this.detectComponent(callback);\n    },<\/p>\n<p>    assignClearlyArticleContent : function()  {\n        this.logger('showClearlyArticleContent()');\n        window.ClearlyComponent__reformat.$iframeBox.find('#text #pages')[0].innerHTML = this._detectResult;\n    },<\/p>\n<p>    setContainersSize : function() {\n        var maxHeight = Math.max(document.body.scrollHeight, this.clearlyFrame.scrollHeight);<\/p>\n<p>        try { \/\/old ie throws error\n            this.clearlyFrame[0].style.height = maxHeight + \"px\";\n        } catch (e) {<\/p>\n<p>        }\n    },<\/p>\n<p>    startClearly : function() {\n        this.logger('startClearly()');<\/p>\n<p>        var self = this;<\/p>\n<p>        if (this._created) {\n            self.show();\n            return;\n        }<\/p>\n<p>        function onDetectEnd(data) {\n            self._detectResult = data._html.replace(\/(id|class)=\"(.*?)\"\/ig,'cid=\"$2\"');\n            self.assignClearlyArticleContent();\n            self.show();\n        }<\/p>\n<p>        function onFrameCreated() {\n            self.clearlyFrame = window.ClearlyComponent__reformat.$iframe;\n            self.clearlyBackground = window.ClearlyComponent__reformat.$iframeBackground;\n            self._created = true;\n            self.setContainersSize();\n            self.detectComponent(onDetectEnd);\n        }<\/p>\n<p>        window.scrollTo(0,0);\n        this.reformatComponent(onFrameCreated);\n    },<\/p>\n<p>    isReady : function() {\n        return this._created;\n    },<\/p>\n<p>    isVisible : function() {\n        return this._visible;\n    },<\/p>\n<p>    highlight : function () {\n        this.logger('highlight()');\n        var numTextHighlights;<\/p>\n<p>        window.ClearlyComponent__highlight = {\n            callbacks: {\n                highlightAdded: function() {\n                    numTextHighlights++;\n                },\n                highlightDeleted: function() {\n                    numTextHighlights--;\n                }\n            },\n            settings: {\n                imgPath: \"images\/\"\n            },\n            window: window,\n            document: document,\n            jQuery: Evernote.JQuery\n        };<\/p>\n<p>        window.ClearlyComponent__highlight = initClearlyComponent__highlight(window.ClearlyComponent__highlight);\n        window.ClearlyComponent__highlight.insertCSS();\n        window.ClearlyComponent__highlight.addMouseHandlers();<\/p>\n<p>        window.ClearlyComponent__highlight.enable();\n    },<\/p>\n<p>    disableHighlight : function() {\n        this.logger('disableHighlight()');\n        if (window.ClearlyComponent__highlight) {\n            window.ClearlyComponent__highlight.disable();\n        }\n    },<\/p>\n<p>    removeHighlighted : function() {\n        this.logger('removeHighlighed()');\n\/\/        Evernote.JQuery('.clearly_highlight_delete_element').click();\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * SelectionFinder provides mechanism for finding selection on the page via\n * find(). It is able to traverse frames in order to find a selection. It will\n * report whether there's a selection via hasSelection(). After doing find(),\n * the selection is stored in the selection property, and the document property\n * will contain the document in which the selection was found. Find method will\n * only recurse documents if it was invoked as find(true), specifying to do\n * recursive search. You can use reset() to undo find().\n *\/\nEvernote.SelectionFinder = function SelectionFinder( doc ) {\n    this._document = doc;\n};<\/p>\n<p>Evernote.SelectionFinder.prototype._document = null;\nEvernote.SelectionFinder.prototype._selection = null;<\/p>\n<p>Evernote.SelectionFinder.prototype.hasSelection = function() {\n    Evernote.Logger.debug( \"SelectionFinder.hasSelection()\" );<\/p>\n<p>    var range = Evernote.Utils.fixIERangeObject(this.getRange());\n    return range && (range.startContainer != range.endContainer\n        || (range.startContainer == range.endContainer && range.startOffset != range.endOffset));\n};<\/p>\n<p>Evernote.SelectionFinder.prototype.find = function( deep ) {\n    Evernote.Logger.debug( \"SelectionFinder.find()\" );\n    var result = this.findSelectionInDocument( this._document, deep );\n    this._document = result.document;\n    this._selection = result.selection;\n};<\/p>\n<p>Evernote.SelectionFinder.prototype.getRange = function() {\n    Evernote.Logger.debug( \"SelectionFinder.getRange()\" );\n    if ( !this._selection || this._selection.rangeCount == 0 ) {\n        return null;\n    }<\/p>\n<p>    if ( typeof this._selection.getRangeAt == 'function' ) {\n        return this._selection.getRangeAt( 0 );\n    }<\/p>\n<p>    if ( (window.Range && this._selection instanceof window.Range) || !this._selection.anchorNode ) {\n        return this._selection;\n    }\n    var range = this._document.createRange();\n    range.setStart( this._selection.anchorNode, this._selection.anchorOffset );\n    range.setEnd( this._selection.focusNode, this._selection.focusOffset );<\/p>\n<p>    return range;\n};<\/p>\n<p>Evernote.SelectionFinder.prototype.findSelectionInDocument = function( doc, deep ) {\n    try {\n        Evernote.Logger.debug( \"SelectionFinder.findSelectionInDocument()\" );<\/p>\n<p>        var sel = null;\n        var hasSelection = false;\n        var win = null;<\/p>\n<p>        try {\n            win = (doc.defaultView) ? doc.defaultView : window;\n        }\n        catch ( e ) {\n            win = window;\n        }\n        if ( typeof win.getSelection == 'function' ) {\n            sel = win.getSelection();\n            if ( sel && typeof sel.rangeCount != 'undefined' && sel.rangeCount > 0 ) {\n                Evernote.Logger.debug(\"Found selection by win.getSelection()\");\n                hasSelection = true;\n            }\n        }\n        else if ( win.selection && typeof win.selection.createRange == 'function' ) {\n            sel = win.selection.createRange();\n            if ( win.selection.type == 'Text' && typeof sel.htmlText == 'string' && sel.htmlText.length > 0 ) {\n                Evernote.Logger.debug(\"Found selection by win.selection\");\n                hasSelection = true;\n            }\n        }\n        else if ( doc.selection && (typeof doc.selection.createRange == 'function' || typeof doc.selection.createRange == 'object') ) {\n            sel = doc.selection.createRange();\n            if(doc.selection.type == \"None\")\n                sel = undefined;\n            if ( (doc.selection.type == 'Text') && (typeof sel.htmlText == 'string') && (sel.htmlText.length > 0) ) {\n                Evernote.Logger.debug(\"Found selection by doc.selection\");\n                hasSelection = true;\n            }\n        }<\/p>\n<p>        if ( sel && !hasSelection && deep ) {\n            var nestedDocs = Evernote.Utils.getNestedDocuments( doc );\n            for ( var i = 0; i < nestedDocs.length; ++i ) {\n                if ( nestedDocs[ i ] ) {\n                    var framedSel = this.findSelectionInDocument( nestedDocs[ i ], deep );\n                    if ( framedSel &#038;&#038; framedSel.selection &#038;&#038; framedSel.selection.rangeCount > 0 ) {\n                        return framedSel;\n                    }\n                }\n            }\n        }<\/p>\n<p>        \/\/if do not find any selection in document, try to find selection in HTMLTextArea|Input.\n        \/\/Get Selection object for TextArea, and set selection as a Range object\n        if(doc.activeElement)\n            Evernote.Logger.debug( \"Check selection in INPUT TEXT area (input, textarea), for active element :\" + doc.activeElement.nodeName );<\/p>\n<p>        var activeEl = doc.activeElement && false; \/\/ disabled, because no need to search selections in this elements.\n        if ( activeEl && ( (window.HTMLInputElement && (activeEl instanceof window.HTMLInputElement && activeEl.type == \"text\")) || ( window.HTMLTextAreaElement && (activeEl instanceof window.HTMLTextAreaElement)) ) ) {\n            if ( activeEl.selectionStart != activeEl.selectionEnd ) {\n                var range = doc.createRange();\n                var textNode = doc.createTextNode( activeEl.value );<\/p>\n<p>                range.setStart( textNode, activeEl.selectionStart );\n                range.setEnd( textNode, activeEl.selectionEnd );\n                sel = range;\n            }\n        }<\/p>\n<p>        return {\n            document : doc,\n            selection : sel\n        };\n    } catch(e) {\n        Evernote.Logger.error(\"Failed to find selection on the page due to error \" + e);\n        \/\/Do not throw exception here, it is better to not show error to user and allow to clip article or something else.\n    }\n    return {\n        document: doc,\n        selection: null\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.JSSerializer = {<\/p>\n<p>    _selectionFinder : new Evernote.SelectionFinder(window.document),<\/p>\n<p>    serializeAsync : function( element, fullPage, callback ) {\n        try {\n            var start = new Date().getTime();\n            var root = element || document.body.parentNode || document.body;\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy() );\n            var parser = new Evernote.DomParser( window, null );<\/p>\n<p>            var resultFunc = function() {\n                var images = [];\n                var imageUrls = serializer.getImagesUrls();<\/p>\n<p>                for(var i = 0; i < imageUrls.length; i++) {\n                    images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n                }\n                callback( {\n                    content : serializer.getSerializedDom(),\n                    imageUrls : images,\n                    docBase : serializer.getDocumentBase()\n                    });\n            };\n            parser.parseAsync( root, fullPage ? true: false, serializer, resultFunc);\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"Clip.clipFullPage(): clipped body in \" + (end - start) + \" milliseconds\" );\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serialize() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    serialize : function( element, fullPage ) {\n        try {\n            var start = new Date().getTime();\n            var root = element || document.body.parentNode || document.body;\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy() );\n            var parser = new Evernote.DomParser( window, null );\n            parser.parse( root, fullPage ? true: false, serializer);\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"Clip.clipFullPage(): clipped body in \" + (end - start) + \" milliseconds\" );\n            var images = [];\n            var imageUrls = serializer.getImagesUrls();\n\n            for(var i = 0; i < imageUrls.length; i++) {\n                images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n            }\n            return {\n                content : serializer.getSerializedDom(),\n                imageUrls : images,\n                docBase : serializer.getDocumentBase()\n            }\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serialize() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    serializeSelectionAsync : function( range, callback ) {\n\n        try {\n            if( !range ) {\n                if ( !this.hasSelection() ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no selection to clip\" );\n                    callback();\n                    return;\n                }\n\n                range = Evernote.Utils.fixIERangeObject(this._selectionFinder.getRange());\n\n\n                if ( !range ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no range in selection\" );\n                    callback();\n                    return;\n                }\n            }\n\n            var start = new Date().getTime();\n            var ancestor = (this._styleStrategy &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).nodeType == Evernote.Node.TEXT_NODE\n                &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode) ? Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode : Evernote.Utils.Selection.getCommonAncestorContainer(range);\n\n            while ( typeof Evernote.ClipRules.NON_ANCESTOR_NODES[ ancestor.nodeName.toUpperCase() ] != 'undefined' &#038;&#038; ancestor.parentNode ) {\n                if ( ancestor.nodeName.toUpperCase() == \"BODY\" ) {\n                    break;\n                }\n                ancestor = ancestor.parentNode;\n            }\n\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy(), null, true );\n            var parser = new Evernote.DomParser(window, Evernote.Utils.fixIERangeObject(range));\n\n            var resultFunc = function() {\n                var images = [];\n                var imageUrls = serializer.getImagesUrls();\n\n                for(var i = 0; i < imageUrls.length; i++) {\n                    images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n                }\n\n                callback( {\n                    content : serializer.getSerializedDom(),\n                    imageUrls : images,\n                    docBase : serializer.getDocumentBase()\n                } );\n            };\n            parser.parseAsync( ancestor, false, serializer, resultFunc );\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"JSSerializer.serializeSelection(): clipped selection in \" + (end - start) + \" milliseconds\" );\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serializeSelection() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    serializeSelection : function( range ) {\n        try {\n            if( !range ) {\n                if ( !this.hasSelection() ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no selection to clip\" );\n                    return;\n                }\n\n                range = Evernote.Utils.fixIERangeObject(this._selectionFinder.getRange());\n\n\n                if ( !range ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no range in selection\" );\n                    return;\n                }\n            }\n\n            var start = new Date().getTime();\n            var ancestor = (this._styleStrategy &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).nodeType == Evernote.Node.TEXT_NODE\n                &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode) ? Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode : Evernote.Utils.Selection.getCommonAncestorContainer(range);\n\n            while ( typeof Evernote.ClipRules.NON_ANCESTOR_NODES[ ancestor.nodeName.toUpperCase() ] != 'undefined' &#038;&#038; ancestor.parentNode ) {\n                if ( ancestor.nodeName.toUpperCase() == \"BODY\" ) {\n                    break;\n                }\n                ancestor = ancestor.parentNode;\n            }\n\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy() );\n            var parser = new Evernote.DomParser(window, Evernote.Utils.fixIERangeObject(range));\n            parser.parse( ancestor, false, serializer );\n\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"JSSerializer.serializeSelection(): clipped selection in \" + (end - start) + \" milliseconds\" );\n            var images = [];\n            var imageUrls = serializer.getImagesUrls();\n\n            for(var i = 0; i < imageUrls.length; i++) {\n                images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n            }\n\n            return {\n                content : serializer.getSerializedDom(),\n                imageUrls : images,\n                docBase : serializer.getDocumentBase()\n            }\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serializeSelection() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    hasSelection : function() {\n        Evernote.Logger.debug( \"Clip.hasSelection()\" );\n\n        if ( this._selectionFinder.hasSelection() ) {\n            return true;\n        }\n        else {\n            this._selectionFinder.find( true );\n            return this._selectionFinder.hasSelection();\n        }\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Represents JQuery loader that allow to have two versions of JQuery loaded on the same page\n * @type {Object}\n *\/\nEvernote.JQueryLoader = {\n    \/**\n     * Initializes jquery instance on global Evernote context\n     *\/\n    initJQuery : function() {\n        if (!Evernote.JQuery) {\n            Evernote.JQuery = $.noConflict(true);\n        }\n    }\n};<\/p>\n<p>(function () {\n    if (!Evernote.JQuery) {\n        Evernote.JQuery = $.noConflict(true);\n    }\n}());\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ClipNotificator = function ClipNotificator() {<\/p>\n<p>};\n\/\/ TODO: clip notificator is obsolete now. Remove it.<\/p>\n<p>Evernote.ClipNotificator.WAIT_CONTAINER_ID = \"evernoteContentClipperWait\";\nEvernote.ClipNotificator.SHOW_WAIT_MIN_TIME = 2000;<\/p>\n<p>Evernote.ClipNotificator.prototype.showCopyNotification = function( doc, options, useAutoHide ) {<\/p>\n<p>    Evernote.evernotePostClipPopup.fillOutPopup(options.title, options.notebookName);\n    Evernote.evernotePostClipPopup.show();<\/p>\n<p>    try {\n        var wait = this.getWaitContainer( doc, Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIPPING) );\n        wait.style.display = \"none\";\n        this.centerBox(wait);<\/p>\n<p>        if ( doc.body ) {\n            doc.body.appendChild( wait );\n        }<\/p>\n<p>        if (useAutoHide)\n        {\n            var self = this;\n            var timeout = this.constructor.SHOW_WAIT_MIN_TIME;\n            setTimeout( function() {\n                self.clearWait( doc );\n            }, timeout );\n        }\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"ClipNotificator.showCopyNotification() failed: error = \" + e );\n    }\n};<\/p>\n<p>Evernote.ClipNotificator.prototype.centerBox = function( container ) {<\/p>\n<p>    \/\/ TODO: for what? It can be done with css.\n    var topPosition = ((document.documentElement.scrollTop || document.body.scrollTop) + ((((document.documentElement.clientHeight || document.body.clientHeight) + (!container.offsetHeight && 0)) \/ 2) >> 0));\n    var leftPosition = (((document.documentElement.clientWidth || document.body.clientWidth) \/ 2) - (container.offsetWidth \/ 2));\n    container.style.position = \"absolute\";\n    container.style.top = (topPosition-20) + \"px\";\n    container.style.left = (leftPosition - 90) + \"px\";\n};<\/p>\n<p>Evernote.ClipNotificator.prototype.getWaitContainer = function( doc, msg ) {\n    Evernote.Logger.debug( \"ClipNotificator.getWaitContainer()\" );<\/p>\n<p>    var container = doc.getElementById( this.constructor.WAIT_CONTAINER_ID );\n    if ( !container ) {\n        container = doc.createElement( \"evernotediv\" );\n        if(Evernote.Utils.isQuirkMode()) {\n            container.className = \"quirk-mode-container\";\n        }\n        container.id = this.constructor.WAIT_CONTAINER_ID;<\/p>\n<p>        var wait = doc.createElement( \"div\" );\n        wait.id = this.constructor.WAIT_CONTAINER_ID + \"Content\";\n        if(Evernote.BrowserDetection.isLessThanIE9()) {\n            wait.className = \"content-less-than-nine-container\";\n        }\n        container.appendChild( wait );<\/p>\n<p>        var center = doc.createElement( \"center\" );\n        wait.appendChild( center );<\/p>\n<p>        var spinner = doc.createElement( \"div\" );\n        spinner.id = \"evernote-spinner-container\";\n        center.appendChild( spinner );<\/p>\n<p>        var text = doc.createElement( \"span\" );\n        text.id = this.constructor.WAIT_CONTAINER_ID + \"Text\";\n        center.appendChild( text );<\/p>\n<p>        container._waitMsgBlock = text;\n        container._waitMsgBlock.appendChild( doc.createTextNode( msg ) );\n    }<\/p>\n<p>    return container;\n};<\/p>\n<p>Evernote.ClipNotificator.prototype.clearWait = function( doc, immediately ) {\n    Evernote.Logger.debug( \"ClipNotificator.clearWait()\" );<\/p>\n<p>    var wait = doc.getElementById( Evernote.ClipNotificator.WAIT_CONTAINER_ID );\n    if ( wait ) {\n        wait.style.opacity = \"0\";\n        if (immediately) {\n            wait.parentNode.removeChild( wait );\n        } else {\n            setTimeout( function() {\n                if ( wait.parentNode ) {\n                    wait.parentNode.removeChild( wait );\n                }\n            }, 300 );\n        }\n    }<\/p>\n<p>};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Represents clipper object that is capable of clipping elements from pages or clip elements based on preferences.\n *\/\nEvernote.Clipper = {<\/p>\n<p>    _serializer : Evernote.JSSerializer,<\/p>\n<p>    _clipNotifier : new Evernote.ClipNotificator(),<\/p>\n<p>    _defaultOptions : {\n        title: PageContext.title,\n        tags: [],\n        comments: \"\",\n        notebookUid: -1,\n        notebookName : \"\"\n    },<\/p>\n<p>    \/**\n     * Clips article element (one that user selected or default if no selection was made).\n     *\/\n    clipArticle : function(options, clearly) {\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document, currentOptions);\n        var self = this;\n        setTimeout(function() {\n            var article\n            if ( clearly ) {\n                article = Evernote.ClearlyController.getSimplifiedArticle();\n            } else {\n                article = Evernote.contentPreviewer.getArticleElement();\n            }\n            if(!article) {\n                article = Evernote.pageInfo.getDefaultArticle(function(article) {});\n            }\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n                Evernote.ClearlyController.hide();\n            };\n            self._serializer.serializeAsync(article, false, resultFunc);\n        }, 100);\n    },<\/p>\n<p>    initOptions: function(options) {\n        if(!options)\n            options = this._defaultOptions;\n        options = Evernote.JQuery.extend({}, this._defaultOptions, options);\n        if(!options.title || Evernote.JQuery.trim(options.title).length == 0)\n            options.title = Evernote.Addin.getLocalizedMessage(Evernote.Messages.UNTITLED_NOTE);\n        options.title = Evernote.JQuery.trim(Evernote.Utils.cutToLength(options.title, 255, \" \"));<\/p>\n<p>        \/* get notebook name *\/\n        var notebookUid = options.notebookUid || 0;\n        var notebook = Evernote.NotebooksLoader.getNotebookByUid(notebookUid);<\/p>\n<p>        if(!notebook) {\n            options.notebookName = Evernote.Addin.getLocalizedMessage(Evernote.Messages.DEFAULT_NOTEBOOK);\n        } else {\n            options.notebookName = notebook.name;\n        }<\/p>\n<p>        return options;\n    },<\/p>\n<p>    \/**\n     * Clips full page.\n     *\/\n    clipFullPage : function(options) {\n        Evernote.Logger.debug(\"Clipper: clipFullPage\");\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        var self = this;\n        setTimeout(function() {\n            Evernote.Logger.debug(\"Start clipping of full page\");\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                Evernote.Logger.debug(\"Image urls \" + JSON.stringify(serializedDom.imageUrls));\n                Evernote.Logger.debug(\"Send clip to EN\");\n                Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n            };\n            self._serializer.serializeAsync(null, true, resultFunc);\n        }, 100);\n    },<\/p>\n<p>    \/**\n     * Clips url with favicon (if favicon is recognized)\n     *\/\n    clipUrl : function(options) {\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document, currentOptions, true);\n        var self = this;\n        setTimeout(function() {\n            var snippet = Evernote.contentPreviewer.getSnippetText();\n            if (snippet) {\n                snippet = snippet.replace(\/(<([^>]+)>)\/ig,\"\");\n                var content = Evernote.GlobalUtils.createUrlClipContent(PageContext.title, PageContext.url, PageContext.getFavIconUrl(), snippet);\n                Evernote.Addin.clipNote(currentOptions.comments + content, currentOptions, PageContext.url, PageContext.getFavIconUrl(), true, document);\n            }else {\n                self._clipNotifier.clearWait(document, true);\n                Evernote.ClearlyController.getClearlyArticleText( function (data) {\n                    snippet = data._html.replace(\/(<([^>]+)>)\/ig,\"\");\n                    var content = Evernote.GlobalUtils.createUrlClipContent(PageContext.title, PageContext.url, PageContext.getFavIconUrl(), snippet);\n                    Evernote.Addin.clipNote(currentOptions.comments + content, currentOptions, PageContext.url, PageContext.getFavIconUrl(), true, document);\n                });\n            }\n        }, 100);\n    },<\/p>\n<p>    \/**\n     * Clips selection from the page.\n     *\/\n    clipSelection : function( range, options ) {\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        var self = this;\n        setTimeout(function() {\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                if(serializedDom) {\n                    Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n                }\n            };\n            self._serializer.serializeSelectionAsync( range, resultFunc );\n        }, 100);\n    },<\/p>\n<p>    \/**\n     * Clips image from the page.\n     *\/\n    clipImage : function(options ) {\n        if (!options.imageElement) {\n            Evernote.Logger.debug(\"clipImage Empty element\");\n            return;\n        }\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        var self = this;<\/p>\n<p>        var clojureBug = Evernote.BrowserDetection.isIE7();\n        var CUSTOM_ID = 'evn-image-for-clip';<\/p>\n<p>        if (clojureBug) {\n            \/\/ add attr to find this element later\t\t\t\n            Evernote.JQuery(document).find(options.imageElement).attr( CUSTOM_ID ,'true');\n        }<\/p>\n<p>        setTimeout(function() {\n            var elementToSerialize = options.imageElement;\n            if (clojureBug) {\n                var elem = Evernote.JQuery('*['+ CUSTOM_ID +']');\n                elementToSerialize = Evernote.JQuery('*['+ CUSTOM_ID +']')[0];\n                elem.removeAttr(CUSTOM_ID);\n            }\n            Evernote.Logger.debug(\"Start clipping of image\");\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                Evernote.Logger.debug(\"Image urls \" + JSON.stringify(serializedDom.imageUrls));\n                Evernote.Logger.debug(\"Send clip to EN\");\n                Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n            };\n            self._serializer.serializeAsync(elementToSerialize, false, resultFunc);\n        }, 100);\n    },<\/p>\n<p>    \/**\n     * Clips part of the page, defined in option (url, article or full page) or selection if presented.\n     *\/\n    clipWithOptions : function(clipOptions) {<\/p>\n<p>        function getNotebook() {\n            return {uid : -1};\n        }<\/p>\n<p>        var notebookToClipTo = getNotebook();<\/p>\n<p>        var alwaysTags = [];\n        if (notebookToClipTo.type != Evernote.NotebookTypes.LINKED && Evernote.Options.tags.alwaysEnable == true) {\n            alwaysTags = Evernote.Options.tags.alwaysData.split(',');\n        }<\/p>\n<p>        var options = {\n            notebookUid: notebookToClipTo.uid,\n            imageElement: EvernoteExternal.imageElement,\n            tags: alwaysTags\n        };<\/p>\n<p>        if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_SELECTION && Evernote.Utils.hasSelection(window)) {\n            Evernote.Clipper.clipSelection(null, options);\n        }\n\t\t else if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_URL) {\n            Evernote.Clipper.clipUrl(options);\n        } else if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_FULL_PAGE) {\n            Evernote.Clipper.clipFullPage(options);\n        } else if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_IMAGE) {\n            Evernote.Clipper.clipImage(options);\n        } else {\n            Evernote.Logger.warn(\"Unknown option is specified : \" + clipOptions.getClipAction());\n        }\n    },<\/p>\n<p>    clipBase64Image : function(options, base64Image) {\n        var self = this;\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        Evernote.Addin.clipImageAsync(options, function(result) {\n            EvernoteGlobalReceiver(result);\n        }, PageContext.url, base64Image);\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ClipOptions = function ClipOptions(data) {\n    this.clipAction = data.clipAction;\n};<\/p>\n<p>Evernote.ClipOptions.prototype.getClipAction = function() {\n    return this.clipAction;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nfunction ContentVeil() {<\/p>\n<p>    var veil = document.createElement(\"div\");\n    veil.id = \"evernoteContentVeil\";\n    var inner = document.createElement(\"div\");\n    inner.id = \"evernoteInnerBox\";\n    var pageCounter = document.createElement(\"div\");\n    pageCounter.id = \"evernotePageCounter\";\n    veil.appendChild(pageCounter);\n    veil.appendChild(inner);<\/p>\n<p>    var pageHeight = document.body.scrollHeight; \/\/ used for infinite scroll handling<\/p>\n<p>    \/*<\/p>\n<p>    IE10 doesn't support pointer-events:none;\n    So we had to replace existing veil with new one, combined of 8 divs.\n    Four of them has border to outline content, and four divs in corners has white filling only.<\/p>\n<p>    There is no any element in center, over the content, so nothing will catch mouse events.\n    It helps other functions, especially html highlighter, works as expected.<\/p>\n<p>    veil structure:<\/p>\n<p>      veilNW |  veilTop   | veilNE\n    veilLeft |            | veilRight\n      veilSW | veilBottom | veilSE<\/p>\n<p>    *\/<\/p>\n<p>    var veilTop = document.createElement(\"div\");\n    veilTop.id = \"evernoteContentVeilTop\";\n    var veilLeft = document.createElement(\"div\");\n    veilLeft.id = \"evernoteContentVeilLeft\";\n    var veilRight = document.createElement(\"div\");\n    veilRight.id = \"evernoteContentVeilRight\";\n    var veilBottom = document.createElement(\"div\");\n    veilBottom.id = \"evernoteContentVeilBottom\";<\/p>\n<p>    var veilNW = document.createElement(\"div\");\n    veilNW.id = \"evernoteContentVeilNW\";\n    var veilNE = document.createElement(\"div\");\n    veilNE.id = \"evernoteContentVeilNE\";\n    var veilSE = document.createElement(\"div\");\n    veilSE.id = \"evernoteContentVeilSE\";\n    var veilSW = document.createElement(\"div\");\n    veilSW.id = \"evernoteContentVeilSW\";<\/p>\n<p>    var veilAll = Evernote.JQuery([veilTop,veilBottom,veilLeft,veilRight]);\n    var veilCorners = Evernote.JQuery([veilNW,veilNE,veilSE,veilSW]);\n    veilAll.addClass('EvConVeil');\n    veilCorners.addClass('EvConVeilCorn');<\/p>\n<p>    function fireClickUnderVeil(evt) {\n        var veil = Evernote.JQuery(this);\n        veil.hide();\n        var bottomElement = document.elementFromPoint(evt.clientX, evt.clientY);\n        veil.show();\n        bottomElement.click();\n    }<\/p>\n<p>    \/\/ make veil imperceptible for mouse clicks.\n    veilAll.click(fireClickUnderVeil);\n    veilCorners.click(fireClickUnderVeil);<\/p>\n<p>    var tooltipTimeout;<\/p>\n<p>    var topExpandContract;\n    var bottomExpandContract;\n    for (var i = 0; i < 2; i++) {\n        var expand = document.createElement(\"div\");\n        var contract = document.createElement(\"div\");\n        expand.className = \"evernoteArticleExpand\";\n        contract.className = \"evernoteArticleContract\";\n\n        expand.setAttribute('tooltip', Evernote.Addin.getLocalizedMessage(Evernote.Messages.EXPAND));\n        expand.setAttribute('unselectable', 'on');\n        contract.setAttribute('tooltip',Evernote.Addin.getLocalizedMessage(Evernote.Messages.CONTRACT));\n        contract.setAttribute('unselectable','on');\n\n        expand.addEventListener(\"mousemove\", nudgeMousemoveHandler);\n        expand.addEventListener(\"mouseout\", nudgeMouseoutHandler);\n        contract.addEventListener(\"mousemove\", nudgeMousemoveHandler);\n        contract.addEventListener(\"mouseout\", nudgeMouseoutHandler);\n\n        expand.addEventListener(\"click\", function() {\n            Evernote.contentPreviewer.previewNudge('up');\n        });\n        contract.addEventListener(\"click\", function() {\n            Evernote.contentPreviewer.previewNudge('down');\n        });\n        if (i == 0) {\n            topExpandContract = document.createElement(\"div\");\n            topExpandContract.className = \"evernoteExpandContract evernoteUsingExpandContract\";\n            topExpandContract.appendChild(expand);\n            topExpandContract.appendChild(contract);\n            veilTop.appendChild(topExpandContract);\n        } else {\n            bottomExpandContract = document.createElement(\"div\");\n            bottomExpandContract.id = \"bottomExpandContract\";\n            bottomExpandContract.className = \"evernoteExpandContract\";\n            bottomExpandContract.appendChild(expand);\n            bottomExpandContract.appendChild(contract);\n            veilBottom.appendChild(bottomExpandContract);\n        }\n    }\n\n\n\n    function nudgeMousemoveHandler(evt) {\n        clearTimeout(tooltipTimeout);\n        tooltipTimeout = setTimeout(function() {\n            evt.srcElement.className += \" tooltipon\";\n        }, 250);\n    }\n\n    function nudgeMouseoutHandler() {\n        clearTimeout(tooltipTimeout);\n        this.className = this.className.replace(\/\\s*tooltipon\/g, \"\");\n    }\n\n    \/\/ We keep a record of what we're currently showing (at least in some cases) so that we can update it in case the\n    \/\/ state of the page changes (like if the user scrolls).\n    var currentlyShownRect = null;\n    var currentlyShownElt = null;\n    var currentRectOffsetTop = 0;\n    var currentRectOffsetLeft = 0;\n    var currentlyStatic = false;\n    var currentlyShadowBox = false;\n\n    function reset(doNotResetPageCount) {\n        currentlyShownRect = null;\n        currentlyShownElt = null;\n        currentRectOffsetTop = 0;\n        currentRectOffsetLeft = 0;\n        currentlyShadowBox = false;\n\n        inner.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n        veil.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n        veilAll.removeClass('evernoteShadowBoxActi');\n\n        if (!doNotResetPageCount) {\n            setPageCount();\n        }\n\n        topExpandContract.className = topExpandContract.className.replace(\/\\s*evernoteUsingExpandContract\/g, \"\");\n        bottomExpandContract.className = bottomExpandContract.className.replace(\/s*evernoteUsingExpandContract\/g, \"\");\n\n        showElements(\"embed\");\n        showElements(\"object\");\n        showElements(\"iframe\");\n\n        blank();\n    }\n\n    function blank() {\n        veil.style.height = document.body.scrollHeight  - 6 + \"px\";\n        veil.style.width = document.body.scrollWidth - 6  + \"px\";\n        veil.style.borderWidth = \"0\";\n    }\n\n    function gray() {\n        show();\n        inner.style.display = \"none\";\n        veil.style.backgroundColor = \"rgba(255, 255, 255, 0.75)\";\n\n\n        veilAll.each(function(){this.style.borderWidth = \"0\";});\n        veilAll.addClass('evernoteGrayFillingActi');\n        revealRectNew({\n            top:0,\n            bottom:getPageHeight(),\n            left:0,\n            right:0,\n            width:document.body.scrollWidth,\n            height:getPageHeight()\n        });\n    }\n\n    function show() {\n        inner.style.display = \"\";\n        veil.style.backgroundColor = \"\";\n\n        veilAll.each(function(){this.style.borderWidth = \"\"});\n        veilAll.removeClass('evernoteGrayFillingActi');\n        if (!Evernote.ElementExtension.hasParentNode(veil)) {\n            document.body.appendChild(veil);\n            veilAll.each(function(){document.body.appendChild(this)});\n            veilCorners.each(function(){document.body.appendChild(this)});\n        }\n    }\n\n    function hide() {\n        if (Evernote.ElementExtension.hasParentNode(veil)) {\n            veilAll.each(function(){this.parentNode.removeChild(this)});\n            veilCorners.each(function(){this.parentNode.removeChild(this)});\n            veil.parentNode.removeChild(veil);\n        }\n    }\n\n    function isHidden() {\n        if (Evernote.ElementExtension.hasParentNode(veil)) {\n            return false;\n        }\n        return true;\n    }\n\n    \/\/ Makes a rectangle bigger in all directions by the number of pixels specified (or smaller, if 'amount' is\n    \/\/ negative). Returns the new rectangle.\n    function expandRect(rect, amount) {\n        return {\n            top: (rect.top - amount),\n            left: (rect.left - amount),\n            bottom: (rect.bottom + amount),\n            right: (rect.right + amount),\n            width: (rect.width + (2 * amount)),\n            height: (rect.height + (2 * amount))\n        };\n    }\n\n    function getPageHeight() {\n        var h = Math.abs(window.innerHeight - document.body.scrollHeight) < 15 ? document.body.scrollHeight : Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n        var wh = window.innerHeight;\n        if ((wh - h) > 15) return wh;\n        return h;\n    }<\/p>\n<p>    function revealRect(rect, elt, staticView, shadowBox) {<\/p>\n<p>        \/\/ Save this info.\n        currentlyShownRect = rect;\n        currentlyShownElt = elt;\n        currentRectOffsetTop = Evernote.Utils.scrollTop();\n        currentRectOffsetLeft = Evernote.Utils.scrollLeft();\n        currentlyStatic = staticView;\n        currentlyShadowBox = shadowBox;<\/p>\n<p>        \/\/ We expand the rectangle for two reasons.\n        \/\/ 1) we want to expand it by the width of the stroke, so that when we draw out outline, it doesn't overlap our\n        \/\/ content.\n        \/\/ 2) We want to leave a little extra room around the content for aesthetic reasons.\n        rect = expandRect(rect, 8);\n        var x = rect.left;\n        var y = rect.top;\n        var width = rect.width;\n        var height = rect.height;<\/p>\n<p>        var veilWidth = veil.style.width.replace(\"px\", \"\");\n        var veilHeight = veil.style.height.replace(\"px\", \"\");<\/p>\n<p>        inner.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n        veil.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n        veilAll.removeClass('evernoteShadowBoxActi');\n        if (shadowBox) {\n            veilAll.addClass('evernoteShadowBoxActi');\n            inner.className += \" evernoteShadowBox\";\n            veil.className += \" evernoteShadowBox\";\n        }<\/p>\n<p>        inner.style.display = \"block\";\n        veil.style.borderLeftWidth = Math.max(x, 0) + \"px\";\n        veil.style.borderTopWidth = Math.max(y, 0) + \"px\";\n        veil.style.borderRightWidth = Math.max((veilWidth - x - width), 0) + \"px\";\n        veil.style.borderBottomWidth = Math.max((veilHeight - y - height), 0) + \"px\";<\/p>\n<p>        \/*oh my gosh*\/<\/p>\n<p>        var rectNew = {\n            top:Math.max(y, 0),\n            left:Math.max(x, 0),\n            bottom:Math.max((veilHeight - y - height),0),\n            right:Math.max((veilWidth - x - width),0),\n            width:document.body.scrollWidth,\n            height:getPageHeight()\n        };<\/p>\n<p>        if (!shadowBox) {\n            rectNew.width = rectNew.width - 4;\n            rectNew.height = rectNew.height - 4;\n        } else {\n            rectNew.width = rectNew.width - 6;\n            rectNew.height = rectNew.height - 6;\n        }<\/p>\n<p>        \/*\n         \/\/ debug part.\n         function toFix(rect) {\n         for (var prop in rect) {\n         rect[prop] = rect[prop].toFixed(0);\n         }\n         return rect;\n         }<\/p>\n<p>         console.log('old ' + JSON.stringify(toFix(rect)));\n         console.log('new ' + JSON.stringify(toFix(rectNew)));\n         *\/<\/p>\n<p>        revealRectNew(rectNew);\n    }<\/p>\n<p>    function revealRectNew(rect) {\n        veilLeft.style.height = rect.height - rect.bottom - rect.top + 2 + 'px';\n        veilLeft.style.width = rect.left + 'px';\n        veilLeft.style.top = rect.top  -1 + 'px';<\/p>\n<p>        veilRight.style.height = rect.height - rect.bottom - rect.top + 2 + 'px';\n        veilRight.style.width = rect.right + 'px';\n        veilRight.style.top = rect.top - 1 + 'px';\n        veilRight.style.left = rect.width - rect.right + 'px';<\/p>\n<p>        veilTop.style.height = rect.top + 'px';\n        veilTop.style.left = rect.left + 'px';\n        veilTop.style.right = rect.right + 'px';\n        veilTop.style.width = rect.width - rect.right - rect.left + 'px';<\/p>\n<p>        veilBottom.style.height = rect.bottom + 'px';\n        veilBottom.style.width = rect.width - rect.right - rect.left + 'px';\n        veilBottom.style.left = rect.left + 'px';\n        veilBottom.style.right = rect.right + 'px';\n        veilBottom.style.top = rect.height - rect.bottom + 'px';<\/p>\n<p>        veilNW.style.height = Math.max(rect.top - 1, 0) + 'px';\n        veilNW.style.width = rect.left + 'px';<\/p>\n<p>        veilNE.style.height = Math.max(rect.top - 1, 0) + 'px';\n        veilNE.style.width = rect.right + 'px';\n        veilNE.style.left = rect.width - rect.right + 'px';<\/p>\n<p>        veilSW.style.height = Math.max(rect.bottom - 1, 0) + 'px';\n        veilSW.style.top = rect.height - rect.bottom + 1 + 'px';\n        veilSW.style.width = rect.left + 'px';<\/p>\n<p>        veilSE.style.height = Math.max(rect.bottom - 1, 0) + 'px';\n        veilSE.style.top = rect.height - rect.bottom + 1 + 'px';\n        veilSE.style.left = rect.width - rect.right + 'px';\n        veilSE.style.width = rect.right + 'px';\n    }<\/p>\n<p>    function revealStaticRect(rect, elt, shadowBox) {\n        revealRect(rect, elt, true, shadowBox);\n    }<\/p>\n<p>    function outlineElement(element, scrollTo, shadowBox, articleAdjustment) {\n        \/\/ See notes in Preview.js for why we use this method instead of just calling element.getBoundingClientRect().\n        var rect = Evernote.contentPreviewer.computeDescendantBoundingBox(element);\n        if (rect) {\n            reset(articleAdjustment);\n            revealRect(rect, element, true, shadowBox);<\/p>\n<p>            if (scrollTo) {\n                element.scrollIntoView();\n            }<\/p>\n<p>            hideElements(\"embed\", element);\n            hideElements(\"object\", element);\n            hideElements(\"iframe\", element);<\/p>\n<p>            topExpandContract.className += \" evernoteUsingExpandContract\";<\/p>\n<p>            if (rect.height - 30  > window.innerHeight) {\n                bottomExpandContract.className += \" evernoteUsingExpandContract\";\n            } else {\n                bottomExpandContract.className = bottomExpandContract.className.replace(\/\\s*evernoteUsingExpandContract\/g, \"\");\n            }<\/p>\n<p>            show();\n        }\n        else {\n            Evernote.Logger.warn(\"Couldn't create rectangle from element: \" + element.toString());\n        }\n    }<\/p>\n<p>    function hideAllActiveObjects() {\n        hideElements(\"embed\");\n        hideElements(\"object\");\n        hideElements(\"iframe\");\n    }<\/p>\n<p>    function hideElements (tagName, exceptInElement) {\n        var els = document.getElementsByTagName(tagName);\n        for (var i = 0; i < els.length; i++) {\n            els[i].enSavedVisibility = els[i].style.visibility;\n            els[i].style.visibility = \"hidden\";\n        }\n        showElements(tagName, exceptInElement);\n    }\n\n    function showElements (tagName, inElement) {\n        if (!inElement) {\n            inElement = document;\n        }\n        var els = inElement.getElementsByTagName(tagName);\n        for (var i = 0; i < els.length; i++) {\n            if (typeof els[i].enSavedVisibility !== \"undefined\") {\n                els[i].style.visibility = els[i].enSavedVisibility;\n                try {\n                    delete els[i].enSavedVisibility;\n                } catch(e) {\n                    els[i].enSavedVisibility = undefined;\n                }\n            }\n        }\n    }\n\n    function getElement() {\n        return veil;\n    }\n\n    function setPageCount(count) {\n        if (!count) {\n            pageCounter.innerText = \"\";\n        } else if (count == 1) {\n            \/\/TODO: test l10n\n            pageCounter.innerText = \"oneMorePageFound\";\n        } else {\n            \/\/TODO:test l10n\n            pageCounter.innerText = \"morePagesFound\" + count;\n        }\n        pageCounter.scrollIntoView(true);\n    }\n\n    var onScrollHandle =  function(e) {\n        if (currentlyShownRect &#038;&#038; !currentlyStatic) {\n            var rect = {\n                top: currentlyShownRect.top,\n                bottom: currentlyShownRect.bottom,\n                left: currentlyShownRect.left,\n                right: currentlyShownRect.right,\n                width: currentlyShownRect.width,\n                height: currentlyShownRect.height\n            };\n\n            var vert = Evernote.Utils.scrollTop() - currentRectOffsetTop;\n            var horiz = Evernote.Utils.scrollLeft() - currentRectOffsetLeft;\n\n            if (!vert &#038;&#038; !horiz) {\n                return;\n            }\n\n            rect.top -= vert;\n            rect.bottom -= vert;\n            rect.left -= horiz;\n            rect.right -= horiz;\n            blank();\n            revealRect(rect, currentlyShownElt);\n        }\n\n        if (pageHeight < document.body.scrollHeight - 30) {\n            pageHeight = document.body.scrollHeight;\n            onResizeHandle();\n        }\n    };\n\n    var onResizeHandle = function(e) {\n        if (currentlyShownElt) {\n            var rect = Evernote.contentPreviewer.computeDescendantBoundingBox(currentlyShownElt);\n            if (rect) {\n                blank();\n                if (currentlyShadowBox) {\n                    revealRect(rect, currentlyShownElt, true, true);\n                } else {\n                    revealRect(rect, currentlyShownElt, true, false);\n                }\n            }\n        }\n\n        \/\/ todo: switch gray filling to position: fixed.\n        if (veilAll.hasClass('evernoteGrayFillingActi')) {\n            gray();\n        }\n    };\n\n    window.addEventListener(\"resize\", onResizeHandle);\n    window.addEventListener(\"scroll\", onScrollHandle, false);\n\n    \/\/ Public API:\n    this.reset = reset;\n    this.show = show;\n    this.gray = gray;\n    this.hide = hide;\n    this.revealRect = revealRect;\n    this.revealStaticRect = revealStaticRect;\n    this.outlineElement = outlineElement;\n    this.expandRect = expandRect;\n    this.hideAllActiveObjects = hideAllActiveObjects;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Created by chizhikov on 11.04.14.\n *\/<\/p>\n<p>function ScreenshotVeil() {\n    var areaEl = document.createElement('div');\n    areaEl.id = 'evernoteScreenShotArea';<\/p>\n<p>    var startX, startY = 0;<\/p>\n<p>    var global_tools = Evernote.JQuery('#' + Constants.CLIP_DIALOG_ID);\n    var area = Evernote.JQuery(areaEl);\n    var selecting = false;<\/p>\n<p>    var startVertLine = document.createElement('div');\n    var startHorizLine = document.createElement('div');<\/p>\n<p>    startVertLine.className = 'screenAreaStartVertLine';\n    startHorizLine.className = 'screenAreaStartHorizLine';<\/p>\n<p>    var borderDiv = document.createElement('div');\n    borderDiv.id = 'screenAreaSelected';<\/p>\n<p>    areaEl.appendChild(startVertLine);\n    areaEl.appendChild(startHorizLine);\n    areaEl.appendChild(borderDiv);<\/p>\n<p>    function sendMessageToPopup( msg ){\n        \/\/ send message to global tools<\/p>\n<p>        var zoomModifier = screen.deviceXDPI \/ screen.logicalXDPI;<\/p>\n<p>        with (borderDiv.style) {\n            var topX = pixelLeft * zoomModifier;\n            var topY = pixelTop * zoomModifier;\n            var bottomX = (area.width() - pixelRight) * zoomModifier;\n            var bottomY = (area.height() - pixelBottom) * zoomModifier;\n        }<\/p>\n<p>        \/\/ If any side of the rectangle that user is drawing is smaller than 16px then we interpret it as a\n        \/\/ single click and should make a fullscreen capture.<\/p>\n<p>        var rectWidth = Math.abs(topX - bottomX);\n        var rectHeight = Math.abs(topY - bottomY);\n        if (rectWidth < 16 || rectHeight < 16) {\n            topX = 0;\n            topY = 0;\n            bottomX = area.width();\n            bottomY = area.height();\n        }\n\n        global_tools.trigger(msg ,[topX,topY , bottomX, bottomY]);\n    }\n\n    function drawLines(e) {\n        startVertLine.style.pixelLeft = e.clientX;\n        startHorizLine.style.pixelTop = e.clientY;\n\n        if (selecting) {\n            drawRect(startX, startY, e.clientX, e.clientY);\n            \/\/ TODO: prevent selection\n        }\n    }\n\n    function drawRect( startX, startY, mouseX, mouseY) {\n        var topX, topY, bottomX, bottomY;\n\n        topX = Math.min(startX, mouseX);\n        topY = Math.min(startY, mouseY);\n        bottomX = Math.max(startX, mouseX);\n        bottomY = Math.max(startY, mouseY);\n\n        borderDiv.style.pixelTop = topY;\n        borderDiv.style.pixelLeft = topX;\n        borderDiv.style.pixelRight = area.width() - bottomX - 1;\n        borderDiv.style.pixelBottom = area.height() - bottomY -1;\n    }\n\n    function clearSelectedAreaPosition() {\n        borderDiv.style.pixelRight = '';\n        borderDiv.style.pixelBottom = '';\n        borderDiv.style.pixelTop = '';\n        borderDiv.style.pixelLeft = '';\n        selecting = false;\n    }\n\n    function startSelectArea(e) {\n        if (e.button != 0)\n            return;\n        if (Evernote.JQuery(e.target).closest('#' + Constants.CLIP_DIALOG_NEW_ID).length == 0) {\n            selecting = true;\n            startX = e.clientX;\n            startY = e.clientY;\n        }\n        e.preventDefault();\n    }\n\n    function selectionEnd(e) {\n        if (!selecting) return;\n\n        if (Evernote.JQuery(e.target).closest('#cancelButton').length == 0 &#038;&#038;\n            Evernote.JQuery(e.target).closest('#closeSidebar').length == 0 ) {\n            sendMessageToPopup('readyToScreenshot');\n        } else {\n            sendMessageToPopup('cancelScreenshot');\n        }\n        hide();\n        clearSelectedAreaPosition();\n    }\n\n    function disableContextMenu(e) {\n        e.preventDefault();\n        return false;\n    }\n\n    function show() {\n        document.addEventListener('mousemove', drawLines);\n        document.addEventListener('mousedown', startSelectArea);\n        document.addEventListener('mouseup', selectionEnd);\n        document.addEventListener('contextmenu', disableContextMenu);\n\n        \/\/ TODO: remove scroll from page\n        area.addClass('visible');\n\n        Evernote.JQuery('body').css('overflow','hidden');\n    }\n\n    function hide() {\n        area.removeClass('visible');\n        clearSelectedAreaPosition();\n        document.removeEventListener('mousemove', drawLines);\n        document.removeEventListener('mousedown', startSelectArea);\n        document.removeEventListener('mouseup', selectionEnd);\n        document.removeEventListener('contextmenu', disableContextMenu);\n\n        Evernote.JQuery('body').css('overflow','visible');\n    }\n\n    document.body.appendChild(areaEl);\n\n    this.show = show;\n    this.hide = hide;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nfunction PageInfo() {<\/p>\n<p>    var newPageCallback;<\/p>\n<p>    \/\/ This is a map of hostnames (for hostnames that begin with 'www.', the 'www.' will be stripped off first, so don't\n    \/\/ include it in your lookup string) to CSS selectors. When we try and locate an article in a page, we'll see if we\n    \/\/ can find the doamin for the page in this list, and if so, we'll try and find an element that matches the given\n    \/\/ selector. If no element is returned, we'll fall back to the heuristic approach.\n    var specialCases = {\n        \"penny-arcade.com\": \"div.contentArea > div.comic > img\",\n        \"aspicyperspective.com\": \"div.entry-content\",\n        \"thewirecutter.com\": \"div#content\",\n        \"katespade.com\": \"div#pdpMain\",\n        \"threadless.com\": \"section.product_section\",\n        \"yelp.com\": \"div#bizBox\",\n        \"flickr.com\": \"div#photo\",\n        \"instagr.am\": \"div.stage > div.stage-inner\",\n        \"stackoverflow.com\": \"div#mainbar\",\n        \"makeprojects.com\": \"div#guideMain\",\n        \"cookpad.com\": \"div#main\",\n        \"imgur.com\": \"div.image\",\n        \"smittenkitchen.com\": \"div.entry\",\n        \"allrecipes.com\": \"div#content-wrapper\",\n        \"qwantz.com\": \"img.comic\",\n        \"questionablecontent.net\": \"img#strip\",\n        \"cad-comic.com\": \"div#content\"\n    }<\/p>\n<p>    var useFoundImage = [\n        \"xkcd.com\"\n    ]<\/p>\n<p>    \/\/ These are the items we're trying to collect. This first block is trivial.\n    var containsImages = Boolean(document.getElementsByTagName(\"img\").length > 0);\n    var documentWidth = document.width;\n    var documentHeight = document.height;\n    var documentMode = document.documentMode;\n    var url = document.location.href;<\/p>\n<p>    \/\/ Very slow and useless assignment, takes more than a second. Temporary commented for speed up [actimind]\n    \/\/ var documentLength = document.body.textContent ? document.body.textContent.length : 0;<\/p>\n<p>    \/\/ These take slightly more work and are initialized only when requested.\n    var article = null;\n    var cleanArticles = [];<\/p>\n<p>    var articleBoundingClientRect = null;\n    var selection = false; \/\/ This is easy to get, but is always \"false\" at load time until the user selects something.\n    var selectionIsInFrame = false;\n    var documentIsFrameset = false;\n    var selectionFrameElement = null;\n    var recommendationText = null;<\/p>\n<p>    \/\/ Internal state variables to keep us duplicating work.\n    var hasCheckedArticle = false;<\/p>\n<p>    \/\/ Experimental recognition of 'image' pages (like photo sites and comics).\n    function findImage() {\n        var imgs = document.getElementsByTagName(\"img\");\n        var biggest = null;\n        var biggestArea = 0;\n        for (var i = 0; i < imgs.length; i++) {\n            var style = Evernote.ElementExtension.getComputedStyle(imgs[i]);\n            var width = style.width.replace(\/[^0-9.-]\/g, \"\");\n            var height = style.height.replace(\/[^0-9.-]\/g, \"\");\n            var area = width * height;\n            if (!biggest || area > biggestArea) {\n                biggest = imgs[i];\n                biggestArea = area;\n            }\n        }\n        return biggest;\n    }<\/p>\n<p>    function getAncestors(node) {\n        var an = [];\n        while (node) {\n            an.unshift(node);\n            node = node.parentNode;\n        }\n        return an;\n    }<\/p>\n<p>    function getDeepestCommonNode(nodeList1, nodeList2) {\n        var current = null;\n        for (var i = 0; i < nodeList1.length; i++) {\n            if (nodeList1[i] === nodeList2[i]) {\n                current = nodeList1[i];\n            }\n            else {\n                break;\n            }\n        }\n        return current;\n    }\n\n    function getCommonAncestor(nodeList) {\n        if (!nodeList.length) return null;\n\n        if (nodeList.length == 1) return nodeList[0];\n        var lastList = getAncestors(nodeList[0]);\n\n        var node = null;\n        for (var i = 1; i < nodeList.length; i++) {\n            var list = getAncestors(nodeList[i]);\n            node = getDeepestCommonNode(lastList, list);\n            lastList = getAncestors(node);\n        }\n        return node;\n    }\n\n    function clearlyCallback(data, callback) {\n        Evernote.Logger.debug(\"Clearly callback invoked\");\n        findImage();\n\n        \/\/ See if we should special-case this.\n        var host = getHostname();\n        if (specialCases[host])\n        {\n            var candidate = Evernote.ElementExtension.querySelector(specialCases[host]);\n            if (candidate) {\n                Evernote.Logger.debug(\"Found article in specialCases\");\n                article = candidate;\n                articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n            }\n        }\n\n        \/\/ Or see if it's a special case image page.\n        else if (Evernote.ArrayExtension.indexOf(useFoundImage, host) != -1) {\n            article = findImage();\n            if (article) {\n                Evernote.Logger.debug(\"Found article in image\");\n                articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n            }\n        }\n\n        \/\/ If it's not a special case, see if it's a single image.\n        if (!article) {\n            var imageTypes = ['jpeg', 'jpg', 'gif', 'png'];\n            var urlExtension = document.location.href.replace(\/^.*\\.(\\w+)$\/, \"$1\");\n            if (urlExtension &#038;&#038; (Evernote.ArrayExtension.indexOf(imageTypes, urlExtension) != -1)) {\n                var candidate = Evernote.JQuery(\"body > img\");\n                if (candidate.length > 0) {\n                    Evernote.Logger.debug(\"Found article in a single image\");\n                    article = candidate.get(0);\n                    articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n                }\n            }\n        }<\/p>\n<p>        \/\/ If we still didn't find an article, let's see if maybe it's in a frame. Cleary fails on frames so we try this\n        \/\/ check before we use our clearly info.\n        if (!article) {\n            if (document.body.nodeName.toLowerCase() == \"frameset\") {\n                documentIsFrameset = true;\n                var frame = findBiggestFrame();\n                if (frame && frame.contentDocument && frame.contentDocument.documentElement) {\n                    selectionFrameElement = frame;\n                    article = frame.contentDocument.documentElement;\n                    articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n                }\n            }\n        }<\/p>\n<p>        \/\/ If we didn't use any of our special case handling, we'll use whatever clearly found.\n        if (!article) {\n            Evernote.Logger.debug(\"Use clearly find article\");\n            if (data && data._elements && data._elements.length) {\n                article = data._elements[0];\n                if (data._elements.length > 1) {<\/p>\n<p>                    \/\/ This will include *all* clearly elements (and whatever else in in between them).\n                    article = getCommonAncestor(data._elements);<\/p>\n<p>                    \/\/ This includes *just the last (and therefore most important)* element from the clearly detection.\n                    \/\/ article = data._elements[data._elements.length - 1];\n                }<\/p>\n<p>                if (article.nodeType === ( window.Node ? window.Node.TEXT_NODE : 1)) {\n                    article = article.parentNode;\n                }\n            }\n        }<\/p>\n<p>        if(article) {\n            if(Evernote.JQuery(article).closest(\"#evernote-content\").length != 0)\n                article = undefined;\n        }<\/p>\n<p>        \/\/ If clearly found nothing (because it failed), then use the body of the document.\n        if (!article) {\n            article = document.body;\n        }<\/p>\n<p>        hasCheckedArticle = true;\n        callback();\n    }<\/p>\n<p>    \/\/ This will try and determine the 'default' page article. It will only run once per page, but it's specifically\n    \/\/ called only on demand as it can be expensive.\n    function findArticle(callback) {<\/p>\n<p>        function afterInject() {\n            \/\/ If we'd previously computed an article element, but it's lost its parent or become invisible, then we'll try\n            \/\/ and re-compute the article. This can happen if, for example the page dynamically udaptes itself (like showing\n            \/\/ the latest news article in a box that updates periodically). This doesn't guarantee that we clip something\n            \/\/ sane if this happens, (if the page re-writes itself while a clip is taking place, the results are\n            \/\/ indeterminate), but it will make such things less likely.\n            if (article &&\n                (!article.parentNode || !article.getBoundingClientRect || Evernote.ElementExtension.getBoundingClientRect(article).width == 0)) {\n                article = null;\n                hasCheckedArticle = false;\n            }\n            Evernote.Logger.debug(\"afterInject\");\n            if (!hasCheckedArticle) {\n                Evernote.Logger.debug(\"no article\");\n                if (!window)\n                {\n                    Evernote.Logger.warn(\"Couldn't find clearly!\");\n                    clearlyCallback(null, callback);\n                }\n                else {\n                    Evernote.Logger.debug(\"Call clearly to select article\");\n                    try {\n                        Evernote.ClearlyController.getContentElementAndHTML(function(data){clearlyCallback(data, callback)});\n                    } catch(e) {\n                        Evernote.Logger.error(\"Failed to find article by clearly due to error \" + e.message);\n                        clearlyCallback(null, callback);\n                    }\n                }\n            }\n            \/\/ If the page is big enough, clearly is excruciatingly slow. We'll just get the whole page.\n            \/\/ TODO: Clearly was updated. Check, if big pages are still problem\n            else if (document.body.innerHTML.length > (1024 * 1024)) {\n                Evernote.Logger.warn(\"Page over 1mb, skipping article detection.\");\n                clearlyCallback(null, callback);\n            }\n            else {\n                Evernote.Logger.debug(\"callback\");\n                callback();\n            }\n        }<\/p>\n<p>        afterInject();<\/p>\n<p>    }<\/p>\n<p>    function findBiggestFrame() {\n        var frames = document.getElementsByTagName(\"frame\");\n        var candidate = null;\n        var candidateSize = 0;\n        for (var i = 0; i < frames.length; i++) {\n            if (frames[i].width &#038;&#038; frames[i].height) {\n                var area = frames[i].width * frames[i].height;\n                if (area > candidateSize) {\n                    candidate = frames[i];\n                    candidateSize = area;\n                }\n            }\n        }\n        return candidate;\n    }<\/p>\n<p>    function getHostname() {\n        var match = document.location.href.match(\/^.*?:\\\/\\\/(www\\.)?(.*?)(\\\/|$)\/);\n        if (match) {\n            return match[2];\n        }\n        return null;\n    }<\/p>\n<p>    function getDefaultArticle(callback) {\n        Evernote.Logger.debug(\"getDefaultArticle\");\n        findArticle(function(){callback(article)});\n        \/\/ Article already exists, so we'll return it.\n        if (article) return article;\n    }<\/p>\n<p>    function getBiggestImage(callback) {\n        getDefaultArticle(function(art) {\n            var imgs;\n            if (art) {\n                imgs = art.querySelectorAll(\"img\");\n            } else {\n                imgs = document.querySelectorAll(\"img\");\n            }<\/p>\n<p>            var maxHeight = 0;\n            var maxWidth = 0;\n            var maxImage;\n            for (var i = 0; i < imgs.length; i++) {\n                var w = imgs.item(i).width;\n                var h = imgs.item(i).height;\n                if (w * h > maxWidth * maxHeight) {\n                    maxHeight = h;\n                    maxWidth = w;\n                    maxImage = imgs.item(i).src;\n                }\n            }\n            callback({ src: maxImage, width: maxWidth, height: maxHeight });\n        });\n    }<\/p>\n<p>    \/\/ Looks for selections in the current document and descendent (i)frames.\n    \/\/ Returns the *first* non-empty selection.\n    function getSelection() {<\/p>\n<p>        \/\/ First we check our main window and return a selection if that has one.\n        var selection = window.getSelection();\n        if (selection && selection.rangeCount && !selection.isCollapsed) {\n            return selection;\n        }<\/p>\n<p>        \/\/ Then we'll try our frames and iframes.\n        var docs = [];\n        var iframes = document.getElementsByTagName(\"iframe\");\n        for (var i = 0; i < iframes.length; i++) {\n            docs.push(iframes[i]);\n        }\n        var frames = document.getElementsByTagName(\"frame\");\n        for (var i = 0; i < frames.length; i++) {\n            docs.push(frames[i]);\n        }\n\n        var urlBase = document.location.href.replace(\/^(https?:\\\/\\\/.*?)\\\/.*\/i, \"$1\").toLowerCase();\n        for (var i = 0; i < docs.length; i++) {\n\n            \/\/ If frames\/iframes fail a same origin policy check, then they'll through annoying errors, and we wont be able\n            \/\/ to access them anyway, so we attempt to skip anything that wont match.\n            if (docs[i].src &#038;&#038; docs[i].src.toLowerCase().substr(0, urlBase.length) !== urlBase) {\n                continue;\n            }\n\n            var doc = docs[i].contentDocument;\n\n            if (doc) {\n                var frameSelection = doc.getSelection();\n                if (frameSelection &#038;&#038; frameSelection.rangeCount &#038;&#038; !frameSelection.isCollapsed) {\n                    selectionIsInFrame = true;\n                    selectionFrameElement = docs[i];\n                    return frameSelection;\n                }\n            }\n            else {\n                Evernote.Logger.warn(\"iframe contained no Document object.\");\n            }\n        }\n\n        \/\/ Didn't find anything.\n        return null;\n    }\n\n    function getUrl() {\n        return url;\n    }\n\n    function getText(node, soFar, maxLen) {\n        if (node.nodeType == Evernote.Node.TEXT_NODE) {\n            var trimmed = (node.textContent) ? Evernote.JQuery.trim(node.textContent).replace(\/\\s+\/g, \" \") : \"\";\n            if (trimmed === \" \" || trimmed === \"\") return soFar;\n            return soFar + \" \" + trimmed;\n        }\n\n        var banned = [\n            \"style\",\n            \"script\",\n            \"noscript\"\n        ];\n\n        if (node.nodeType == Evernote.Node.ELEMENT_NODE) {\n            if (Evernote.ArrayExtension.indexOf(banned, node.nodeName.toLowerCase()) == -1) {\n                for (var i = 0; i < node.childNodes.length; i++) {\n                    soFar = getText(node.childNodes[i], soFar, maxLen);\n                    if (soFar.length > maxLen) {\n                        return soFar;\n                    }\n                }\n            }\n        }\n        return soFar;\n    }<\/p>\n<p>    function getRecommendationText() {\n        var text = \"\";\n        var MAX_LEN = 5000;\n        var selection = getSelection();\n        if (selection) {\n            var df = selection.getRangeAt(0).cloneContents();\n            var div = document.createElement(\"div\");\n            div.appendChild(df);\n            text = getText(div, \"\", MAX_LEN);\n        }<\/p>\n<p>        else if (article) {\n            text = getText(article, \"\", MAX_LEN);\n        }\n        else {\n            text = getText(document.body, \"\", MAX_LEN);\n        }\n        text = document.title + \" \" + text;\n        return text;\n    }<\/p>\n<p>    \/\/ Note: you must call getSelection() first to populate this field!\n    function getSelectionFrame() {\n        return selectionFrameElement;\n    }<\/p>\n<p>    function checkClearly() {\n        var clearlyDoc = Evernote.ElementExtension.querySelector(\"iframe#readable_iframe\");\n        if (clearlyDoc) clearlyDoc = clearlyDoc.contentDocument;\n        if (clearlyDoc) clearlyDoc = Evernote.ElementExtension.querySelector(\"body#body div#box\", clearlyDoc);\n        if (clearlyDoc) {\n            article = clearlyDoc;\n            articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n        }\n    }<\/p>\n<p>    \/\/ @TODO: This is fairly incomplete.\n    function getFavIconUrl() {\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        return null;\n    }\n\n    function _getInfoRequestHandler(data, request, sender, sendResponse) {\n        var isSelected = getSelection();\n\n        checkClearly();\n\n        var response = {\n            containsImages: containsImages,\n            documentWidth: documentWidth,\n            documentHeight: documentHeight,\n            url: url,\n            selection: (isSelected !== null),\n            selectionIsInFrame: selectionIsInFrame,\n            documentLength: document.body.textContent.length,\n            articleBoundingClientRect: articleBoundingClientRect,\n            article: (article != null),\n            recommendationText: getRecommendationText(),\n            favIconUrl: getFavIconUrl(),\n            documentIsFrameset: documentIsFrameset\n        };\n        sendResponse(response);\n    }\n\n    function getInfoRequestHandler(request, sender, sendResponse) {\n        findArticle(function(data){_getInfoRequestHandler(data, request, sender, respondWithInfo)});\n    }\n\n    function getDocumentMode() {\n        return documentMode;\n    }\n\n    function getCleanArticle(callback, _newPageCallback) {\n        newPageCallback = _newPageCallback;\n        findArticle(function() {\n            callback(cleanArticles);\n        });\n    }\n\n    \/\/ Public API:\n    this.getDefaultArticle = getDefaultArticle;\n    this.getSelection = getSelection;\n    this.getSelectionFrame = getSelectionFrame;\n    this.getFavIconUrl = getFavIconUrl;\n\n    \/\/redesign\n    this.getBiggestImage = getBiggestImage;\n    this.getRecommendationText = getRecommendationText;\n    this.getCleanArticle = getCleanArticle;\n    this.getText = getText;\n    this.getUrl = getUrl;\n    this.getDocumentMode = getDocumentMode;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Scroller = function Scroller( tab ) {\n    this.initialize( tab );\n};<\/p>\n<p>Evernote.Scroller.prototype._tab = null;<\/p>\n<p>Evernote.Scroller.prototype.initialize = function ( tab ) {\n    this._tab = tab;\n    var scrollX = (this._tab.pageXOffset !== undefined) ? this._tab.pageXOffset : (this._tab.document.documentElement || this._tab.document.body.parentNode ||this._tab.document.body).scrollLeft;\n    var scrollY = (this._tab.pageYOffset !== undefined) ? this._tab.pageYOffset : (this._tab.document.documentElement || this._tab.document.body.parentNode || this._tab.document.body).scrollTop;\n    this.initialPoint = {\n        x: scrollX,\n        y: scrollY\n    };\n};<\/p>\n<p>Evernote.Scroller.prototype.scrollTo = function ( endPoint, time, resolution ) {\n    this.abort();<\/p>\n<p>    this.endPoint = endPoint;\n    this.step = 0;\n    this.calculatePath( time, resolution );\n    var self = this;\n    this.proc = setInterval( function () {\n            if ( !self.doScroll() ) {\n                self.abort();\n            }\n        },\n        resolution );\n};<\/p>\n<p>Evernote.Scroller.prototype.calculatePath = function ( time, resolution ) {\n    this.path = [];\n    var sx = this.initialPoint.x;\n    var sy = this.initialPoint.y;\n    var ex = this.endPoint.x;\n    var ey = this.endPoint.y;\n    var k = (Math.PI * resolution) \/ time;\n    for ( var i = -(Math.PI \/ 2); i < (Math.PI \/ 2); i += k ) {\n        var c = ((1 + Math.sin( i )) \/ 2);\n        this.path.push( {\n            x:(sx + c * (ex - sx)),\n            y:(sy + c * (ey - sy))\n        } );\n    }\n};\n\nEvernote.Scroller.prototype.doScroll = function () {\n    var s = this.path[++this.step];\n    if ( !s ) {\n        return false;\n    }\n    var view = this._tab.document.defaultView || this._tab;\n    view.scrollTo( s.x, s.y );\n    return true;\n};\n\nEvernote.Scroller.prototype.abort = function () {\n    if ( this.proc ) {\n        clearInterval( this.proc );\n        this.proc = null;\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nfunction ContentPreview() {\n    Evernote.Logger.debug(\"Start creating preview box\");<\/p>\n<p>    var contentVeil = new ContentVeil();\n    var screenshotVeil = new ScreenshotVeil();\n    Evernote.Logger.debug(\"End creating preview box\");\n    \/\/ Stores a reference to the last element that we used as a preview.\n    var previewElement = null;\n    var article = null;\n    var snippet = null;<\/p>\n<p>    function buildUrlElement() {\n        var urlEl = document.createElement(\"div\");\n        urlEl.id = \"evernotePreviewContainer\";\n        var className = \"yui3-cssreset\";\n        if(Evernote.Utils.isQuirkMode()) {\n            className += \" evernote-middle-fixed-position-quirks\"\n        }\n        urlEl.className = className;\n        return urlEl;\n    }<\/p>\n<p>    Evernote.Logger.debug(\"Build url element\");\n    var urlElement = buildUrlElement();<\/p>\n<p>    function showUrlElement() {\n        Evernote.Logger.debug(\"ContentPreview: showUrlElement start\");\n        if (!Evernote.ElementExtension.hasParentNode(urlElement)) {\n            document.documentElement.appendChild(urlElement);\n        }<\/p>\n<p>        \/\/ Make sure we're centered in the window.\n        var elStyle = Evernote.ElementExtension.getComputedStyle(urlElement, '');\n        var w = parseInt(Evernote.StyleElementExtension.getPropertyValue(elStyle, \"width\"));\n        var h = parseInt(Evernote.StyleElementExtension.getPropertyValue(elStyle, \"height\"));<\/p>\n<p>        if (isNaN(w) || isNaN(h)) {\n            \/\/ IE8\n            w =  Evernote.JQuery(urlElement).width();\n            h = Evernote.JQuery(urlElement).height();\n        }<\/p>\n<p>        if (w && h) {\n            urlElement.style.marginLeft = (0 - w \/ 2) + \"px\";\n            urlElement.style.marginTop = (0 - h \/ 2) + \"px\";\n        }<\/p>\n<p>        Evernote.Logger.debug(\"ContentPreview: showUrlElement end\");\n    }<\/p>\n<p>    function hideUrlElement() {\n        if (Evernote.ElementExtension.hasParentNode(urlElement)) {\n            urlElement.parentNode.removeChild(urlElement);\n        }\n    }<\/p>\n<p>    function showScreenShotArea() {\n        clear();\n        screenshotVeil.show();\n    }<\/p>\n<p>    function showOverlay()  {\n        previewElement = null;\n        clear();\n        contentVeil.reset();\n        contentVeil.hideAllActiveObjects();\n        contentVeil.gray();\n    }<\/p>\n<p>    function previewUrl() {\n        clear();<\/p>\n<p>        function buildContent ( data ) {\n            var title = PageContext.title;\n            var url = PageContext.url;\n            var favIconUrl = PageContext.getFavIconUrl();\n            snippet = data.replace(\/(<([^>]+)>)\/ig,\"\"); \/\/ remove html tags from text<\/p>\n<p>            urlElement.innerHTML = Evernote.GlobalUtils.createUrlClipContent(title, url, favIconUrl, snippet);<\/p>\n<p>            var element = Evernote.JQuery(urlElement);<\/p>\n<p>            if(Evernote.Utils.isQuirkMode() && !element.hasClass(\"evernote-fixed-position-fix\")) {\n                element.addClass(\"evernote-fixed-position-fix\");\n            }<\/p>\n<p>            showUrlElement();\n            contentVeil.reset();\n            contentVeil.hideAllActiveObjects();\n            contentVeil.gray();<\/p>\n<p>        }<\/p>\n<p>        Evernote.ClearlyController.getClearlyArticleText( function (data) {\n            buildContent(data._html);\n        });\n    }<\/p>\n<p>    \/\/ This doesn't remove internal state of previewElement, because another script may not have finished clipping until\n    \/\/ after the page looks 'clear'.\n    function clear() {\n        contentVeil.reset();\n        contentVeil.hide();\n        screenshotVeil.hide();\n        hideUrlElement();\n    }<\/p>\n<p>    function _previewArticle () {\n        Evernote.Logger.debug(\"Start previewing article element\");\n        if (previewElement)\n        {\n            var selectionFrame;\n            if (typeof Evernote.pageInfo !== undefined) {\n                selectionFrame = Evernote.pageInfo.getSelectionFrame();\n            }\n            Evernote.Logger.debug(\"Selection frame selected \" + selectionFrame);\n            if (selectionFrame) {<\/p>\n<p>                var rect = {\n                    width: selectionFrame.width,\n                    height: selectionFrame.height,\n                    top: selectionFrame.offsetTop,\n                    bottom: (selectionFrame.height + selectionFrame.offsetTop),\n                    left: selectionFrame.offsetLeft,\n                    right: (selectionFrame.width + selectionFrame.offsetLeft)\n                };\n                Evernote.Logger.debug(\"contentVeil.revealStaticRect \" + rect);\n                contentVeil.revealStaticRect(contentVeil.expandRect(rect, -9), selectionFrame, true);\n                Evernote.Logger.debug(\"contentVeil.show \");\n                contentVeil.show();\n            }\n            else {\n                \/\/ TODO: Scroll into article view.\n                contentVeil.outlineElement(previewElement, false, true);\n                window.scrollTo(0, previewElement.offsetTop - 30);\n            }\n        }\n        else {\n            Evernote.Logger.warn(\"Couldn't find a preview element. We should switch to 'full page' mode.\");\n        }\n    }<\/p>\n<p>    \/**\n     * Finds and preview article element.\n     * If reloadArticle is specified and equals to true, then discard previously found article and re-start search of article again.\n     * Otherwise use article found on previous call (if this is the first call then article will be searched anyway).\n     * @param reloadArticle\n     *\/\n    function previewArticle (reloadArticle) {<\/p>\n<p>        clear();\n        previewElement = null;\n        if(reloadArticle) {\n            article = null;\n        }\n        Evernote.Logger.debug(\"Evernote.pageinfo \" + Evernote.pageInfo);\n        if (typeof Evernote.pageInfo !== undefined) {\n            if(!article) {\n                previewElement = Evernote.pageInfo.getDefaultArticle(function(el){\n                    Evernote.Logger.debug(\"Article element \" + el.nodeName);\n                    previewElement = el;\n                    article = el;\n                    Evernote.Logger.debug(\"Preview article \");\n                    _previewArticle();\n                });\n                article = previewElement;\n            } else {\n                previewElement = article;\n                _previewArticle();\n            }\n        }\n        else {\n            Evernote.Logger.warn(\"Couldn't find a 'pageInfo' object.\");\n        }\n    }<\/p>\n<p>    \/\/ When nudging the preview around the page, we want to skip nodes that aren't interesting. This includes empty\n    \/\/ nodes, containers that have identical contents to the already selected node, invisible nodes, etc.\n    \/\/ @TODO: There's a lot more we could probably add here.\n    function looksInteresting(candidate, given) {<\/p>\n<p>        if (!candidate) {\n            Evernote.Logger.warn(\"Can't determine if 'null' is interesting (it's probably not).\");\n            return false;\n        }\n        \/\/ This is the parent of our 'HTML' tag, but has no tag itself. There's no reason it's ever more interesting than\n        \/\/ the HTML element.\n        if (candidate === window.document) {\n            return false;\n        }<\/p>\n<p>        \/\/Disable clip of evernote main popup\n        if(Evernote.JQuery(candidate).closest(\"#evernote-content\").length != 0) {\n            return false;\n        }<\/p>\n<p>        \/\/ Elements with neither text nor images are not interesting.\n        if (!candidate.textContent && (candidate.getElementsByTagName(\"img\").length === 0)) {\n            return false;\n        }<\/p>\n<p>        \/\/ Elements with 0 area are not interesting.\n        var rect = Evernote.ElementExtension.getBoundingClientRect(candidate);\n        if (!rect.width || !rect.height) {\n            return false;\n        }<\/p>\n<p>        \/\/ Invisible elements are not interesting.\n        var style = Evernote.ElementExtension.getComputedStyle(candidate);\n        if ((style.visibility === \"hidden\") || (style.display === \"none\")) {\n            return false;\n        }<\/p>\n<p>        \/\/ If the nodes have a parent\/child relationship, then they're only interesting if their visible contents differ.\n        if (candidate.parentNode && given.parentNode) {\n            if ((candidate.parentNode == given) || (given.parentNode == candidate)) {\n                if ((candidate.textContent === given.textContent) &&\n                    (candidate.getElementsByTagName(\"img\").length === given.getElementsByTagName(\"img\").length)) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }<\/p>\n<p>    \/\/ Returns the current article element, which may not be the same as the auto-detected one if the user has 'nudged'\n    \/\/ the selection around the page.\n    function getArticleElement() {\n        return previewElement;\n    }<\/p>\n<p>    function nudgePreview(direction) {\n        Evernote.Logger.debug(\"nudgePreview start\");\n        if (!previewElement) {\n            return;\n        }<\/p>\n<p>        var oldPreview = previewElement;\n        Evernote.Logger.debug(\"nudgePreview: direction is \" + direction);\n        Evernote.Logger.debug(\"nudgePreview: previewElement is \" + previewElement.nodeName);\n        switch (direction) {\n            case \"up\":\n                var temp = previewElement.parentNode;\n                while (temp) {\n                    if (looksInteresting(temp, previewElement)) {\n                        \/\/ If we move up and then down, we want to move back to where we started, not the first child.\n                        temp.enNudgeDescendToNode = previewElement;\n                        previewElement = temp;\n                        break;\n                    }\n                    temp = temp.parentNode;\n                }\n                break;\n            case \"down\":\n                Evernote.Logger.debug(\"nudgePreview: previewElement.enNudgeDescendToNode is \" + previewElement.enNudgeDescendToNode);\n                if (previewElement.enNudgeDescendToNode)\n                {\n                    var temp = previewElement.enNudgeDescendToNode;\n                    \/\/ @TODO: make sure we clean these up somewhere else if we never reverse our nudging.\n                    try {\n                        delete previewElement.enNudgeDescendToNode;\n                    } catch(e) {\n                        previewElement.enNudgeDescendToNode = undefined;\n                    }\n                    previewElement = temp;\n                } else {\n                    previewElement = descendTreeUntilUniqueElement(previewElement);\n                }\n                break;\n                Evernote.Logger.debug(\"nudgePreview: previewElement.children.length = \" + previewElement.children.length);\n                for (var i = 0; i < previewElement.children.length; i++) {\n                    Evernote.Logger.debug(\"nudgePreview: checking child is \" + previewElement.children[i].nodeName);\n                    if (looksInteresting(previewElement.children[i], previewElement)) {\n                        Evernote.Logger.debug(\"nudgePreview: found interesting child\" + previewElement.children[i]);\n                        previewElement = previewElement.children[i];\n                        break;\n                    }\n                }\n                break;\n            case \"left\":\n                var temp = previewElement.previousElementSibling;\n                while (temp) {\n                    if (looksInteresting(temp, previewElement)) {\n                        previewElement = temp;\n                        break;\n                    }\n                    temp = temp.previousElementSibling;\n                }\n                break;\n            case \"right\":\n                var temp = previewElement.nextElementSibling;\n                while (temp) {\n                    if (looksInteresting(temp, previewElement)) {\n                        previewElement = temp;\n                        break;\n                    }\n                    temp = temp.nextElementSibling;\n                }\n                break;\n            default:\n                Evernote.Logger.warn(\"Unhandled nudge direction: \" + direction);\n        }\n\n        \/\/ Drawing is expensive so don't bother if nothing changed.\n        if (oldPreview !== previewElement) {\n            Evernote.Logger.debug(\"nudgePreview: draw new element.\");\n\n            function enoughSize(elem) {\n                var el = Evernote.JQuery(elem);\n                var w = el.width();\n                var h = el.height();\n                return (w > 30 && h > 15)\n            }<\/p>\n<p>\/\/            if (enoughSize(previewElement) === false) return;<\/p>\n<p>            contentVeil.outlineElement(previewElement, false, true, true);\n            article = previewElement;<\/p>\n<p>            \/\/ TODO: scroll into Element view here (probably, attach to Expand\/Contract Container\n            window.scrollTo(0, previewElement.offsetTop - 30);\n        }\n    }<\/p>\n<p>    function sameElement(a, b) {\n        var aRect = a.getBoundingClientRect();\n        var bRect = b.getBoundingClientRect();\n        if (aRect.bottom == bRect.bottom && aRect.height == bRect.height\n            && aRect.left == bRect.left && aRect.right == bRect.right\n            && aRect.top == bRect.top && aRect.width == bRect.width) {\n            return false;\n        } else if ((a.textContent === b.textContent) &&\n            (a.getElementsByTagName(\"img\").length === b.getElementsByTagName(\"img\").length)) {\n            return false;\n        }\n    }<\/p>\n<p>    function descendTreeUntilUniqueElement(parent) {\n        for (var i = 0; i < parent.children.length; i++) {\n            if (sameElement(parent.children[i], parent)) {\n                return descendTreeUntilUniqueElement(parent.children[i]);\n            } else if (looksInteresting(parent.children[i], parent)) {\n                return parent.children[i];\n            }\n        }\n        return parent;\n    }\n\n\n    function previewFullPage() {\n        var borderWidth = 4;\n        var w = document.documentElement.scrollWidth;\n        var h = document.documentElement.scrollHeight;\n\n        var rect = {\n            bottom: (h - borderWidth),\n            top: (borderWidth),\n            left: (borderWidth),\n            right: (w - borderWidth),\n            width: (w - (2 * borderWidth)),\n            height: (h - (2 * borderWidth))\n        };\n\n        clear();\n        contentVeil.reset();\n        contentVeil.revealStaticRect(rect, document.body);\n        contentVeil.show();\n        contentVeil.hideAllActiveObjects();\n    }\n\n    \/\/ Creates the union of two rectangles, which is defined to be the smallest rectangle that contains both given\n    \/\/ rectangles.\n    function unionRectangles(rect1, rect2) {\n        var rect = {\n            top: (Math.min(rect1.top, rect2.top)),\n            bottom: (Math.max(rect1.bottom, rect2.bottom)),\n            left: (Math.min(rect1.left, rect2.left)),\n            right: (Math.max(rect1.right, rect2.right))\n        }\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;\n\n        return rect;\n    }\n\n    \/\/ Returns true if the rectangles match, false otherwise.\n    function rectanglesEqual(rect1, rect2) {\n        if (!rect1 &#038;&#038; !rect2) return true;\n        if (!rect1) return false;\n        if (!rect2) return false;\n        if (rect1.top != rect2.top) return false;\n        if (rect1.bottom != rect2.bottom) return false;\n        if (rect1.left != rect2.left) return false;\n        if (rect1.right != rect2.right) return false;\n        if (rect1.width != rect2.width) return false;\n        if (rect1.height != rect2.height) return false;\n        return true;\n    }\n\n    \/\/ If the user triple-clicks a paragraph, we will often get a selection that includes the next paragraph after the\n    \/\/ selected one, but only up to offset 0 in that paragraph. This causes the built in getBoundingClientRect to give a\n    \/\/ box that includes the whole trailing paragraph, even though none of it is actually selected. Instead, we'll build\n    \/\/ our own bounding rectangle that omits the trailing box.\n    \/\/ @TODO: Currently this computes a box that is *too big* if you pass it a range that doesn't have start and\/or end\n    \/\/ offsets that are 0, because it will select the entire beginning and ending node, instead of jsut the selected\n    \/\/ portion.\n    function computeAlternateBoundingBox(range) {\n\n        \/\/ If the end of selection isn't at offset 0 into an element node (rather than a text node), then we just return the\n        \/\/ original matching rectangle.\n        if ((range.endOffset !== 0) ||\n            (range.endContainer &#038;&#038; range.endContainer.nodeType !== Evernote.Node.ELEMENT_NODE) ||\n            ( range.startContainer &#038;&#038; range.startContainer &#038;&#038; range.startContainer.getBoundingClientRect) ||\n            ( range.endContainer &#038;&#038; range.endContainer.getBoundingClientRect) ||\n            ( range.commonAncestorContainer &#038;&#038; range.commonAncestorContainer.getBoundingClientRect)\n            ) {\n            var rect = range.getBoundingClientRect();\n            if(rect.top == 0 &#038;&#038; rect.bottom == 0 &#038;&#038; rect.left == 0 &#038;&#038; rect.right == 0) {\n                if(range.commonAncestorContainer &#038;&#038; range.commonAncestorContainer.getBoundingClientRect) {\n                    rect = range.commonAncestorContainer.getBoundingClientRect();\n                } else if(range.startContainer &#038;&#038; range.startContainer.getBoundingClientRect) {\n                    rect = range.startContainer.getBoundingClientRect();\n                } else if(range.endContainer &#038;&#038; range.endContainer.getBoundingClientRect) {\n                    rect = range.endContainer.getBoundingClientRect();\n                }\n            }\n            var mutableRect = {\n                top: rect.top,\n                bottom: rect.bottom,\n                left: rect.left,\n                right: rect.right,\n                width: rect.width,\n                height: rect.height\n            };\n            return mutableRect;\n        }\n\n        \/\/ This is the one we don't want.\n        var endElementRect = null;\n        try {\n            endElementRect = Evernote.ElementExtension.getBoundingClientRect(range.endContainer);\n        }\n        catch(ex) {\n            Evernote.Logger.warn(\"Couldn't get a bounding client rect for our end element, maybe it's a text node.\");\n        }\n\n        \/\/ We look for a rectangle matching our end element, and if we find it, we don't copy it to our list to keep.\n        \/\/ You'd think we could just grab the last element in range.getClientRects() here and trim that one, which might be\n        \/\/ true, but the spec makes no claim that these are returned in order, so I don't want to rely on that.\n        \/\/ We keep track if we remove a rectangle, as we're only trying to remove one for the trailnig element. If there are\n        \/\/ more than one matching rectangle, we want to keep all but one of them.\n        var foundEnd = false;\n        var keptRects = [];\n        var initialRects = range.getClientRects();\n        for (var i = 0; i < initialRects.length; i++) {\n            if (rectanglesEqual(endElementRect, initialRects[i]) &#038;&#038; !foundEnd) {\n                foundEnd = true;\n            }\n            else {\n                keptRects.push(initialRects[i]);\n            }\n        }\n\n        \/\/ Now compute our new bounding box and return that.\n        if (keptRects.length == 0) return Evernote.ElementExtension.getBoundingClientRect(range);\n        if (keptRects.length == 1) return keptRects[0];\n\n        var rect = keptRects[0];\n        for (var i = 1; i < keptRects.length; i++) {\n            rect = unionRectangles(rect, keptRects[i]);\n        }\n\n        return rect;\n    }\n\n    \/\/ If every edge of the rectangle is in negative space,\n    function rectIsOnScreen(rect) {\n        \/\/ rtl pages have actual content in \"negative\" space. This case could be handled better.\n        if (document.dir == \"rtl\") {\n            return false;\n        }\n        \/\/ If both top and bottom are in negative space, we can't see this.\n        if (rect.bottom < 0 &#038;&#038; rect.top < 0) {\n            return false;\n        }\n        \/\/ Or, if both left and right are in negative space, we can't see this.\n        if (rect.left < 0 &#038;&#038; rect.right < 0) {\n            return false;\n        }\n        \/\/ Probably visible.\n        return true;\n    }\n\n    function applyElementRect(element, rect) {\n        var newRect = rect;\n        var tempRect = Evernote.ElementExtension.getBoundingClientRect(element);\n\n        tempRect = {\n            bottom: tempRect.bottom + window.pageYOffset,\n            height: tempRect.height,\n            left: tempRect.left + window.pageXOffset,\n            right: tempRect.right + window.pageXOffset,\n            top: tempRect.top + window.pageYOffset,\n            width: tempRect.width\n        };\n\n    \/\/ Skip elements that are positioned off screen.\n        if (!rectIsOnScreen(tempRect)) {\n            return newRect;\n        }\n    var cs = getComputedStyle(element);\n    \/\/ We won't descend into hidden elements.\n    if (cs.display == \"none\") {\n      return newRect;\n    }\n    \/\/ don't union a big rectangle that has hidden overflow\n    if (cs.overflowX == \"hidden\" || cs.overflowY == \"hidden\") {\n      return newRect;\n    }\n        \/\/ We skip anything with an area of one px or less. This is anything that has \"display: none\", or single pixel\n        \/\/ images for loading ads and analytics and stuff. Most hidden items end up at 0:0 and will stretch our rectangle\n        \/\/ to the top left corner of the screen if we include them. Sometimes single pixels are deliberately placed off\n        \/\/ screen.\n        if ((tempRect.width * tempRect.height) > 1) {\n            newRect = unionRectangles(tempRect, rect);\n        }\n        if (element.children) {\n            for (var i = 0; i < element.children.length; i++) {\n                newRect = applyElementRect(element.children[i], newRect);\n            }\n        }\n        return newRect;\n    }\n\n    \/\/ In the case of positioned elements, a bounding box around an element doesn't necessarily contain its child\n    \/\/ elements, so we have this method to combine all of these into one bigger box. ContentVeil calls this function.\n    function computeDescendantBoundingBox(element) {\n        if (!element) return {top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0};\n        var rect = element.getBoundingClientRect();\n        var li = rect.top + window.pageYOffset\n        return applyElementRect(element, {\n            bottom: rect.bottom + window.pageYOffset,\n            height: rect.height,\n            left: rect.left + window.pageXOffset,\n            right: rect.right + window.pageXOffset,\n            top: rect.top + window.pageYOffset,\n            width: rect.width\n        });\n    }\n\n    function previewSelection(sel) {\n\n        var selection;\n        var selectionFrame;\n        if(sel) {\n            selection = sel;\n        }\n        else if (typeof Evernote.pageInfo !== undefined) {\n            selection = Evernote.pageInfo.getSelection();\n            \/\/ If our selection is in a frame or iframe, we'll compute an offset relative to that, so we need to adjust it by\n            \/\/ the offset of the frame.\n            selectionFrame = Evernote.pageInfo.getSelectionFrame();\n        }\n\n        contentVeil.reset();\n\n        var frameRect = null;\n        if (selectionFrame) {\n            frameRect = Evernote.ElementExtension.getBoundingClientRect(selectionFrame);\n        }\n\n        var range, rect, i;\n\n        \/\/ If !selection, then something has gone awry.\n        if (selection) {\n            clear();\n            contentVeil.reset();\n            \/\/ We attempt to highlight each selection, but this hasn't been tested for more than a single selection.\n            for (i = 0; i < Evernote.Utils.Selection.getRangeCount(selection); i++) {\n                range = Evernote.Utils.Selection.getRangeAt(selection, i);\n\n                rect = computeAlternateBoundingBox(range);\n\n                rect.top += document.documentElement.scrollTop;\n                rect.bottom += document.documentElement.scrollTop;\n                rect.left += document.documentElement.scrollLeft;\n                rect.right += document.documentElement.scrollLeft;\n\n                \/\/ Actual adjustment mentioned earlier regarding frames.\n                if (frameRect) {\n                    rect.left += frameRect.left;\n                    rect.right += frameRect.left;\n                    rect.top += frameRect.top;\n                    rect.bottom += frameRect.top;\n                }\n\n                contentVeil.revealStaticRect(rect, selectionFrame, false);\n                contentVeil.show();\n            }\n        }\n        contentVeil.show();\n        contentVeil.hideAllActiveObjects();\n    }\n\n    function getSnippetText() {\n        return snippet;\n    }\n\n    \/\/ Public API:\n    this.getArticleElement = getArticleElement;\n    this.looksInteresting = looksInteresting;\n    this.computeDescendantBoundingBox = computeDescendantBoundingBox;\n    this.previewArticle = previewArticle;\n    this.previewFullPage = previewFullPage;\n    this.previewSelection = previewSelection;\n    this.previewUrl = previewUrl;\n    this.clear = clear;\n    this.previewNudge = nudgePreview;\n    this.showOverlay = showOverlay;\n    this.getSnippetText = getSnippetText;\n    this.showScreenShotArea = showScreenShotArea;\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ElementExtension = {\n    querySelector : function(selector, doc) {\n        if(!doc) {\n            doc = document;\n        }\n        if(doc.querySelector) {\n            return doc.querySelector(selector);\n        }\n        else {\n            var head = doc.documentElement.firstChild;\n            var styleTag = doc.createElement(\"STYLE\");\n            head.appendChild(styleTag);\n            doc.__qsResult = [];<\/p>\n<p>            styleTag.styleSheet.cssText = selector + \"{x:expression(document.__qsResult.push(this))}\";\n            window.scrollBy(0, 0);\n            head.removeChild(styleTag);<\/p>\n<p>            var result = [];\n            for (var i in doc.__qsResult)\n                result.push(doc.__qsResult[i]);\n            return result;\n        }\n    },<\/p>\n<p>    getComputedStyle : function(element, pseudoElement, win) {\n        var pseudo = pseudoElement;\n        var target = win;\n        if(!target)\n            target = window;\n        if(!pseudo) {\n            pseudo = null;\n        }\n        if(target.getComputedStyle)\n            return target.getComputedStyle(element, pseudo);\n        if(element.currentStyle) {\n            try {\n\t\t\t\tvar fixedElement = Evernote.Utils.cloneObject(element.currentStyle);\n\t\t\t\tfixedElement['fontSize'] = Evernote.Utils.getIEComputedStyle(element, 'fontSize');\n\t\t\t\treturn fixedElement; \n\t\t\t}             \n            catch (err) {\n                return element.currentStyle;\n            }\n        }\n        return null;\n    },<\/p>\n<p>    hasParentNode : function(element) {\n        return element.parentNode && element.parentNode.nodeType != 9 && element.parentNode.nodeType != 11;\n    },<\/p>\n<p>    getBoundingClientRect : function(element) {\n        if(element && element.getBoundingClientRect) {\n            var rect = element.getBoundingClientRect();\n            var width = rect.width || element.offsetWidth || element.boundingWidth;\n            var height = rect.height || element.offsetHeight || element.boundingHeight;\n            return {\n                left : rect.left,\n                right : rect.right,\n                top : rect.top,\n                bottom : rect.bottom,\n                width : width,\n                height : height\n            }\n        }\n        return null;\n    },<\/p>\n<p>    hasAttribute : function(node, attrName) {\n        if(node) {\n            if(node.hasAttribute) {\n                return node.hasAttribute(attrName);\n            }\n            if(node.attributes) {\n                var attrValue = node.attributes[attrName];\n                return typeof attrValue != typeof undefined;\n            }\n        }\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ArrayExtension = {\n    indexOf : function(element, searchStr) {\n        if(!element) {\n            return -1;\n        }\n        if (element.indexOf)\n            return element.indexOf(searchStr);\n        for(var i = 0; i < element.length; i++) {\n            if(element[i] == searchStr)\n                return i;\n        }\n        return -1;\n    },\n\n    containsCaseIgnore : function(element, searchStr) {\n        if(!element) {\n            return false;\n        }\n        for(var i = 0; i < element.length; i++) {\n            if(element[i].toLowerCase() == searchStr.toLowerCase())\n                return true;\n        }\n        return false;\n    },\n\n    remove : function(arr, element) {\n        var elementPosition = Evernote.ArrayExtension.indexOf(arr, element);\n        if(elementPosition != -1) {\n            var rest = arr.slice(elementPosition  + 1 || arr.length);\n            arr.length = elementPosition;\n            return arr.push.apply(arr, rest);\n        }\n    },\n\n    filter : function(arr, fun) {\n        var len = arr.length >>> 0;\n        if (typeof fun != \"function\")\n            throw new TypeError();<\/p>\n<p>        var res = [];\n        var thisp = arguments[1];\n        for (var i = 0; i < len; i++) {\n            if (i in arr) {\n                var val = arr[i];\n                if (fun.call(thisp, val, i, arr))\n                {\n                    res.push(val);\n                }\n            }\n        }\n        return res;\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.StyleElementExtension = {\n    getPropertyValue : function(styleObj, propertyName) {\n        var props = propertyName;\n        if(!(props instanceof Array)) {\n            props = [propertyName];\n        }\n        Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: number of properties to check \" + props.length);\n        for(var i = 0; i < props.length; i++) {\n            var propName = props[i];\n            Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: property name is \" + propName);\n            var val;\n            if(styleObj.getPropertyValue) {\n                val = styleObj.getPropertyValue(propName);\n                Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: value from getPropertyValue is \" + val);\n                if(val)\n                    return val;\n            }\n            val = styleObj[propName];\n            Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: value from styleObj \" + val);\n            if(val)\n                return val;\n        }\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.GlobalUtils = {};\n(function(){\n    var urlMatcher = \/^(.*?):\\\/\\\/((www\\.)?(.*?))(:\\d+)?(\\\/.*?)(\\?.*)?$\/;<\/p>\n<p>    var BAD_FAV_ICON_URLS = {\"http:\/\/localhost\/favicon.ico\": true};<\/p>\n<p>    Evernote.GlobalUtils.componentizeUrl = function(url) {\n        var data = {\n            protocol: null,\n            domain: null,\n            domainNoWww: null,\n            port: null,\n            path: null,\n            queryString: null\n        };\n        var matches = urlMatcher.exec(url);\n        data.protocol = matches[1];\n        data.domain = matches[2];\n        data.domainNoWww = matches[4];\n        data.port = matches[5];\n        data.path = matches[6];\n        data.queryString = matches[7];\n        return data;\n    };<\/p>\n<p>    Evernote.GlobalUtils.getMessageCode = function(messageConst) {\n        Evernote.Logger.debug(\"getMessageCode: \" + messageConst);\n        return Evernote.Messages[messageConst];\n    };<\/p>\n<p>    Evernote.GlobalUtils.absolutizeImages = function(element, path) {\n        if(path) {\n            Evernote.Utils.changeBackgroundImage(element, Evernote.Addin.getPath(\"resources\") + path);\n        }\n        else if(element.attributes && element.attributes[\"background-image\"]) {\n            \/\/ TODO: replace \"oldlipper\" with universal path\n            Evernote.Utils.changeBackgroundImage(element, Evernote.Addin.getPath(\"resources\") + 'oldclipper\/' + element.attributes[\"background-image\"].value);\n        }\n        Evernote.Logger.debug(\"absolutizeImages: walk through children\");\n        for (var i = 0; i < element.children.length; i++) {\n            Evernote.GlobalUtils.absolutizeImages(element.children[i]);\n        }\n        Evernote.Logger.debug(\"absolutizeImages: end\");\n    };\n\n    Evernote.GlobalUtils.localize = function(element) {\n        var node = element.nodeName.toLowerCase();\n        if (node == \"input\" || node == \"textarea\") {\n            var type = element.type;\n            if (node == \"textarea\") type = \"textarea\";\n            switch (element.type) {\n                case \"text\":\n                case \"textarea\":\n                case \"button\":\n                case \"submit\":\n                case \"search\":\n                    if (element.attributes &#038;&#038; element.attributes[\"placeholder\"]) {\n                        var localizedMessage = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.attributes[\"placeholder\"].value));\n                        Evernote.Logger.debug(\"localizedMessage is \" + localizedMessage);\n                        if (localizedMessage) {\n                            try {\n                                element.attributes[\"placeholder\"].value = localizedMessage;\n                            } catch(e) {\n                                var placeHolderAttr = document.createAttribute(\"placeholder\");\n                                placeHolderAttr.nodeValue = localizedMessage;\n                                element.setAttribute(\"placeholder\", localizedMessage);\n                            }\n                        }\n                    }\n\n                    if (element.attributes &#038;&#038; element.attributes[\"message\"]) {\n                        var localizedMessage = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.attributes[\"message\"].value));\n                        Evernote.Logger.debug(\"localizedMessage is \" + localizedMessage);\n                        if (localizedMessage) {\n                            element.value = localizedMessage;\n                        }\n                    }\n                    break;\n\n                \/\/ unlocalizable.\n                case \"checkbox\":\n                case \"password\":\n                case \"hidden\":\n                case \"radio\":\n                    break;\n\n                default:\n                    throw new Error(\"We need to localize the value of input elements.\");\n            }\n        }\n\n        else if (element.attributes &#038;&#038; element.attributes[\"message\"]) {\n            var localizedMessage = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.attributes[\"message\"].value));\n            if (localizedMessage) {\n                element.innerHTML = localizedMessage;\n            } else {\n                element.innerHTML = 'l10n error'; \/\/ to spot if something goes wrong\n            }\n        }\n\n        if (element.title){\n            var localizedTitle = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.title));\n            if (localizedTitle) {\n                element.title = localizedTitle;\n            }\n        }\n\n        for (var i = 0; i < element.children.length; i++) {\n            Evernote.GlobalUtils.localize(element.children[i]);\n        }\n    };\n\n    Evernote.GlobalUtils.getQueryParams = function(url) {\n        var data = Evernote.GlobalUtils.componentizeUrl(url);\n        var queryString = data.queryString;\n        var params = {};\n        if (!queryString) {\n            return params;\n        };\n        queryString = queryString.substr(1); \/\/ Don't want the question mark.\n        queryString = queryString.split(\"#\")[0]; \/\/ Get rid of any fragment identifier.\n        var pairs = queryString.split(\"&#038;\");\n        var i;\n        for (i = 0; i < pairs.length; i++) {\n            var item = pairs[i].split(\"=\");\n            if (item[1]) {\n                item[1] = item[1].replace(\/\\+\/g, \" \");\n            }\n            params[item[0].toLowerCase()] = item[1];\n        }\n        return params;\n    };\n\n    Evernote.GlobalUtils.escapeXML = function(str) {\n        var map = {\n            \"&#038;\" : \"&amp;\",\n            \"<\" : \"&lt;\",\n            \">\" : \"&gt;\",\n            \"\\\"\" : \"&quot;\",\n            \"'\" : \"&apos;\"\n        };<\/p>\n<p>        var a = str.split(\"\");\n        for (var i = 0; i < a.length; i++) {\n            if (map[a[i]]) {\n                a[i] = map[a[i]];\n            }\n        }\n        return a.join(\"\");\n    };\n\n    Evernote.GlobalUtils.decodeXML = function(str) {\n        str = str.replace(\/&amp;apos;\/g, \"&#39;\");\n        str = str.replace(\/&amp;quot;\/g, \"&#34;\");\n        str = str.replace(\/&amp;lt;\/g, \"&#60;\");\n        str = str.replace(\/&amp;gt;\/g, \"&#62;\");\n        return str;\n    };\n\n    Evernote.GlobalUtils.cropImage = function( data ) {\n        var img = new Image;\n        img.onload = function(){\n            var canvas=document.createElement(\"canvas\");\n            canvas.width=Math.min(150,data.width);\n            canvas.height=Math.min(150,data.height);\n            canvas.getContext(\"2d\").drawImage(img ,Math.max(0,(data.width-150)\/2),Math.max(0,(data.height-150)\/2),canvas.width,canvas.height,0,0,canvas.width,canvas.height);\n            return canvas.toDataURL();   \/\/ Not working. Cross origin policy forbids toDataUrl() method.\n        };\n        img.src = data.src;\n    };\n\n    Evernote.GlobalUtils.createUrlClipContent = function(title, url, favIcoUrl, snippet) {\n\n        var titleAttr = (title) ? Evernote.GlobalUtils.escapeXML(title) : \"\";\n        var urlStr = Evernote.GlobalUtils.escapeXML(url);\n        var snip = snippet;\n\n        if (snip.length > 275) {\n            snip = snip.substr(0, 275-3) + '...';\n        }<\/p>\n<p>        snip = Evernote.GlobalUtils.escapeXML(snip);<\/p>\n<p>        var contentStyle = 'text-align:left;padding:15px;font-size:12px;font-family:Verdana;max-width:370px;color:black;background-color:white;box-sizing:content-box;display:block;background-repeat:no-repeat;';\n        var titleStyle = 'white-space:nowrap;font-size:14px;font-weight:bold;overflow-x:hidden;text-overflow:ellipsis;height:24px;';\n        var hrStyle = 'border-top-width:1px;border-top-style:solid;border-top-color:#d8d8d8;height:0;width:100%;';\n        var imgStyle = 'position:relative;display:inline-block;float:left;width:150px;height:150px;margin:15px 30px 0 0;overflow:hidden;';\n        var contStyle = 'display:inline-block;vertical-align:top;margin:15px 0 0;width:364px;';\n        var linkDivStyle = 'padding:0px 0px 11px 0px;';\n        var faviconStyle = 'float:left;width:16px; height:16px; margin-right:9px; background-size:16px 16px;background-repeat: no-repeat; background-position:left center;';\n        var linkStyle = 'display:inline-block;text-decoration:none;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(12, 12, 12);width:325px;';\n        var snipStyle ='word-wrap:break-word;line-height:normal;text-align:left;font-size:12px';<\/p>\n<p>        var imgDiv = '';\n        var titleDiv = '<\/p>\n<div id=\"evernoteBookmarkTitle\" style=\"' + titleStyle + '\">' + titleAttr + '<\/div>\n<p>';\n        var hrDiv = '<\/p>\n<div id=\"evernoteBookmarkDivider\" style=\"' + hrStyle + '\">&#160;<\/div>\n<p>';<\/p>\n<p>        Evernote.pageInfo.getBiggestImage(function(data) {\n            if (data && data.src) {\n                var im = '<img decoding=\"async\" src=\"' + data.src + '\" width=\"150\"\/>';\n                imgDiv =  '<\/p>\n<div id=\"evernoteBookmarkImage\" style=\"'+ imgStyle +'\">' + im + '<\/div>\n<p>';\n                contentStyle = contentStyle.replace('max-width:370px','max-width:562px');\n            }\n        });<\/p>\n<p>        var link = '<a style=\"' + linkStyle + '\" href=\"' + urlStr+ '\">' + urlStr + '<\/a>';\n        var favicon = '<\/p>\n<div style=\"' + faviconStyle + 'background-image:url('+ favIcoUrl +  ');\">&#160;<\/div>\n<p>';\n        var linkDiv = '<\/p>\n<div id=\"evernoteBookmarkLink\" style=\"' + linkDivStyle + '\">' + favicon + link + '<\/div>\n<p>' ;\n        var snipDiv = '<\/p>\n<div id=\"evernoteBookmarkSnippet\" style=\"' + snipStyle + '\">' + snip + '<\/div>\n<p>';\n        var contDiv = '<\/p>\n<div id=\"evernoteBookmarkContent\" style=\"' + contStyle + '\">' + linkDiv + snipDiv + '<\/div>\n<p>';\n        var clearDiv = '<\/p>\n<div style=\"clear:both\"\/>'<\/p>\n<p>        var content = '<\/p>\n<div id=\"evernoteBookmarkContainer\" style=\"' + contentStyle + '\">' + titleDiv + hrDiv + imgDiv + contDiv + clearDiv + '<\/div>\n<p>';\n        return content;\n    };<\/p>\n<p>    Evernote.GlobalUtils.executeOnDomReady = function(callback) {\n        Evernote.JQuery(document).ready(function() {\n            callback();\n        });\n    };<\/p>\n<p>    Evernote.GlobalUtils.isDocumentLoaded = function(doc) {\n        return doc.readyState == \"complete\" || doc.readyState == \"interactive\";\n    };\n})();\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Global utilities.\n *\/\nEvernote.Utils = {\n    _prevTime : null,<\/p>\n<p>    getIEComputedStyle : function(elem, prop) {\n        \/\/Dean Edwards method. See first comment here: http:\/\/bit.ly\/cMSs9R<\/p>\n<p>        var value = elem.currentStyle[prop] || 0;\n        var leftCopy = elem.style.left;\n        var runtimeLeftCopy = elem.runtimeStyle.left;<\/p>\n<p>        elem.runtimeStyle.left = elem.currentStyle.left;\n        elem.style.left = (prop === \"fontSize\") ? \"1em\" : value;\n        value = elem.style.pixelLeft + \"px\";<\/p>\n<p>        elem.style.left = leftCopy;\n        elem.runtimeStyle.left = runtimeLeftCopy;\n        return value\n    },<\/p>\n<p>    sendMessageToPopup : function( message ){\n        Evernote.JQuery(\"#\" + Constants.CLIP_DIALOG_ID).trigger(message);\n    },<\/p>\n<p>    pushTimeWithPrefix : function(prefix) {\n        var time = new Date;\n        var passed;<\/p>\n<p>        time = time.getTime();\n        passed = time - this._prevTime;\n        this._prevTime = time;\n        console.log(prefix + ': ' + passed + 'ms');\n    },<\/p>\n<p>    cloneObject : function(obj){\n        if(obj == null || typeof(obj) != 'object')\n            return obj;\n        if(obj.constructor == Array)\n            return [].concat(obj);\n        var temp = {};\n        for(var key in obj)\n            temp[key] = this.cloneObject(obj[key]);\n        return temp;\n    },<\/p>\n<p>    saveSelection : function(win) {\n        Evernote.Logger.debug( \"Utils.SaveSelection()\" );\n        var selectionFinder = new Evernote.SelectionFinder(win.document);\n        selectionFinder.find( true );\n        if(selectionFinder.hasSelection()) {\n            return Evernote.Utils.cloneRange(selectionFinder.getRange());\n        }\n        return null;\n    },<\/p>\n<p>    clearSelection : function(doc) {\n        if(doc.getSelection) {\n            doc.getSelection().removeAllRanges();\n        }\n    },<\/p>\n<p>    \/**\n     * Make selection of passed range in document.\n     * @param doc - DOM object\n     * @param range - selection range\n     *\/\n    selectRange : function(doc, range) {\n        if(doc.getSelection) {\n            doc.getSelection().addRange(range);\n        }\n        else if (doc.selection && range) {\n            range.select();\n        }\n    },<\/p>\n<p>    \/**\n     * Creates copy of selection range only if it supports it, otherwise returns same range\n     * @param range - Range object\n     * @return {Range}\n     *\/\n    cloneRange : function(range) {\n        Evernote.Logger.debug(\"cloneRange: start\");\n        if(range && range.cloneRange) {\n            return range.cloneRange();\n        }\n        if(range.duplicate) {\n            Evernote.Logger.debug(\"cloneRange: result = \" + range.duplicate());\n            return range.duplicate();\n        }\n        return range;\n    },<\/p>\n<p>    \/**\n     * Checks whether selection is presented.\n     * @param win - window object that should be checked.\n     * @return true - if selection is presented, false otherwise.\n     *\/\n    hasSelection : function(win) {\n        Evernote.Logger.debug( \"Utils.hasSelection()\" );\n        var selectionFinder = new Evernote.SelectionFinder(win.document)\n        if ( selectionFinder.hasSelection() ) {\n            return true;\n        }\n        else {\n            selectionFinder.find( true );\n            return selectionFinder.hasSelection();\n        }\n    },<\/p>\n<p>    \/**\n     * Gets favicon url from the document (if any)\n     * @param doc - document to inspect.\n     * @return url to the favicon or null.\n     *\/\n    getFavIconUrl : function(doc) {\n        var links = doc.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        return null;\n    },\n\n    \/**\n     * If passed string length is more than length argument, than string is trimmed to length and dots are added\n     * (total length of the returned string does not exceed specified length).\n     * @param str - string to trim\n     * @param length - max number of characters in the string\n     * @param addition - text to be added to truncated string\n     * @return {*}\n     *\/\n    cutToLength : function(str, length, addition) {\n        if(!addition) {\n            addition = \"...\";\n        }\n        if(str.length > length) {\n            return (str.substring(0, length-3) + addition);\n        }\n        return str;\n    },<\/p>\n<p>    \/**\n     * Change new line symbol to html <br \/>\n     *\/\n    newLineToBr : function(str) {\n        return str.replace(\/(\\r\\n|\\n|\\r)\/gm, \"<br \/>\");\n    },<\/p>\n<p>    \/**\n     * Encodes html specific characters (<, >, &, etc.) in specified string\n     * @param str - string to encode.\n     * @return new string with encoded characters.\n     *\/\n    htmlEncode : function( str ) {\n        var result = \"\";\n        for ( var i = 0; i < str.length; i++ ) {\n            var charcode = str.charCodeAt( i );\n            var aChar = str[ i ];\n            if(!aChar) {\n                aChar = str.charAt(i);\n            }\n            if(charcode >= 55296 )\n                result += aChar;\n            else if ( charcode > 0x7f ) {\n                result += \"&#\" + charcode + \";\";\n            }\n            else if ( aChar == '>' ) {\n                result += \"&gt;\";\n            }\n            else if ( aChar == '<' ) {\n                result += \"&lt;\";\n            }\n            else if ( aChar == '&#038;' ) {\n                result += \"&amp;\";\n            }\n            else {\n                result += str[ i ] ? str[ i ] : str.charAt(i);\n            }\n        }\n\n        return result;\n    },\n\n    \/**\n     * Absolutize specified url by specified base.\n     * @param base - base url\n     * @param href - relative url (from base)\n     *\/\n    makeAbsolutePath : function ( base, href ) {\n        function parseURI( url ) {\n            var m = String( url ).replace( \/^\\s+|\\s+$\/g, '' ).match( \/^([^:\\\/?#]+:)?(\\\/\\\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?\/ );\n            \/\/ authority = '\/\/' + user + ':' + pass '@' + hostname + ':' port\n            return (m ? {\n                href : m[ 0 ] || '',\n                protocol : m[ 1 ] || '',\n                authority : m[ 2 ] || '',\n                host : m[ 3 ] || '',\n                hostname : m[ 4 ] || '',\n                port : m[ 5 ] || '',\n                pathname : m[ 6 ] || '',\n                search : m[ 7 ] || '',\n                hash : m[ 8 ] || ''\n            } : null);\n        }\n\n        function absolutizeURI( base, href ) {\/\/ RFC 3986\n            function removeDotSegments( input ) {\n                var output = [];\n                input.replace( \/^(\\.\\.?(\\\/|$))+\/, '' )\n                    .replace( \/\\\/(\\.(\\\/|$))+\/g, '\/' )\n                    .replace( \/\\\/\\.\\.$\/, '\/..\/' )\n                    .replace( \/\\\/?[^\\\/]*\/g, function ( p ) {\n                        if ( p === '\/..' ) {\n                            output.pop();\n                        }\n                        else {\n                            output.push( p );\n                        }\n                    } );\n                return output.join( '' ).replace( \/^\\\/\/, input.charAt( 0 ) === '\/' ? '\/' : '' );\n            }\n\n            href = parseURI( href || '' );\n            base = parseURI( base || '' );\n\n            return !href || !base ? null : (href.protocol || base.protocol) +\n                (href.protocol || href.authority ? href.authority : base.authority) +\n                removeDotSegments( href.protocol || href.authority || href.pathname.charAt( 0 ) === '\/' ? href.pathname :\n                    (href.pathname ? ((base.authority &#038;&#038; !base.pathname ? '\/' : '') +\n                        base.pathname.slice( 0, base.pathname.lastIndexOf( '\/' ) + 1 ) + href.pathname) : base.pathname) ) +\n                (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n                href.hash;\n        }\n        return absolutizeURI( base, href );\n\n    },\n\n    getNestedDocuments : function( doc ) {\n        Evernote.Logger.debug( \"Utils.getNestedDocuments()\" );\n\n        var docs = [ ];\n        try {\n            var frames = ( doc ) ? doc.getElementsByTagName( \"frame\" ) : [ ];\n            for ( var i = 0; i < frames.length; ++i ) {\n                if ( frames[ i ].contentDocument ) {\n                    docs.push( frames[ i ].contentDocument );\n                }\n            }\n\n            var iframes = ( doc ) ? doc.getElementsByTagName( \"iframe\" ) : [ ];\n            for ( i = 0; i < iframes.length; ++i ) {\n                if ( iframes[ i ].contentDocument ) {\n                    docs.push( iframes[ i ].contentDocument );\n                }\n            }\n        } catch (e) {\n            Evernote.Logger.error(\"getNestedDocuments failed with error \" + e);\n        }\n        Evernote.Logger.debug( \"Utils.getNestedDocuments() end\" );\n        return docs;\n\n    },\n\n    isSupportedUrl : function(url) {\n        return url.indexOf(\"http\") == 0;\n    },\n\n    getFontSizeInPixels : function(elementFontSize) {\n        function computedStyle(element, property){\n            var s = false;\n            if(window.getComputedStyle){\n                s = window.getComputedStyle(element, null).getPropertyValue(property);\n            } else if(element.currentStyle){\n                var p = property.split('-');\n                var str = new String('');\n                for(var i = 0; i < p.length; i++){\n                    str += (i > 0)?(p[i].substr(0, 1).toUpperCase() + p[i].substr(1)):p[i];\n                }\n                s = element.currentStyle[str];\n            }\n            return s;\n        }<\/p>\n<p>        function getPercentageSize(size) {\n            var currentFontSize = parseFloat(size);\n            var htmlFontSize = 16;\n            var htmlElement = document.getElementsByTagName(\"html\");\n            if(htmlElement && htmlElement.length > 0) {\n                var htmlComputedFontSize = computedStyle(htmlElement[0], \"font-size\");\n                if(htmlComputedFontSize && htmlComputedFontSize.indexOf(\"%\") == -1) {\n                    htmlFontSize = Evernote.Utils.getFontSizeInPixels(htmlComputedFontSize);\n                }\n            }\n            return htmlFontSize * currentFontSize \/ 100;\n        }<\/p>\n<p>        var size = elementFontSize;\n        if(size.indexOf(\"em\") > -1) {\n            var defFont = computedStyle(document.body, \"font-size\");\n            if(defFont.indexOf(\"pt\") > -1){\n                defFont = Math.round(parseInt(defFont)*96\/72);\n            } else if(defFont.indexOf(\"%\") > -1)  {\n                defFont = getPercentageSize(defFont);\n            } else{\n                defFont = parseInt(defFont);\n            }\n            size = Math.round(defFont * parseFloat(size));\n        }\n        else if(size.indexOf(\"pt\") > -1){\n            size = Math.round(parseInt(size)*96\/72)\n        } else if(size.indexOf(\"%\") > -1) {\n            size = getPercentageSize(size);\n        }\n        return parseInt(size);\n    },<\/p>\n<p>    innerWidth : function() {\n        if(window.innerWidth)\n            return window.innerWidth;<\/p>\n<p>        var doc= (document.body.clientWidth)? document.body: document.documentElement;\n        return doc.clientWidth;\n    },<\/p>\n<p>    innerHeight : function() {\n        if(window.innerHeight)\n            return window.innerHeight;<\/p>\n<p>        var doc= (document.body.clientHeight)? document.body: document.documentElement;\n        return doc.clientHeight;\n    },<\/p>\n<p>    scrollTop : function() {\n        var doc = document.body.scrollTop ? document.body : document.documentElement;\n        return doc.scrollTop;\n    },<\/p>\n<p>    scrollLeft : function() {\n        var doc = document.body.scrollLeft ? document.body : document.documentElement;\n        return doc.scrollLeft;\n    },<\/p>\n<p>    \/**\n     * Stopped propagation of keydown events for passed selector.\n     * @param selector - could be element or jquery selector.\n     *\/\n    hardInput : function(selector) {\n        this.elem = Evernote.JQuery(selector);\n        this.elem.keydown(function(e) {\n            e.stopPropagation();\n        });\n    },<\/p>\n<p>    isQuirkMode : function() {\n        return document.compatMode == \"BackCompat\" && !Evernote.BrowserDetection.isIE11();\n    },<\/p>\n<p>    isQuirkModeNew : function() {\n        return document.compatMode == \"BackCompat\" && Evernote.BrowserDetection.isLessThanIE9();\n    },<\/p>\n<p>    isInstanceOf : function(obj, type) {\n        if(obj && type) {\n            try {\n                return obj instanceof type;\n            } catch (e) {\n                return type.toString().indexOf(typeof obj) != -1;\n            }\n        }\n        return false;\n    },<\/p>\n<p>    changeBackgroundImage : function(element, localpath) {\n        if(element.style) {\n            element.style.backgroundImage = \"url('file:\/\/\/\" + localpath.replace(\/\\\\\/g, \"\/\").replace(\/\\s\/g, \"%20\") + \"')\";\n        }\n    },<\/p>\n<p>    format: function(str) {\n        var args = arguments;\n        return str.replace(\/\\{(\\d+)\\}\/g, function (m, n) { return args[(n | 0)+1]; });\n    },<\/p>\n<p>    fixIERangeObject : function(range,win) { \/\/Only for IE8 and below.\n        win=win || window;<\/p>\n<p>        if(!range) return null;\n        if(!range.startContainer && win.document.selection) { \/\/IE8 and below<\/p>\n<p>            var _findTextNode=function(parentElement,text) {\n                \/\/Iterate through all the child text nodes and check for matches\n                \/\/As we go through each text node keep removing the text value (substring) from the beginning of the text variable.\n                var container=null,offset=-1;\n                for(var node=parentElement.firstChild; node; node=node.nextSibling) {\n                    if(node.nodeType==3) {\/\/Text node\n                        var find=node.nodeValue;\n                        var pos=text.indexOf(find);\n                        if(pos==0 && text!=find) { \/\/text==find is a special case\n                            text=text.substring(find.length);\n                        } else {\n                            container=node;\n                            offset=text.length-1; \/\/Offset to the last character of text. text[text.length-1] will give the last character.\n                            break;\n                        }\n                    }\n                }\n                \/\/Debug Message\n                \/\/alert(container.nodeValue);\n                return {node: container,offset: offset}; \/\/nodeInfo\n            };<\/p>\n<p>            var rangeCopy1=range.duplicate(), rangeCopy2=range.duplicate(); \/\/Create a copy\n            var rangeObj1=range.duplicate(), rangeObj2=range.duplicate(); \/\/More copies :P<\/p>\n<p>            rangeCopy1.collapse(true); \/\/Go to beginning of the selection\n            rangeCopy1.moveEnd('character',1); \/\/Select only the first character\n            rangeCopy2.collapse(false); \/\/Go to the end of the selection\n            rangeCopy2.moveStart('character',-1); \/\/Select only the last character<\/p>\n<p>            \/\/Debug Message\n            \/\/ alert(rangeCopy1.text); \/\/Should be the first character of the selection\n            var parentElement1=rangeCopy1.parentElement(), parentElement2=rangeCopy2.parentElement();<\/p>\n<p>            \/\/If user clicks the input button without selecting text, then moveToElementText throws an error.\n            if(window.HTMLInputElement && (parentElement1 instanceof window.HTMLInputElement || parentElement2 instanceof HTMLInputElement)) {\n                return null;\n            }\n            rangeObj1.moveToElementText(parentElement1); \/\/Select all text of parentElement\n            rangeObj1.setEndPoint('EndToEnd',rangeCopy1); \/\/Set end point to the first character of the 'real' selection\n            rangeObj2.moveToElementText(parentElement2);\n            rangeObj2.setEndPoint('EndToEnd',rangeCopy2); \/\/Set end point to the last character of the 'real' selection<\/p>\n<p>            var text1=rangeObj1.text; \/\/Now we get all text from parentElement's first character upto the real selection's first character\n            var text2=rangeObj2.text; \/\/Here we get all text from parentElement's first character upto the real selection's last character<\/p>\n<p>            var nodeInfo1=_findTextNode(parentElement1,text1);\n            var nodeInfo2=_findTextNode(parentElement2,text2);<\/p>\n<p>            \/\/ todo: dirty fix\n            if (!nodeInfo1.node) {\n                nodeInfo1.node = parentElement1;\n            }<\/p>\n<p>            if (!nodeInfo2.node) {\n                nodeInfo2.node = parentElement2;\n            }<\/p>\n<p>            \/\/Finally we are here\n            range.startContainer=nodeInfo1.node;\n            range.startOffset=nodeInfo1.offset;\n            range.endContainer=nodeInfo2.node;\n            range.endOffset=nodeInfo2.offset+1; \/\/End offset comes 1 position after the last character of selection.\n        }\n        return range;\n    },<\/p>\n<p>    unionRectangles : function(rect1, rect2) {\n        var rect = {\n            top: (Math.min(rect1.top, rect2.top)),\n            bottom: (Math.max(rect1.bottom, rect2.bottom)),\n            left: (Math.min(rect1.left, rect2.left)),\n            right: (Math.max(rect1.right, rect2.right))\n        };\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;<\/p>\n<p>        return rect;\n    },<\/p>\n<p>    fixedPosition : function(win, el, topOffset, immediate) {\n        function applyPosition(elem) {\n            if(elem) {\n                var scrollPosition = win.document.documentElement.scrollTop || win.document.body.scrollTop;\n                var offset;\n                if(typeof topOffset == \"function\") {\n                    offset = topOffset();\n                } else {\n                    offset = scrollPosition + topOffset;\n                }\n                elem.animate({top: offset}, 100);\n            }\n        }<\/p>\n<p>        if(el) {\n            var elem = Evernote.JQuery(el);\n            if(Evernote.Utils.isQuirkMode())  {\n                elem.css(\"position\", \"absolute\");\n                if (win.attachEvent)\n                    win.attachEvent(\"onscroll\", function() {applyPosition(elem);});\n                else if (win.addEventListener)\n                    win.addEventListener(\"scroll\", function() {applyPosition(elem);}, false);\n                else\n                    Evernote.Logger.error( \"Utils.fixedPosition() can't attachEvent\" );\n                if(immediate) {\n                    applyPosition(elem);\n                }\n            }\n        }\n    },<\/p>\n<p>    mergeCustomComboBoxStrings : function(notebook, owner, ownedByStr, maxLen) {<\/p>\n<p>        var totalLen = notebook.length;\n        if (owner.length) {\n            \/\/ format: \"space\",\"(\",\"<owned by localize string>\",\"space\",\"<owner>\",\")\"\n            \/\/ magic number \"4\" is: \"space\",\"(\",\"space\",\")\"\n            totalLen += ownedByStr.length + owner + 4;\n        }<\/p>\n<p>        if (totalLen <= maxLen) {\n            return {\n                note: notebook,\n                own: \"\",\n                title: \"\"\n            };\n        }\n\n        var half = maxLen \/ 2 - 2;\n\n        if (owner.length == 0) {\n            return {\n                note: notebook.substr(0, half) + \"...\" + notebook.substring(notebook.length - half, notebook.length),\n                own: \"\",\n                title: notebook\n            };\n        }\n\n        var ownerFormatStr = \"(\" + ownedByStr + \" \" + owner + \")\";\n        var title = notebook + ownerFormatStr;\n        var resultString = title.substr(0, half) + \"...\" + title.substr(title.length - half);\n\n        if (notebook.length <= half) {\n            return  {\n                note: notebook,\n                own: \"...\" + title.substr(title.length - notebook.length),\n                title: notebook + \" \" + ownerFormatStr\n            };\n        }else if (ownerFormatStr <= half) {\n            return  {\n                note: notebook.substr(0, maxLen - ownerFormatStr.length) + \"...\",\n                own: ownerFormatStr,\n                title: notebook + \" \" + ownerFormatStr\n            };\n        }else {\n            return  {\n                note: resultString.substr(0, resultString.length - half),\n                own: resultString.substr(half + 3),\n                title: notebook + \" \" + ownerFormatStr\n            };\n        }\n    },\n\n    setEvernoteLogo : function(selector) {\n        var serverLocation = Evernote.Addin.getServerLocation();\n        Evernote.Logger.debug(\"Evernote server location is \" + serverLocation);\n        if (serverLocation.length &#038;&#038; serverLocation.indexOf(\"international\") == -1) {\n            var evernoteLogoEl = Evernote.JQuery(selector);\n            if (evernoteLogoEl) {\n                var imageFileName = \"oldclipper\/images\/web-clipper-logo_\" + serverLocation + \".png\";\n                this.changeBackgroundImage(evernoteLogoEl.get(0), Evernote.Addin.getPath(\"resources\") + imageFileName);\n            }\n        }\n    },\n\n    Selection : {\n        getRangeCount : function(selection) {\n            if(selection.rangeCount) {\n                return selection.rangeCount;\n            }\n            return 1;\n        },\n\n        getRangeAt : function(selection, pos) {\n            if(selection.getRangeAt) {\n                selection.getRangeAt(pos);\n            }\n            return selection;\n        },\n\n        getCommonAncestorContainer : function(range) {\n            if(range.commonAncestorContainer) {\n                return range.commonAncestorContainer;\n            }\n            else if(range.parentElement) {\n                return range.parentElement();\n            }\n            return null;\n        }\n    }\n\n};<\/script><script defer=\"\" type=\"text\/javascript\" charset=\"ANSI\">Evernote.ClipperActions = {\n    CLIP_URL : \"0\",\n    CLIP_FULL_PAGE: \"1\",\n    CLIP_ARTICLE: \"2\",\n    CLIP_SELECTION: \"3\", \/\/ Selection is not supported by default\n    CLIP_IMAGE: \"4\", \/\/ Image too\n    CLIP_SIMPLIFIED_ARTICLE: \"5\",\n    CLIP_SCREEN_SHOT: \"6\"\n};<\/p>\n<p>Evernote.ArticleSelectionOptions = {\n    ENABLED : \"0\",\n    DISABLED : \"1\",\n    ENABLED_WITHOUT_HINTS : \"2\"\n};<\/p>\n<p>Evernote.Trigger = {\n    ENABLED : true,\n    DISABLED : false\n};<\/p>\n<p>Evernote.Options = {\n    oneClickMode: false,\n    action: {\n        bydefault: \"2\",\n        lastUsedEnable: true,\n        lastUsed: \"article\"\n    },\n    tags: {\n        alwaysEnable: false,\n        alwaysData: \"\"\n    },\n    notebooks: {\n        lastUsed: -1,\n        lastUsedEnable: true,\n        bydefault: \"\"\n    },\n    skitch: {\n        lastUsedColor: \"\"\n    },\n    hints: {\n        permanentScreenCapture : true\n    },\n    postClip : {\n        show : false\n    },\n    \/**\n     * Return string representation of the object (you can use it in load method to restore object from string).\n     *\/\n    _serialize: function() {\n        \/\/return JSON.stringify(this, null, '\\t');  CNN.com has own JSON.stringify with parse errors<\/p>\n<p>        function strObj( obj ) {\n            var i = 0;\n            var optArr = [];<\/p>\n<p>            for (var prop in obj) {\n                if (obj.hasOwnProperty(prop) && typeof obj[prop] != 'function') {\n                    var value;\n                    if (typeof obj[prop] == 'object') {\n                        value = strObj(obj[prop]);\n                    } else if (typeof obj[prop] == 'string') {\n                        var tempStr = obj[prop];\n                        tempStr = tempStr.replace(\/\\\\\/g, \"\\\\\\\\\");\n                        tempStr = tempStr.replace(\/\\\"\/g, \"\\\\\\\"\");\n                        value = '\"' + tempStr + '\"';\n                    } else {\n                        value = obj[prop];\n                    }\n                    optArr[i] = '\"' + prop + '\":' + value;\n                    i++;\n                }\n            }\n            return '{' + optArr.toString() + '}';\n        }\n        return strObj(this);\n    },<\/p>\n<p>    load : function() {\n        var optionsContent = Evernote.FS.getOptionsFileContent();\n        this._load(optionsContent);\n        Evernote.Logger.debug('Load options ' + JSON.stringify(this, null, '\\t'));\n    },<\/p>\n<p>    _load : function(str) {\n        if(str) {\n            try {\n                var options;<\/p>\n<p>                options = JSON.parse(str);<\/p>\n<p>                for (var prop in options) {\n                    if (options[prop] && options.hasOwnProperty(prop)) {\n                        this[prop] = options[prop];\n                    }\n                }\n            } catch(e){\n                \/\/ ignore\n            }\n        }\n    },<\/p>\n<p>    setScreenCaptureHintNonPermanent : function(){\n        this.hints.permanentScreenCapture = false;\n        this.save();\n    },<\/p>\n<p>    setDefaultAction : function(action) {\n        this.action.bydefault = action;\n        this.setLastUsedActionDisabled();\n        this.save();\n    },<\/p>\n<p>    setDefaultNotebook : function(notebook) {\n        this.notebooks.bydefault = notebook;\n        this.setLastUsedNotebookDisabled();\n        this.save();\n    },<\/p>\n<p>    setNotebook : function(notebookUid) {\n        this.notebooks.lastUsed = notebookUid;\n        this.save();\n    },<\/p>\n<p>    setLastUsedNotebookEnabled : function() {\n        if (this.notebooks.lastUsedEnable == Evernote.Trigger.DISABLED) {\n            this.notebooks.lastUsedEnable = Evernote.Trigger.ENABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setLastUsedNotebookDisabled : function() {\n        if (this.notebooks.lastUsedEnable == Evernote.Trigger.ENABLED) {\n            this.notebooks.lastUsedEnable = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setLastUsedAction : function(action) {\n        this.action.lastUsed = action;\n        this.save();\n    },<\/p>\n<p>    setLastUsedActionEnabled : function () {\n        if (this.action.lastUsedEnable == Evernote.Trigger.DISABLED) {\n            this.action.lastUsedEnable = Evernote.Trigger.ENABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setLastUsedActionDisabled : function() {\n        if (this.action.lastUsedEnable == Evernote.Trigger.ENABLED) {\n            this.action.lastUsedEnable = Evernote.Trigger.DISABLED;\n        }\n    },<\/p>\n<p>    setOneClickClipping : function(condition) {\n        if (condition) {\n            this.oneClickMode = Evernote.Trigger.ENABLED;\n        } else {\n            this.oneClickMode = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setAlwaysTagsEnabled : function (condition) {\n        if (condition) {\n            this.tags.alwaysEnable = Evernote.Trigger.ENABLED;\n        } else {\n            this.tags.alwaysEnable = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setAlwaysTagsString : function (str) {\n        this.tags.alwaysData = str;\n        this.save();\n    },<\/p>\n<p>    setPostClipDialogEnabled : function () {\n        if (this.postClip.show == Evernote.Trigger.DISABLED) {\n            this.postClip.show = Evernote.Trigger.ENABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setPostClipDialogDisabled : function () {\n        if (this.postClip.show == Evernote.Trigger.ENABLED) {\n            this.postClip.show = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },<\/p>\n<p>    setLastUsedSkitchColor : function(color) {\n        this.skitch.lastUsedColor = color;\n        this.save();\n    },<\/p>\n<p>    save : function() {\n        Evernote.Logger.debug('Save options: ' + JSON.stringify(this, null, '\\t'));\n        var jsonSer = this._serialize();\n        Evernote.FS.writeOptionsToFile(jsonSer);\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.BrowserDetection = {\n    isIE11 : function() {\t\t\t\t\n        return navigator.userAgent.indexOf(\"Trident\/7.0\") != -1       \n    },<\/p>\n<p>\tisIE10 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 10\") != -1;\n    },<\/p>\n<p>    isIE7 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 7.0\") != -1 && navigator.userAgent.indexOf(\"Trident\/7.0\") == -1;\n    },<\/p>\n<p>    isIE8 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 8.0\") != -1 && navigator.userAgent.indexOf(\"Trident\/7.0\") == -1;\n    },<\/p>\n<p>    isIE9 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 9.0\") != -1 && navigator.userAgent.indexOf(\"Trident\/7.0\") == -1;\n    },<\/p>\n<p>    isLessThanIE9 : function() {\n        return Evernote.BrowserDetection.isIE7() || Evernote.BrowserDetection.isIE8()\n    },<\/p>\n<p>\tisIE10orGreater : function() {\n\t\treturn Evernote.BrowserDetection.isIE10() || Evernote.BrowserDetection.isIE11()\n\t}\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Node = {\n    ELEMENT_NODE : 1,\n    TEXT_NODE : 3\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Share = {\n    _DEFAULT_WIDTH : 650,\n    _DEFAULT_HEIGHT : 650,\n    _DEFAULT_TYPE : 'popup',<\/p>\n<p>    _openWindow : function( url, width, height ) {\n        var w = width || this._DEFAULT_WIDTH;\n        var h = height || this._DEFAULT_HEIGHT;\n        var t = this._DEFAULT_TYPE;<\/p>\n<p>        var params = 'width=' + w + ',height=' + h + ',type=' + t + ',left=200,top=200,resizable=yes';<\/p>\n<p>        Evernote.Logger.debug('Open ' + url + ' with params: ' + params);\n        window.open(url, null, params);\n    },<\/p>\n<p>    toSocial : function ( id, link , title) {\n        Evernote.Logger.debug('Evernote.Share.toSocial ' + id + ' and link: ' + link + ', title: ' + title);\n        var shareUrl;<\/p>\n<p>        if ( id == 'facebook') {\n            shareUrl = \"https:\/\/www.facebook.com\/sharer\/sharer.php?u=\" + encodeURIComponent(link);\n            this._openWindow( shareUrl, 626, 436 );\n        } else if (id == 'twitter') {\n            shareUrl = \"https:\/\/twitter.com\/intent\/tweet?text=\" + encodeURIComponent(title)\n                + \"&url=\" + encodeURIComponent(link);\n            this._openWindow( shareUrl, 550, 420 );\n        } else if (id == 'linkedin') {\n            shareUrl = \"http:\/\/www.linkedin.com\/shareArticle?mini=true&url=\" + encodeURIComponent(link)\n                + \"&title=\" + encodeURIComponent(title);\n            this._openWindow( shareUrl, 900, 570 );\n        } else if (id == 'weibo') {\n            shareUrl = \"http:\/\/service.weibo.com\/share\/share.php?url=\" + encodeURIComponent(link)\n                + \"&title=\" + encodeURIComponent(title);\n            this._openWindow( shareUrl, 650, 650 );\n        }\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.PostClipPopup = function(doc) {<\/p>\n<p>    var elem = Evernote.JQuery('#' + Constants.POST_CLIP_DIALOG_ID);\n    var clipboard_container = elem.find('#' + 'evn-clipboardCopy-container');<\/p>\n<p>    var titleField = elem.find('.noteTitle');\n    var link = Evernote.pageInfo.getUrl();\n    var shareTitle = 'error';<\/p>\n<p>    \/\/ subscribe to response from addin\n    Evernote.ResponseReceiver.subscribe(this);<\/p>\n<p>    var _title = '';\n    var _notebook = '';\n    var clipping_message = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIPPING);\n    var clipped_message = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIPPED);<\/p>\n<p>    var message = elem.find('.clippedMessage');\n    var closeButton = elem.find('.closeCross');\n    var openButton  = elem.find('#openButton');\n    var shareButton  = elem.find('#shareButton');\n    var shareIcons = elem.find('.shareButton');<\/p>\n<p>    var cbInput = elem.find('.evn-pcp-clipboard-input');\n    var cbMessage = elem.find('.evn-pcp-clipboard-message');\n    var cbButton = elem.find('.evn-pcp-clipboard-button');<\/p>\n<p>    var errorLink = elem.find('#evn-show-logs');\n    var errorMsg = elem.find('.evn-error-desc');<\/p>\n<p>    function showLogs() {\n        var logFile = Evernote.Addin.getPath(\"logfile\");\n        Evernote.Addin.openLocalFile(logFile, BrowserNavConstants.NAVOPENNEWTAB);\n    }<\/p>\n<p>    function modifyToCurrentIE() {\n        if (document.documentMode == '9') {\n            elem.addClass('evn-iexplorer9');\n        } else if (document.documentMode == '7' || Evernote.BrowserDetection.isIE7()) {\n            elem.addClass('evn-iexplorer7');\n        }\n    }<\/p>\n<p>    function finishPostClip () {\n        endProcessingAndClose();\n\/\/        if (Evernote.Options.postClip.show == true) {\n\/\/            endProcessing();\n\/\/        } else {\n\/\/            endProcessingAndClose();\n\/\/        }\n    }<\/p>\n<p>    function localize() {\n        Evernote.GlobalUtils.localize(elem.get(0));\n    }<\/p>\n<p>    function copyToClipboard(){\n        var clipSucceed = window.clipboardData.setData('Text', link);<\/p>\n<p>        var isAllowed = window.clipboardData.getData('Text');\n        if (isAllowed == \"\") { \/\/ Could be empty, or failed\n            \/\/ Verify failure\n            if (!window.clipboardData.setData('Text', 'test_string'))\n                isAllowed = null;\n        }<\/p>\n<p>        if (clipSucceed && isAllowed) {\n            clipboard_container.addClass('evn-success');\n            cbMessage.text(Evernote.Addin.getLocalizedMessage(Evernote.Messages.URL_COPIED));\n        } else {\n            clipboard_container.addClass('evn-failed');\n            cbMessage.text(Evernote.Addin.getLocalizedMessage(Evernote.Messages.DISABLED));\n        }<\/p>\n<p>    }<\/p>\n<p>    function handleShareIconClick ( evt ) {\n        var id = evt.srcElement.id || Evernote.JQuery(evt.target).closest('table').attr('id');<\/p>\n<p>        if (id == 'clipboard') {\n            elem.addClass('evn-clipboard-mode');\n        } else {\n            Evernote.Share.toSocial( id , link, shareTitle);\n        }\n    }<\/p>\n<p>    function fillOutPopup(title, notebook) {\n        _title = title;\n        _notebook = notebook;<\/p>\n<p>        titleField.html(title);\n        cbInput.val(link);\n        shareTitle = title;\n    }<\/p>\n<p>    function renderErrorMessage( error ) {<\/p>\n<p>        if (error.code == Evernote.ErrorCodes.AUTHENTICATION_ERROR) {\n            errorMsg.html(error.message);\n        }<\/p>\n<p>        elem.removeClass('processing');\n        elem.addClass('evn-error-mode');\n    }<\/p>\n<p>    function processError(error) {\n        renderErrorMessage(error);\n        elem.show();\n        return true;\n    }<\/p>\n<p>    function endProcessing() {\n        elem.removeClass('processing');\n        Evernote.ClearlyController.removeHighlighted();\n        message.html(clipped_message + ' ' + _notebook);\n    }<\/p>\n<p>    function endProcessingAndClose() {\n        elem.removeClass('processing').addClass('withoutShare');\n        Evernote.ClearlyController.removeHighlighted();\n        message.html(clipped_message + ' ' + _notebook);<\/p>\n<p>        setTimeout(function(){\n            hide();\n        }, 1000);\n    }<\/p>\n<p>    function setProcessing() {\n        elem.addClass('processing');\n        message.html('<span class=\"evn-processing-status\">' + clipping_message + '<\/span>' + _title);\n    }<\/p>\n<p>    function show() {\n        setProcessing();\n        addListeners();\n        elem.show();\n        elem.addClass('visible');\n    }<\/p>\n<p>    function hide() {\n        removeListeners();\n        elem.hide();\n        elem.removeClass('visible');\n        elem.removeClass('evn-error-mode');\n        elem.removeClass('withoutShare');\n        elem.removeClass('evn-clipboard-mode');\n        clipboard_container.removeClass();\n        cbMessage.text(Evernote.Addin.getLocalizedMessage(Evernote.Messages.SOURCE_LINK));\n    }<\/p>\n<p>    function onClickOutside(e) {\n        if (Evernote.JQuery(e.target).closest('#' + Constants.POST_CLIP_DIALOG_ID).length == 0) {\n            hide();\n        }\n    }<\/p>\n<p>    function onKeyPressed(e) {\n        if (e.keyCode == 27) {\n            hide();\n        }\n    }<\/p>\n<p>    function onDataReceived(response) {\n        if (response.type == 'clipped') {\n            finishPostClip();\n        }\n    }<\/p>\n<p>    function addListeners() {\n        Evernote.JQuery(document).on('click', onClickOutside);\n        Evernote.JQuery(document).on('keydown',onKeyPressed);\n    }<\/p>\n<p>    function removeListeners() {\n        Evernote.JQuery(document).off('click',onClickOutside);\n        Evernote.JQuery(document).off('keydown',onKeyPressed);\n    }<\/p>\n<p>    closeButton.click(hide);\n    shareIcons.click(handleShareIconClick);\n    cbButton.click(copyToClipboard);<\/p>\n<p>    errorLink.click(showLogs);<\/p>\n<p>    elem.on('errorShown', hide);<\/p>\n<p>    localize();\n    modifyToCurrentIE();<\/p>\n<p>    this.fillOutPopup = fillOutPopup;\n    this.endProcessing = endProcessing;\n    this.endProcessingAndClose = endProcessingAndClose;\n    this.show = show;\n    this.hide = hide;<\/p>\n<p>    this.processError = processError;\n    this.onDataReceived = onDataReceived;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Messages = {\n    CLIP_SELECTION: 113,\t\t\t\/\/ Save Selection\n    CLIP_URL: 115,\t\t\t\t\t\/\/ Save URL\n    CLIP_FULL_PAGE: 116,\t\t\t\/\/ Save Full Page\n    CLIP_ARTICLE: 117,\t\t\t\t\/\/ Save Article\n    ENTER: 118,\t\t\t\t\t\t\/\/ enter\n    OPTIONS: 119,\t\t\t\t\t\/\/ Options\n    DEFAULT_ACTION: 120,\t\t\t\/\/ Default action\n    ARTICLE_SELECTION: 121,\t\t\t\/\/ Article selection\n    ENABLED: 122,\t\t\t\t\t\/\/ Enabled\n    DISABLED: 123,\t\t\t\t\t\/\/ Disabled\n    ENABLED_NO_HINTS: 124,\t\t\t\/\/ Enabled (no hints)\n    ARTICLE_SELECTION_HINT: 125,\t\/\/ When enabled, you can modify article selection using your keyboard before make a clip. Enabling with \"no hints\" will prevent displaying the informational message. When disabled - you cannot make any adjustments to the automatic article selection.\n    EXPAND_SELECTION: 126,\t\t\t\/\/ expand selection\n    SHRINK_SELECTION: 127,\t\t\t\/\/ shrink selection\n    MOVE_SELECTION: 128,\t\t\t\/\/ move selection\n    CLIP_ARTICLE_HINT: 129,\t\t\t\/\/ clip article\n    CLIPPING: 130,\t\t\t\t\t\/\/ Clipping\n    UNSUPPORTED_SCHEMA: 131,\t\t\/\/ Clipping from this location is not supported.\n    UNTITLED_NOTE: 132,\t\t\t\t\/\/ Untitled note\n    ADD_TAGS: 133,\t\t\t\t\t\/\/ Add tags\n    ADD_REMARK: 134,\t\t\t\t\/\/ Add remark\n    OWNED_BY: 135,\t\t\t\t\t\/\/ owned by\n    SHARED_NOTEBOOKS: 136,\t\t\t\/\/ Shared Notebooks\n    BUSINESS_NOTEBOOKS: 137,\t\t\/\/ Business Notebooks\n    LOADING_TAGS: 140,\t\t\t\t\/\/ Loading tags...\n    LOGIN_FAILED: 141,\t\t\t\t\/\/ You need to be signed in to Evernote desktop to clip webpages\n    CLOSE: 142,\t\t\t\t\t\t\/\/ \uff90\u5398\uff70\uff90\uff7a\uff91\u0080\uff91\u9326\u3073\u30fb\n    LOADING_NOTEBOOKS: 146,\t\t\t\/\/ \uff90\uff77\uff90\uff70\uff90\uff73\uff91\u0080\uff91\u03c3\uff76\uff90\uff70\uff91\u30fb\uff90\uff71\uff90\uff7b\uff90\uff7e\uff90\uff7a\uff90\uff7d\uff90\uff7e\uff91\u3073\u30fb..\n    CLIP_FAILED_TITLE: 147,\t\t\t\/\/ \uff90\u65b7\uff75 \uff91\u03c3\uff74\uff90\uff70\uff90\uff7b\uff90\uff7e\uff91\u30fb\u30fb\uff91\u30fb\uff7e\uff91\u30fb\u0080\uff90\uff70\uff90\uff7d\uff90\uff78\uff91\u3073\u30fb\uff90\uff77\uff90\uff70\uff90\uff7c\uff90\uff75\uff91\u3072\uff7a\uff91\u30fb\n    VERSION: 148,\t\t\t\t\t\/\/ \uff90\u6f2c\uff75\uff91\u0080\uff91\u30fb\uff78\uff91\u30fb\n    LIMIT_TAGS: 150,\t\t\t\t\/\/ You've entered the maximum number of tags\n    CLIP_HEADER: 151,\t\t\t\t\/\/ Clip\n    SKITCH_HEADER: 152,\t\t\t\t\/\/ Annotate\n    ORGANIZE_HEADER: 153,\t\t\t\/\/ Organize\n    SAVE_BUTTON: 154,\t\t\t\t\/\/ Save\n    CLIP_SCREEN_SHOT: 155,\t\t\t\/\/ Screenshot\n    NOTEBOOK_SEARCH: 156,\t\t\t\/\/ Find a notebook\n    SHARE_BUTTON: 157,\t\t\t\t\/\/ Share\n    ARTICLE: 158,\t\t\t\t\t\/\/ Article\n    SIMPLIFIED_ARTICLE: 159,\t\t\/\/ Simplified Article\n    SELECTION: 160,\t\t\t\t\t\/\/ Selection\n    URL: 161,\t\t\t\t\t\t\/\/ Bookmark\n    SCREENSHOT: 162,\t\t\t\t\/\/ Screen Capture\n    SOURCE_LINK: 163,\t\t\t\t\/\/ Source link\n    URL_COPIED: 164,\t\t\t\t\/\/ Url copied to clipboard\n    FULL_PAGE: 165,\t\t\t\t\t\/\/ Full Page\n    TAGS : 166,                     \/\/ Tag selection\n    CLIP_ACTION : 167,              \/\/ Default clip action\n    LOADING : 168,                  \/\/ Loading...\n    ALWAYS_START_IN : 169,          \/\/ Always start in\n    ALWAYS_ADD_TAGS : 170,          \/\/ Always tag with\n    LAST_USED_ACTION : 171,         \/\/ Last Used Action\n    COPYRIGHT : 172,                \/\/ Copyright 2009-2013 Evernote Corporation. All rights reserved.\n    PRIVACY_POLICY : 173,           \/\/ Privacy Policy\n    TERMS_OF_SERVICE : 174,         \/\/ Terms of Service\n    EXPAND : 175,                   \/\/ Expand the article selection\n    CONTRACT : 176,                 \/\/ Contract the article selection\n    ADD_TAG : 177,                  \/\/ Add tag\n    LIMIT_TAGS_SHORT : 178,         \/\/ Max 20 tags\n    TAGS_NOT_SUPPORTED : 179,       \/\/ Tags not supported\n    DONE : 180,                     \/\/ Done\n    ARROW :181,                     \/\/ Shape tool\n    COLOR :182,                     \/\/ Colors\n    STAMP_REJECT :183,              \/\/ Stamp tool\n    CROP :184,                      \/\/ Crop\n    HIGHLIGHTER :185,               \/\/ HTML Highlighter\n    MARKER :186,                    \/\/ Marker tool\n    PIXELATE :187,                  \/\/ Pixelator tool\n    TEXT :188,                      \/\/ Type tool\n    ZOOM_IN :189,                   \/\/ Zoom In\n    ZOOM_OUT :190,                  \/\/ Zoom Out\n    ZOOM_RESET :191,                \/\/ Reset\n    ZOOM_TIP :192,                  \/\/ Tip: Hold Ctrl while clicking to pan\n    CROP_APPLY :193,                \/\/ Apply\n    CROP_CANCEL :194,               \/\/ Cancel\n    SCREENSHOT_CAPTURED :195,       \/\/ Screenshot captured\n    SAVING : 196,                   \/\/ Saving...\n    IMAGE_HIGHLIGHTER : 197,        \/\/ Image highlighter\n    FORBIDDEN : 198,                \/\/ Not allowed for this action\n    SETTINGS : 200,                 \/\/ Settings\n    ONE_CLICK_CLIPPING: 201,        \/\/ 1-click Clipping\n    ONE_CLICK_CLIPPING_DESC: 202,   \/\/ ~~~ Put description here ~~~\n    NOTEBOOK_SELECTION: 203,        \/\/ Notebook Selection\n    LAST_USED_NOTEBOOK: 204,        \/\/ Last used notebook\n    SCREEN_CAPTURE_TOAST: 205,      \/\/ Single <b>click<\/b> to capture full screen<br \/>or <b>drag<\/b> a region and release\n    CLIPPED: 206,                   \/\/ Clipped to\n    TAKE_A_SCREENSHOT: 207,         \/\/ Take a Screenshot\n    DEFAULT_NOTEBOOK: 208,          \/\/ default notebook\n    ERROR_LOGS: 209,                \/\/ Error logs\n    VIEW_LOGS: 210,                 \/\/ View Logs\n    LOGS_DESCRIPTION: 211,          \/\/ If you contact Evernote Support, they may ask you to view these logs to help diagnose a problem\n    COPY_TO_CLIPBOARD: 212,         \/\/ Copy to clipboard\n    AFTER_CLIP: 213,                \/\/ After clip\n    SHOW_POST_CLIP_DESC: 214,       \/\/ Show successful clip dialog\n    CLOSE_POST_CLIP_DESC: 215,      \/\/ Automatically close clipper\n    LEGAL: 216,                     \/\/ Legal\n    LEGAL_HEADER: 217,              \/\/ Web Clipper uses the following open source software\n    CLIP_ERROR: 218,                \/\/ Cannot save clip\n    VIEW_REPORT: 219                \/\/ View Crash Report\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ResponseReceiver = {\n    parsers : [],\n    receivers : [],<\/p>\n<p>    onResponse: function(str) {\n        Evernote.Logger.debug(\"Response received\" + str);\n        for(var i = 0; i < Evernote.ResponseReceiver.parsers.length; i++) {\n            if(Evernote.ResponseReceiver.parsers[i].canParse &#038;&#038; Evernote.ResponseReceiver.parsers[i].canParse(str)) {\n                Evernote.ResponseReceiver.notify(Evernote.ResponseReceiver.parsers[i].parse(str));\n            }\n        }\n    },\n\n    registerParser: function(parser) {\n        Evernote.ResponseReceiver.parsers.push(parser);\n    },\n\n    subscribe: function(receiver) {\n        Evernote.ResponseReceiver.receivers.push(receiver);\n    },\n\n    notify: function(data) {\n        for(var i=0; i < Evernote.ResponseReceiver.receivers.length; i++) {\n            Evernote.ResponseReceiver.receivers[i].onDataReceived(data);\n        }\n    }\n};\n\nfunction EvernoteGlobalReceiver(str) {\n    Evernote.ResponseReceiver.onResponse(str);\n}\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ProcessIDResponseParser = {\n    parse : function(str) {\n        Evernote.Logger.debug(\"ProcessIDResponseParser: response\" + str);\n        var xmlDom = Evernote.JQuery(str);\n        var result = xmlDom.attr(\"process_id\");\n        return new Evernote.Response(\"process_id\", result);\n    },<\/p>\n<p>    canParse: function(str) {\n        var request = Evernote.JQuery(str).attr(\"request\");\n        return request && (request == \"get_process_id\");\n    }\n};<\/p>\n<p>Evernote.ResponseReceiver.registerParser(Evernote.ProcessIDResponseParser);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.NotebookResponseParser = {\n    parse : function(str) {\n        str = Evernote.GlobalUtils.decodeXML(str);\n        var xmlDom = Evernote.JQuery(str);\n        var result = [];\n        var type = xmlDom.attr(\"type\");\n        if(xmlDom.length == 1) {\n            var notebooks = xmlDom.find(\"notebook\");\n            for(var i = 0; i < notebooks.length; i++) {\n                var notebook = Evernote.JQuery(notebooks[i]);\n                var notebookObj = Evernote.NotebookResponseParser.createNotebook(type,notebook);\n                if(notebookObj) {\n                    result.push(notebookObj);\n                }\n            }\n        }\n        else if(xmlDom.length > 1) {\n            for(var i = 1; i < xmlDom.length - 1; i += 2) {\n                var notebook = Evernote.JQuery(xmlDom[i]);\n                var notebookObj = Evernote.NotebookResponseParser.createNotebook(type, notebook);\n                if(notebookObj) {\n                    result.push(notebookObj);\n                }\n            }\n        }\n        return new Evernote.Response(\"notebooks\", result);\n    },\n\n    createNotebook : function(type, notebook) {\n        var notebookType;\n        var notebookTypeText;\n        switch (type) {\n            case \"personal\":\n                notebookType = Evernote.NotebookTypes.PERSONAL;\n                notebookTypeText = Evernote.NotebookTypes.PERSONAL_TEXT;\n                break;\n            case \"business\":\n                notebookType = Evernote.NotebookTypes.BUSINESS;\n                notebookTypeText = Evernote.NotebookTypes.BUSINESS_TEXT;\n                break;\n            case \"linked\":\n                notebookType = Evernote.NotebookTypes.LINKED;\n                notebookTypeText = Evernote.NotebookTypes.LINKED_TEXT;\n                break;\n        }\n        var hidden = false;\n        var writableAttrValue = notebook.attr(\"writable\");\n\n        if (notebookType == Evernote.NotebookTypes.BUSINESS) {\n            return null\n        }\n\n        if(notebookType == Evernote.NotebookTypes.LINKED) {\n            var business = notebook.attr(\"business\");\n\n            if(business &#038;&#038; ((business | 0) == 1)) {\n                notebookType = Evernote.NotebookTypes.BUSINESS;\n                notebookTypeText = Evernote.NotebookTypes.BUSINESS_TEXT;\n            }\n        }\n\n        if(notebookType == Evernote.NotebookTypes.LINKED || notebookType == Evernote.NotebookTypes.BUSINESS) {\n            if(!writableAttrValue || (writableAttrValue | 0) != 1) {\n                if(notebookType == Evernote.NotebookTypes.LINKED)\n                    return null;\n                else {\n                    hidden = true;\n                }\n            }\n        }\n\n        var owner = notebook.attr(\"owner\");\n        if (owner &#038;&#038; owner == Evernote.evernotePopup._user)\n            owner = undefined;\n\n        return new Evernote.Notebook(\n            notebookType,\n            notebook.attr(\"name\"),\n            notebook.attr(\"uid\"),\n            notebook.attr(\"stack\"),\n            owner,\n            hidden,\n            notebookTypeText\n        );\n    },\n\n    canParse: function(str) {\n        var request = Evernote.JQuery(str).attr(\"request\");\n        return (request &#038;&#038; (request == \"get_notebooks\"));\n    }\n};\n\nEvernote.ResponseReceiver.registerParser(Evernote.NotebookResponseParser);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.AddNoteResponseParser = {\n    parse : function(str) {\n        Evernote.Logger.debug(\"AddNoteResponseParser: response\" + str);\n        var xmlDom = Evernote.JQuery(str);\n        var result = xmlDom.attr(\"notebook_name\");\n        return new Evernote.Response(\"clipped\", result);\n    },<\/p>\n<p>    canParse: function(str) {\n        var request = Evernote.JQuery(str).attr(\"request\");\n        return request && (request == \"add_note\");\n    }\n};<\/p>\n<p>Evernote.ResponseReceiver.registerParser(Evernote.AddNoteResponseParser);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ErrorResponseParser = {<\/p>\n<p>    parse : function(str) {\n        Evernote.Logger.warn(\"Received error \" + str);\n        var error = Evernote.JQuery(str);\n        var errorCode = error.attr(\"code\");\n        var errorMessage = null;\n        var problem = null;\n        if(error.length == 1) {\n            var problems = error.find(\"problem\");\n            if(problems && problems.length > 0) {\n                problem = Evernote.JQuery(problems[0]);\n            }\n        }\n        else if(error.length > 2) {\n            errorMessage = error[2].toString();\n        }\n        if(problem) {\n            errorMessage = problem.text();\n        } else if(!errorMessage) {\n            errorMessage = error.attr(\"details\");\n        }\n        switch (errorCode) {\n            case Evernote.ErrorCodes.AUTHENTICATION_ERROR :\n                errorMessage = Evernote.Addin.getLocalizedMessage(Evernote.Messages.LOGIN_FAILED);\n                break;\n            case Evernote.ErrorCodes.CLIP_ERROR :\n                errorMessage = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIP_FAILED_TITLE) + \"\\n\" + errorMessage;\n        }\n        var msg = {\n            message: errorMessage,\n            code: errorCode\n        };<\/p>\n<p>        return new Evernote.Response(\"error\", msg);\n    },<\/p>\n<p>    canParse: function(str) {\n        var request = Evernote.JQuery(str).get(0);\n        return (request && (request.nodeName == \"ERROR\"));\n    }\n};<\/p>\n<p>Evernote.ResponseReceiver.registerParser(Evernote.ErrorResponseParser);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ErrorHandler = {<\/p>\n<p>    getHandler: function() {\n        return [Evernote.Addin, Evernote.evernotePopup, Evernote.evernotePostClipPopup, Evernote.AlertErrorHandler];\n    },<\/p>\n<p>    onDataReceived : function(response) {\n        if(response.type) {\n            if(response.type == \"error\") {\n                this.notifyHandlers(response.data);<\/p>\n<p>            }\n        }\n    },<\/p>\n<p>    notifyHandlers : function(error) {\n        for(var i = 0; i < this.getHandler().length; i++) {\n            var handler = this.getHandler()[i];\n            if(handler &#038;&#038; handler.processError &#038;&#038; handler.processError(error)) {\n                return;\n            }\n        }\n    }\n};\n\nEvernote.ResponseReceiver.subscribe(Evernote.ErrorHandler);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Response = function(type, data) {\n    this.type = type;\n    this.data = data;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.FS = {\n    _addon : null,<\/p>\n<p>    init : function(addon) {\n        this._addon = addon;\n    },<\/p>\n<p>    \/**\n     * Write content to the specified path.\n     * @param content - content, that should be written to\n     *\/\n    writeOptionsToFile : function(content) {\n        if (!this._addon)\n            return;\n        try {\n            this._addon.WriteOptionsContent(content );\n        } catch (e) {\n            Evernote.Logger.error( \"FS.writeOptionsToFile() failed \" + e );\n        }\n    },<\/p>\n<p>    \/**\n     * Read content of the file specified by path.\n     * @return {string} - content of the file\n     *\/\n    getOptionsFileContent : function() {\n        if (!this._addon)\n            return null;\n        try {\n            return this._addon.ReadOptionsContent();\n        } catch (e) {\n            Evernote.Logger.error( \"FS.getOptionsFileContent() failed \" + e );\n        }\n        return null;\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/\/\"use strict\";<\/p>\n<p>Evernote.AbstractElementSerializer = function AbstractElementSerializer( node, nodeStyle ) {\n    this.initialize( node, nodeStyle );\n};<\/p>\n<p>Evernote.AbstractElementSerializer.isResponsibleFor = function( \/*navigator*\/ ) {\n    return false;\n};<\/p>\n<p>Evernote.AbstractElementSerializer.prototype._node = null;\nEvernote.AbstractElementSerializer.prototype._nodeStyle = null;<\/p>\n<p>Evernote.AbstractElementSerializer.prototype.handleInheritance = function( child\/*, parent *\/) {\n    Evernote.ElementSerializerFactory.ClassRegistry.push( child );\n};<\/p>\n<p>Evernote.AbstractElementSerializer.prototype.initialize = function( node, nodeStyle ) {\n    this._node = node;\n    this._nodeStyle = nodeStyle;\n};<\/p>\n<p>Evernote.AbstractElementSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    return \"\";\n};<\/p>\n<p>Evernote.AbstractElementSerializer.prototype.getImageUrl = function() {\n    return \"\";\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/\/\"use strict\";<\/p>\n<p>Evernote.ElementSerializerFactory = {\n    getImplementationFor : function( node ) {\n        for ( var i = 0; i < this.ClassRegistry.length; ++i ) {\n            if ( this.ClassRegistry[ i ].isResponsibleFor( node ) ) {\n                return this.ClassRegistry[ i ];\n            }\n        }\n\n        return null;\n    }\n};\n\nEvernote.ElementSerializerFactory.ClassRegistry = [ ];\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/\/\"use strict\";<\/p>\n<p>Evernote.ClipStylingStrategy = function ClipStylingStrategy( ) {\n    this.initialize( );\n};<\/p>\n<p>Evernote.ClipStylingStrategy.prototype.initialize = function( ) {<\/p>\n<p>};<\/p>\n<p>Evernote.ClipStylingStrategy.prototype.styleForNode = function(  \/*node, root, fullPage, clipStyleType*\/ ) {\n    return null;\n};<\/p>\n<p>Evernote.ClipStylingStrategy.prototype.getNodeView = function ( node ) {\n    var doc = node.ownerDocument;\n    return (doc.defaultView) ? doc.defaultView : null;\n};<\/p>\n<p>Evernote.ClipStylingStrategy.prototype.getNodeStyle = function( node, filterFn, pseudo ) {\n    Evernote.Logger.debug( \"ClipStylingStrategy.getNodeStyle()\" );<\/p>\n<p>    var style = new Evernote.ClipStyle();\n    if ( pseudo != \"\" ) {\n        return style;\n    }<\/p>\n<p>    if ( node && typeof node.nodeType == 'number' && node.nodeType == 1 ) {\n        var view = this.getNodeView( node );\n        style = new Evernote.ClipStyle( Evernote.ElementExtension.getComputedStyle( node, null, view ), filterFn );\n    }<\/p>\n<p>    return style;\n};<\/p>\n<p>Evernote.ClipStyleType = {\n    NodeStyle : 0x01,\n    InheritedFontStyle: 0x02,\n    InheritedBgStyle: 0x04,\n    AllStyle : 0x01 | 0x02 | 0x04,\n    Default : 0x01 | 0x02\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\"><\/p>\n<p>Evernote.ClipFullStylingStrategy = function ClipFullStylingStrategy( ) {\n    this.initialize( );\n};<\/p>\n<p>Evernote.inherit( Evernote.ClipFullStylingStrategy, Evernote.ClipStylingStrategy, true );<\/p>\n<p>Evernote.ClipFullStylingStrategy.prototype.styleForNode = function ( node, root, fullPage, clipStyleType ) {\n    Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode()\" );<\/p>\n<p>    if ( clipStyleType == null ) {\n        clipStyleType = Evernote.ClipStyleType.Default;\n    }<\/p>\n<p>    var bodyStyles = new Evernote.ClipStyle( [ ], function ( prop, value ) {\n        return value != \"\"\n    } );\n    var inhFontStyles = new Evernote.ClipStyle( [ ] );\n    var inhBgStyles = [ ];<\/p>\n<p>    if ( (clipStyleType & Evernote.ClipStyleType.NodeStyle) == Evernote.ClipStyleType.NodeStyle ) {\n        Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): get node style\" );\n        try {\n            if ( node.nodeName.toLowerCase() == \"body\" ) {\n                for ( var attrName in Evernote.ClipStyle.STYLE_ATTRIBUTES ) {\n                    if ( Evernote.ElementExtension.hasAttribute(node, attrName) ) {\n                        var cssPropName = Evernote.ClipStyle.STYLE_ATTRIBUTES[ attrName ];\n                        var style = { };\n                        style[ cssPropName ] = node.getAttribute( attrName );\n                        bodyStyles.addStyle( style );\n                    }\n                }\n            }\n        } catch(e) {\n            Evernote.Logger.error(\"ClipFullStylingStrategy.styleForNode failed to get attributes from body due to error \" + e);\n        }\n        var evaluatedStyles = this.getNodeStyle( node );\n        if ( node.nodeName.toLowerCase() == \"table\" && !evaluatedStyles.getStyle( \"font-size\" ) ) {\n            evaluatedStyles.addStyle( {\"font-size\":\"1em\"} );\n        }<\/p>\n<p>        if ( node.nodeName.toLowerCase() == \"img\" ) {\n            style = new Evernote.ClipStyle( Evernote.ElementExtension.getComputedStyle( node, null, this.getNodeView( node ) ), function ( prop, value ) {\n                return value != \"\"\n            } );\n            evaluatedStyles.addStyle( { height:style.getStyle( \"height\" ) } );\n            evaluatedStyles.addStyle( { width:style.getStyle( \"width\" ) } );\n        }<\/p>\n<p>        if ( evaluatedStyles.getStyle( \"background-image\" ) ) {\n            var regExp = \/url\\((.*?)\\)\/;\n            evaluatedStyles.addStyle( { \"background-image\": Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( node, null, this.getNodeView( node ) ),  Evernote.IEStylePropertiesMapping.getPropertyNameFor(\"background-image\") ).replace( regExp, \"url('$1')\").replace(\/('\")|(\"')|('')\/g, \"'\")} );\n        }<\/p>\n<p>        if ( evaluatedStyles.getStyle( \"height\" ) == \"100%\" && Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( node, null, this.getNodeView( node ) ), \"height\" ) == \"0px\" ) {\n            evaluatedStyles.addStyle( { height:\"0px\" } );\n        }\n        bodyStyles.mergeStyle( evaluatedStyles, true );\n    }<\/p>\n<p>    if ( node == root && !fullPage ) {\n        if ( (clipStyleType & Evernote.ClipStyleType.InheritedFontStyle) == Evernote.ClipStyleType.InheritedFontStyle ) {\n            Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): get inherited font style\" );\n            inhFontStyles = this.inheritFontForNode( node, true );\n            Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): inherited fonts \" );\n        }<\/p>\n<p>        if ( (clipStyleType & Evernote.ClipStyleType.InheritedBgStyle) == Evernote.ClipStyleType.InheritedBgStyle ) {\n            Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): get inherited bg style\" );\n            inhBgStyles = this.inheritBackgroundForNode( node, true );\n        }\n    }<\/p>\n<p>    bodyStyles.mergeStyle( inhFontStyles, true );\n    return {\n        nodeStyle:bodyStyles,\n        inheritedFonts:inhFontStyles,\n        inheritedBackground:inhBgStyles,\n        evaluated:bodyStyles\n    };\n};<\/p>\n<p>Evernote.ClipFullStylingStrategy.prototype.getNodeStyle = function ( node, filterFn, pseudo ) {\n    Evernote.Logger.debug( \"ClipStylingStrategy.getNodeStyle()\" );<\/p>\n<p>    if ( pseudo == null || typeof pseudo == \"undefined\" ) {\n        pseudo = \"\";\n    }\n    var style = new Evernote.ClipStyle([ ], filterFn);\n    Evernote.Logger.debug( \"Pseudo : \" + pseudo );\n    if ( pseudo == \"\" && node && typeof node.nodeType == 'number' && node.nodeType == 1 ) {\n        var view = this.getNodeView( node );\n        style = new Evernote.ClipStyle( Evernote.ElementExtension.getComputedStyle( node, null, view ), filterFn );\n    }\n    return style;\n};<\/p>\n<p>Evernote.ClipFullStylingStrategy.prototype.inheritFontForNode = function ( node, recur ) {\n    Evernote.Logger.debug( \"ClipFullStylingStrategy.inheritFontForNode()\" );<\/p>\n<p>    var fontStyle = new Evernote.ClipStyle();\n    if ( !node ) {\n        return fontStyle;\n    }<\/p>\n<p>    var parent = node;\n    var styles = [ ];\n    var nodes = [ ];<\/p>\n<p>    var dynamicUnit = [\"%\", \"em\"];\n    var sizeUnitRegExp = \/(.*?)(em|%|px|pt)\/;<\/p>\n<p>    while ( parent ) {\n        nodes.push( parent );\n        styles.push( new Evernote.ClipStyle( this.getNodeStyle( parent ), function ( prop, value ) {\n            return (Evernote.ArrayExtension.indexOf(Evernote.ClipStyle.INHERITED_STYLES,  prop ) > 0 && value != \"inherit\" );\n        } ) );<\/p>\n<p>        Evernote.Logger.debug( \"Inh parent style:\" + styles[styles.length - 1].toString() );<\/p>\n<p>        if ( !recur || parent == document.body ) {\n            break;\n        }\n        else {\n            parent = parent.parentElement;\n        }\n    }<\/p>\n<p>    \/\/merge styles starting from low-priority parent styles\n    Evernote.Logger.debug( \"Styles inh for processing:\" + (styles.length - 1) );\n    for ( var i = styles.length - 1; i >= 0; i-- ) {\n        var style = styles[ i ];\n        var fontSize = fontStyle.getStyle( \"font-size\" );\n        var overFontStyle = style.getStyle( \"font-size\" );\n        Evernote.Logger.debug( \"fontSize:\" + fontSize + \"    ;overFontStyle: \" + overFontStyle );\n        if ( fontSize && overFontStyle ) {\n            var resFontSize = fontSize.match( sizeUnitRegExp );\n            if ( resFontSize == null ) {\n                continue;\n            }\n            var sizeVal = resFontSize[1];\n            var sizeUnit = resFontSize[2];\n            var resOverFontSize = overFontStyle.match( sizeUnitRegExp );<\/p>\n<p>            if ( resOverFontSize == null ) {\n                continue;\n            }\n            var overSizeVal = resOverFontSize[1];\n            var overSizeUnit = resOverFontSize[2];<\/p>\n<p>            if ( Evernote.ArrayExtension.indexOf(dynamicUnit, overSizeUnit ) != -1 ) {\n                if ( overSizeUnit == \"%\" ) {\n                    style.addStyle( { \"font-size\":(parseFloat( sizeVal ) * parseFloat( overSizeVal ) \/ 100).toString() + sizeUnit } );\n                }\n                else {\n                    style.addStyle( { \"font-size\":(parseFloat( sizeVal ) * parseFloat( overSizeVal )).toString() + ((sizeUnit != \"em\") ? sizeUnit : overSizeUnit) } );\n                }\n            }\n            Evernote.Logger.debug( \"Style: \" + i + \"   ;Eval inh style:\" + style.toString() );\n        }<\/p>\n<p>        fontStyle.mergeStyle( style, true );\n    }<\/p>\n<p>    return fontStyle;\n};<\/p>\n<p>Evernote.ClipFullStylingStrategy.prototype.inheritBackgroundForNode = function ( node, recur ) {\n    Evernote.Logger.debug( \"ClipFullStylingStrategy.inheritBackgroundForNode()\" );<\/p>\n<p>    var bgStyle = new Evernote.ClipStyle();\n    if ( !node ) {\n        return bgStyle;\n    }<\/p>\n<p>    var parent = node;\n    var styles = [ ];\n    var nodes = [ ];\n    var topElement = (document.body.parentNode) ? document.body.parentNode : document.body;\n    try {\n        while ( parent ) {\n            nodes.push( parent );\n            var filterFn = function ( prop, value ) {\n                return !(prop == \"background-repeat\" && (value == \"no-repeat\" || value == \"repeat-y\"));\n            };\n            var nodeStyle = new Evernote.ClipStyle( this.getNodeStyle( parent ), filterFn, Evernote.ClipStyle.CSS_GROUP.getExtForStyle( \"background\" ) );<\/p>\n<p>            if ( !nodeStyle.getStyle( \"background-repeat\" ) ) {\n                nodeStyle.removeStyle( \"background-image\" );\n            }\n            if ( !nodeStyle.getStyle( \"background-color\" ) && parent.getAttribute( \"bgcolor\" ) ) {\n                Evernote.Logger.debug( \"Set bgcolor attribute: \" + parent.getAttribute( \"bgcolor\" ) );\n                nodeStyle.addStyle( {\"background-color\":parent.getAttribute( \"bgcolor\" )} );\n            }<\/p>\n<p>            nodeStyle = this.evalBgPosition( node, parent, nodeStyle );\n            if ( nodeStyle.getStylesNames().length > 0 ) {\n                styles.push( nodeStyle );\n                Evernote.Logger.debug( \"Add inh bg style \" + nodeStyle.toString() );\n            }<\/p>\n<p>            if ( !recur || parent == topElement ) {\n                break;\n            }\n            else {\n                parent = parent.parentNode;\n            }\n        }\n    } catch(e) {\n        Evernote.Logger.error(\"ClipFullStylingStrategy.prototype.inheritBackgroundForNode failed to error \" + e);\n    }<\/p>\n<p>    return styles;\n};<\/p>\n<p>Evernote.ClipFullStylingStrategy.prototype.evalBgPosition = function ( node, inhNode, nodeBgStyle ) {\n    Evernote.Logger.debug( \"Dettermining background image offset\" );<\/p>\n<p>    var strPosToPercent = {\n        \"center\":\"50%\",\n        \"top\":\"0%\",\n        \"bottom\":\"100%\",\n        \"right\":\"100%\",\n        \"left\":\"0%\"\n    };<\/p>\n<p>    var regExp = \/url\\((.*?)\\)\/;\n    var bgImage = nodeBgStyle.getStyle( \"background-image\" );\n    if ( !regExp.test( nodeBgStyle.getStyle( \"background-image\" ) ) || (bgImage && nodeBgStyle.getStyle( \"background-image\" ).indexOf( \"data:image\" ) >= 0) ) {\n        Evernote.Logger.debug( \"bgStyle: \" + nodeBgStyle.toString() );\n        return nodeBgStyle;\n    }<\/p>\n<p>    nodeBgStyle.addStyle( { \"background-image\": Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( inhNode, null, this.getNodeView( inhNode ) ), Evernote.IEStylePropertiesMapping.getPropertyNameFor(\"background-image\") ).replace( regExp, \"url('$1')\" ) } );<\/p>\n<p>    var actualImage = new Image();\n    actualImage.src = nodeBgStyle.getStyle( \"background-image\" ).match( regExp )[ 1 ].replace( \/[\"']\/g, \"\" );\n    var bgNodeRect = this.getOffsetRect( inhNode );\n    var nodeRect = this.getOffsetRect( node );\n    var yDelta = nodeRect.top - bgNodeRect.top;\n    var xDelta = nodeRect.left - bgNodeRect.left;<\/p>\n<p>    var bgNodeBgPosX = 0;\n    var bgNodeBgPosY = 0;\n    var origPosX = 0;\n    var origPosY = 0;<\/p>\n<p>    if ( nodeBgStyle.getStyle( \"background-position\" ) ) {\n        var bgPosition = nodeBgStyle.getStyle( \"background-position\" ).split( \" \" );\n        bgNodeBgPosX = strPosToPercent[bgPosition[ 0 ]] != null ? strPosToPercent[bgPosition[ 0 ]] : bgPosition[ 0 ];\n        bgNodeBgPosY = strPosToPercent[bgPosition[ 1 ]] != null ? strPosToPercent[bgPosition[ 1 ]] : bgPosition[ 1 ];<\/p>\n<p>        if ( bgNodeBgPosX && bgNodeBgPosX.indexOf( \"%\" ) > 0 ) {\n            origPosX = parseInt( bgNodeRect.width ) * (parseInt( bgNodeBgPosX ) \/ 100);\n            origPosX -= parseInt(actualImage.width) * (parseInt(bgNodeBgPosX) \/ 100);\n        }\n        else {\n            origPosX = parseInt( bgNodeBgPosX );\n        }<\/p>\n<p>        if ( bgNodeBgPosY && bgNodeBgPosY.indexOf( \"%\" ) > 0 ) {\n            origPosY = parseInt( bgNodeRect.height ) * (parseInt( bgNodeBgPosY ) \/ 100);\n            origPosY -= parseInt(actualImage.height) * (parseInt(bgNodeBgPosY) \/ 100);\n        }\n        else {\n            origPosY = parseInt( bgNodeBgPosY );\n        }\n    }<\/p>\n<p>    if ( isNaN( origPosX ) ) {\n        origPosX = 0;\n    }\n    if ( isNaN( origPosY ) ) {\n        origPosY = 0;\n    }<\/p>\n<p>    var xOffset = 0 - xDelta + origPosX;\n    var yOffset = 0 - yDelta + origPosY;<\/p>\n<p>    nodeBgStyle.addStyle( { \"background-position\":(xOffset + \"px \" + yOffset + \"px\") } );\n    Evernote.Logger.debug( \"bgStyle: \" + nodeBgStyle.toString() );\n    return nodeBgStyle;\n};<\/p>\n<p>Evernote.ClipFullStylingStrategy.prototype.getOffsetRect = function ( elem ) {\n    Evernote.Logger.debug( \"ClipCSSStyleWalker.getOffsetRect()\" );<\/p>\n<p>    var box = Evernote.ElementExtension.getBoundingClientRect(elem);\n    var body = elem.ownerDocument.body;\n    var docElem = elem.ownerDocument.documentElement;<\/p>\n<p>    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;<\/p>\n<p>    var clientTop = docElem.clientTop || body.clientTop || 0;\n    var clientLeft = docElem.clientLeft || body.clientLeft || 0;<\/p>\n<p>    var top = box.top + scrollTop - clientTop;\n    var left = box.left + scrollLeft - clientLeft;<\/p>\n<p>    return { top:Math.round( top ), left:Math.round( left ), width:box.width, height:box.height };\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/\/\"use strict\";<\/p>\n<p>Evernote.ClipRules = {\n    isNoKeepNodeAttr : function( attribute, nodeName, node ) {\n        if ( !attribute ) {\n            return true;\n        }<\/p>\n<p>        var attrName = attribute.name.toLowerCase();\n        var attrValue = attribute.value.toLowerCase();\n        if((node.nodeName.toUpperCase() == \"SPAN\" || node.nodeName.toUpperCase() == \"A\") && node.getElementsByTagName( \"IMG\" ).length > 0) {\n            nodeName = \"div\";\n        }\n        var attributesToKeepForNode = this.KEEP_NODE_ATTRIBUTES[nodeName];\n        if(attributesToKeepForNode) {\n            var keepAttributeForNode = typeof attributesToKeepForNode[attrName] != 'undefined';\n        }\n        return typeof this.NOKEEP_NODE_ATTRIBUTES[ attrName ] != 'undefined'\n            || !keepAttributeForNode\n            || attrName.substring( 0, 2 ) == \"on\"\n            || attrName.indexOf(\"xml\") == 0\n            || attrValue.indexOf(\"function(\") >= 0\n            || (attrName == \"href\" && attrValue.substring( 0, 11 ) == \"javascript:\");\n    },<\/p>\n<p>    isConditionalNode : function( node ) {\n        return node && typeof this.CONDITIONAL_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },<\/p>\n<p>    translateNode : function( node ) {\n        var nodeName = this.NODE_NAME_TRANSLATIONS[ node.nodeName.toUpperCase() ] || node.nodeName.toUpperCase();\n        return (typeof this.SUPPORTED_NODES[ nodeName ] != \"undefined\") ? nodeName.toLowerCase() : this.NODE_NAME_TRANSLATIONS[ \"*\" ].toLowerCase();\n    },<\/p>\n<p>    isSupportedNode : function( node ) {\n        return node && typeof this.SUPPORTED_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },<\/p>\n<p>    isRejectedNode : function( node ) {\n        return node && typeof this.REJECTED_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },<\/p>\n<p>    isNonAncestorNode : function( node ) {\n        return node && typeof this.NON_ANCESTOR_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },<\/p>\n<p>    isSelfClosingNode : function( node ) {\n        return node && typeof this.SELF_CLOSING_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    }\n};<\/p>\n<p>Evernote.ClipRules.KEEP_NODE_ATTRIBUTES = {\n    \"a\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"accesskey\": null,\n        \"charset\": null,\n        \"type\": null,\n        \"name\": null,\n        \"href\": null,\n        \"hreflang\": null,\n        \"rel\": null,\n        \"rev\": null,\n        \"shape\": null,\n        \"coords\": null,\n        \"target\": null\n    },<\/p>\n<p>    \"abbr\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"acronym\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"address\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"area\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"accesskey\": null,\n        \"shape\": null,\n        \"coords\": null,\n        \"href\": null,\n        \"nohref\": null,\n        \"alt\": null,\n        \"target\": null\n    },<\/p>\n<p>    \"b\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"bdo\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"big\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"blockquote\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"cite\": null\n    },<\/p>\n<p>    \"br\" : {\n        \"title\": null,\n        \"clear\": null\n    },<\/p>\n<p>    \"caption\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\": null\n    },<\/p>\n<p>    \"center\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"cite\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"code\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"col\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"span\" : null,\n        \"width\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },<\/p>\n<p>    \"colgroup\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"span\" : null,\n        \"width\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },<\/p>\n<p>    \"dd\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"del\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"cite\" : null,\n        \"datetime\" : null\n    },<\/p>\n<p>    \"dfn\" : {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"div\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"dl\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"compact\" : null\n    },<\/p>\n<p>    \"dt\": {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"em\": {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"font\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"size\" : null,\n        \"color\" : null,\n        \"face\" : null\n    },<\/p>\n<p>    \"h1\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"h2\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"h3\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"h4\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"h5\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"h6\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"hr\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"noshade\" : null,\n        \"size\" : null,\n        \"width\" : null\n    },<\/p>\n<p>    \"i\": {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"img\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"src\" : null,\n        \"alt\" : null,\n        \"name\" : null,\n        \"longdesc\" : null,\n        \"height\" : null,\n        \"width\" : null,\n        \"usemap\" : null,\n        \"ismap\" : null,\n        \"align\" : null,\n        \"border\" : null,\n        \"hspace\" : null,\n        \"vspace\" : null\n    },<\/p>\n<p>    \"en-media\": {\n        \"type\" : null,\n        \"hash\" : null,\n        \"title\" : null,\n        \"dir\" : null,\n        \"alt\" : null,\n        \"longdesc\" : null,\n        \"height\" : null,\n        \"width\" : null,\n        \"usemap\" : null,\n        \"align\" : null,\n        \"border\" : null,\n        \"hspace\" : null,\n        \"vspace\" : null\n    },<\/p>\n<p>    \"ins\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"cite\" : null,\n        \"datetime\" : null\n    },<\/p>\n<p>    \"kbd\": {\n        \"title\": null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"li\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"type\" : null,\n        \"value\" : null\n    },<\/p>\n<p>    \"map\": {\n        \"dir\" : null,\n        \"title\" : null,\n        \"name\" : null\n    },<\/p>\n<p>    \"ol\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"type\" : null,\n        \"compact\" : null,\n        \"start\" : null\n    },<\/p>\n<p>    \"p\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null\n    },<\/p>\n<p>    \"pre\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"width\" : null\n    },<\/p>\n<p>    \"s\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"samp\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"small\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"span\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"strike\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"strong\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"sub\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"sup\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"table\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"summary\" : null,\n        \"width\" : null,\n        \"border\" : null,\n        \"cellspacing\" : null,\n        \"cellpadding\" : null,\n        \"align\" : null,\n        \"bgcolor\" : null\n    },<\/p>\n<p>    \"tbody\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },<\/p>\n<p>    \"td\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null,\n        \"abbr\" : null,\n        \"rowspan\" : null,\n        \"colspan\" : null,\n        \"nowrap\" : null,\n        \"bgcolor\" : null,\n        \"width\" : null,\n        \"height\" : null\n    },<\/p>\n<p>    \"tfoot\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },<\/p>\n<p>    \"th\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null,\n        \"abbr\" : null,\n        \"rowspan\" : null,\n        \"colspan\" : null,\n        \"nowrap\" : null,\n        \"bgcolor\" : null,\n        \"width\" : null,\n        \"height\" : null\n    },<\/p>\n<p>    \"thead\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },<\/p>\n<p>    \"tr\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null,\n        \"bgcolor\" : null\n    },<\/p>\n<p>    \"tt\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"u\": {\n        \"title\" : null,\n        \"dir\" : null\n    },<\/p>\n<p>    \"ul\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"type\" : null,\n        \"compact\" : null\n    },<\/p>\n<p>    \"var\": {\n        \"title\" : null,\n        \"dir\" : null\n    }\n};<\/p>\n<p>Evernote.ClipRules.NOKEEP_NODE_ATTRIBUTES = {\n    \"style\" : null,\n    \"tabindex\" : null\n};<\/p>\n<p>Evernote.ClipRules.CONDITIONAL_NODES = {\n    \"EMBED\" : null,\n    \"OBJECT\" : null,\n    \"IMG\" : null,\n    \"VIDEO\" : null\n};<\/p>\n<p>Evernote.ClipRules.NODE_NAME_TRANSLATIONS = {\n    \"HTML\" : \"DIV\",\n    \"BODY\" : \"DIV\",\n    \"FORM\" : \"DIV\",\n    \"CANVAS\" : \"DIV\",\n    \"CUFON\" : \"DIV\",\n    \"EMBED\" : \"IMG\",\n    \"BUTTON\" : \"SPAN\",\n    \"INPUT\" : \"SPAN\",\n    \"LABEL\" : \"SPAN\",\n    \"BDI\" : \"SPAN\",\n    \"IMG\" : \"EN-MEDIA\",\n    \"*\" : \"DIV\"\n};<\/p>\n<p>Evernote.ClipRules.SUPPORTED_NODES = {\n    \"A\" : null,\n    \"ABBR\" : null,\n    \"ACRONYM\" : null,\n    \"ADDRESS\" : null,\n    \"AREA\" : null,\n    \"B\" : null,\n    \"BUTTON\" : null,\n    \"BDO\" : null,\n    \"BIG\" : null,\n    \"BLOCKQUOTE\" : null,\n    \"BR\" : null,\n    \"CAPTION\" : null,\n    \"CENTER\" : null,\n    \"CITE\" : null,\n    \"CODE\" : null,\n    \"COL\" : null,\n    \"COLGROUP\" : null,\n    \"DD\" : null,\n    \"DEL\" : null,\n    \"DFN\" : null,\n    \"DIV\" : null,\n    \"DL\" : null,\n    \"DT\" : null,\n    \"EM\" : null,\n    \"FONT\" : null,\n    \"FORM\" : null,\n    \"H1\" : null,\n    \"H2\" : null,\n    \"H3\" : null,\n    \"H4\" : null,\n    \"H5\" : null,\n    \"H6\" : null,\n    \"HR\" : null,\n    \"HTML\" : null,\n    \"I\" : null,\n    \"IMG\" : null,\n    \"EN-MEDIA\" : null,\n    \"INPUT\" : null,\n    \"INS\" : null,\n    \"KBD\" : null,\n    \"LI\" : null,\n    \"MAP\" : null,\n    \"OL\" : null,\n    \"P\" : null,\n    \"PRE\" : null,\n    \"Q\" : null,\n    \"S\" : null,\n    \"SAMP\" : null,\n    \"SMALL\" : null,\n    \"SPAN\" : null,\n    \"STRIKE\" : null,\n    \"STRONG\" : null,\n    \"SUB\" : null,\n    \"SUP\" : null,\n    \"TABLE\" : null,\n    \"TBODY\" : null,\n    \"TD\" : null,\n    \"TFOOT\" : null,\n    \"TH\" : null,\n    \"THEAD\" : null,\n    \"TR\" : null,\n    \"TT\" : null,\n    \"U\" : null,\n    \"UL\" : null,\n    \"VAR\" : null\n};<\/p>\n<p>Evernote.ClipRules.REJECTED_NODES = {\n    \"SCRIPT\" : null,\n    \"LINK\" : null,\n    \"IFRAME\" : null,\n    \"STYLE\" : null,\n    \"SELECT\" : null,\n    \"OPTION\" : null,\n    \"OPTGROUP\" : null,\n    \"NOSCRIPT\" : null,\n    \"PARAM\" : null,\n    \"HEAD\" : null,\n    \"EVERNOTEDIV\" : null,\n    \"CUFONTEXT\" : null,\n    \"NOEMBED\" : null\n};<\/p>\n<p>Evernote.ClipRules.NON_ANCESTOR_NODES = {\n    \"OL\" : null,\n    \"UL\" : null,\n    \"LI\" : null\n};<\/p>\n<p>Evernote.ClipRules.SELF_CLOSING_NODES = {\n    \"IMG\" : null,\n    \/\/\"INPUT\" : null,\n    \"BR\" : null\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * ClipStyle is a container for CSS styles. It is able to add and remove\n * CSSStyleRules (and parse CSSRuleList's for rules), as well as\n * CSSStyleDeclaration's and instances of itself.\n * ClipStyle provides a mechanism to serialize itself via toString(), and\n * reports its length via length property. It also provides a method to clone\n * itself and expects to be manipulated via addStyle and removeStyle.\n *\/\nEvernote.ClipStyle = function ClipStyle( css, filterFn, styleList ) {\n    this.initialize( css, filterFn, styleList );\n};<\/p>\n<p>Evernote.ClipStyle.STYLES = [\n    \"background\", \"background-attachment\", \"background-clip\", \"background-color\", \"background-image\", \"background-origin\", \"background-position-x\", \"background-position-y\", \"background-position\", \"background-repeat\", \"background-size\",\n    \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\", \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n    \"border-left\", \"border-left-color\", \"border-left-style\", \"border-left-width\",\n    \"border-right\", \"border-right-color\", \"border-right-style\", \"border-right-width\",\n    \"border-top\", \"border-top-color\", \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n    \"border-collapse\", \"border-spacing\", \"bottom\", \"box-shadow\",\n    \"caption-side\", \"clear\", \"clip\", \"color\", \"content\", \"counter-increment\", \"counter-reset\", \"cursor\",\n    \"direction\", \"display\",\n    \"empty-cells\",\n    \"float\", \"font\", \"font-family\", \"font-size\", \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-variant\", \"font-weight\",\n    \"height\",\n    \"ime-mode\",\n    \"left\", \"letter-spacing\", \"line-height\", \"list-style\", \"list-style-image\", \"list-style-position\", \"list-style-type\",\n    \"margin\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"marker-offset\", \"max-height\", \"max-width\", \"min-height\", \"min-width\",\n    \"opacity\", \"outline\", \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\", \"overflow\", \"overflow-x\", \"overflow-y\",\n    \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\", \"page-break-after\", \"page-break-before\", \"pointer-events\", \"position\",\n    \"resize\", \"right\",\n    \"table-layout\", \"text-align\", \"text-anchor\", \"text-decoration\", \"text-indent\", \"text-overflow\", \"text-shadow\", \"text-transform\", \"top\",\n    \"vertical-align\", \"visibility\",\n    \"white-space\", \"width\", \"word-spacing\", \"word-wrap\",\n    \"z-index\"\n];<\/p>\n<p>Evernote.ClipStyle.NO_INHERIT_STYLES = {\n    \"*\":[ \"background\", \"background-image\", \"background-color\", \"background-position\", \"background-repeat\",\n        \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\", \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n        \"border-left\", \"border-left-color\", \"border-left-style\", \"border-left-width\",\n        \"border-right\", \"border-right-color\", \"border-right-style\", \"border-right-width\",\n        \"border-top\", \"border-top-color\", \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n        \"border-collapse\", \"border-spacing\", \"bottom\",\n        \"clear\",\n        \"display\",\n        \"float\",\n        \"height\",\n        \"left\", \"list-style\",\n        \"margin\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n        \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\",\n        \"right\",\n        \"text-decoration\", \"top\",\n        \"width\" ],\n    \"img\":[ \"height\", \"width\" ]\n};<\/p>\n<p>Evernote.ClipStyle.CSS_GROUP = {\n    \"margin\":[ \"left\", \"right\", \"top\", \"bottom\" ],\n    \"padding\":[ \"left\", \"right\", \"top\", \"bottom\" ],\n    \"border\":[ \"width\", \"style\", \"color\" ],\n    \"border-bottom\":[ \"width\", \"style\", \"color\" ],\n    \"border-top\":[ \"width\", \"style\", \"color\" ],\n    \"border-right\":[ \"width\", \"style\", \"color\" ],\n    \"border-left\":[ \"width\", \"style\", \"color\" ],\n    \"border-image\":[ \"outset\", \"repeat\", \"slice\", \"source\", \"width\" ],\n    \"background\":[ \"attachment\", \"color\", \"image\", \"position\", \"repeat\", \"clip\", \"origin\", \"size\" ],\n    \"font\":[ \"family\", \"size\", \"style\", \"variant\", \"weight\", \"size-adjust\", \"stretch\", \"+line-height\" ],\n    \"list-style\":[ \"image\", \"position\", \"type\" ]\n};<\/p>\n<p>Evernote.ClipStyle.CSS_GROUP.getExtForStyle = function ( name ) {\n    var list = this[ name ];\n    var extList = [ ];<\/p>\n<p>    if ( list ) {\n        for ( var i = 0; i < list.length; ++i ) {\n            if ( list[ i ].indexOf( \"+\" ) >= 0 ) {\n                var tmp = list[ i ];\n                extList.push( tmp.replace( \"+\", \"\" ) );\n            }\n            else {\n                extList.push( name + \"-\" + list[ i ] );\n            }\n        }\n        return extList;\n    }<\/p>\n<p>    return null;\n};<\/p>\n<p>Evernote.ClipStyle.STYLE_ATTRIBUTES = {\n    \"bgcolor\":\"background-color\",\n    \"text\":\"color\"\n};<\/p>\n<p>Evernote.ClipStyle.INHERITED_STYLES = [\n    \"azimuth\",\n    \"border-collapse\", \"border-spacing\",\n    \"caption-side\", \"color\", \"cursor\",\n    \"direction\",\n    \"elevation\", \"empty-cells\",\n    \"font-family\", \"font-size\", \"font-style\", \"font-weight\", \"font\",\n    \"letter-spacing\", \"line-height\", \"list-style-image\", \"list-style-position\", \"list-style-type\", \"list-style\",\n    \"orphans\",\n    \"pitch-range\", \"pitch\",\n    \"quotes\",\n    \"richness\",\n    \"speak-header\", \"speak-numeral\", \"speak-punctuation\", \"speak\", \"speak-rate\", \"stress\",\n    \"text-align\", \"text-indent\", \"text-transform\",\n    \"visibility\", \"voice-family\", \"volume\",\n    \"white-space\", \"widows\", \"word-spacing\"\n];<\/p>\n<p>Evernote.ClipStyle.prototype._collection = null;\nEvernote.ClipStyle.prototype._filterFn = null;\nEvernote.ClipStyle.prototype._styleList = null;<\/p>\n<p>Evernote.ClipStyle.prototype.initialize = function ( css, filterFn, styleList ) {\n    Evernote.Logger.debug( \"ClipStyle.initialize()\" );<\/p>\n<p>    this._collection = new Evernote.StylesCollection();\n    Evernote.Logger.debug( \"ClipStyle.initialize: collection initialized()\" );\n    this._filterFn = (typeof filterFn == \"function\") ? filterFn : null;\n    this._styleList = (styleList != null) ? styleList : Evernote.ClipStyle.STYLES;\n    if(css) {\n        this.addStyle( css, this._styleList );\n    }\n    Evernote.Logger.debug( \"ClipStyle.initialize() end \");\n};<\/p>\n<p>Evernote.ClipStyle.prototype.fixBackground = function ( prop, value ) {\n    if(prop && value) {\n        if(prop.indexOf(\"background-image\") != -1 && value.indexOf(\"url\") != -1) {\n            Evernote.Logger.debug(\"Start replace\");\n            var regExp = \/url\\((.*?)\\)\/;\n            var res = value.replace(regExp, \"url('$1')\").replace(\/('\")|(\"')|('')\/g, \"'\");\n            Evernote.Logger.debug(\"End replace\");\n            return Evernote.GlobalUtils.escapeXML(res);<\/p>\n<p>        }\n    }\n    return value;\n};<\/p>\n<p>Evernote.ClipStyle.prototype.addStyle = function ( style, styleList ) {\n    Evernote.Logger.debug( \"ClipStyle.addStyle()\" );\n    if ( style.length > 0 ) {\n        var list = (styleList != null) ? styleList : this._styleList;\n        for ( var i = 0; i < list.length; ++i ) {\n            var prop = list[ i ];\n            var value = Evernote.StyleElementExtension.getPropertyValue(style, prop );\n            var importantPriority = !!((style.getPropertyPriority(prop) == 'important'));\n            value = this.fixBackground(prop, value);\n            this.addSimpleStyle( prop, value, importantPriority );\n        }\n    }\n    else if ( style instanceof Evernote.ClipStyle ) {\n        list = (styleList != null) ? styleList : style.getStylesNames();\n        for ( var i = 0; i < list.length; ++i ) {\n            var prop = list[ i ];\n            value = style.getStyle( prop );\n            importantPriority = style.isImportant( prop );\n            value = this.fixBackground(prop, value);\n            this.addSimpleStyle( prop, value, importantPriority );\n        }\n    }\n    else if ( typeof style == 'object' &#038;&#038; style != null ) {\n        list = (styleList != null) ? styleList : style;\n        for ( var prop in list ) {\n            \/\/ In some cases, attempt to get currentStyle.outline ( or outlineWidth ) property in IE8 throws\n            \/\/ 'unspecified error' and crash whole serilization process. So we wrap it into try {...} catch.\n\n            try {\n                if ( list.hasOwnProperty( prop ) ) {\n                    var usedStyle = style[ prop ];\n                    var pName = prop;\n                    if(!usedStyle) {\n                        usedStyle = style [list[prop]];\n                        pName = list[prop];\n                        if(!usedStyle) {\n                            var propName = Evernote.IEStylePropertiesMapping.getPropertyNameFor(list[prop]);\n                            if(propName) {\n                                usedStyle = style[propName[1]];\n                            }\n                        }\n                    }\n                    usedStyle = this.fixBackground(pName, usedStyle);\n                    this.addSimpleStyle( pName, usedStyle );\n                }\n            }  catch (err) {}\n        }\n    }\n};\n\nEvernote.ClipStyle.prototype.removeStyle = function ( style ) {\n    Evernote.Logger.debug( \"ClipStyle.removeStyle()\" );\n    if(style) {\n        if ( window.CSSStyleDeclaration &#038;&#038; Evernote.Utils.isInstanceOf(style, window.CSSStyleDeclaration) || style instanceof Array ) {\n            for ( var i = 0; i < style.length; ++i ) {\n                this.removeSimpleStyle( style[ i ] );\n            }\n        }\n        else if ( style instanceof Evernote.ClipStyle ) {\n            var stylesNames = style.getStylesNames();\n            for ( i = 0; i < stylesNames.length; ++i ) {\n                this.removeSimpleStyle( stylesNames[ i ] );\n            }\n        }\n        else if ( typeof style == 'string' ) {\n            this.removeSimpleStyle( style );\n        }\n    }\n    Evernote.Logger.debug(\"ClipStyle.removeStyle() end\")\n};\n\nEvernote.ClipStyle.prototype.mergeStyle = function ( style, override ) {\n    Evernote.Logger.debug( \"ClipStyle.mergeStyle()\" );\n\n    if ( style instanceof Evernote.ClipStyle ) {\n        var stylesNames = style.getStylesNames();\n        for ( var i = 0; i < stylesNames.length; ++i ) {\n            var styleName = stylesNames[ i ];\n            var styleValue = this._collection.getStyle( styleName );\n            if ( styleValue == null || override || (style.isImportant( styleName ) &#038;&#038; !this._collection.isImportant( styleName )) ) {\n                var newValue = style.getStyle( styleName );\n                if ( style.isImportant( styleName ) ) {\n                    this._collection.addStyle( styleName, newValue, true );\n                }\n                else if ( override &#038;&#038; !this._collection.isImportant( styleName ) ) {\n                    this._collection.addStyle( styleName, newValue, false );\n                }\n                else if ( styleValue == null &#038;&#038; !override ) {\n                    this._collection.addStyle( styleName, newValue, style.isImportant( styleName ) );\n                }\n            }\n        }\n    }\n};\n\nEvernote.ClipStyle.prototype.getStylesNames = function () {\n    return this._collection.getStylesNames();\n};\n\nEvernote.ClipStyle.prototype.getStyle = function ( prop ) {\n    return this._collection.getStyle( prop );\n};\n\nEvernote.ClipStyle.prototype.isImportant = function ( prop ) {\n    return this._collection.isImportant( prop );\n};\n\nEvernote.ClipStyle.prototype.addSimpleStyle = function ( prop, value, importantPriority ) {\n    if ( typeof this._filterFn == \"function\" &#038;&#038; !this._filterFn( prop, value ) ) {\n        return;\n    }\n    var impl = Evernote.StylesReplacementRegistry.getImplementationFor(prop);\n    if(impl &#038;&#038; impl.getValue) {\n        value = impl.getValue(value);\n    }\n    this._collection.addStyle( prop, value, importantPriority );\n};\n\nEvernote.ClipStyle.prototype.removeSimpleStyle = function ( prop ) {\n    this._collection.removeStyle( prop );\n};\n\nEvernote.ClipStyle.prototype.toString = function () {\n    var str = \"\";\n    var stylesNames = this.getStylesNames();\n    for ( var i = 0; i < stylesNames.length; ++i ) {\n        var styleName = stylesNames[ i ];\n        var value = this._collection.getStyle( styleName );\n        if ( value != null &#038;&#038; value.length > 0 ) {\n            str += styleName + \":\" + value + \";\";\n        }\n    }<\/p>\n<p>    return str;\n};<\/p>\n<p>Evernote.ClipStyle.CSSDefaultStyle = {\n    \"background-attachment\": \"scroll\",\n    \"background-color\" : \"transparent\",\n    \"background-image\" : \"none\",\n    \"background-position-x\" : \"0px\",\n    \"background-position-y\" : \"0px\",\n    \"background-repeat\" : \"repeat\",\n    \"border-bottom-style\" : \"none\",\n    \"border-bottom-width\" : \"medium\",\n    \"border-left-style\" : \"none\",\n    \"border-left-width\" : \"medium\",\n    \"border-right-style\" : \"none\",\n    \"border-right-width\" : \"medium\",\n    \"border-top-style\" : \"none\",\n    \"border-top-width\" : \"medium\",\n    \"border-collapse\" : \"separate\",\n    \"bottom\" : \"auto\",\n    \"clear\" : \"none\",\n    \"height\" : \"auto\",\n    \"left\" : \"auto\",\n    \"margin-bottom\" : \"0px\",\n    \"margin-left\" : \"0px\",\n    \"margin-right\" : \"0px\",\n    \"margin-top\" : \"0px\",\n    \"max-height\" : \"none\",\n    \"max-width\" : \"none\",\n    \"min-height\" : \"0px\",\n    \"min-width\" : \"0px\",\n    \"overflow\" : \"visible\",\n    \"overflow-x\" : \"visible\",\n    \"overflow-y\" : \"visible\",\n    \"padding\" : \"0px\",\n    \"padding-bottom\" : \"0px\",\n    \"padding-left\" : \"0px\",\n    \"padding-right\" : \"0px\",\n    \"padding-top\" : \"0px\",\n    \"page-break-before\" : \"auto\",\n    \"page-break-after\" : \"auto\",\n    \"position\" : \"static\",\n    \"right\" : \"auto\",\n    \"text-align\" : \"left\",\n    \"text-decoration\" : \"none\",\n    \"text-indent\" : \"0px\",\n    \"text-overflow\" : \"clip\",\n    \"top\" : \"auto\",\n    \"width\" : \"auto\"\n};<\/p>\n<p>Evernote.ClipStyle.prototype.removeDefaultCssStyle = function () {\n    var stylesNames = this.getStylesNames();\n    for ( var i = 0; i < stylesNames.length; ++i ) {\n        var styleName = stylesNames[ i ];\n        var defaultCssValue = Evernote.ClipStyle.CSSDefaultStyle[styleName];\n        var value = this.getStyle( styleName );\n        if (!value)\n            continue;\n        if (defaultCssValue == value) {\n            this.removeStyle(styleName);\n        }\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ClipStyleProperty = function ClipStyleProperty( name, value, isImportant ) {\n    this.initialize( name, value, isImportant );\n};<\/p>\n<p>Evernote.ClipStyleProperty.prototype.initialize = function( name, value, isImportant ) {\n    if ( typeof name == \"string\" && typeof value == \"string\" ) {\n        this._name = name;\n        this._value = value;\n    }<\/p>\n<p>    this._isImportant = (isImportant) ? true : false;\n};<\/p>\n<p>Evernote.ClipStyleProperty.prototype._name = null;\nEvernote.ClipStyleProperty.prototype._value = null;\nEvernote.ClipStyleProperty.prototype._isImportant = null;<\/p>\n<p>Evernote.ClipStyleProperty.prototype.name = function() {\n    return this._name;\n};<\/p>\n<p>Evernote.ClipStyleProperty.prototype.value = function() {\n    return this._value;\n};<\/p>\n<p>Evernote.ClipStyleProperty.prototype.isImportant = function() {\n    return this._isImportant;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Represents DOM parser that could able to traverse the DOM node tree from specified root.\n * @param tab - current window object\n * @param range - current selection on the page (if any)\n * @constructor\n *\/\nEvernote.DomParser = function DomParser( tab, range ) {\n    this.initialize( tab, range );\n};<\/p>\n<p>Evernote.DomParser.prototype._tab = null;<\/p>\n<p>\/**\n * Update current parser data\n * @param tab - current window object\n * @param range - current selection on the page (if any)\n *\/\nEvernote.DomParser.prototype.initialize = function ( tab, range ) {\n    Evernote.Logger.debug( \"DomSerializer.initialize()\" );<\/p>\n<p>    this._tab = tab;\n    this._range = range;\n};<\/p>\n<p>\/**\n * Determines if passed node should be serialized.\n * Node should not be initialized if one of the following is true:\n *  - node is rejected according to configuration\n *  - there is the selection on the page and this node is out of selection range.\n * @param node - DOM node\n * @return {Boolean}\n *\/\nEvernote.DomParser.prototype.isNodeForSerialize = function ( node ) {\n    if ( !node || Evernote.ClipRules.isRejectedNode( node ) || node.id == \"evernoteContentClipperWait\" ) {\n        return false;\n    }\n    if(Evernote.ClipperElementsIdentifiers.match(node)) {\n        Evernote.Logger.debug(\"Node is rejected because it is clipper information \" + node.id);\n        return false;\n    }\n    return (!this._range || this.isNodeInRange( node )) ? true : false;\n};<\/p>\n<p>\/**\n * Determines whether passed node is inside the selection range. Returns true if it is, false otherwise.\n * @param node - DOM node\n * @return {Boolean}\n *\/\nEvernote.DomParser.prototype.isNodeInRange = function ( node ) {\n    Evernote.Logger.debug( \"DomParser.isNodeInRange()\" );<\/p>\n<p>    var nodeRange, endsAfterNodeStart, startsBeforeNodeEnd;<\/p>\n<p>    if (typeof node.ownerDocument.createRange == 'function') {\n        \/\/ ie9, ie10, ie11<\/p>\n<p>        if ( node && this._range ) {\n            nodeRange = node.ownerDocument.createRange();<\/p>\n<p>            \/\/ create new selection from node, or node content\n            try {\n                nodeRange.selectNode( node );\n            }\n            catch ( e ) {\n                nodeRange.selectNodeContents( node );\n            }<\/p>\n<p>            \/\/ compare boundary points of selection and current node.\n            endsAfterNodeStart = this._range.compareBoundaryPoints( Range.START_TO_END, nodeRange ) == 1;\n            startsBeforeNodeEnd = this._range.compareBoundaryPoints( Range.END_TO_START, nodeRange ) == -1;<\/p>\n<p>            return endsAfterNodeStart && startsBeforeNodeEnd;\n        }\n    } else {\n        \/\/ ie7 , ie8\n        nodeRange = node.ownerDocument.body.createTextRange();<\/p>\n<p>        try {\n            nodeRange.moveToElementText(node);\n        } catch (e) {\n            \/\/ [object Text]\n            \/\/ probably, here should be analog for createRange().selectNodeContents();\n            return true;\n        }<\/p>\n<p>        endsAfterNodeStart = this._range.compareEndPoints('EndToStart', nodeRange) == 1;\n        startsBeforeNodeEnd = this._range.compareEndPoints('StartToEnd', nodeRange) == -1;<\/p>\n<p>        return endsAfterNodeStart && startsBeforeNodeEnd;\n    }<\/p>\n<p>    return false; \/\/ not found.\n};<\/p>\n<p>\/**\n * Determines whether passed node is visible on the page.\n * @param node - DOM node.\n * @return {Boolean}\n *\/\nEvernote.DomParser.prototype.isNodeVisible = function ( node ) {\n    Evernote.Logger.debug( \"DomParser.isNodeVisible()\" );<\/p>\n<p>    if ( !node ) {\n        return false;\n    }<\/p>\n<p>    var compStyles = Evernote.ElementExtension.getComputedStyle( node, null, this._tab );\n    return Evernote.StyleElementExtension.getPropertyValue(compStyles, \"display\" ) != \"none\";\n};<\/p>\n<p>Evernote.DomParser.prototype.parseAsync = function ( root, fullPage, serializer, callback ) {\n    var PARSING_TIMEOUT_INTERVAL = 1000; \/\/milliseconds<\/p>\n<p>    if (!callback) {\n        this.parse(root, fullPage, serializer);\n        return;\n    }<\/p>\n<p>    if ( !root ) {\n        throw new Error( \"No root element for parsing\" );\n    }<\/p>\n<p>    var node = root;\n    var parentNode = null;\n    var thizz = this;<\/p>\n<p>    var asyncParser = function()\n    {\n        var parsingEnd = true;\n        var startTimeParsing = new Date().getTime();\n        while ( node ) {\n            if ( node != root && node.parentNode ) {\n                parentNode = node.parentNode.serializedNode;\n            }<\/p>\n<p>            if ( thizz.isNodeForSerialize( node ) ) {\n                if ( node.nodeType == Evernote.Node.TEXT_NODE ) {\n                    serializer.textNode( node, thizz._range );\n                }\n                else if ( node.nodeType == Evernote.Node.ELEMENT_NODE && thizz.isNodeVisible( node ) ) {\n                    node.serializedNode = serializer.startNode( new Evernote.SerializedNode( node, parentNode ), root, fullPage );\n                    if ( node.hasChildNodes() ) {\n                        node = node.childNodes[ 0 ];\n                        continue;\n                    }\n                    else {\n                        serializer.endNode( node.serializedNode );\n                        if ( node.serializedNode ) {\n                            try {\n                                delete node.serializedNode;\n                            } catch(e) {\n                                \/\/If we are failed to delete the property, than just set it to undefined\n                                node.serializedNode = undefined;\n                            }\n                        }\n                    }\n                }\n            }<\/p>\n<p>            \/**\n             * Check if there is a next node available and it is not the root\n             *\/\n            if ( node.nextSibling && node != root ) {\n                node = node.nextSibling;\n            }\n            else if ( node != root ) {\n                while ( node.parentNode && node != root ) {\n                    node = node.parentNode;\n                    try {\n                        serializer.endNode( node.serializedNode );\n                    } catch (err) {\n                        node.serializedNode = undefined;\n                        continue;\n                    };\n                    try {\n                        delete node.serializedNode;\n                    } catch (e) {\n                        \/\/If we are failed to delete the property, than just set it to undefined\n                        node.serializedNode = undefined;\n                    }<\/p>\n<p>                    if ( node.nextSibling && node != root ) {\n                        node = node.nextSibling;\n                        break;\n                    }\n                }<\/p>\n<p>                if ( node == root ) {\n                    break;\n                }\n            }\n            else {\n                break;\n            }<\/p>\n<p>            var endTimeParsing = new Date().getTime();\n            if ( (endTimeParsing - startTimeParsing) >= PARSING_TIMEOUT_INTERVAL ) {\n                Evernote.Logger.debug(\"Parsing interval timeout: \" + (endTimeParsing - startTimeParsing));\n                parsingEnd = false;\n                break;\n            }\n        }<\/p>\n<p>        if (parsingEnd) {\n            Evernote.Logger.debug(\"Parsing end\");\n            callback();\n        }else {\n            Evernote.Logger.debug(\"Parsing repeat\");\n            setTimeout(asyncParser, 0);\n        }\n    };\n    setTimeout(asyncParser, 0);\n};<\/p>\n<p>\/**\n * Starts parsing from specified root.\n * @param root - starting DOM node.\n * @param fullPage - is user selects to serialize the full page\n * @param serializer - current serializer to be used to serialize the DOM node to string\n *\/\nEvernote.DomParser.prototype.parse = function ( root, fullPage, serializer ) {\n    Evernote.Logger.debug( \"DomParser.parse()\" );<\/p>\n<p>    if ( !root ) {\n        throw new Error( \"No root element for parsing\" );\n    }<\/p>\n<p>    var node = root;\n    var parentNode = null;<\/p>\n<p>    while ( node ) {\n        if ( node != root && node.parentNode ) {\n            parentNode = node.parentNode.serializedNode;\n        }<\/p>\n<p>        if ( this.isNodeForSerialize( node ) ) {\n            if ( node.nodeType == Evernote.Node.TEXT_NODE ) {\n                serializer.textNode( node, this._range );\n            }\n            else if ( node.nodeType == Evernote.Node.ELEMENT_NODE && this.isNodeVisible( node ) ) {\n                node.serializedNode = serializer.startNode( new Evernote.SerializedNode( node, parentNode ), root, fullPage );\n                if ( node.hasChildNodes() ) {\n                    node = node.childNodes[ 0 ];\n                    continue;\n                }\n                else {\n                    serializer.endNode( node.serializedNode );\n                    if ( node.serializedNode ) {\n                        try {\n                            delete node.serializedNode;\n                        } catch(e) {\n                            \/\/If we are failed to delete the property, than just set it to undefined\n                            node.serializedNode = undefined;\n                        }\n                    }\n                }\n            }\n        }<\/p>\n<p>        \/**\n         * Check if there is a next node available and it is not the root\n         *\/\n        if ( node.nextSibling && node != root ) {\n            node = node.nextSibling;\n        }\n        else if ( node != root ) {\n            while ( node.parentNode && node != root ) {\n                node = node.parentNode;\n                try {\n                    serializer.endNode( node.serializedNode );\n                } catch (err) {\n                    node.serializedNode = undefined;\n                    continue;\n                };<\/p>\n<p>                try {\n                    delete node.serializedNode;\n                } catch (e) {\n                    \/\/If we are failed to delete the property, than just set it to undefined\n                    node.serializedNode = undefined;\n                }<\/p>\n<p>                if ( node.nextSibling && node != root ) {\n                    node = node.nextSibling;\n                    break;\n                }\n            }<\/p>\n<p>            if ( node == root ) {\n                break;\n            }\n        }\n        else {\n            break;\n        }\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.NodeSerializer = function NodeSerializer( tab, styleStrategy, includeBg , isRange) {\n    this.initialize( tab, styleStrategy, includeBg , isRange);\n};<\/p>\n<p>Evernote.NodeSerializer.prototype._tab = null;\nEvernote.NodeSerializer.prototype._styleStrategy = null;\nEvernote.NodeSerializer.prototype._docBase = null;\nEvernote.NodeSerializer.prototype._imagesUrls = null;\nEvernote.NodeSerializer.prototype._isRange = null;\nEvernote.NodeSerializer.prototype._serializedDom = \"\";\nEvernote.NodeSerializer.prototype._includeBgStyles = true;<\/p>\n<p>Evernote.NodeSerializer.prototype.initialize = function ( tab, styleStrategy, includeBg ,isRange ) {\n    Evernote.Logger.debug( \"DomSerializer.initialize()\" );<\/p>\n<p>    this._tab = tab;\n    this._styleStrategy = (styleStrategy instanceof Evernote.ClipStylingStrategy) ? styleStrategy : null;\n    this._imagesUrls = [ ];\n    this._includeBgStyles = ( includeBg != null ) ? includeBg : true;\n    this._isRange = ( isRange != null ) ? isRange : false;\n    this.getDocumentBase();\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.startNode = function ( serializedNode, root, fullPage ) {\n    Evernote.Logger.debug( \"Start to serialize node :\" + serializedNode.node.nodeName + \", class = \" + serializedNode.node.className + \", id = \" + serializedNode.node.id );\n    try {\n        var node = serializedNode.node;\n        if ( Evernote.ClipRules.isConditionalNode( node ) && Evernote.ElementSerializerFactory.getImplementationFor( node ) != null ) {\n            var result = this.serializeConditionalNode( node, root, fullPage );\n            this._serializedDom += result.content;\n            \/\/ hack for desktop Win client\n            if ( result.imageUrl ) {\n                this._imagesUrls.push( result.imageUrl );\n            }\n            serializedNode.setStyle(result.nodeStyle);\n            return serializedNode;\n        }<\/p>\n<p>        if ( node.nodeName.toLowerCase() == \"embed\" ) {\n            var src = node.getAttribute( \"src\" );\n            if ( src && (src.indexOf(\".swf\", src.length - \".swf\".length) !== -1) ) {\n                serializedNode.setStyle(new Evernote.ClipStyle());\n                return serializedNode;\n            }\n        }<\/p>\n<p>        if ( node.nodeName.toLowerCase() == \"img\" ) {\n            var src = node.getAttribute( \"src\" );<\/p>\n<p>            if (src && src.indexOf('&') != -1) {\n                src =  src.slice(0, src.indexOf('&'));\n            }<\/p>\n<p>            var absoluteSource = Evernote.Utils.makeAbsolutePath(this._docBase, src).replace(\/\\s\/g, \"%20\");\n            node.setAttribute( \"type\", \"put-media-type-here-for-\" + absoluteSource);\n            node.setAttribute( \"hash\", \"put-hash-type-here-for-\" + absoluteSource);\n            node.setAttribute( \"src\", src);<\/p>\n<p>            if ( src && src.indexOf( \"data:image\" ) < 0 ) {\n                this._imagesUrls.push( src );\n            }\n        }\n\n        var attrsStr = this.serializeAttributes( node );\n        var stylesStr = \"\";\n\n        var nodeName = Evernote.ClipRules.translateNode( node );\n\n        if ( this._styleStrategy ) {\n\n            var nodeStyle = this._styleStrategy.styleForNode( node, root, fullPage, Evernote.ClipStyleType.Default ).evaluated;\n\n            var inhBgStyle = null;\n            if ( this._includeBgStyles )\n                inhBgStyle = this._styleStrategy.styleForNode( node, root, fullPage, Evernote.ClipStyleType.InheritedBgStyle ).inheritedBackground;\n\n            if ( inhBgStyle != null )\n                for ( var inhI = inhBgStyle.length - 1; inhI >= 0; inhI-- ) {\n                    var inhStyle = inhBgStyle[inhI];\n                    this._serializedDom += \"<\/p>\n<div \" + this.serializeStyles( node, inhStyle ) + \" >\";\n                    serializedNode.translateTo.push( \"div\" );\n                }<\/p>\n<p>            var pseudoStyle = this._styleStrategy.getNodeStyle( node, null, \":before\" );<\/p>\n<p>            if ( fullPage && node.nodeName.toLowerCase() == \"body\" ) {\n                var wrapBodyStyle = new Evernote.ClipStyle( nodeStyle, null, Evernote.ClipStyle.CSS_GROUP.getExtForStyle( \"background\" ) );\n                this._serializedDom += \"<\" + \"div\" + \" \" + this.serializeStyles( node, wrapBodyStyle ) + \" >\";\n                serializedNode.translateTo.push( \"div\" );\n                var bgGroup = Evernote.ClipStyle.CSS_GROUP.getExtForStyle( \"background\" );\n                for ( var ind in bgGroup ) {\n                    if ( bgGroup.hasOwnProperty( ind ) ) {\n                        nodeStyle.removeStyle( bgGroup[ind] );\n                    }\n                }\n            }<\/p>\n<p>            \/\/ Bug 47705. dirty fix, may cause problems in some cases.\n            if (this._isRange) {\n                nodeStyle.addSimpleStyle('height', node.currentStyle.height);\n            }<\/p>\n<p>            if ( !fullPage && node == root ) {\n                nodeStyle.removeStyle( \"float\" );\n            }\n            if ( !serializedNode.node.hasChildNodes() && !(nodeStyle.getStyle( \"height\" ) || node.getAttribute( \"height\" )) ) {\n                nodeStyle.addStyle( {height:\"0px\"} );\n            }\n            if ( !serializedNode.node.hasChildNodes() && !(nodeStyle.getStyle( \"width\" ) || node.getAttribute( \"width\" )) ) {\n                nodeStyle.addStyle( {width:\"0px\"} );\n            }\n            if(nodeStyle.getStyle(\"position\") == \"fixed\") {\n                nodeStyle.addStyle({position: \"absolute\"});\n            }<\/p>\n<p>            if ( (node.nodeName.toUpperCase() == \"SPAN\"\/* || node.nodeName.toUpperCase() == \"A\"*\/) && node.getElementsByTagName( \"IMG\" ).length > 0) {\n                nodeName = \"div\";\n                if ( !nodeStyle.getStyle( \"display\" ) )\n                    nodeStyle.addStyle( {display:\"inline\"} );\n            }\n            if (node.nodeName.toUpperCase() == \"TH\" || node.nodeName.toUpperCase() == \"TD\") {\n                nodeStyle.addStyle( {display:\"table-cell\"} );\n            }<\/p>\n<p>            nodeStyle.removeDefaultCssStyle();<\/p>\n<p>            this._serializedDom += this.serializePseudoElement( node, pseudoStyle );\n            stylesStr = this.serializeStyles( node, nodeStyle );<\/p>\n<p>            if ( (nodeName.toLowerCase() == \"div\" \/*|| nodeName.toLowerCase() == \"span\"*\/) && nodeStyle.getStyle( \"float\" ) && nodeStyle.getStyle( \"float\" ) != \"none\" && serializedNode.parentNode && node.parentNode.nodeName.toLowerCase() != \"a\" ) {\n                if ( !serializedNode.node.nextSibling || serializedNode.node.nextSibling.nodeType == 3 )\n                    serializedNode.parentNode.isInlineBlock = true;\n            }\n        }<\/p>\n<p>        Evernote.Logger.debug( node.nodeName + \" \" + attrsStr + \" -> \" + nodeName + \" \" + stylesStr );<\/p>\n<p>        this._serializedDom += \"<\" + nodeName + \" \" + attrsStr + \" \" + stylesStr + \" >\";<\/p>\n<p>        serializedNode.setStyle(nodeStyle);\n        serializedNode.translateTo.push( nodeName );\n        return serializedNode;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"Failed to start serialize node :\" + e );\n        throw e;\n    }\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.serializePseudoElement = function ( node, pseudoStyle ) {\n    try {\n        var nodeName = Evernote.ClipRules.translateNode( node );\n        if ( pseudoStyle.getStylesNames().length > 0 ) {\n            var content = \"&nbsp;\";\n            if ( pseudoStyle.getStyle( \"content\" ) ) {\n                content = pseudoStyle.getStyle( \"content\" );\n                pseudoStyle.removeStyle( \"content\" );\n            }\n            var beforeStylesStr = this.serializeStyles( node, pseudoStyle );\n            return \"<\" + nodeName + \" \" + beforeStylesStr + \" >\" + content.replace( \/\"\/g, '' ) + \"<\/\" + nodeName + \">\";\n        }\n        return \"\";\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"Failed to  serialize pseudo element :\" + e );\n        throw e;\n    }\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.textNode = function ( node, range ) {\n    this._serializedDom += this.serializeTextNode( node, range );\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.endNode = function ( serializedNode ) {\n    try {\n        Evernote.Logger.debug( \"end serialize node :\" + serializedNode.translateTo );<\/p>\n<p>        if ( serializedNode.isInlineBlock ) {\n            var name = \"div\";\n            if ( serializedNode.node.nodeName.toLowerCase() == \"ul\" ) {\n                name = \"li\"\n            }\n            this._serializedDom += \"<\" + name + \" style=\\\"clear: both; width: 0px; height: 0px;\\\">\" + \"&nbsp;\" + \"<\/\" + name + \">\"\n        }<\/p>\n<p>        var node = serializedNode.node;\n        var serializedPseudo = \"\";\n        var pseudoStyle = new Evernote.ClipStyle();\n        if ( this._styleStrategy ) {\n            pseudoStyle = this._styleStrategy.getNodeStyle( node, null, \":after\" );\n            if ( pseudoStyle.getStylesNames().length > 0 ) {\n                var floatStyle = serializedNode.getStyle().getStyle( \"float\" );\n                if ( floatStyle && !pseudoStyle.getStyle( \"float\" ) )\n                    pseudoStyle.addStyle( { \"float\" : floatStyle } );<\/p>\n<p>                if ( node.nodeName.toLowerCase() == \"ul\" )\n                    serializedPseudo = this.serializePseudoElement( document.createElement( \"div\" ), pseudoStyle );\n            }\n        }<\/p>\n<p>        while ( serializedNode.translateTo.length > 0 ) {\n            var nodeName = serializedNode.translateTo.pop();\n            if ( !Evernote.ClipRules.isSelfClosingNode( serializedNode.node ) ) {\n                if ( !serializedNode.node.hasChildNodes() )\n                    this._serializedDom += \"&nbsp;\";\n            }<\/p>\n<p>            if ( nodeName.toLowerCase() == \"ul\" ) {\n                this._serializedDom += this.serializePseudoElement( document.createElement( \"li\" ), pseudoStyle );\n            }\n            this._serializedDom += \"<\/\" + nodeName + \">\";\n        }<\/p>\n<p>        this._serializedDom += serializedPseudo;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"Failed to end serialize node :\" + e );\n        throw e;\n    }\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.serializeTextNode = function ( node, range ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeTextNode()\" );<\/p>\n<p>    try {\n        var nodeValue = node.nodeValue;\n        if ( !range ) {\n            return Evernote.Utils.htmlEncode( nodeValue );\n        }\n        else {\n            if ( range.startContainer == node && range.startContainer == range.endContainer ) {\n                return Evernote.Utils.htmlEncode( nodeValue.substring( range.startOffset, range.endOffset ) );\n            }\n            else if ( range.startContainer == node ) {\n                return Evernote.Utils.htmlEncode( nodeValue.substring( range.startOffset ) );\n            }\n            else if ( range.endContainer == node ) {\n                return Evernote.Utils.htmlEncode( nodeValue.substring( 0, range.endOffset ) );\n            }\n            else if ( range.commonAncestorContainer != node ) {\n                return Evernote.Utils.htmlEncode( nodeValue );\n            }\n        }\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DomSerializer.serializeTextNode() failed \" + e );\n        throw e;\n    }<\/p>\n<p>    return \"\";\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.serializeConditionalNode = function ( node, root, fullPage ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeConditionalNode()\" );\n    var impl = Evernote.ElementSerializerFactory.getImplementationFor( node );\n    if ( typeof impl == 'function' ) {\n        var nodeStyle = (this._styleStrategy) ? this._styleStrategy.styleForNode( node, root, fullPage ).evaluated : null;\n        if (nodeStyle)\n            nodeStyle.removeDefaultCssStyle();\n        var serializer = new impl( node, nodeStyle );\n        var content = serializer.serialize( this._docBase );\n        var imageUrl = serializer.getImageUrl();<\/p>\n<p>        return { content:content, imageUrl:imageUrl, nodeStyle:nodeStyle };\n    }<\/p>\n<p>    return { content:\"\", imageUrl:\"\", nodeStyle:new Evernote.ClipStyle() };\n};<\/p>\n<p>Evernote.NodeSerializer.prototype.serializeAttributes = function ( node ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeAttributes()\" );<\/p>\n<p>    try {\n        var attrs = node.attributes;\n        var str = \"\";<\/p>\n<p>        for ( var i = 0; i < attrs.length; ++i ) {\n            if ( !Evernote.ClipRules.isNoKeepNodeAttr( attrs[ i ], Evernote.ClipRules.translateNode( node ), node ) ) {\n                var attrValue = (attrs[ i ].value) ? Evernote.GlobalUtils.escapeXML( attrs[ i ].value ) : \"\";\n                if ( (attrs[ i ].name.toLowerCase() == \"src\" || attrs[ i ].name.toLowerCase() == \"href\") &#038;&#038; attrValue.toLowerCase().indexOf( \"http\" ) != 0 ) {\n                    attrValue = Evernote.Utils.makeAbsolutePath( this._docBase, attrValue );\n                }\n                str += \" \" + attrs[ i ].name.toLowerCase() + \"=\\\"\" + attrValue + \"\\\"\";\n            }\n        }\n\n        return str;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DomSerializer.serializeAttributes() failed: error = \" + e );\n    }\n\n    return \"\";\n};\n\nEvernote.NodeSerializer.prototype.serializeStyles = function ( node, nodeStyle ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeStyles()\" );\n\n    try {\n        var str = \"\";\n        if(node.nodeName.toLowerCase() == \"map\") {\n            \/\/Map should not have style attribute according to Evernote DTD\n            return \"\";\n        }\n        if ( node &#038;&#038; nodeStyle instanceof Evernote.ClipStyle ) {\n            str += \" style=\\\"\" + nodeStyle.toString().replace( \/\"\/g, \"\" ) + \"\\\"\";\n        }\n        return str;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DomSerializer.serializeStyles() failed: error = \" + e );\n        throw e;\n    }\n    return \"\";\n};\n\nEvernote.NodeSerializer.prototype.getDocumentBase = function () {\n    Evernote.Logger.debug( \"DomSerializer.getDocumentBase()\" );\n\n    if ( !this._docBase ) {\n        var baseTags = this._tab.document.getElementsByTagName( \"base\" );\n        for ( var i = 0; i < baseTags.length; ++i ) {\n            var baseTag = baseTags[ i ];\n            if ( typeof baseTag == 'string' &#038;&#038; baseTag.indexOf( \"http\" ) == 0 ) {\n                this._docBase = baseTag;\n            }\n            if ( this._docBase ) {\n                break;\n            }\n        }\n\n        if ( !this._docBase ) {\n            var location = this._tab.document.location;\n            this._docBase = location.protocol + \"\/\/\" + location.host + location.pathname.replace( \/[^\\\/]+$\/, \"\" );\n        }\n    }\n\n    return this._docBase;\n};\n\nEvernote.NodeSerializer.prototype.getImagesUrls = function () {\n    return this._imagesUrls;\n};\n\nEvernote.NodeSerializer.prototype.getSerializedDom = function () {\n    return '\n\n<div style=\"position: relative;\">' + this._serializedDom.replace(\/[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]+\/g, \"\") + '<\/div>\n<p>';\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/\/\"use strict\";<\/p>\n<p>Evernote.SerializedNode = function SerializedNode( node, parent ) {\n    this.node = node;\n    this._parentSerializedNode = parent;\n    this.translateTo = [ ];\n};<\/p>\n<p>Evernote.SerializedNode.prototype.translateTo = null;\nEvernote.SerializedNode.prototype.node = null;\nEvernote.SerializedNode.prototype._parentSerializedNode = null;<\/p>\n<p>Evernote.SerializedNode.prototype.setStyle = function ( clipStyle ) {\n    this._clipStyle = clipStyle;\n};<\/p>\n<p>Evernote.SerializedNode.prototype.getStyle = function () {\n    return this._clipStyle;\n};<\/p>\n<p>Evernote.SerializedNode.prototype.parentNode = function () {\n    return this._parentSerializedNode;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/\/\"use strict\";<\/p>\n<p>Evernote.StylesCollection = function StylesCollection() {\n    this._styles = { };\n};<\/p>\n<p>Evernote.StylesCollection.prototype._styles = null;<\/p>\n<p>Evernote.StylesCollection.prototype.addStyle = function( name, value, isImportant ) {\n    if ( typeof name == \"string\" && typeof value == \"string\" ) {\n        Evernote.Logger.debug( \"StylesCollection.addStyle(): name = \" + name + \", value = \" + value + \", isImportant = \" + isImportant );\n        this._styles[ name ] = new Evernote.ClipStyleProperty( name, value, isImportant);\n    }\n};<\/p>\n<p>Evernote.StylesCollection.prototype.getStyle = function( name ) {\n    if ( typeof name == \"string\" ) {\n        Evernote.Logger.debug( \"StylesCollection.getStyle(): name = \" + name + \" value: \" + ((typeof this._styles[ name ] != \"undefined\") ? this._styles[ name ].value() : null) );\n        return (typeof this._styles[ name ] != \"undefined\") ? this._styles[ name ].value() : null;\n    }<\/p>\n<p>    return null;\n};<\/p>\n<p>Evernote.StylesCollection.prototype.removeStyle = function( name ) {\n    if ( typeof name == \"string\" ) {\n        Evernote.Logger.debug( \"StylesCollection.removeStyle(): name = \" + name );<\/p>\n<p>        this._styles[ name ] = null;\n        delete this._styles[ name ];\n    }\n};<\/p>\n<p>Evernote.StylesCollection.prototype.isImportant = function( name ) {\n    if ( typeof name == \"string\" ) {\n        return (typeof this._styles[ name ] != \"undefined\") ? this._styles[ name ].isImportant() : false;\n    }\n};<\/p>\n<p>Evernote.StylesCollection.prototype.getStylesNames = function() {\n    Evernote.Logger.debug( \"StylesCollection.getStylesNames()\" );<\/p>\n<p>    var stylesNames = [ ];\n    for ( var key in this._styles ) {\n        if ( this._styles[ key ] != null ) {\n            stylesNames.push( key );\n        }\n    }<\/p>\n<p>    return stylesNames;\n};<\/p>\n<p>Evernote.StylesCollection.prototype.getStylesNumber = function() {\n    Evernote.Logger.debug( \"StylesCollection.getStylesNumber()\" );<\/p>\n<p>    var num = 0;\n    for ( var key in this._styles ) {\n        if ( this._styles[ key ] != null ) {\n            ++num;\n        }\n    }<\/p>\n<p>    return num;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.DataImageSerializer = function DataImageSerializer( node, nodeStyle ) {\n    if ( !nodeStyle ) {\n        nodeStyle = new Evernote.ClipStyle();\n    }<\/p>\n<p>    this.initialize( node, nodeStyle );\n};<\/p>\n<p>Evernote.inherit( Evernote.DataImageSerializer, Evernote.AbstractElementSerializer, true );<\/p>\n<p>Evernote.DataImageSerializer.isResponsibleFor = function( node ) {\n    try {\n        if ( node && node.nodeType == Evernote.Node.ELEMENT_NODE && node.nodeName.toLowerCase() == \"img\" ) {\n            var src = node.getAttribute( \"src\" );\n            if ( src && src.indexOf( \"data:image\" ) != -1 ) {\n                return true;\n            }\n        }\n    } catch(e) {\n        Evernote.Logger.error(\"DataImageSerializer.isResponsibleFor failed due to error \" + e);\n    }\n    return false;\n};<\/p>\n<p>Evernote.DataImageSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    Evernote.Logger.debug( \"DataImageSerializer.serialize()\" );<\/p>\n<p>    try {\n        this._nodeStyle.addStyle( { \"background-image\" : \"url('\" + this._node.getAttribute( \"src\" ) + \"')\",\n            \"width\" : this._node.offsetWidth + \"px\",\n            \"height\" : this._node.offsetHeight + \"px\",\n            \"background-repeat\" : \"no-repeat\",\n            \"display\" : \"block\" } );<\/p>\n<p>        return \"<span style=\\\"\" + this._nodeStyle.toString().replace( \/\"\/g, \"\" ) + \"\\\"\" + \">&nbsp;<\/span>\";\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DataImageSerializer.serialize() failed: error = \" + e );\n    }<\/p>\n<p>    return \"\";\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.VideoElementSerializer = function VideoElementSerializer( node, nodeStyle ) {\n    this.initialize( node, nodeStyle );\n};<\/p>\n<p>Evernote.inherit( Evernote.VideoElementSerializer, Evernote.AbstractElementSerializer, true );<\/p>\n<p>Evernote.VideoElementSerializer.isResponsibleFor = function( node ) {\n    return node && node.nodeType == Evernote.Node.ELEMENT_NODE && node.nodeName.toLowerCase() == \"video\";\n};<\/p>\n<p>Evernote.VideoElementSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    Evernote.Logger.debug( \"VideoElementSerializer.serialize()\" );<\/p>\n<p>    try {\n        var width = this._node.offsetWidth;\n        var height = this._node.offsetHeight;\n        var doc = this._node.ownerDocument;<\/p>\n<p>        var canvas = doc.createElement( \"CANVAS\" );\n        canvas.width = width;\n        canvas.height = height;<\/p>\n<p>        var context = canvas.getContext( \"2d\" );\n        context.drawImage( this._node, 0, 0, width, height );<\/p>\n<p>        var dataUrl = canvas.toDataURL( \"image\/png\" );\n        context.clearRect( 0, 0, width, height );<\/p>\n<p>        this._nodeStyle.addStyle( { \"background-image\" : \"url('\" + dataUrl + \"')\",\n            \"width\" : width + \"px\",\n            \"height\" : height + \"px\",\n            \"display\" : \"block\" } );<\/p>\n<p>        return \"<a style=\\\"\" + this._nodeStyle.toString().replace( \/\"\/g, \"\" ) + \"\\\"\" + \"href='\" + doc.defaultView.location.href + \"'>&nbsp;<\/a>\";\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"VideoElementSerializer.serialize() failed: error = \" + e );\n    }<\/p>\n<p>    return \"\";\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\n\/**\n * Serializes DOM element into an img pointing to the thumbnail of the video\n *\n * Video ids are used for obtaining thumbnails via\n * https:\/\/i2.ytimg.com\/vi\/cAcxHQalWOw\/hqdefault.jpg. These ids can be\n * obtained from:\n *\n * <\/p>\n<pre>\r\n *   - the URL of the document containing EMBED\r\n *   - iframe's src attribute that embeds the video via an iframe\r\n *   - src attribute of the embed object (though on actualy youtube.com it's not possible)\r\n * <\/pre>\n<p> *\n * Sample URLs are:\n *\n * <\/p>\n<pre>\r\n * http: \/\/www.youtube.com\/embed\/IWJJBwKhvp4?wmode=opaque&amp;rel=0\r\n * http: \/\/www.youtube.com\/v\/YZEbBZ2IrXE?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1\r\n * http: \/\/www.youtube.com\/v\/J3mjFSTsKiM&amp;hl=en&amp;fs=1\r\n * http:\/\/www.youtube.com\/watch?v=cAcxHQalWOw\r\n * http:\/\/www.youtube.com\/user\/IFiDieApp?v=sdzCELofGgE&feature=pyv\r\n * <\/pre>\n<p> *\/<\/p>\n<p>Evernote.YoutubeElementSerializer = function YoutubeElementSerializer( doc, node, nodeStyle ) {\n    this.initialize( doc, node, nodeStyle );\n};<\/p>\n<p>Evernote.inherit( Evernote.YoutubeElementSerializer, Evernote.AbstractElementSerializer, true );<\/p>\n<p>Evernote.YoutubeElementSerializer.WATCH_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/watch\\?.*v=([^&]+)\/i;\nEvernote.YoutubeElementSerializer.USER_CHANNEL_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/user\\\/([a-zA-Z0-9]+)\\?v=([^&]+)\/i;\nEvernote.YoutubeElementSerializer.EMBED_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/embed\\\/([^\\\/\\?&]+)\/i;\nEvernote.YoutubeElementSerializer.VIDEO_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/v\\\/([^\\\/\\?&]+)\/i;\nEvernote.YoutubeElementSerializer.POSSIBLE_CONTAINER_NODES = [ \"OBJECT\" ];\nEvernote.YoutubeElementSerializer.VIDEO_NODES = [ \"EMBED\", \"IFRAME\" ];\nEvernote.YoutubeElementSerializer.WATCH_URL = \"http:\/\/www.youtube.com\/watch?v=$videoId$\";\nEvernote.YoutubeElementSerializer.USER_CHANNEL_URL = \"http:\/\/www.youtube.com\/user\/$userId$?v=$videoId$\";\nEvernote.YoutubeElementSerializer.DEFAULT_THUMB_URL = \"https:\/\/i2.ytimg.com\/vi\/$videoId$\/default.jpg\";\nEvernote.YoutubeElementSerializer.HQ_THUMB_URL = \"https:\/\/i2.ytimg.com\/vi\/$videoId$\/hqdefault.jpg\";\nEvernote.YoutubeElementSerializer.DEFAULT_THUMB_WIDTH = 120;\nEvernote.YoutubeElementSerializer.DEFAULT_THUMB_HEIGHT = 90;<\/p>\n<p>Evernote.YoutubeElementSerializer.isResponsibleFor = function( node ) {\n    var params = this.extractVideoParamsFromNode( node );\n    return (params) ? true : false;\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.extractVideoParamsFromNode = function( node ) {\n    Evernote.Logger.debug( \"YoutubeElementSerializer.extractVideoIdFromNode()\" );\n    try {\n        if ( node && node.nodeType == Evernote.Node.ELEMENT_NODE ) {\n            var view = window;\n            try {\n                view = node.ownerDocument.defaultView;\n            }\n            catch ( e ) {\n            }<\/p>\n<p>            var matches = null;\n            if ( view && (node.nodeName.toLowerCase() == \"embed\" || node.nodeName.toLowerCase() == \"object\") && view.location ) {\n                if ( (matches = view.location.href.match( this.WATCH_URL_REGEX )) && matches[ 1 ] ) {\n                    return matches[ 1 ];\n                }\n                else if ( (matches = view.location.href.match( this.USER_CHANNEL_URL_REGEX )) && matches[ 1 ] && matches[ 2 ] ) {\n                    return [ matches[ 1 ], matches[ 2 ] ];\n                }\n            }\n            else {\n                var videoNode = this.findVideoNode( node );\n                if ( videoNode ) {\n                    var src = videoNode.getAttribute( \"src\" );\n                    if ( src && (matches = src.match( this.EMBED_URL_REGEX )) && matches[ 1 ] ) {\n                        return matches[ 1 ];\n                    }\n                    else if ( src && (matches = src.match( this.VIDEO_URL_REGEX )) && matches[ 1 ] ) {\n                        return matches[ 1 ];\n                    }\n                }\n            }\n        }\n    } catch(e) {\n        Evernote.Logger.error(\"failed to YoutubeElementSerializer.extractVideoParamsFromNode due to error \" + e);\n    }<\/p>\n<p>    return null;\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.findVideoNode = function( node ) {\n    Evernote.Logger.debug( \"YoutubeElementSerializer.findVideoNode()\" );<\/p>\n<p>    if ( node && node.nodeType == Evernote.Node.ELEMENT_NODE ) {\n        if ( Evernote.ArrayExtension.indexOf(this.VIDEO_NODES,  node.nodeName.toUpperCase() ) >= 0 ) {\n            return node;\n        }\n        else if ( Evernote.ArrayExtension.indexOf(this.POSSIBLE_CONTAINER_NODES, node.nodeName.toUpperCase() ) >= 0 ) {\n            try {\n                var it = node.ownerDocument.createNodeIterator( node, NodeFilter.SHOW_ELEMENT, null, false );\n                var next = null;<\/p>\n<p>                while ( next = it.nextNode() ) {\n                    if ( Evernote.ArrayExtension.indexOf(this.VIDEO_NODES, next.nodeName.toUpperCase() ) >= 0 ) {\n                        return next;\n                    }\n                }\n            } catch(e) {\n                \/\/We ignore exception here, because if node iterator is not supported, than we could skip old pages (not Youtube).\n                return null;\n            }\n        }\n    }<\/p>\n<p>    return null;\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype._imageUrl = \"\";<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    Evernote.Logger.debug( \"YoutubeElementSerializer.serialize()\" );<\/p>\n<p>    try {\n        var userId = null;\n        var videoId = null;\n        var params = this.constructor.extractVideoParamsFromNode( this._node );\n        if ( params instanceof Array ) {\n            userId = params[ 0 ];\n            videoId = params[ 1 ];\n        }\n        else if ( typeof params == \"string\" ) {\n            videoId = params;\n        }<\/p>\n<p>        if ( videoId ) {\n            var thumbUrl = null;\n            var w = 0;\n            var h = 0;<\/p>\n<p>            if ( this._nodeStyle ) {<\/p>\n<p>                var view = window;\n                try {\n                    view = this._node.ownerDocument.defaultView;\n                }\n                catch ( e ) {\n                }<\/p>\n<p>                var computedStyles = Evernote.ElementExtension.getComputedStyle( this._node, null, view );<\/p>\n<p>                w = parseInt( Evernote.StyleElementExtension.getPropertyValue(computedStyles, \"width\" ) );\n                w = (isNaN( w )) ? 0 : w;<\/p>\n<p>                h = parseInt( Evernote.StyleElementExtension.getPropertyValue(computedStyles, \"height\" ) );\n                h = (isNaN( h )) ? 0 : h;<\/p>\n<p>                if ( w < this.constructor.DEFAULT_THUMB_WIDTH || h < this.constructor.DEFAULT_THUMB_HEIGHT ) {\n                    thumbUrl = this.getDefaultThumbnailUrl( videoId );\n                }\n                else {\n                    thumbUrl = this.getHQThumbnailUrl( videoId );\n                }\n            }\n            else {\n                thumbUrl = this.getDefaultThumbnailUrl( videoId );\n            }\n\n            if ( thumbUrl ) {\n                var styleStr = (this._nodeStyle instanceof Evernote.ClipStyle) ? (\"style=\\\"\" + this._nodeStyle.toString() + \"\\\"\") : \"\";\n                var attrs = this._node.attributes;\n                var attrStr = \"\";\n\n                for ( var i = 0; i < attrs.length; ++i ) {\n                    var attr = attrs[ i ];\n                    if(Evernote.ClipRules.KEEP_NODE_ATTRIBUTES[\"a\"][attr.name]) {\n                        attrStr += attr.name;\n                        if ( attr.value ) {\n                            attrStr += \"=\" + attr.value;\n                        }\n                        attrStr += \" \";\n                    }\n                }\n\n                var href = ( userId ) ? this.getUserChannelUrl( userId, videoId ) : this.getWatchUrl( videoId );\n                var imgAttrStr = \"\";\n\n                if ( w &#038;&#038; h ) {\n                    var k = w \/ h;\n                    \/\/ scale by height\n                    if ( k > this.constructor.DEFAULT_THUMB_WIDTH \/ this.constructor.DEFAULT_THUMB_HEIGHT ) {\n                        imgAttrStr += \"height=\\\"\" + h + \"\\\"\";\n                    }\n                    else { \/\/ scale by width\n                        imgAttrStr += \"width=\\\"\" + w + \"\\\"\";\n                    }\n                }<\/p>\n<p>                this._imageUrl = thumbUrl;\n                return \"<a \" + styleStr + \" \" + attrStr + \" href=\\\"\" + href + \"\\\"><img src=\\\"\" + thumbUrl + \"\\\" \" + imgAttrStr + \"\/><\/a>\";\n            }\n        }\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"YoutubeElementSerializer.serialize() failed: error = \" + e );\n    }<\/p>\n<p>    return \"\";\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype.getDefaultThumbnailUrl = function( videoId ) {\n    return this.constructor.DEFAULT_THUMB_URL.replace( \/\\$videoId\\$\/, videoId );\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype.getHQThumbnailUrl = function( videoId ) {\n    return this.constructor.HQ_THUMB_URL.replace( \/\\$videoId\\$\/, videoId );\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype.getWatchUrl = function( videoId ) {\n    return this.constructor.WATCH_URL.replace( \/\\$videoId\\$\/, videoId );\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype.getUserChannelUrl = function( userId, videoId ) {\n    return this.constructor.USER_CHANNEL_URL.replace( \/\\$userId\\$\/, userId ).replace( \/\\$videoId\\$\/, videoId );\n};<\/p>\n<p>Evernote.YoutubeElementSerializer.prototype.getImageUrl = function() {\n    return this._imageUrl;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.IEStylePropertiesMapping = {<\/p>\n<p>    _mapping : {\n        \"background-attachment\" : \"backgroundAttachment\",\n        \"background-color\" : \"backgroundColor\",\n        \"background-image\" : \"backgroundImage\",\n        \"background-repeat\" : \"backgroundRepeat\",\n        \"background-position-x\" : \"backgroundPositionX\",\n        \"background-position-y\" : \"backgroundPositionY\",<\/p>\n<p>        \"border-bottom-color\" : \"borderBottomColor\",\n        \"border-bottom-style\" : \"borderBottomStyle\",\n        \"border-bottom-width\" : \"borderBottomWidth\",<\/p>\n<p>        \"border-left-color\" : \"borderLeftColor\",\n        \"border-left-style\" : \"borderLeftStyle\",\n        \"border-left-width\" : \"borderLeftWidth\",<\/p>\n<p>        \"border-right-color\" : \"borderRightColor\",\n        \"border-right-style\" : \"borderRightStyle\",\n        \"border-right-width\" : \"borderRightWidth\",<\/p>\n<p>        \"border-top-color\" : \"borderTopColor\",\n        \"border-top-style\" : \"borderTopStyle\",\n        \"border-top-width\" : \"borderTopWidth\",\n        \"border-collapse\" : \"borderCollapse\",<\/p>\n<p>        \"font-family\" : \"fontFamily\",\n        \"font-size\" : \"fontSize\",\n        \"font-style\" : \"fontStyle\",\n        \"font-weight\" : \"fontWeight\",<\/p>\n<p>        \"float\" : \"styleFloat\",<\/p>\n<p>        \"ime-mode\" : \"imeMode\",<\/p>\n<p>        \"letter-spacing\" : \"letterSpacing\",<\/p>\n<p>        \"line-height\" : \"lineHeight\",<\/p>\n<p>        \"list-style-image\" : \"listStyleImage\",\n        \"list-style-position\" : \"listStylePosition\",\n        \"list-style-type\" : \"listStyleType\",<\/p>\n<p>        \"margin-bottom\" : \"marginBottom\",\n        \"margin-left\" : \"marginLeft\",\n        \"margin-right\" : \"marginRight\",\n        \"margin-top\" : \"marginTop\",<\/p>\n<p>        \"max-height\" : \"maxHeight\",\n        \"max-width\" : \"maxWidth\",\n        \"min-height\" : \"minHeight\",\n        \"min-width\" : \"minWidth\",<\/p>\n<p>        \"overflow-x\" : \"overflowX\",\n        \"overflow-y\" : \"overflowY\",<\/p>\n<p>        \"padding-bottom\" : \"paddingBottom\",\n        \"padding-left\" : \"paddingLeft\",\n        \"padding-right\" : \"paddingRight\",\n        \"padding-top\" : \"paddingTop\",<\/p>\n<p>        \"page-break-after\" : \"pageBreakAfter\",\n        \"page-break-before\" : \"pageBreakBefore\",<\/p>\n<p>        \"table-layout\" : \"tableLayout\",<\/p>\n<p>        \"text-align\" : \"textAlign\",\n        \"text-decoration\" : \"textDecoration\",\n        \"text-indent\" : \"textIndent\",\n        \"text-overflow\" : \"textOverflow\",\n        \"text-transform\" : \"textTransform\",<\/p>\n<p>        \"vertical-align\" : \"verticalAlign\",\n        \"white-space\" : \"whiteSpace\",\n        \"word-spacing\" : \"wordSpacing\",\n        \"word-wrap\" : \"wordWrap\",\n        \"z-index\" : \"zIndex\"\n    },<\/p>\n<p>    getPropertyNameFor: function(styleName) {\n        return [styleName, this._mapping[styleName]];\n    },\n    getPropertiesList: function() {\n        return this._mapping;\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.StylesReplacementRegistry = {<\/p>\n<p>    registry: [],<\/p>\n<p>    getImplementationFor: function(name) {\n        if(name) {\n            return this.registry[name];\n        }\n        return null;\n    },<\/p>\n<p>    register: function(name, impl) {\n        this.registry[name] = impl;\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.FontSizeReplacement = {<\/p>\n<p>    SUPPORTED_FONT_SIZES: [\"em\", \"%\", \"pt\", \"px\"],<\/p>\n<p>    getValue: function(val) {\n        if(typeof val != \"string\")\n            return val;\n        if(this.isCalculationRequired(val)) {\n            return Evernote.Utils.getFontSizeInPixels(val) + \"px\";\n        } else {\n            \/\/Do not set browser dependant CSS since it does not supported by Evernote Chromium Viewer.\n            return null;\n        }\n    },<\/p>\n<p>    isCalculationRequired: function(val) {\n        for(var i = 0; i < this.SUPPORTED_FONT_SIZES.length; i++) {\n            if(val.indexOf(this.SUPPORTED_FONT_SIZES[i]) != -1) {\n                return true;\n            }\n        }\n        return false;\n    }\n};\n\nEvernote.StylesReplacementRegistry.register(\"font-size\", Evernote.FontSizeReplacement);\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ClipperElementsIdentifiers = {<\/p>\n<p>    _clipperElementsIds : [Constants.CLIP_DIALOG_ID, Constants.OPTIONS_DIALOG_ID, Constants.ATTR_DIALOG_ID, Constants.CLIP_DIALOG_NEW_ID, Constants.POST_CLIP_DIALOG_ID],<\/p>\n<p>    match: function(node) {\n        if(node && node.id) {\n            var position = Evernote.ArrayExtension.indexOf(this._clipperElementsIds, node.id);\n            if(position) {\n                return position != -1;\n            }\n        }\n        return false;\n    }\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.NotebooksLoader = {<\/p>\n<p>    notebooks: [],<\/p>\n<p>    \/\/ TODO: add cache;<\/p>\n<p>    getNotebookByUid: function(uid) {\n        Evernote.ResponseReceiver.subscribe(this);\n        Evernote.Addin.getNotebooks(document);\n        for(var i = 0; i < this.notebooks.length; i++) {\n            if(this.notebooks[i].uid == uid) {\n                return this.notebooks[i];\n            }\n        }\n        return null;\n    },\n\n    onDataReceived: function(response) {\n        if(response.type) {\n            if(response.type == \"notebooks\") {\n                this.notebooks = this.notebooks.concat(response.data);\n            }\n        }\n    }\n};\n\n\nEvernote.NotebooksPopupLoader = function( subscriber , doc ) {\n    this.subscriber = subscriber;\n    this.doc = doc;\n    this.cache = [];\n};\n\n\nEvernote.NotebooksPopupLoader.prototype.getNotebooksAsync = function( onSuccess ) {\n    var self = this;\n    var countNotebooksResponse = 0;\n\n    Evernote.Addin.getNotebooksAsync(function(response, args)\n    {\n        if (Evernote.NotebookResponseParser.canParse(response))\n        {\n            var res = Evernote.NotebookResponseParser.parse(response);\n            countNotebooksResponse++;\n            self.subscriber.updateNotebooks.call(self.subscriber, res.data);\n\n            if (countNotebooksResponse == 3)\n            {\n                onSuccess();\n            }\n        }\n    });\n\n\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Notebook = function(type, name, uid, stack, author, hidden, typeText) {\n    this.type = type;\n    this.name = name;\n    this.uid = uid;\n    this.stack = stack;\n    this.author = author;\n    this.hidden = hidden;\n    this.typeText = typeText;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.Tag = function(name, uid) {\n    this.name = name;\n    this.uid = uid;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.NotebookTypes = {\n    PERSONAL: 1,\n    PERSONAL_TEXT: 'pers',\n    BUSINESS: 2,\n    BUSINESS_TEXT: 'biz',\n    LINKED: 3,\n    LINKED_TEXT: 'linked'\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.ErrorCodes = {\n    AUTHENTICATION_ERROR: \"LoginFailure\",\n    CLIP_ERROR: \"NoteImportFailure\",\n    CONNECTION_FAILED: \"ConnectionAttemptFailed\"\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\nEvernote.AuthenticatedException = function(msg){\n    this.msg = msg;\n    this.code = Evernote.ErrorCodes.AUTHENTICATION_ERROR;\n};\t<\/script><br \/>\n\t<script charset=\"ANSI\" defer=\"defer\" type=\"text\/javascript\">\ntry {\n    Evernote.Addin.init(EvernoteExternal.Addin);\n    Evernote.Addin.resetAuthenticatedState();\n    Evernote.FS.init(EvernoteExternal.Addin);\n    Evernote.Logger = Evernote.LoggerConfigurator.getLogger();\n    if(!Evernote.JQuery)\n        Evernote.JQueryLoader.initJQuery();\n    window.jQueryForClearlyComponent = Evernote.JQuery;\n    initClearly(window);<\/p>\n<p>    \/\/ todo: create bulletproof function for popup close before context-clipping.\n    if (Evernote.evernotePopup) Evernote.evernotePopup.hide();\n    if (Evernote.SkitchController) Evernote.SkitchController.clearSkitch();<\/p>\n<p>    Evernote.Logger.debug(\"Init EnClipper\");\n    Evernote.EnClipper.init();\n    Evernote.Logger.debug(\"EnClipper initialized\");\n    Evernote.pageInfo = new PageInfo();\n    if (!Evernote.contentPreviewer) Evernote.contentPreviewer = new ContentPreview();\n    Evernote.Options.load();<\/p>\n<p>    Evernote.evernotePostClipPopup = new Evernote.PostClipPopup( document );<\/p>\n<p>    if (EvernoteExternal.Addin.isServerAvailable()) {\n        Evernote.Clipper.clipWithOptions(EvernoteExternal.clipOptions);\n    }\n} catch(e) {\n    throw e;\n}\t<\/script><\/p>\n<style id=\"_clearly_component__css\" type=\"text\/css\">\n#next_pages_container { width: 5px; hight: 5px; position: absolute; top: -100px; left: -100px; z-index: 2147483647 !important; }\t<\/style>\n<div id=\"_clearly_component__next_pages_container\">\n\t\t&nbsp;\n\t<\/div>\n<div id=\"evernoteScreenShotArea\">\n<div class=\"screenAreaStartVertLine\">\n\t\t\t&nbsp;\n\t\t<\/div>\n<div class=\"screenAreaStartHorizLine\">\n\t\t\t&nbsp;\n\t\t<\/div>\n<div id=\"screenAreaSelected\">\n\t\t\t&nbsp;\n\t\t<\/div>\n<\/p><\/div>\n<p>\t<\/\\><\/noscript[^><\/script[^><\/\\><\/script[^><\/\\s+><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u73fe\u5728\u3001\u671d\uff16\u6642\u306e\u6642\u70b9\u3067\u66b4\u98a8\u8b66\u5831\u304c\u51fa\u3066\u304a\u308a\u307e\u3059\u304c\u3001\u9ce5\u53d6\u770c\u3067\u306f\u53f0\u98a8\u306e\u66b4\u98a8\u570f\u304b\u3089\u96e2\u308c\u3064\u3064\u3042\u308a\u3001\u30d0\u30b9\u306e\u904b\u884c\u6642\u9593\u306e\u9803\u306b\u306f\u5f71\u97ff\u3082\u5c11\u306a\u304f\u306a\u3063\u3066\u3044\u308b\u898b\u8fbc\u307f\u3067\u3059\u306e\u3067\u3001\u901a\u5e38\u901a\u308a\u30d0\u30b9\u306e\u904b\u884c\u3082\u884c\u3044\u307e\u3059\u3002 \u30d0\u30b9\u306f\u901a\u5e38\u901a\u308a\u904b\u884c\u3057\u307e\u3059\u304c\u3001\u307e\u3060\u5c11\u3057\u98a8\u96e8\u306e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[13],"tags":[],"class_list":["post-7432","post","type-post","status-publish","format-standard","hentry","category-13"],"jetpack_publicize_connections":[],"_links":{"self":[{"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=\/wp\/v2\/posts\/7432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7432"}],"version-history":[{"count":1,"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=\/wp\/v2\/posts\/7432\/revisions"}],"predecessor-version":[{"id":7433,"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=\/wp\/v2\/posts\/7432\/revisions\/7433"}],"wp:attachment":[{"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7432"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yonago-k.ed.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}