+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0-vsdoc.js b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0-vsdoc.js
new file mode 100644
index 00000000..d8ef75cc
--- /dev/null
+++ b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0-vsdoc.js
@@ -0,0 +1,365 @@
+/*
+ * This file has been commented to support Visual Studio Intellisense.
+ * You should not use this file at runtime inside the browser--it is only
+ * intended to be used only for design-time IntelliSense. Please use the
+ * standard jHtmlArea library for all production use.
+ */
+
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(options) {
+ ///
+ /// 1: (options) - Convert all TextArea DOM Elements to be displayed as jHtmlArea WYSIWYG Editors.
+ /// 2: (string, arguments) - This function accepts a string containing the method name that you want to execute against the jHtmlArea object.
+ ///
+ ///
+ /// 1: options - The custom options you want applied to the jHtmlArea's that are created.
+ /// 2: string - The name of the jHtmlArea object method to be executed. The results of the method call are then returned instead of the jQuery object.
+ ///
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor. Required.
+ ///
+ ///
+ /// The custom options you want applied to the jHtmlArea that is created. Optional.
+ ///
+ ///
+ /// The Default Options that are used for configuring the jHtmlArea WYSIWYG Editor upon creation.
+ ///
+ ///
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Required. The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Optional. The custom options you want applied to the jHtmlArea that is created.
+ ///
+ ///
+ },
+ execCommand: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ ec: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range. An alias for the "execCommand" method.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ queryCommandValue: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ qc: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command. An alias for the "queryCommandValue" method.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ getSelectedHTML: function() {
+ ///
+ /// Returns the HTML that is currently selected within the editor.
+ ///
+ ///
+ },
+ getSelection: function() {
+ ///
+ /// Returns the Browser Selection object that represents the currently selected region of the editor.
+ ///
+ ///
+ },
+ getRange: function() {
+ ///
+ /// Returns the Browser Range object that represents the currently selected region of the editor. (This uses the "getSelection" method internally.)
+ ///
+ ///
+ },
+ html: function(v) {
+ ///
+ /// 1: () Returns the HTML text value contained within the editor. 2: (v) Sets the editors value to the HTML text passed in.
+ ///
+ ///
+ /// The HTML text to set the editors value to.
+ ///
+ },
+ pasteHTML: function(html) {
+ ///
+ /// Pastes HTML text into the editor, replacing any currently selected text and HTML elements.
+ ///
+ ///
+ /// The HTML text to paste/insert.
+ ///
+ },
+ cut: function() {
+ ///
+ /// Copies the current selection to the clipboard and then deletes it.
+ ///
+ },
+ copy: function() {
+ ///
+ /// Copies the current selection to the clipboard.
+ ///
+ },
+ paste: function() {
+ ///
+ /// Overwrites the contents of the clipboard on the current selection.
+ ///
+ },
+ bold: function() {
+ ///
+ /// Toggles the current selection between bold and nonbold.
+ ///
+ },
+ italic: function() {
+ ///
+ /// Toggles the current selection between italic and nonitalic.
+ ///
+ },
+ underline: function() {
+ ///
+ /// Toggles the current selection between underlined and not underlined.
+ ///
+ },
+ strikeThrough: function() {
+ ///
+ /// If there is a selection and all of the characters are already striked, the strikethrough will be removed. Otherwise, all selected characters will have a line drawn through them.
+ ///
+ },
+ image: function(url) {
+ ///
+ /// This command will insert an image (referenced by url) at the insertion point.
+ /// If no URL is specified, a prompt will be displayed to the user.
+ ///
+ ///
+ /// The URL to the Image to be inserted. If no URL is specified, a prompt will be shown.
+ ///
+ },
+ removeFormat: function() {
+ ///
+ /// Removes the formatting tags from the current selection.
+ ///
+ },
+ link: function() {
+ ///
+ /// Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
+ ///
+ },
+ unlink: function() {
+ ///
+ /// Removes any hyperlink from the current selection.
+ ///
+ },
+ orderedList: function() {
+ ///
+ /// Converts the text selection into an ordered list.
+ ///
+ },
+ unorderedList: function() {
+ ///
+ /// Converts the text selection into an unordered list.
+ ///
+ },
+ superscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already superscripted, the superscript will be removed. Otherwise, all selected characters will be drawn slightly higher than normal text.
+ ///
+ },
+ subscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already subscripted, the subscript will be removed. Otherwise, all selected characters will be drawn slightly lower than normal text.
+ ///
+ },
+
+ p: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h1: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h2: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h3: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h4: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h5: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h6: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ heading: function(h) {
+ ///
+ /// Sets the current block format tag to tag.
+ /// Example: Calling jHtmlArea.heading(2) will be the same as calling jHtmlArea.h2()
+ ///
+ ///
+ /// The Number of Header () tag to format the current block with.
+ /// For Example: Passing a 2 or "2" will cause the current block to be formatted with a
tag.
+ ///
+ },
+
+ indent: function() {
+ ///
+ /// Indents the selection or insertion point.
+ ///
+ },
+ outdent: function() {
+ ///
+ /// Outdents the selection or insertion point.
+ ///
+ },
+
+ insertHorizontalRule: function() {
+ ///
+ /// Inserts a horizontal rule at the insertion point (deletes selection).
+ ///
+ },
+
+ justifyLeft: function() {
+ ///
+ /// Justifies the selection or insertion point to the left.
+ ///
+ },
+ justifyCenter: function() {
+ ///
+ /// Centers the selection or insertion point.
+ ///
+ },
+ justifyRight: function() {
+ ///
+ /// Right-justifies the selection or the insertion point.
+ ///
+ },
+
+ increaseFontSize: function() {
+ ///
+ /// Increases the Font Size around the selection or at the insertion point.
+ ///
+ },
+ decreaseFontSize: function() {
+ ///
+ /// Decreases the Font Size around the selection or at the insertion point.
+ ///
+ },
+
+ forecolor: function(c) {
+ ///
+ /// Changes a font color for the selection or at the insertion point. Requires a color value string to be passed in as a value argument.
+ ///
+ },
+
+ formatBlock: function(v) {
+ ///
+ /// Sets the current block format tag.
+ ///
+ },
+
+ showHTMLView: function() {
+ ///
+ /// Shows the HTML/Source View (TextArea DOM Element) within the Editor and hides the WYSIWYG interface.
+ ///
+ },
+ hideHTMLView: function() {
+ ///
+ /// Hides the HTML/Source View (TextArea DOM Element) within the Editor and displays the WYSIWYG interface.
+ ///
+ },
+ toggleHTMLView: function() {
+ ///
+ /// Toggles between HTML/Source View (TextArea DOM Element) and the WYSIWYG interface within the Editor.
+ ///
+ },
+
+ toHtmlString: function() {
+ ///
+ /// Returns the HTML text contained within the editor.
+ ///
+ ///
+ },
+ toString: function() {
+ ///
+ /// Return the Text contained within the editor, with all HTML tags removed.
+ ///
+ ///
+ },
+
+ updateTextArea: function() {
+ ///
+ /// Forces the TextArea DOM Element to by sync'd with the contents of the HTML WYSIWYG Editor.
+ ///
+ },
+ updateHtmlArea: function() {
+ ///
+ /// Forces the HTML WYSIWYG Editor to be sync'd with the contents of the TextArea DOM Element.
+ ///
+ }
+ };
+ jHtmlArea.fn.init.prototype = jHtmlArea.fn;
+})(jQuery);
\ No newline at end of file
diff --git a/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.js b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.js
new file mode 100644
index 00000000..d1e360c4
--- /dev/null
+++ b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.js
@@ -0,0 +1,403 @@
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(opts) {
+ if (opts && typeof (opts) === "string") {
+ var args = [];
+ for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
+ var htmlarea = jHtmlArea(this[0]);
+ var f = htmlarea[opts];
+ if (f) { return f.apply(htmlarea, args); }
+ }
+ return this.each(function() { jHtmlArea(this, opts); });
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ if (elem.jquery) {
+ return jHtmlArea(elem[0]);
+ }
+ if (elem.jhtmlareaObject) {
+ return elem.jhtmlareaObject;
+ } else {
+ return new jHtmlArea.fn.init(elem, options);
+ }
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ if (elem.nodeName.toLowerCase() === "textarea") {
+ var opts = $.extend({}, jHtmlArea.defaultOptions, options);
+ elem.jhtmlareaObject = this;
+
+ var textarea = this.textarea = $(elem);
+ var container = this.container = $("").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea);
+
+ var toolbar = this.toolbar = $("").addClass("ToolBar").appendTo(container);
+ priv.initToolBar.call(this, opts);
+
+ var iframe = this.iframe = $("").height(textarea.height());
+ iframe.width(textarea.width() - ($.browser.msie ? 0 : 4));
+ var htmlarea = this.htmlarea = $("").append(iframe);
+
+ container.append(htmlarea).append(textarea.hide());
+
+ priv.initEditor.call(this, opts);
+ priv.attachEditorEvents.call(this);
+
+ // Fix total height to match TextArea
+ iframe.height(iframe.height() - toolbar.height());
+ toolbar.width(textarea.width() - 2);
+
+ if (opts.loaded) { opts.loaded.call(this); }
+ }
+ },
+ dispose: function() {
+ this.textarea.show().insertAfter(this.container);
+ this.container.remove();
+ this.textarea[0].jhtmlareaObject = null;
+ },
+ execCommand: function(a, b, c) {
+ this.iframe[0].contentWindow.focus();
+ this.editor.execCommand(a, b || false, c || null);
+ this.updateTextArea();
+ },
+ ec: function(a, b, c) {
+ this.execCommand(a, b, c);
+ },
+ queryCommandValue: function(a) {
+ this.iframe[0].contentWindow.focus();
+ return this.editor.queryCommandValue(a);
+ },
+ qc: function(a) {
+ return this.queryCommandValue(a);
+ },
+ getSelectedHTML: function() {
+ if ($.browser.msie) {
+ return this.getRange().htmlText;
+ } else {
+ var elem = this.getRange().cloneContents();
+ return $("
").append($("").addClass(className).attr("title", altText).click(function() { action.call(that, $(this)); }));
+ };
+
+ function addButtons(arr) {
+ var ul = $("
").appendTo(that.toolbar);
+ for (var i = 0; i < arr.length; i++) {
+ var e = arr[i];
+ if ((typeof (e)).toLowerCase() === "string") {
+ if (e === "|") {
+ ul.append($(''));
+ } else {
+ var f = (function(e) {
+ // If button name exists in priv.toolbarButtons then call the "method" defined there, otherwise call the method with the same name
+ var m = priv.toolbarButtons[e] || e;
+ if ((typeof (m)).toLowerCase() === "function") {
+ return function(btn) { m.call(this, btn); };
+ } else {
+ return function() { this[m](); this.editor.body.focus(); };
+ }
+ })(e.toLowerCase());
+ var t = options.toolbarText[e.toLowerCase()];
+ ul.append(menuItem(e.toLowerCase(), t || e, f));
+ }
+ } else {
+ ul.append(menuItem(e.css, e.text, e.action));
+ }
+ }
+ };
+ if (options.toolbar.length !== 0 && priv.isArray(options.toolbar[0])) {
+ for (var i = 0; i < options.toolbar.length; i++) {
+ addButtons(options.toolbar[i]);
+ }
+ } else {
+ addButtons(options.toolbar);
+ }
+ },
+ attachEditorEvents: function() {
+ var t = this;
+
+ var fnHA = function() {
+ t.updateHtmlArea();
+ };
+
+ this.textarea.click(fnHA).
+ keyup(fnHA).
+ keydown(fnHA).
+ mousedown(fnHA).
+ blur(fnHA);
+
+
+
+ var fnTA = function() {
+ t.updateTextArea();
+ };
+
+ $(this.editor.body).click(fnTA).
+ keyup(fnTA).
+ keydown(fnTA).
+ mousedown(fnTA).
+ blur(fnTA);
+
+ $('form').submit(function() { t.toggleHTMLView(); t.toggleHTMLView(); });
+ //$(this.textarea[0].form).submit(function() { //this.textarea.closest("form").submit(function() {
+
+
+ // Fix for ASP.NET Postback Model
+ if (window.__doPostBack) {
+ var old__doPostBack = __doPostBack;
+ window.__doPostBack = function() {
+ if (t) {
+ if (t.toggleHTMLView) {
+ t.toggleHTMLView();
+ t.toggleHTMLView();
+ }
+ }
+ return old__doPostBack.apply(window, arguments);
+ };
+ }
+
+ },
+ isArray: function(v) {
+ return v && typeof v === 'object' && typeof v.length === 'number' && typeof v.splice === 'function' && !(v.propertyIsEnumerable('length'));
+ }
+ };
+})(jQuery);
\ No newline at end of file
diff --git a/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min-vsdoc.js b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min-vsdoc.js
new file mode 100644
index 00000000..0f11b1f4
--- /dev/null
+++ b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min-vsdoc.js
@@ -0,0 +1,357 @@
+/*
+ * This file has been commented to support Visual Studio Intellisense.
+ * You should not use this file at runtime inside the browser--it is only
+ * intended to be used only for design-time IntelliSense. Please use the
+ * standard jHtmlArea library for all production use.
+ */
+
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(options) {
+ ///
+ /// 1: (options) - Convert all TextArea DOM Elements to be displayed as jHtmlArea WYSIWYG Editors.
+ /// 2: (string, arguments) - This function accepts a string containing the method name that you want to execute against the jHtmlArea object.
+ ///
+ ///
+ /// 1: options - The custom options you want applied to the jHtmlArea's that are created.
+ /// 2: string - The name of the jHtmlArea object method to be executed. The results of the method call are then returned instead of the jQuery object.
+ ///
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor. Required.
+ ///
+ ///
+ /// The custom options you want applied to the jHtmlArea that is created. Optional.
+ ///
+ ///
+ /// The Default Options that are used for configuring the jHtmlArea WYSIWYG Editor upon creation.
+ ///
+ ///
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Required. The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Optional. The custom options you want applied to the jHtmlArea that is created.
+ ///
+ ///
+ },
+ execCommand: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ ec: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range. An alias for the "execCommand" method.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ queryCommandValue: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ qc: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command. An alias for the "queryCommandValue" method.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ getSelectedHTML: function() {
+ ///
+ /// Returns the HTML that is currently selected within the editor.
+ ///
+ ///
+ },
+ getSelection: function() {
+ ///
+ /// Returns the Browser Selection object that represents the currently selected region of the editor.
+ ///
+ ///
+ },
+ getRange: function() {
+ ///
+ /// Returns the Browser Range object that represents the currently selected region of the editor. (This uses the "getSelection" method internally.)
+ ///
+ ///
+ },
+ pasteHTML: function(html) {
+ ///
+ /// Pastes HTML text into the editor, replacing any currently selected text and HTML elements.
+ ///
+ ///
+ /// The HTML text to paste/insert.
+ ///
+ },
+ cut: function() {
+ ///
+ /// Copies the current selection to the clipboard and then deletes it.
+ ///
+ },
+ copy: function() {
+ ///
+ /// Copies the current selection to the clipboard.
+ ///
+ },
+ paste: function() {
+ ///
+ /// Overwrites the contents of the clipboard on the current selection.
+ ///
+ },
+ bold: function() {
+ ///
+ /// Toggles the current selection between bold and nonbold.
+ ///
+ },
+ italic: function() {
+ ///
+ /// Toggles the current selection between italic and nonitalic.
+ ///
+ },
+ underline: function() {
+ ///
+ /// Toggles the current selection between underlined and not underlined.
+ ///
+ },
+ strikeThrough: function() {
+ ///
+ /// If there is a selection and all of the characters are already striked, the strikethrough will be removed. Otherwise, all selected characters will have a line drawn through them.
+ ///
+ },
+ image: function(url) {
+ ///
+ /// This command will insert an image (referenced by url) at the insertion point.
+ /// If no URL is specified, a prompt will be displayed to the user.
+ ///
+ ///
+ /// The URL to the Image to be inserted. If no URL is specified, a prompt will be shown.
+ ///
+ },
+ removeFormat: function() {
+ ///
+ /// Removes the formatting tags from the current selection.
+ ///
+ },
+ link: function() {
+ ///
+ /// Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
+ ///
+ },
+ unlink: function() {
+ ///
+ /// Removes any hyperlink from the current selection.
+ ///
+ },
+ orderedList: function() {
+ ///
+ /// Converts the text selection into an ordered list.
+ ///
+ },
+ unorderedList: function() {
+ ///
+ /// Converts the text selection into an unordered list.
+ ///
+ },
+ superscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already superscripted, the superscript will be removed. Otherwise, all selected characters will be drawn slightly higher than normal text.
+ ///
+ },
+ subscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already subscripted, the subscript will be removed. Otherwise, all selected characters will be drawn slightly lower than normal text.
+ ///
+ },
+
+ p: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h1: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h2: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h3: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h4: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h5: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h6: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ heading: function(h) {
+ ///
+ /// Sets the current block format tag to tag.
+ /// Example: Calling jHtmlArea.heading(2) will be the same as calling jHtmlArea.h2()
+ ///
+ ///
+ /// The Number of Header () tag to format the current block with.
+ /// For Example: Passing a 2 or "2" will cause the current block to be formatted with a
tag.
+ ///
+ },
+
+ indent: function() {
+ ///
+ /// Indents the selection or insertion point.
+ ///
+ },
+ outdent: function() {
+ ///
+ /// Outdents the selection or insertion point.
+ ///
+ },
+
+ insertHorizontalRule: function() {
+ ///
+ /// Inserts a horizontal rule at the insertion point (deletes selection).
+ ///
+ },
+
+ justifyLeft: function() {
+ ///
+ /// Justifies the selection or insertion point to the left.
+ ///
+ },
+ justifyCenter: function() {
+ ///
+ /// Centers the selection or insertion point.
+ ///
+ },
+ justifyRight: function() {
+ ///
+ /// Right-justifies the selection or the insertion point.
+ ///
+ },
+
+ increaseFontSize: function() {
+ ///
+ /// Increases the Font Size around the selection or at the insertion point.
+ ///
+ },
+ decreaseFontSize: function() {
+ ///
+ /// Decreases the Font Size around the selection or at the insertion point.
+ ///
+ },
+
+ forecolor: function(c) {
+ ///
+ /// Changes a font color for the selection or at the insertion point. Requires a color value string to be passed in as a value argument.
+ ///
+ },
+
+ formatBlock: function(v) {
+ ///
+ /// Sets the current block format tag.
+ ///
+ },
+
+ showHTMLView: function() {
+ ///
+ /// Shows the HTML/Source View (TextArea DOM Element) within the Editor and hides the WYSIWYG interface.
+ ///
+ },
+ hideHTMLView: function() {
+ ///
+ /// Hides the HTML/Source View (TextArea DOM Element) within the Editor and displays the WYSIWYG interface.
+ ///
+ },
+ toggleHTMLView: function() {
+ ///
+ /// Toggles between HTML/Source View (TextArea DOM Element) and the WYSIWYG interface within the Editor.
+ ///
+ },
+
+ toHtmlString: function() {
+ ///
+ /// Returns the HTML text contained within the editor.
+ ///
+ ///
+ },
+ toString: function() {
+ ///
+ /// Return the Text contained within the editor, with all HTML tags removed.
+ ///
+ ///
+ },
+
+ updateTextArea: function() {
+ ///
+ /// Forces the TextArea DOM Element to by sync'd with the contents of the HTML WYSIWYG Editor.
+ ///
+ },
+ updateHtmlArea: function() {
+ ///
+ /// Forces the HTML WYSIWYG Editor to be sync'd with the contents of the TextArea DOM Element.
+ ///
+ }
+ };
+ jHtmlArea.fn.init.prototype = jHtmlArea.fn;
+})(jQuery);
\ No newline at end of file
diff --git a/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min.js b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min.js
new file mode 100644
index 00000000..08e84d93
--- /dev/null
+++ b/3.0/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min.js
@@ -0,0 +1,8 @@
+// jHtmlArea - http://jhtmlarea.codeplex.com - (c)2009 Chris Pietschmann
+(function($){$.fn.htmlarea=function(opts){if(opts&&typeof(opts)==="string"){var args=[];for(var i=1;i").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea);var toolbar=this.toolbar=$("").addClass("ToolBar").appendTo(container);priv.initToolBar.call(this,opts);var iframe=this.iframe=$("").height(textarea.height());iframe.width(textarea.width()-($.browser.msie?0:4));var htmlarea=this.htmlarea=$("").append(iframe);container.append(htmlarea).append(textarea.hide());priv.initEditor.call(this,opts);priv.attachEditorEvents.call(this);iframe.height(iframe.height()-toolbar.height());toolbar.width(textarea.width()-2);if(opts.loaded){opts.loaded.call(this);}}},dispose:function(){this.textarea.show().insertAfter(this.container);this.container.remove();this.textarea[0].jhtmlareaObject=null;},execCommand:function(a,b,c){this.iframe[0].contentWindow.focus();this.editor.execCommand(a,b||false,c||null);this.updateTextArea();},ec:function(a,b,c){this.execCommand(a,b,c);},queryCommandValue:function(a){this.iframe[0].contentWindow.focus();return this.editor.queryCommandValue(a);},qc:function(a){return this.queryCommandValue(a);},getSelectedHTML:function(){if($.browser.msie){return this.getRange().htmlText;}else{var elem=this.getRange().cloneContents();return $("").append($(elem)).html();}},getSelection:function(){if($.browser.msie){return this.editor.selection;}else{return this.iframe[0].contentDocument.defaultView.getSelection();}},getRange:function(){var s=this.getSelection();if(!s){return null;}
+return(s.getRangeAt)?s.getRangeAt(0):s.createRange();},html:function(v){if(v){this.pastHTML(v);}else{return toHtmlString();}},pasteHTML:function(html){this.iframe[0].contentWindow.focus();var r=this.getRange();if($.browser.msie){r.pasteHTML(html);}else if($.browser.mozilla){r.deleteContents();r.insertNode($((html.indexOf("<")!=0)?$("").append(html):html)[0]);}else{r.deleteContents();r.insertNode($(this.iframe[0].contentWindow.document.createElement("span")).append($((html.indexOf("<")!=0)?""+html+"":html))[0]);}
+r.collapse(false);r.select();},cut:function(){this.ec("cut");},copy:function(){this.ec("copy");},paste:function(){this.ec("paste");},bold:function(){this.ec("bold");},italic:function(){this.ec("italic");},underline:function(){this.ec("underline");},strikeThrough:function(){this.ec("strikethrough");},image:function(url){if($.browser.msie&&!url){this.ec("insertImage",true);}else{this.ec("insertImage",false,(url||prompt("Image URL:","http://")));}},removeFormat:function(){this.ec("removeFormat",false,[]);this.unlink();},link:function(){if($.browser.msie){this.ec("createLink",true);}else{this.ec("createLink",false,prompt("Link URL:","http://"));}},unlink:function(){this.ec("unlink",false,[]);},orderedList:function(){this.ec("insertorderedlist");},unorderedList:function(){this.ec("insertunorderedlist");},superscript:function(){this.ec("superscript");},subscript:function(){this.ec("subscript");},p:function(){this.formatBlock("
");},h1:function(){this.heading(1);},h2:function(){this.heading(2);},h3:function(){this.heading(3);},h4:function(){this.heading(4);},h5:function(){this.heading(5);},h6:function(){this.heading(6);},heading:function(h){this.formatBlock($.browser.msie?"Heading "+h:"h"+h);},indent:function(){this.ec("indent");},outdent:function(){this.ec("outdent");},insertHorizontalRule:function(){this.ec("insertHorizontalRule",false,"ht");},justifyLeft:function(){this.ec("justifyLeft");},justifyCenter:function(){this.ec("justifyCenter");},justifyRight:function(){this.ec("justifyRight");},increaseFontSize:function(){if($.browser.msie){this.ec("fontSize",false,this.qc("fontSize")+1);}else if($.browser.safari){this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size","larger")[0]);}else{this.ec("increaseFontSize",false,"big");}},decreaseFontSize:function(){if($.browser.msie){this.ec("fontSize",false,this.qc("fontSize")-1);}else if($.browser.safari){this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size","smaller")[0]);}else{this.ec("decreaseFontSize",false,"small");}},forecolor:function(c){this.ec("foreColor",false,c||prompt("Enter HTML Color:","#"));},formatBlock:function(v){this.ec("formatblock",false,v||null);},showHTMLView:function(){this.updateTextArea();this.textarea.show();this.htmlarea.hide();$("ul li:not(li:has(a.html))",this.toolbar).hide();$("ul:not(:has(:visible))",this.toolbar).hide();$("ul li a.html",this.toolbar).addClass("highlighted");},hideHTMLView:function(){this.updateHtmlArea();this.textarea.hide();this.htmlarea.show();$("ul",this.toolbar).show();$("ul li",this.toolbar).show().find("a.html").removeClass("highlighted");},toggleHTMLView:function(){(this.textarea.is(":hidden"))?this.showHTMLView():this.hideHTMLView();},toHtmlString:function(){return this.editor.body.innerHTML;},toString:function(){return this.editor.body.innerText;},updateTextArea:function(){this.textarea.val(this.toHtmlString());},updateHtmlArea:function(){this.editor.body.innerHTML=this.textarea.val();}};jHtmlArea.fn.init.prototype=jHtmlArea.fn;jHtmlArea.defaultOptions={toolbar:[["html"],["bold","italic","underline","strikethrough","|","subscript","superscript"],["increasefontsize","decreasefontsize"],["orderedlist","unorderedlist"],["indent","outdent"],["justifyleft","justifycenter","justifyright"],["link","unlink","image","horizontalrule"],["p","h1","h2","h3","h4","h5","h6"],["cut","copy","paste"]],css:null,toolbarText:{bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strike-Through",cut:"Cut",copy:"Copy",paste:"Paste",h1:"Heading 1",h2:"Heading 2",h3:"Heading 3",h4:"Heading 4",h5:"Heading 5",h6:"Heading 6",p:"Paragraph",indent:"Indent",outdent:"Outdent",horizontalrule:"Insert Horizontal Rule",justifyleft:"Left Justify",justifycenter:"Center Justify",justifyright:"Right Justify",increasefontsize:"Increase Font Size",decreasefontsize:"Decrease Font Size",forecolor:"Text Color",link:"Insert Link",unlink:"Remove Link",image:"Insert Image",orderedlist:"Insert Ordered List",unorderedlist:"Insert Unordered List",subscript:"Subscript",superscript:"Superscript",html:"Show/Hide HTML Source View"}};var priv={toolbarButtons:{strikethrough:"strikeThrough",orderedlist:"orderedList",unorderedlist:"unorderedList",horizontalrule:"insertHorizontalRule",justifyleft:"justifyLeft",justifycenter:"justifyCenter",justifyright:"justifyRight",increasefontsize:"increaseFontSize",decreasefontsize:"decreaseFontSize",html:function(btn){this.toggleHTMLView();}},initEditor:function(options){var edit=this.editor=this.iframe[0].contentWindow.document;edit.designMode='on';edit.open();edit.write(this.textarea.val());edit.close();if(options.css){var e=edit.createElement('link');e.rel='stylesheet';e.type='text/css';e.href=options.css;edit.getElementsByTagName('head')[0].appendChild(e);}},initToolBar:function(options){var that=this;var menuItem=function(className,altText,action){return $("
").appendTo(that.toolbar);for(var i=0;i'));}else{var f=(function(e){var m=priv.toolbarButtons[e]||e;if((typeof(m)).toLowerCase()==="function"){return function(btn){m.call(this,btn);};}else{return function(){this[m]();this.editor.body.focus();};}})(e.toLowerCase());var t=options.toolbarText[e.toLowerCase()];ul.append(menuItem(e.toLowerCase(),t||e,f));}}else{ul.append(menuItem(e.css,e.text,e.action));}}};if(options.toolbar.length!==0&&priv.isArray(options.toolbar[0])){for(var i=0;i").css({
+ position: "absolute",
+ left: position.left + opts.offsetLeft,
+ top: position.top + owner.height() + opts.offsetTop,
+ "z-index": opts["z-index"]
+ }).addClass("jHtmlAreaColorPickerMenu");
+
+ for (var i = 0; i < opts.colors.length; i++) {
+ var c = opts.colors[i];
+ $("").css("background-color", c).appendTo(picker).click(
+ (function(color) {
+ return function() {
+ if (opts.colorChosen) {
+ opts.colorChosen.call(this, color);
+ }
+ that.hide();
+ };
+ })(c)
+ );
+ }
+
+ $("").html("Automatic").addClass("automatic").appendTo(picker).click(
+ function() {
+ if (opts.colorChosen) {
+ opts.colorChosen.call(this, null);
+ }
+ that.hide();
+ }
+ );
+
+
+ var autoHide = false;
+ picker.appendTo(owner.parent()).
+ show().
+ mouseout(function() {
+ autoHide = true;
+ that.currentTimeout = window.setTimeout(function() { if (autoHide === true) { that.hide(); } }, 1000);
+ }).
+ mouseover(function() {
+ if (that.currentTimeout) {
+ window.clearTimeout(that.currentTimeout);
+ that.currentTimeout = null;
+ }
+ autoHide = false;
+ });
+ },
+ hide: function() {
+ this.picker.hide();
+ this.picker.remove();
+ }
+ };
+ menu.fn.init.prototype = menu.fn;
+
+ menu.defaultOptions = {
+ "z-index": 0,
+ offsetTop: 0,
+ offsetLeft: 0,
+ colors: [
+ "#ffffff",
+ "#cccccc",
+ "#c0c0c0",
+ "#999999",
+ "#666666",
+ "#333333",
+ "#000000",
+
+ "#ffcccc",
+ "#ff6666",
+ "#ff0000",
+ "#cc0000",
+ "#990000",
+ "#660000",
+ "#330000",
+
+ "#ffcc99",
+ "#ff9966",
+ "#ff9900",
+ "#ff6600",
+ "#cc6600",
+ "#993300",
+ "#663300",
+
+ "#ffff99",
+ "#ffff66",
+ "#ffcc66",
+ "#ffcc33",
+ "#cc9933",
+ "#996633",
+ "#663333",
+
+ "#ffffcc",
+ "#ffff33",
+ "#ffff00",
+ "#ffcc00",
+ "#999900",
+ "#666600",
+ "#333300",
+
+ "#99ff99",
+ "#66ff99",
+ "#33ff33",
+ "#33cc00",
+ "#009900",
+ "#006600",
+ "#003300",
+
+ "#99FFFF",
+ "#33FFFF",
+ "#66CCCC",
+ "#00CCCC",
+ "#339999",
+ "#336666",
+ "#003333",
+
+ "#CCFFFF",
+ "#66FFFF",
+ "#33CCFF",
+ "#3366FF",
+ "#3333FF",
+ "#000099",
+ "#000066",
+
+ "#CCCCFF",
+ "#9999FF",
+ "#6666CC",
+ "#6633FF",
+ "#6600CC",
+ "#333399",
+ "#330099",
+
+ "#FFCCFF",
+ "#FF99FF",
+ "#CC66CC",
+ "#CC33CC",
+ "#993399",
+ "#663366",
+ "#330033"
+ ],
+ colorChosen: null
+ };
+})(jQuery);
\ No newline at end of file
diff --git a/3.0/modules/pages/New folder/scripts/jHtmlArea.ColorPickerMenu-0.7.0.min.js b/3.0/modules/pages/New folder/scripts/jHtmlArea.ColorPickerMenu-0.7.0.min.js
new file mode 100644
index 00000000..768c9358
--- /dev/null
+++ b/3.0/modules/pages/New folder/scripts/jHtmlArea.ColorPickerMenu-0.7.0.min.js
@@ -0,0 +1,8 @@
+// jHtmlArea - http://jhtmlarea.codeplex.com - (c)2009 Chris Pietschmann
+(function($){if(jHtmlArea){var oldForecolor=jHtmlArea.fn.forecolor;jHtmlArea.fn.forecolor=function(c){if(c){oldForecolor.call(this,c);}else{var that=this;var rng=this.getRange();jHtmlAreaColorPickerMenu($(".forecolor",this.toolbar),{colorChosen:function(color){if($.browser.msie){rng.execCommand("ForeColor",false,color);}else{that.forecolor(color);}}});}};}
+var menu=window.jHtmlAreaColorPickerMenu=function(ownerElement,options){return new jHtmlAreaColorPickerMenu.fn.init(ownerElement,options);};menu.fn=menu.prototype={jhtmlareacolorpickermenu:"0.7.0",init:function(ownerElement,options){var opts=$.extend({},menu.defaultOptions,options);var that=this;var owner=this.owner=$(ownerElement);var position=owner.position();if(menu.instance){menu.instance.hide();}
+jHtmlAreaColorPickerMenu.instance=this;var picker=this.picker=$("").css({position:"absolute",left:position.left+opts.offsetLeft,top:position.top+owner.height()+opts.offsetTop,"z-index":opts["z-index"]}).addClass("jHtmlAreaColorPickerMenu");for(var i=0;i").css("background-color",c).appendTo(picker).click((function(color){return function(){if(opts.colorChosen){opts.colorChosen.call(this,color);}
+that.hide();};})(c));}
+$("").html("Automatic").addClass("automatic").appendTo(picker).click(function(){if(opts.colorChosen){opts.colorChosen.call(this,null);}
+that.hide();});var autoHide=false;picker.appendTo(owner.parent()).show().mouseout(function(){autoHide=true;that.currentTimeout=window.setTimeout(function(){if(autoHide===true){that.hide();}},1000);}).mouseover(function(){if(that.currentTimeout){window.clearTimeout(that.currentTimeout);that.currentTimeout=null;}
+autoHide=false;});},hide:function(){this.picker.hide();this.picker.remove();}};menu.fn.init.prototype=menu.fn;menu.defaultOptions={"z-index":0,offsetTop:0,offsetLeft:0,colors:["#ffffff","#cccccc","#c0c0c0","#999999","#666666","#333333","#000000","#ffcccc","#ff6666","#ff0000","#cc0000","#990000","#660000","#330000","#ffcc99","#ff9966","#ff9900","#ff6600","#cc6600","#993300","#663300","#ffff99","#ffff66","#ffcc66","#ffcc33","#cc9933","#996633","#663333","#ffffcc","#ffff33","#ffff00","#ffcc00","#999900","#666600","#333300","#99ff99","#66ff99","#33ff33","#33cc00","#009900","#006600","#003300","#99FFFF","#33FFFF","#66CCCC","#00CCCC","#339999","#336666","#003333","#CCFFFF","#66FFFF","#33CCFF","#3366FF","#3333FF","#000099","#000066","#CCCCFF","#9999FF","#6666CC","#6633FF","#6600CC","#333399","#330099","#FFCCFF","#FF99FF","#CC66CC","#CC33CC","#993399","#663366","#330033"],colorChosen:null};})(jQuery);
\ No newline at end of file
diff --git a/3.0/modules/pages/New folder/scripts/jquery-1.3.2-vsdoc.js b/3.0/modules/pages/New folder/scripts/jquery-1.3.2-vsdoc.js
new file mode 100644
index 00000000..27aefb87
--- /dev/null
+++ b/3.0/modules/pages/New folder/scripts/jquery-1.3.2-vsdoc.js
@@ -0,0 +1,6255 @@
+/*
+ * This file has been commented to support Visual Studio Intellisense.
+ * You should not use this file at runtime inside the browser--it is only
+ * intended to be used only for design-time IntelliSense. Please use the
+ * standard jQuery library for all production use.
+ *
+ * Comment version: 1.3.2a
+ */
+
+/*
+ * jQuery JavaScript Library v1.3.2
+ *
+ * Copyright (c) 2009 John Resig, http://jquery.com/
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+
+(function(){
+
+var
+ // Will speed up references to window, and allows munging its name.
+ window = this,
+ // Will speed up references to undefined, and allows munging its name.
+ undefined,
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ jQuery = window.jQuery = window.$ = function(selector, context) {
+ ///
+ /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements.
+ /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML.
+ /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s).
+ /// 4: $(callback) - A shorthand for $(document).ready().
+ ///
+ ///
+ /// 1: expression - An expression to search with.
+ /// 2: html - A string of HTML to create on the fly.
+ /// 3: elements - DOM element(s) to be encapsulated by a jQuery object.
+ /// 4: callback - The function to execute when the DOM is ready.
+ ///
+ ///
+ /// 1: context - A DOM Element, Document or jQuery to use as context.
+ ///
+ ///
+ /// The DOM node context originally passed to jQuery() (if none was passed then context will be equal to the document).
+ ///
+ ///
+ /// A selector representing selector originally passed to jQuery().
+ ///
+ ///
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // A simple way to check for HTML strings or ID strings
+ // (both of which we optimize for)
+ quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
+ // Is it a simple selector
+ isSimple = /^.[^:#\[\.,]*$/;
+
+jQuery.fn = jQuery.prototype = {
+ init: function( selector, context ) {
+ ///
+ /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements.
+ /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML.
+ /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s).
+ /// 4: $(callback) - A shorthand for $(document).ready().
+ ///
+ ///
+ /// 1: expression - An expression to search with.
+ /// 2: html - A string of HTML to create on the fly.
+ /// 3: elements - DOM element(s) to be encapsulated by a jQuery object.
+ /// 4: callback - The function to execute when the DOM is ready.
+ ///
+ ///
+ /// 1: context - A DOM Element, Document or jQuery to use as context.
+ ///
+ ///
+
+ // Make sure that a selection was provided
+ selector = selector || document;
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this[0] = selector;
+ this.length = 1;
+ this.context = selector;
+ return this;
+ }
+ // Handle HTML strings
+ if (typeof selector === "string") {
+ // Are we dealing with HTML string or an ID?
+ var match = quickExpr.exec(selector);
+
+ // Verify a match, and that no context was specified for #id
+ if (match && (match[1] || !context)) {
+
+ // HANDLE: $(html) -> $(array)
+ if (match[1])
+ selector = jQuery.clean([match[1]], context);
+
+ // HANDLE: $("#id")
+ else {
+ var elem = document.getElementById(match[3]);
+
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if (elem && elem.id != match[3])
+ return jQuery().find(selector);
+
+ // Otherwise, we inject the element directly into the jQuery object
+ var ret = jQuery(elem || []);
+ ret.context = document;
+ ret.selector = selector;
+ return ret;
+ }
+
+ // HANDLE: $(expr, [context])
+ // (which is just equivalent to: $(content).find(expr)
+ } else
+ return jQuery(context).find(selector);
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) )
+ return jQuery( document ).ready( selector );
+
+ // Make sure that old selector state is passed along
+ if ( selector.selector && selector.context ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return this.setArray(jQuery.isArray( selector ) ?
+ selector :
+ jQuery.makeArray(selector));
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.3.2",
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ ///
+ /// The number of elements currently matched.
+ /// Part of Core
+ ///
+ ///
+
+ return this.length;
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ ///
+ /// Access a single matched element. num is used to access the
+ /// Nth element matched.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// Access the element in the Nth position.
+ ///
+
+ return num == undefined ?
+
+ // Return a 'clean' array
+ Array.prototype.slice.call( this ) :
+
+ // Return just the object
+ this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ ///
+ /// Set the jQuery object to an array of elements, while maintaining
+ /// the stack.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// An array of elements
+ ///
+
+ // Build a new jQuery matched element set
+ var ret = jQuery( elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" )
+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
+ else if ( name )
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Force the current matched set of elements to become
+ // the specified array of elements (destroying the stack in the process)
+ // You should use pushStack() in order to do this, but maintain the stack
+ setArray: function( elems ) {
+ ///
+ /// Set the jQuery object to an array of elements. This operation is
+ /// completely destructive - be sure to use .pushStack() if you wish to maintain
+ /// the jQuery stack.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// An array of elements
+ ///
+
+ // Resetting the length to 0, then using the native Array push
+ // is a super-fast way to populate an object with array-like properties
+ this.length = 0;
+ Array.prototype.push.apply( this, elems );
+
+ return this;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ ///
+ /// Execute a function within the context of every matched element.
+ /// This means that every time the passed-in function is executed
+ /// (which is once for every element matched) the 'this' keyword
+ /// points to the specific element.
+ /// Additionally, the function, when executed, is passed a single
+ /// argument representing the position of the element in the matched
+ /// set.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// A function to execute
+ ///
+
+ return jQuery.each( this, callback, args );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ ///
+ /// Searches every matched element for the object and returns
+ /// the index of the element, if found, starting with zero.
+ /// Returns -1 if the object wasn't found.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// Object to search for
+ ///
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem && elem.jquery ? elem[0] : elem
+ , this );
+ },
+
+ attr: function( name, value, type ) {
+ ///
+ /// Set a single property to a computed value, on all matched elements.
+ /// Instead of a value, a function is provided, that computes the value.
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// The name of the property to set.
+ ///
+ ///
+ /// A function returning the value to set.
+ ///
+
+ var options = name;
+
+ // Look for the case where we're accessing a style value
+ if ( typeof name === "string" )
+ if ( value === undefined )
+ return this[0] && jQuery[ type || "attr" ]( this[0], name );
+
+ else {
+ options = {};
+ options[ name ] = value;
+ }
+
+ // Check to see if we're setting style values
+ return this.each(function(i){
+ // Set all the styles
+ for ( name in options )
+ jQuery.attr(
+ type ?
+ this.style :
+ this,
+ name, jQuery.prop( this, options[ name ], type, i, name )
+ );
+ });
+ },
+
+ css: function( key, value ) {
+ ///
+ /// Set a single style property to a value, on all matched elements.
+ /// If a number is provided, it is automatically converted into a pixel value.
+ /// Part of CSS
+ ///
+ ///
+ ///
+ /// The name of the property to set.
+ ///
+ ///
+ /// The value to set the property to.
+ ///
+
+ // ignore negative width and height values
+ if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
+ value = undefined;
+ return this.attr( key, value, "curCSS" );
+ },
+
+ text: function( text ) {
+ ///
+ /// Set the text contents of all matched elements.
+ /// Similar to html(), but escapes HTML (replace "<" and ">" with their
+ /// HTML entities).
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// The text value to set the contents of the element to.
+ ///
+
+ if ( typeof text !== "object" && text != null )
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+
+ var ret = "";
+
+ jQuery.each( text || this, function(){
+ jQuery.each( this.childNodes, function(){
+ if ( this.nodeType != 8 )
+ ret += this.nodeType != 1 ?
+ this.nodeValue :
+ jQuery.fn.text( [ this ] );
+ });
+ });
+
+ return ret;
+ },
+
+ wrapAll: function( html ) {
+ ///
+ /// Wrap all matched elements with a structure of other elements.
+ /// This wrapping process is most useful for injecting additional
+ /// stucture into a document, without ruining the original semantic
+ /// qualities of a document.
+ /// This works by going through the first element
+ /// provided and finding the deepest ancestor element within its
+ /// structure - it is that element that will en-wrap everything else.
+ /// This does not work with elements that contain text. Any necessary text
+ /// must be added after the wrapping is done.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// A DOM element that will be wrapped around the target.
+ ///
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).clone();
+
+ if ( this[0].parentNode )
+ wrap.insertBefore( this[0] );
+
+ wrap.map(function(){
+ var elem = this;
+
+ while ( elem.firstChild )
+ elem = elem.firstChild;
+
+ return elem;
+ }).append(this);
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ ///
+ /// Wraps the inner child contents of each matched elemenht (including text nodes) with an HTML structure.
+ ///
+ ///
+ /// A string of HTML or a DOM element that will be wrapped around the target contents.
+ ///
+ ///
+
+ return this.each(function(){
+ jQuery( this ).contents().wrapAll( html );
+ });
+ },
+
+ wrap: function( html ) {
+ ///
+ /// Wrap all matched elements with a structure of other elements.
+ /// This wrapping process is most useful for injecting additional
+ /// stucture into a document, without ruining the original semantic
+ /// qualities of a document.
+ /// This works by going through the first element
+ /// provided and finding the deepest ancestor element within its
+ /// structure - it is that element that will en-wrap everything else.
+ /// This does not work with elements that contain text. Any necessary text
+ /// must be added after the wrapping is done.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// A DOM element that will be wrapped around the target.
+ ///
+
+ return this.each(function(){
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ append: function() {
+ ///
+ /// Append content to the inside of every matched element.
+ /// This operation is similar to doing an appendChild to all the
+ /// specified elements, adding them into the document.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to append to the target
+ ///
+
+ return this.domManip(arguments, true, function(elem){
+ if (this.nodeType == 1)
+ this.appendChild( elem );
+ });
+ },
+
+ prepend: function() {
+ ///
+ /// Prepend content to the inside of every matched element.
+ /// This operation is the best way to insert elements
+ /// inside, at the beginning, of all matched elements.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to prepend to the target.
+ ///
+
+ return this.domManip(arguments, true, function(elem){
+ if (this.nodeType == 1)
+ this.insertBefore( elem, this.firstChild );
+ });
+ },
+
+ before: function() {
+ ///
+ /// Insert content before each of the matched elements.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to insert before each target.
+ ///
+
+ return this.domManip(arguments, false, function(elem){
+ this.parentNode.insertBefore( elem, this );
+ });
+ },
+
+ after: function() {
+ ///
+ /// Insert content after each of the matched elements.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to insert after each target.
+ ///
+
+ return this.domManip(arguments, false, function(elem){
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ },
+
+ end: function() {
+ ///
+ /// End the most recent 'destructive' operation, reverting the list of matched elements
+ /// back to its previous state. After an end operation, the list of matched elements will
+ /// revert to the last state of matched elements.
+ /// If there was no destructive operation before, an empty set is returned.
+ /// Part of DOM/Traversing
+ ///
+ ///
+
+ return this.prevObject || jQuery( [] );
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: [].push,
+ sort: [].sort,
+ splice: [].splice,
+
+ find: function( selector ) {
+ ///
+ /// Searches for all elements that match the specified expression.
+ /// This method is a good way to find additional descendant
+ /// elements with which to process.
+ /// All searching is done using a jQuery expression. The expression can be
+ /// written using CSS 1-3 Selector syntax, or basic XPath.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ ///
+ /// An expression to search with.
+ ///
+ ///
+
+ if ( this.length === 1 ) {
+ var ret = this.pushStack( [], "find", selector );
+ ret.length = 0;
+ jQuery.find( selector, this[0], ret );
+ return ret;
+ } else {
+ return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
+ return jQuery.find( selector, elem );
+ })), "find", selector );
+ }
+ },
+
+ clone: function( events ) {
+ ///
+ /// Clone matched DOM Elements and select the clones.
+ /// This is useful for moving copies of the elements to another
+ /// location in the DOM.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// (Optional) Set to false if you don't want to clone all descendant nodes, in addition to the element itself.
+ ///
+
+ // Do the clone
+ var ret = this.map(function(){
+ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var html = this.outerHTML;
+ if ( !html ) {
+ var div = this.ownerDocument.createElement("div");
+ div.appendChild( this.cloneNode(true) );
+ html = div.innerHTML;
+ }
+
+ return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
+ } else
+ return this.cloneNode(true);
+ });
+
+ // Copy the events from the original to the clone
+ if ( events === true ) {
+ var orig = this.find("*").andSelf(), i = 0;
+
+ ret.find("*").andSelf().each(function(){
+ if ( this.nodeName !== orig[i].nodeName )
+ return;
+
+ var events = jQuery.data( orig[i], "events" );
+
+ for ( var type in events ) {
+ for ( var handler in events[ type ] ) {
+ jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+ }
+ }
+
+ i++;
+ });
+ }
+
+ // Return the cloned set
+ return ret;
+ },
+
+ filter: function( selector ) {
+ ///
+ /// Removes all elements from the set of matched elements that do not
+ /// pass the specified filter. This method is used to narrow down
+ /// the results of a search.
+ /// })
+ /// Part of DOM/Traversing
+ ///
+ ///
+ ///
+ /// A function to use for filtering
+ ///
+ ///
+
+ return this.pushStack(
+ jQuery.isFunction( selector ) &&
+ jQuery.grep(this, function(elem, i){
+ return selector.call( elem, i );
+ }) ||
+
+ jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
+ return elem.nodeType === 1;
+ }) ), "filter", selector );
+ },
+
+ closest: function( selector ) {
+ ///
+ /// Get a set of elements containing the closest parent element that matches the specified selector, the starting element included.
+ ///
+ ///
+ ///
+ /// An expression to filter the elements with.
+ ///
+ ///
+
+ var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
+ closer = 0;
+
+ return this.map(function(){
+ var cur = this;
+ while ( cur && cur.ownerDocument ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
+ jQuery.data(cur, "closest", closer);
+ return cur;
+ }
+ cur = cur.parentNode;
+ closer++;
+ }
+ });
+ },
+
+ not: function( selector ) {
+ ///
+ /// Removes any elements inside the array of elements from the set
+ /// of matched elements. This method is used to remove one or more
+ /// elements from a jQuery object.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ /// A set of elements to remove from the jQuery set of matched elements.
+ ///
+ ///
+
+ if ( typeof selector === "string" )
+ // test special case where just one selector is passed in
+ if ( isSimple.test( selector ) )
+ return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
+ else
+ selector = jQuery.multiFilter( selector, this );
+
+ var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
+ return this.filter(function() {
+ return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
+ });
+ },
+
+ add: function( selector ) {
+ ///
+ /// Adds one or more Elements to the set of matched elements.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ /// One or more Elements to add
+ ///
+ ///
+
+ return this.pushStack( jQuery.unique( jQuery.merge(
+ this.get(),
+ typeof selector === "string" ?
+ jQuery( selector ) :
+ jQuery.makeArray( selector )
+ )));
+ },
+
+ is: function( selector ) {
+ ///
+ /// Checks the current selection against an expression and returns true,
+ /// if at least one element of the selection fits the given expression.
+ /// Does return false, if no element fits or the expression is not valid.
+ /// filter(String) is used internally, therefore all rules that apply there
+ /// apply here, too.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ ///
+ /// The expression with which to filter
+ ///
+
+ return !!selector && jQuery.multiFilter( selector, this ).length > 0;
+ },
+
+ hasClass: function( selector ) {
+ ///
+ /// Checks the current selection against a class and returns whether at least one selection has a given class.
+ ///
+ /// The class to check against
+ /// True if at least one element in the selection has the class, otherwise false.
+
+ return !!selector && this.is( "." + selector );
+ },
+
+ val: function( value ) {
+ ///
+ /// Set the value of every matched element.
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// Set the property to the specified value.
+ ///
+
+ if ( value === undefined ) {
+ var elem = this[0];
+
+ if ( elem ) {
+ if( jQuery.nodeName( elem, 'option' ) )
+ return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type == "select-one";
+
+ // Nothing was selected
+ if ( index < 0 )
+ return null;
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ if ( option.selected ) {
+ // Get the specifc value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if ( one )
+ return value;
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ }
+
+ // Everything else, we just grab the value
+ return (elem.value || "").replace(/\r/g, "");
+
+ }
+
+ return undefined;
+ }
+
+ if ( typeof value === "number" )
+ value += '';
+
+ return this.each(function(){
+ if ( this.nodeType != 1 )
+ return;
+
+ if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
+ this.checked = (jQuery.inArray(this.value, value) >= 0 ||
+ jQuery.inArray(this.name, value) >= 0);
+
+ else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = jQuery.makeArray(value);
+
+ jQuery( "option", this ).each(function(){
+ this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
+ jQuery.inArray( this.text, values ) >= 0);
+ });
+
+ if ( !values.length )
+ this.selectedIndex = -1;
+
+ } else
+ this.value = value;
+ });
+ },
+
+ html: function( value ) {
+ ///
+ /// Set the html contents of every matched element.
+ /// This property is not available on XML documents.
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// Set the html contents to the specified value.
+ ///
+
+ return value === undefined ?
+ (this[0] ?
+ this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
+ null) :
+ this.empty().append( value );
+ },
+
+ replaceWith: function( value ) {
+ ///
+ /// Replaces all matched element with the specified HTML or DOM elements.
+ ///
+ ///
+ /// The content with which to replace the matched elements.
+ ///
+ /// The element that was just replaced.
+
+ return this.after( value ).remove();
+ },
+
+ eq: function( i ) {
+ ///
+ /// Reduce the set of matched elements to a single element.
+ /// The position of the element in the set of matched elements
+ /// starts at 0 and goes to length - 1.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// pos The index of the element that you wish to limit to.
+ ///
+
+ return this.slice( i, +i + 1 );
+ },
+
+ slice: function() {
+ ///
+ /// Selects a subset of the matched elements. Behaves exactly like the built-in Array slice method.
+ ///
+ /// Where to start the subset (0-based).
+ /// Where to end the subset (not including the end element itself).
+ /// If omitted, ends at the end of the selection
+ /// The sliced elements
+
+ return this.pushStack( Array.prototype.slice.apply( this, arguments ),
+ "slice", Array.prototype.slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ ///
+ /// This member is internal.
+ ///
+ ///
+ ///
+
+ return this.pushStack( jQuery.map(this, function(elem, i){
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ andSelf: function() {
+ ///
+ /// Adds the previous selection to the current selection.
+ ///
+ ///
+
+ return this.add( this.prevObject );
+ },
+
+ domManip: function( args, table, callback ) {
+ ///
+ /// Args
+ ///
+ ///
+ /// Insert TBODY in TABLEs if one is not found.
+ ///
+ ///
+ /// If dir<0, process args in reverse order.
+ ///
+ ///
+ /// The function doing the DOM manipulation.
+ ///
+ ///
+ ///
+ /// Part of Core
+ ///
+
+ if ( this[0] ) {
+ var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
+ scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
+ first = fragment.firstChild;
+
+ if ( first )
+ for ( var i = 0, l = this.length; i < l; i++ )
+ callback.call( root(this[i], first), this.length > 1 || i > 0 ?
+ fragment.cloneNode(true) : fragment );
+
+ if ( scripts )
+ jQuery.each( scripts, evalScript );
+ }
+
+ return this;
+
+ function root( elem, cur ) {
+ return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
+ }
+ }
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+function evalScript( i, elem ) {
+ ///
+ /// This method is internal.
+ ///
+ ///
+
+ if ( elem.src )
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+
+ else
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+
+ if ( elem.parentNode )
+ elem.parentNode.removeChild( elem );
+}
+
+function now(){
+ ///
+ /// Gets the current date.
+ ///
+ /// The current date.
+ return +new Date;
+}
+
+jQuery.extend = jQuery.fn.extend = function() {
+ ///
+ /// Extend one object with one or more others, returning the original,
+ /// modified, object. This is a great utility for simple inheritance.
+ /// jQuery.extend(settings, options);
+ /// var settings = jQuery.extend({}, defaults, options);
+ /// Part of JavaScript
+ ///
+ ///
+ /// The object to extend
+ ///
+ ///
+ /// The object that will be merged into the first.
+ ///
+ ///
+ /// (optional) More objects to merge into the first
+ ///
+ ///
+
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) )
+ target = {};
+
+ // extend jQuery itself if only one argument is passed
+ if ( length == i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ )
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null )
+ // Extend the base object
+ for ( var name in options ) {
+ var src = target[ name ], copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy )
+ continue;
+
+ // Recurse if we're merging object values
+ if ( deep && copy && typeof copy === "object" && !copy.nodeType )
+ target[ name ] = jQuery.extend( deep,
+ // Never move original objects, clone them
+ src || ( copy.length != null ? [ ] : { } )
+ , copy );
+
+ // Don't bring in undefined values
+ else if ( copy !== undefined )
+ target[ name ] = copy;
+
+ }
+
+ // Return the modified object
+ return target;
+};
+
+// exclude the following css properties to add px
+var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+ // cache defaultView
+ defaultView = document.defaultView || {},
+ toString = Object.prototype.toString;
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ ///
+ /// Run this function to give control of the $ variable back
+ /// to whichever library first implemented it. This helps to make
+ /// sure that jQuery doesn't conflict with the $ object
+ /// of other libraries.
+ /// By using this function, you will only be able to access jQuery
+ /// using the 'jQuery' variable. For example, where you used to do
+ /// $("div p"), you now must do jQuery("div p").
+ /// Part of Core
+ ///
+ ///
+
+ window.$ = _$;
+
+ if ( deep )
+ window.jQuery = _jQuery;
+
+ return jQuery;
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ ///
+ /// Determines if the parameter passed is a function.
+ ///
+ /// The object to check
+ /// True if the parameter is a function; otherwise false.
+
+ return toString.call(obj) === "[object Function]";
+ },
+
+ isArray: function(obj) {
+ ///
+ /// Determine if the parameter passed is an array.
+ ///
+ /// Object to test whether or not it is an array.
+ /// True if the parameter is a function; otherwise false.
+
+ return toString.call(obj) === "[object Array]";
+ },
+
+ // check if an element is in a (or is an) XML document
+ isXMLDoc: function( elem ) {
+ ///
+ /// Determines if the parameter passed is an XML document.
+ ///
+ /// The object to test
+ /// True if the parameter is an XML document; otherwise false.
+
+ return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+ !!elem.ownerDocument && jQuery.isXMLDoc(elem.ownerDocument);
+ },
+
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ ///
+ /// Internally evaluates a script in a global context.
+ ///
+ ///
+
+ if ( data && /\S/.test(data) ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+
+ script.type = "text/javascript";
+ if ( jQuery.support.scriptEval )
+ script.appendChild( document.createTextNode( data ) );
+ else
+ script.text = data;
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709).
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ ///
+ /// Checks whether the specified element has the specified DOM node name.
+ ///
+ /// The element to examine
+ /// The node name to check
+ /// True if the specified node name matches the node's DOM node name; otherwise false
+
+ return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ ///
+ /// A generic iterator function, which can be used to seemlessly
+ /// iterate over both objects and arrays. This function is not the same
+ /// as $().each() - which is used to iterate, exclusively, over a jQuery
+ /// object. This function can be used to iterate over anything.
+ /// The callback has two arguments:the key (objects) or index (arrays) as first
+ /// the first, and the value as the second.
+ /// Part of JavaScript
+ ///
+ ///
+ /// The object, or array, to iterate over.
+ ///
+ ///
+ /// The function that will be executed on every object.
+ ///
+ ///
+
+ var name, i = 0, length = object.length;
+
+ if ( args ) {
+ if ( length === undefined ) {
+ for ( name in object )
+ if ( callback.apply( object[ name ], args ) === false )
+ break;
+ } else
+ for ( ; i < length; )
+ if ( callback.apply( object[ i++ ], args ) === false )
+ break;
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( length === undefined ) {
+ for ( name in object )
+ if ( callback.call( object[ name ], name, object[ name ] ) === false )
+ break;
+ } else
+ for ( var value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
+ }
+
+ return object;
+ },
+
+ prop: function( elem, value, type, i, name ) {
+ ///
+ /// This method is internal.
+ ///
+ ///
+ // This member is not documented within the jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.prop
+
+ // Handle executable functions
+ if ( jQuery.isFunction( value ) )
+ value = value.call( elem, i );
+
+ // Handle passing in a number to a CSS property
+ return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
+ value + "px" :
+ value;
+ },
+
+ className: {
+ // internal only, use addClass("class")
+ add: function( elem, classNames ) {
+ ///
+ /// Internal use only; use addClass('class')
+ ///
+ ///
+
+ jQuery.each((classNames || "").split(/\s+/), function(i, className){
+ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
+ elem.className += (elem.className ? " " : "") + className;
+ });
+ },
+
+ // internal only, use removeClass("class")
+ remove: function( elem, classNames ) {
+ ///
+ /// Internal use only; use removeClass('class')
+ ///
+ ///
+
+ if (elem.nodeType == 1)
+ elem.className = classNames !== undefined ?
+ jQuery.grep(elem.className.split(/\s+/), function(className){
+ return !jQuery.className.has( classNames, className );
+ }).join(" ") :
+ "";
+ },
+
+ // internal only, use hasClass("class")
+ has: function( elem, className ) {
+ ///
+ /// Internal use only; use hasClass('class')
+ ///
+ ///
+
+ return elem && jQuery.inArray(className, (elem.className || elem).toString().split(/\s+/)) > -1;
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ ///
+ /// Swap in/out style options.
+ ///
+
+ var old = {};
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( var name in options )
+ elem.style[ name ] = old[ name ];
+ },
+
+ css: function( elem, name, force, extra ) {
+ ///
+ /// This method is internal only.
+ ///
+ ///
+ // This method is undocumented in jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.css
+
+ if ( name == "width" || name == "height" ) {
+ var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
+
+ function getWH() {
+ val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+
+ if ( extra === "border" )
+ return;
+
+ jQuery.each( which, function() {
+ if ( !extra )
+ val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+ if ( extra === "margin" )
+ val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
+ else
+ val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+ });
+ }
+
+ if ( elem.offsetWidth !== 0 )
+ getWH();
+ else
+ jQuery.swap( elem, props, getWH );
+
+ return Math.max(0, Math.round(val));
+ }
+
+ return jQuery.curCSS( elem, name, force );
+ },
+
+ curCSS: function( elem, name, force ) {
+ ///
+ /// This method is internal only.
+ ///
+ ///
+ // This method is undocumented in jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.curCSS
+
+ var ret, style = elem.style;
+
+ // We need to handle opacity special in IE
+ if ( name == "opacity" && !jQuery.support.opacity ) {
+ ret = jQuery.attr( style, "opacity" );
+
+ return ret == "" ?
+ "1" :
+ ret;
+ }
+
+ // Make sure we're using the right name for getting the float value
+ if ( name.match( /float/i ) )
+ name = styleFloat;
+
+ if ( !force && style && style[ name ] )
+ ret = style[ name ];
+
+ else if ( defaultView.getComputedStyle ) {
+
+ // Only "float" is needed here
+ if ( name.match( /float/i ) )
+ name = "float";
+
+ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
+
+ var computedStyle = defaultView.getComputedStyle( elem, null );
+
+ if ( computedStyle )
+ ret = computedStyle.getPropertyValue( name );
+
+ // We should always get a number back from opacity
+ if ( name == "opacity" && ret == "" )
+ ret = "1";
+
+ } else if ( elem.currentStyle ) {
+ var camelCase = name.replace(/\-(\w)/g, function(all, letter){
+ return letter.toUpperCase();
+ });
+
+ ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
+ // Remember the original values
+ var left = style.left, rsLeft = elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ style.left = ret || 0;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret;
+ },
+
+ clean: function( elems, context, fragment ) {
+ ///
+ /// This method is internal only.
+ ///
+ ///
+ // This method is undocumented in the jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.clean
+
+
+ context = context || document;
+
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" )
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
+ var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
+ if ( match )
+ return [ context.createElement( match[1] ) ];
+ }
+
+ var ret = [], scripts = [], div = context.createElement("div");
+
+ jQuery.each(elems, function(i, elem){
+ if ( typeof elem === "number" )
+ elem += '';
+
+ if ( !elem )
+ return;
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
+ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
+ all :
+ front + ">" + tag + ">";
+ });
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
+
+ var wrap =
+ // option or optgroup
+ !tags.indexOf("", "" ] ||
+
+ !tags.indexOf("", "" ] ||
+
+ tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
+ [ 1, "
diff --git a/3.0/modules/pages/views/pages_display.html.php b/3.0/modules/pages/views/pages_display.html.php
new file mode 100644
index 00000000..a99b8aa3
--- /dev/null
+++ b/3.0/modules/pages/views/pages_display.html.php
@@ -0,0 +1,7 @@
+
+
+
= $title ?>
+
+ =$body ?>
+
+
diff --git a/3.0/modules/pages/views/pages_sidebar.html.php b/3.0/modules/pages/views/pages_sidebar.html.php
new file mode 100644
index 00000000..af959fa7
--- /dev/null
+++ b/3.0/modules/pages/views/pages_sidebar.html.php
@@ -0,0 +1,2 @@
+
+= $links ?>
diff --git a/3.1/modules/pages/New folder/asdf.html b/3.1/modules/pages/New folder/asdf.html
new file mode 100644
index 00000000..61e22c16
--- /dev/null
+++ b/3.1/modules/pages/New folder/asdf.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0-vsdoc.js b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0-vsdoc.js
new file mode 100644
index 00000000..d8ef75cc
--- /dev/null
+++ b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0-vsdoc.js
@@ -0,0 +1,365 @@
+/*
+ * This file has been commented to support Visual Studio Intellisense.
+ * You should not use this file at runtime inside the browser--it is only
+ * intended to be used only for design-time IntelliSense. Please use the
+ * standard jHtmlArea library for all production use.
+ */
+
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(options) {
+ ///
+ /// 1: (options) - Convert all TextArea DOM Elements to be displayed as jHtmlArea WYSIWYG Editors.
+ /// 2: (string, arguments) - This function accepts a string containing the method name that you want to execute against the jHtmlArea object.
+ ///
+ ///
+ /// 1: options - The custom options you want applied to the jHtmlArea's that are created.
+ /// 2: string - The name of the jHtmlArea object method to be executed. The results of the method call are then returned instead of the jQuery object.
+ ///
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor. Required.
+ ///
+ ///
+ /// The custom options you want applied to the jHtmlArea that is created. Optional.
+ ///
+ ///
+ /// The Default Options that are used for configuring the jHtmlArea WYSIWYG Editor upon creation.
+ ///
+ ///
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Required. The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Optional. The custom options you want applied to the jHtmlArea that is created.
+ ///
+ ///
+ },
+ execCommand: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ ec: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range. An alias for the "execCommand" method.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ queryCommandValue: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ qc: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command. An alias for the "queryCommandValue" method.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ getSelectedHTML: function() {
+ ///
+ /// Returns the HTML that is currently selected within the editor.
+ ///
+ ///
+ },
+ getSelection: function() {
+ ///
+ /// Returns the Browser Selection object that represents the currently selected region of the editor.
+ ///
+ ///
+ },
+ getRange: function() {
+ ///
+ /// Returns the Browser Range object that represents the currently selected region of the editor. (This uses the "getSelection" method internally.)
+ ///
+ ///
+ },
+ html: function(v) {
+ ///
+ /// 1: () Returns the HTML text value contained within the editor. 2: (v) Sets the editors value to the HTML text passed in.
+ ///
+ ///
+ /// The HTML text to set the editors value to.
+ ///
+ },
+ pasteHTML: function(html) {
+ ///
+ /// Pastes HTML text into the editor, replacing any currently selected text and HTML elements.
+ ///
+ ///
+ /// The HTML text to paste/insert.
+ ///
+ },
+ cut: function() {
+ ///
+ /// Copies the current selection to the clipboard and then deletes it.
+ ///
+ },
+ copy: function() {
+ ///
+ /// Copies the current selection to the clipboard.
+ ///
+ },
+ paste: function() {
+ ///
+ /// Overwrites the contents of the clipboard on the current selection.
+ ///
+ },
+ bold: function() {
+ ///
+ /// Toggles the current selection between bold and nonbold.
+ ///
+ },
+ italic: function() {
+ ///
+ /// Toggles the current selection between italic and nonitalic.
+ ///
+ },
+ underline: function() {
+ ///
+ /// Toggles the current selection between underlined and not underlined.
+ ///
+ },
+ strikeThrough: function() {
+ ///
+ /// If there is a selection and all of the characters are already striked, the strikethrough will be removed. Otherwise, all selected characters will have a line drawn through them.
+ ///
+ },
+ image: function(url) {
+ ///
+ /// This command will insert an image (referenced by url) at the insertion point.
+ /// If no URL is specified, a prompt will be displayed to the user.
+ ///
+ ///
+ /// The URL to the Image to be inserted. If no URL is specified, a prompt will be shown.
+ ///
+ },
+ removeFormat: function() {
+ ///
+ /// Removes the formatting tags from the current selection.
+ ///
+ },
+ link: function() {
+ ///
+ /// Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
+ ///
+ },
+ unlink: function() {
+ ///
+ /// Removes any hyperlink from the current selection.
+ ///
+ },
+ orderedList: function() {
+ ///
+ /// Converts the text selection into an ordered list.
+ ///
+ },
+ unorderedList: function() {
+ ///
+ /// Converts the text selection into an unordered list.
+ ///
+ },
+ superscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already superscripted, the superscript will be removed. Otherwise, all selected characters will be drawn slightly higher than normal text.
+ ///
+ },
+ subscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already subscripted, the subscript will be removed. Otherwise, all selected characters will be drawn slightly lower than normal text.
+ ///
+ },
+
+ p: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h1: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h2: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h3: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h4: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h5: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h6: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ heading: function(h) {
+ ///
+ /// Sets the current block format tag to tag.
+ /// Example: Calling jHtmlArea.heading(2) will be the same as calling jHtmlArea.h2()
+ ///
+ ///
+ /// The Number of Header () tag to format the current block with.
+ /// For Example: Passing a 2 or "2" will cause the current block to be formatted with a
tag.
+ ///
+ },
+
+ indent: function() {
+ ///
+ /// Indents the selection or insertion point.
+ ///
+ },
+ outdent: function() {
+ ///
+ /// Outdents the selection or insertion point.
+ ///
+ },
+
+ insertHorizontalRule: function() {
+ ///
+ /// Inserts a horizontal rule at the insertion point (deletes selection).
+ ///
+ },
+
+ justifyLeft: function() {
+ ///
+ /// Justifies the selection or insertion point to the left.
+ ///
+ },
+ justifyCenter: function() {
+ ///
+ /// Centers the selection or insertion point.
+ ///
+ },
+ justifyRight: function() {
+ ///
+ /// Right-justifies the selection or the insertion point.
+ ///
+ },
+
+ increaseFontSize: function() {
+ ///
+ /// Increases the Font Size around the selection or at the insertion point.
+ ///
+ },
+ decreaseFontSize: function() {
+ ///
+ /// Decreases the Font Size around the selection or at the insertion point.
+ ///
+ },
+
+ forecolor: function(c) {
+ ///
+ /// Changes a font color for the selection or at the insertion point. Requires a color value string to be passed in as a value argument.
+ ///
+ },
+
+ formatBlock: function(v) {
+ ///
+ /// Sets the current block format tag.
+ ///
+ },
+
+ showHTMLView: function() {
+ ///
+ /// Shows the HTML/Source View (TextArea DOM Element) within the Editor and hides the WYSIWYG interface.
+ ///
+ },
+ hideHTMLView: function() {
+ ///
+ /// Hides the HTML/Source View (TextArea DOM Element) within the Editor and displays the WYSIWYG interface.
+ ///
+ },
+ toggleHTMLView: function() {
+ ///
+ /// Toggles between HTML/Source View (TextArea DOM Element) and the WYSIWYG interface within the Editor.
+ ///
+ },
+
+ toHtmlString: function() {
+ ///
+ /// Returns the HTML text contained within the editor.
+ ///
+ ///
+ },
+ toString: function() {
+ ///
+ /// Return the Text contained within the editor, with all HTML tags removed.
+ ///
+ ///
+ },
+
+ updateTextArea: function() {
+ ///
+ /// Forces the TextArea DOM Element to by sync'd with the contents of the HTML WYSIWYG Editor.
+ ///
+ },
+ updateHtmlArea: function() {
+ ///
+ /// Forces the HTML WYSIWYG Editor to be sync'd with the contents of the TextArea DOM Element.
+ ///
+ }
+ };
+ jHtmlArea.fn.init.prototype = jHtmlArea.fn;
+})(jQuery);
\ No newline at end of file
diff --git a/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.js b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.js
new file mode 100644
index 00000000..d1e360c4
--- /dev/null
+++ b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.js
@@ -0,0 +1,403 @@
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(opts) {
+ if (opts && typeof (opts) === "string") {
+ var args = [];
+ for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
+ var htmlarea = jHtmlArea(this[0]);
+ var f = htmlarea[opts];
+ if (f) { return f.apply(htmlarea, args); }
+ }
+ return this.each(function() { jHtmlArea(this, opts); });
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ if (elem.jquery) {
+ return jHtmlArea(elem[0]);
+ }
+ if (elem.jhtmlareaObject) {
+ return elem.jhtmlareaObject;
+ } else {
+ return new jHtmlArea.fn.init(elem, options);
+ }
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ if (elem.nodeName.toLowerCase() === "textarea") {
+ var opts = $.extend({}, jHtmlArea.defaultOptions, options);
+ elem.jhtmlareaObject = this;
+
+ var textarea = this.textarea = $(elem);
+ var container = this.container = $("").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea);
+
+ var toolbar = this.toolbar = $("").addClass("ToolBar").appendTo(container);
+ priv.initToolBar.call(this, opts);
+
+ var iframe = this.iframe = $("").height(textarea.height());
+ iframe.width(textarea.width() - ($.browser.msie ? 0 : 4));
+ var htmlarea = this.htmlarea = $("").append(iframe);
+
+ container.append(htmlarea).append(textarea.hide());
+
+ priv.initEditor.call(this, opts);
+ priv.attachEditorEvents.call(this);
+
+ // Fix total height to match TextArea
+ iframe.height(iframe.height() - toolbar.height());
+ toolbar.width(textarea.width() - 2);
+
+ if (opts.loaded) { opts.loaded.call(this); }
+ }
+ },
+ dispose: function() {
+ this.textarea.show().insertAfter(this.container);
+ this.container.remove();
+ this.textarea[0].jhtmlareaObject = null;
+ },
+ execCommand: function(a, b, c) {
+ this.iframe[0].contentWindow.focus();
+ this.editor.execCommand(a, b || false, c || null);
+ this.updateTextArea();
+ },
+ ec: function(a, b, c) {
+ this.execCommand(a, b, c);
+ },
+ queryCommandValue: function(a) {
+ this.iframe[0].contentWindow.focus();
+ return this.editor.queryCommandValue(a);
+ },
+ qc: function(a) {
+ return this.queryCommandValue(a);
+ },
+ getSelectedHTML: function() {
+ if ($.browser.msie) {
+ return this.getRange().htmlText;
+ } else {
+ var elem = this.getRange().cloneContents();
+ return $("
").append($("").addClass(className).attr("title", altText).click(function() { action.call(that, $(this)); }));
+ };
+
+ function addButtons(arr) {
+ var ul = $("
").appendTo(that.toolbar);
+ for (var i = 0; i < arr.length; i++) {
+ var e = arr[i];
+ if ((typeof (e)).toLowerCase() === "string") {
+ if (e === "|") {
+ ul.append($(''));
+ } else {
+ var f = (function(e) {
+ // If button name exists in priv.toolbarButtons then call the "method" defined there, otherwise call the method with the same name
+ var m = priv.toolbarButtons[e] || e;
+ if ((typeof (m)).toLowerCase() === "function") {
+ return function(btn) { m.call(this, btn); };
+ } else {
+ return function() { this[m](); this.editor.body.focus(); };
+ }
+ })(e.toLowerCase());
+ var t = options.toolbarText[e.toLowerCase()];
+ ul.append(menuItem(e.toLowerCase(), t || e, f));
+ }
+ } else {
+ ul.append(menuItem(e.css, e.text, e.action));
+ }
+ }
+ };
+ if (options.toolbar.length !== 0 && priv.isArray(options.toolbar[0])) {
+ for (var i = 0; i < options.toolbar.length; i++) {
+ addButtons(options.toolbar[i]);
+ }
+ } else {
+ addButtons(options.toolbar);
+ }
+ },
+ attachEditorEvents: function() {
+ var t = this;
+
+ var fnHA = function() {
+ t.updateHtmlArea();
+ };
+
+ this.textarea.click(fnHA).
+ keyup(fnHA).
+ keydown(fnHA).
+ mousedown(fnHA).
+ blur(fnHA);
+
+
+
+ var fnTA = function() {
+ t.updateTextArea();
+ };
+
+ $(this.editor.body).click(fnTA).
+ keyup(fnTA).
+ keydown(fnTA).
+ mousedown(fnTA).
+ blur(fnTA);
+
+ $('form').submit(function() { t.toggleHTMLView(); t.toggleHTMLView(); });
+ //$(this.textarea[0].form).submit(function() { //this.textarea.closest("form").submit(function() {
+
+
+ // Fix for ASP.NET Postback Model
+ if (window.__doPostBack) {
+ var old__doPostBack = __doPostBack;
+ window.__doPostBack = function() {
+ if (t) {
+ if (t.toggleHTMLView) {
+ t.toggleHTMLView();
+ t.toggleHTMLView();
+ }
+ }
+ return old__doPostBack.apply(window, arguments);
+ };
+ }
+
+ },
+ isArray: function(v) {
+ return v && typeof v === 'object' && typeof v.length === 'number' && typeof v.splice === 'function' && !(v.propertyIsEnumerable('length'));
+ }
+ };
+})(jQuery);
\ No newline at end of file
diff --git a/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min-vsdoc.js b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min-vsdoc.js
new file mode 100644
index 00000000..0f11b1f4
--- /dev/null
+++ b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min-vsdoc.js
@@ -0,0 +1,357 @@
+/*
+ * This file has been commented to support Visual Studio Intellisense.
+ * You should not use this file at runtime inside the browser--it is only
+ * intended to be used only for design-time IntelliSense. Please use the
+ * standard jHtmlArea library for all production use.
+ */
+
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(options) {
+ ///
+ /// 1: (options) - Convert all TextArea DOM Elements to be displayed as jHtmlArea WYSIWYG Editors.
+ /// 2: (string, arguments) - This function accepts a string containing the method name that you want to execute against the jHtmlArea object.
+ ///
+ ///
+ /// 1: options - The custom options you want applied to the jHtmlArea's that are created.
+ /// 2: string - The name of the jHtmlArea object method to be executed. The results of the method call are then returned instead of the jQuery object.
+ ///
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor. Required.
+ ///
+ ///
+ /// The custom options you want applied to the jHtmlArea that is created. Optional.
+ ///
+ ///
+ /// The Default Options that are used for configuring the jHtmlArea WYSIWYG Editor upon creation.
+ ///
+ ///
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ ///
+ /// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Required. The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor.
+ ///
+ ///
+ /// Optional. The custom options you want applied to the jHtmlArea that is created.
+ ///
+ ///
+ },
+ execCommand: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ ec: function(a, b, c) {
+ ///
+ /// Executes a command on the current document, current selection, or the given range. An alias for the "execCommand" method.
+ ///
+ ///
+ /// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+ ///
+ ///
+ /// Optional. Boolean that specifies one of the following values:
+ /// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
+ /// "true" = Display a user interface if the command supports one.
+ ///
+ ///
+ /// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
+ ///
+ },
+ queryCommandValue: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ qc: function(a) {
+ ///
+ /// Returns the current value of the document, range, or current selection for the given command. An alias for the "queryCommandValue" method.
+ ///
+ ///
+ /// Required. String that specifies a command identifier.
+ ///
+ ///
+ },
+ getSelectedHTML: function() {
+ ///
+ /// Returns the HTML that is currently selected within the editor.
+ ///
+ ///
+ },
+ getSelection: function() {
+ ///
+ /// Returns the Browser Selection object that represents the currently selected region of the editor.
+ ///
+ ///
+ },
+ getRange: function() {
+ ///
+ /// Returns the Browser Range object that represents the currently selected region of the editor. (This uses the "getSelection" method internally.)
+ ///
+ ///
+ },
+ pasteHTML: function(html) {
+ ///
+ /// Pastes HTML text into the editor, replacing any currently selected text and HTML elements.
+ ///
+ ///
+ /// The HTML text to paste/insert.
+ ///
+ },
+ cut: function() {
+ ///
+ /// Copies the current selection to the clipboard and then deletes it.
+ ///
+ },
+ copy: function() {
+ ///
+ /// Copies the current selection to the clipboard.
+ ///
+ },
+ paste: function() {
+ ///
+ /// Overwrites the contents of the clipboard on the current selection.
+ ///
+ },
+ bold: function() {
+ ///
+ /// Toggles the current selection between bold and nonbold.
+ ///
+ },
+ italic: function() {
+ ///
+ /// Toggles the current selection between italic and nonitalic.
+ ///
+ },
+ underline: function() {
+ ///
+ /// Toggles the current selection between underlined and not underlined.
+ ///
+ },
+ strikeThrough: function() {
+ ///
+ /// If there is a selection and all of the characters are already striked, the strikethrough will be removed. Otherwise, all selected characters will have a line drawn through them.
+ ///
+ },
+ image: function(url) {
+ ///
+ /// This command will insert an image (referenced by url) at the insertion point.
+ /// If no URL is specified, a prompt will be displayed to the user.
+ ///
+ ///
+ /// The URL to the Image to be inserted. If no URL is specified, a prompt will be shown.
+ ///
+ },
+ removeFormat: function() {
+ ///
+ /// Removes the formatting tags from the current selection.
+ ///
+ },
+ link: function() {
+ ///
+ /// Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
+ ///
+ },
+ unlink: function() {
+ ///
+ /// Removes any hyperlink from the current selection.
+ ///
+ },
+ orderedList: function() {
+ ///
+ /// Converts the text selection into an ordered list.
+ ///
+ },
+ unorderedList: function() {
+ ///
+ /// Converts the text selection into an unordered list.
+ ///
+ },
+ superscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already superscripted, the superscript will be removed. Otherwise, all selected characters will be drawn slightly higher than normal text.
+ ///
+ },
+ subscript: function() {
+ ///
+ /// If there is a selection and all of the characters are already subscripted, the subscript will be removed. Otherwise, all selected characters will be drawn slightly lower than normal text.
+ ///
+ },
+
+ p: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h1: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h2: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h3: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h4: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h5: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ h6: function() {
+ ///
+ /// Sets the current block format tag to
.
+ ///
+ },
+ heading: function(h) {
+ ///
+ /// Sets the current block format tag to tag.
+ /// Example: Calling jHtmlArea.heading(2) will be the same as calling jHtmlArea.h2()
+ ///
+ ///
+ /// The Number of Header () tag to format the current block with.
+ /// For Example: Passing a 2 or "2" will cause the current block to be formatted with a
tag.
+ ///
+ },
+
+ indent: function() {
+ ///
+ /// Indents the selection or insertion point.
+ ///
+ },
+ outdent: function() {
+ ///
+ /// Outdents the selection or insertion point.
+ ///
+ },
+
+ insertHorizontalRule: function() {
+ ///
+ /// Inserts a horizontal rule at the insertion point (deletes selection).
+ ///
+ },
+
+ justifyLeft: function() {
+ ///
+ /// Justifies the selection or insertion point to the left.
+ ///
+ },
+ justifyCenter: function() {
+ ///
+ /// Centers the selection or insertion point.
+ ///
+ },
+ justifyRight: function() {
+ ///
+ /// Right-justifies the selection or the insertion point.
+ ///
+ },
+
+ increaseFontSize: function() {
+ ///
+ /// Increases the Font Size around the selection or at the insertion point.
+ ///
+ },
+ decreaseFontSize: function() {
+ ///
+ /// Decreases the Font Size around the selection or at the insertion point.
+ ///
+ },
+
+ forecolor: function(c) {
+ ///
+ /// Changes a font color for the selection or at the insertion point. Requires a color value string to be passed in as a value argument.
+ ///
+ },
+
+ formatBlock: function(v) {
+ ///
+ /// Sets the current block format tag.
+ ///
+ },
+
+ showHTMLView: function() {
+ ///
+ /// Shows the HTML/Source View (TextArea DOM Element) within the Editor and hides the WYSIWYG interface.
+ ///
+ },
+ hideHTMLView: function() {
+ ///
+ /// Hides the HTML/Source View (TextArea DOM Element) within the Editor and displays the WYSIWYG interface.
+ ///
+ },
+ toggleHTMLView: function() {
+ ///
+ /// Toggles between HTML/Source View (TextArea DOM Element) and the WYSIWYG interface within the Editor.
+ ///
+ },
+
+ toHtmlString: function() {
+ ///
+ /// Returns the HTML text contained within the editor.
+ ///
+ ///
+ },
+ toString: function() {
+ ///
+ /// Return the Text contained within the editor, with all HTML tags removed.
+ ///
+ ///
+ },
+
+ updateTextArea: function() {
+ ///
+ /// Forces the TextArea DOM Element to by sync'd with the contents of the HTML WYSIWYG Editor.
+ ///
+ },
+ updateHtmlArea: function() {
+ ///
+ /// Forces the HTML WYSIWYG Editor to be sync'd with the contents of the TextArea DOM Element.
+ ///
+ }
+ };
+ jHtmlArea.fn.init.prototype = jHtmlArea.fn;
+})(jQuery);
\ No newline at end of file
diff --git a/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min.js b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min.js
new file mode 100644
index 00000000..08e84d93
--- /dev/null
+++ b/3.1/modules/pages/New folder/scripts/jHtmlArea-0.7.0.min.js
@@ -0,0 +1,8 @@
+// jHtmlArea - http://jhtmlarea.codeplex.com - (c)2009 Chris Pietschmann
+(function($){$.fn.htmlarea=function(opts){if(opts&&typeof(opts)==="string"){var args=[];for(var i=1;i").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea);var toolbar=this.toolbar=$("").addClass("ToolBar").appendTo(container);priv.initToolBar.call(this,opts);var iframe=this.iframe=$("").height(textarea.height());iframe.width(textarea.width()-($.browser.msie?0:4));var htmlarea=this.htmlarea=$("").append(iframe);container.append(htmlarea).append(textarea.hide());priv.initEditor.call(this,opts);priv.attachEditorEvents.call(this);iframe.height(iframe.height()-toolbar.height());toolbar.width(textarea.width()-2);if(opts.loaded){opts.loaded.call(this);}}},dispose:function(){this.textarea.show().insertAfter(this.container);this.container.remove();this.textarea[0].jhtmlareaObject=null;},execCommand:function(a,b,c){this.iframe[0].contentWindow.focus();this.editor.execCommand(a,b||false,c||null);this.updateTextArea();},ec:function(a,b,c){this.execCommand(a,b,c);},queryCommandValue:function(a){this.iframe[0].contentWindow.focus();return this.editor.queryCommandValue(a);},qc:function(a){return this.queryCommandValue(a);},getSelectedHTML:function(){if($.browser.msie){return this.getRange().htmlText;}else{var elem=this.getRange().cloneContents();return $("").append($(elem)).html();}},getSelection:function(){if($.browser.msie){return this.editor.selection;}else{return this.iframe[0].contentDocument.defaultView.getSelection();}},getRange:function(){var s=this.getSelection();if(!s){return null;}
+return(s.getRangeAt)?s.getRangeAt(0):s.createRange();},html:function(v){if(v){this.pastHTML(v);}else{return toHtmlString();}},pasteHTML:function(html){this.iframe[0].contentWindow.focus();var r=this.getRange();if($.browser.msie){r.pasteHTML(html);}else if($.browser.mozilla){r.deleteContents();r.insertNode($((html.indexOf("<")!=0)?$("").append(html):html)[0]);}else{r.deleteContents();r.insertNode($(this.iframe[0].contentWindow.document.createElement("span")).append($((html.indexOf("<")!=0)?""+html+"":html))[0]);}
+r.collapse(false);r.select();},cut:function(){this.ec("cut");},copy:function(){this.ec("copy");},paste:function(){this.ec("paste");},bold:function(){this.ec("bold");},italic:function(){this.ec("italic");},underline:function(){this.ec("underline");},strikeThrough:function(){this.ec("strikethrough");},image:function(url){if($.browser.msie&&!url){this.ec("insertImage",true);}else{this.ec("insertImage",false,(url||prompt("Image URL:","http://")));}},removeFormat:function(){this.ec("removeFormat",false,[]);this.unlink();},link:function(){if($.browser.msie){this.ec("createLink",true);}else{this.ec("createLink",false,prompt("Link URL:","http://"));}},unlink:function(){this.ec("unlink",false,[]);},orderedList:function(){this.ec("insertorderedlist");},unorderedList:function(){this.ec("insertunorderedlist");},superscript:function(){this.ec("superscript");},subscript:function(){this.ec("subscript");},p:function(){this.formatBlock("
");},h1:function(){this.heading(1);},h2:function(){this.heading(2);},h3:function(){this.heading(3);},h4:function(){this.heading(4);},h5:function(){this.heading(5);},h6:function(){this.heading(6);},heading:function(h){this.formatBlock($.browser.msie?"Heading "+h:"h"+h);},indent:function(){this.ec("indent");},outdent:function(){this.ec("outdent");},insertHorizontalRule:function(){this.ec("insertHorizontalRule",false,"ht");},justifyLeft:function(){this.ec("justifyLeft");},justifyCenter:function(){this.ec("justifyCenter");},justifyRight:function(){this.ec("justifyRight");},increaseFontSize:function(){if($.browser.msie){this.ec("fontSize",false,this.qc("fontSize")+1);}else if($.browser.safari){this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size","larger")[0]);}else{this.ec("increaseFontSize",false,"big");}},decreaseFontSize:function(){if($.browser.msie){this.ec("fontSize",false,this.qc("fontSize")-1);}else if($.browser.safari){this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size","smaller")[0]);}else{this.ec("decreaseFontSize",false,"small");}},forecolor:function(c){this.ec("foreColor",false,c||prompt("Enter HTML Color:","#"));},formatBlock:function(v){this.ec("formatblock",false,v||null);},showHTMLView:function(){this.updateTextArea();this.textarea.show();this.htmlarea.hide();$("ul li:not(li:has(a.html))",this.toolbar).hide();$("ul:not(:has(:visible))",this.toolbar).hide();$("ul li a.html",this.toolbar).addClass("highlighted");},hideHTMLView:function(){this.updateHtmlArea();this.textarea.hide();this.htmlarea.show();$("ul",this.toolbar).show();$("ul li",this.toolbar).show().find("a.html").removeClass("highlighted");},toggleHTMLView:function(){(this.textarea.is(":hidden"))?this.showHTMLView():this.hideHTMLView();},toHtmlString:function(){return this.editor.body.innerHTML;},toString:function(){return this.editor.body.innerText;},updateTextArea:function(){this.textarea.val(this.toHtmlString());},updateHtmlArea:function(){this.editor.body.innerHTML=this.textarea.val();}};jHtmlArea.fn.init.prototype=jHtmlArea.fn;jHtmlArea.defaultOptions={toolbar:[["html"],["bold","italic","underline","strikethrough","|","subscript","superscript"],["increasefontsize","decreasefontsize"],["orderedlist","unorderedlist"],["indent","outdent"],["justifyleft","justifycenter","justifyright"],["link","unlink","image","horizontalrule"],["p","h1","h2","h3","h4","h5","h6"],["cut","copy","paste"]],css:null,toolbarText:{bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strike-Through",cut:"Cut",copy:"Copy",paste:"Paste",h1:"Heading 1",h2:"Heading 2",h3:"Heading 3",h4:"Heading 4",h5:"Heading 5",h6:"Heading 6",p:"Paragraph",indent:"Indent",outdent:"Outdent",horizontalrule:"Insert Horizontal Rule",justifyleft:"Left Justify",justifycenter:"Center Justify",justifyright:"Right Justify",increasefontsize:"Increase Font Size",decreasefontsize:"Decrease Font Size",forecolor:"Text Color",link:"Insert Link",unlink:"Remove Link",image:"Insert Image",orderedlist:"Insert Ordered List",unorderedlist:"Insert Unordered List",subscript:"Subscript",superscript:"Superscript",html:"Show/Hide HTML Source View"}};var priv={toolbarButtons:{strikethrough:"strikeThrough",orderedlist:"orderedList",unorderedlist:"unorderedList",horizontalrule:"insertHorizontalRule",justifyleft:"justifyLeft",justifycenter:"justifyCenter",justifyright:"justifyRight",increasefontsize:"increaseFontSize",decreasefontsize:"decreaseFontSize",html:function(btn){this.toggleHTMLView();}},initEditor:function(options){var edit=this.editor=this.iframe[0].contentWindow.document;edit.designMode='on';edit.open();edit.write(this.textarea.val());edit.close();if(options.css){var e=edit.createElement('link');e.rel='stylesheet';e.type='text/css';e.href=options.css;edit.getElementsByTagName('head')[0].appendChild(e);}},initToolBar:function(options){var that=this;var menuItem=function(className,altText,action){return $("
").appendTo(that.toolbar);for(var i=0;i'));}else{var f=(function(e){var m=priv.toolbarButtons[e]||e;if((typeof(m)).toLowerCase()==="function"){return function(btn){m.call(this,btn);};}else{return function(){this[m]();this.editor.body.focus();};}})(e.toLowerCase());var t=options.toolbarText[e.toLowerCase()];ul.append(menuItem(e.toLowerCase(),t||e,f));}}else{ul.append(menuItem(e.css,e.text,e.action));}}};if(options.toolbar.length!==0&&priv.isArray(options.toolbar[0])){for(var i=0;i").css({
+ position: "absolute",
+ left: position.left + opts.offsetLeft,
+ top: position.top + owner.height() + opts.offsetTop,
+ "z-index": opts["z-index"]
+ }).addClass("jHtmlAreaColorPickerMenu");
+
+ for (var i = 0; i < opts.colors.length; i++) {
+ var c = opts.colors[i];
+ $("").css("background-color", c).appendTo(picker).click(
+ (function(color) {
+ return function() {
+ if (opts.colorChosen) {
+ opts.colorChosen.call(this, color);
+ }
+ that.hide();
+ };
+ })(c)
+ );
+ }
+
+ $("").html("Automatic").addClass("automatic").appendTo(picker).click(
+ function() {
+ if (opts.colorChosen) {
+ opts.colorChosen.call(this, null);
+ }
+ that.hide();
+ }
+ );
+
+
+ var autoHide = false;
+ picker.appendTo(owner.parent()).
+ show().
+ mouseout(function() {
+ autoHide = true;
+ that.currentTimeout = window.setTimeout(function() { if (autoHide === true) { that.hide(); } }, 1000);
+ }).
+ mouseover(function() {
+ if (that.currentTimeout) {
+ window.clearTimeout(that.currentTimeout);
+ that.currentTimeout = null;
+ }
+ autoHide = false;
+ });
+ },
+ hide: function() {
+ this.picker.hide();
+ this.picker.remove();
+ }
+ };
+ menu.fn.init.prototype = menu.fn;
+
+ menu.defaultOptions = {
+ "z-index": 0,
+ offsetTop: 0,
+ offsetLeft: 0,
+ colors: [
+ "#ffffff",
+ "#cccccc",
+ "#c0c0c0",
+ "#999999",
+ "#666666",
+ "#333333",
+ "#000000",
+
+ "#ffcccc",
+ "#ff6666",
+ "#ff0000",
+ "#cc0000",
+ "#990000",
+ "#660000",
+ "#330000",
+
+ "#ffcc99",
+ "#ff9966",
+ "#ff9900",
+ "#ff6600",
+ "#cc6600",
+ "#993300",
+ "#663300",
+
+ "#ffff99",
+ "#ffff66",
+ "#ffcc66",
+ "#ffcc33",
+ "#cc9933",
+ "#996633",
+ "#663333",
+
+ "#ffffcc",
+ "#ffff33",
+ "#ffff00",
+ "#ffcc00",
+ "#999900",
+ "#666600",
+ "#333300",
+
+ "#99ff99",
+ "#66ff99",
+ "#33ff33",
+ "#33cc00",
+ "#009900",
+ "#006600",
+ "#003300",
+
+ "#99FFFF",
+ "#33FFFF",
+ "#66CCCC",
+ "#00CCCC",
+ "#339999",
+ "#336666",
+ "#003333",
+
+ "#CCFFFF",
+ "#66FFFF",
+ "#33CCFF",
+ "#3366FF",
+ "#3333FF",
+ "#000099",
+ "#000066",
+
+ "#CCCCFF",
+ "#9999FF",
+ "#6666CC",
+ "#6633FF",
+ "#6600CC",
+ "#333399",
+ "#330099",
+
+ "#FFCCFF",
+ "#FF99FF",
+ "#CC66CC",
+ "#CC33CC",
+ "#993399",
+ "#663366",
+ "#330033"
+ ],
+ colorChosen: null
+ };
+})(jQuery);
\ No newline at end of file
diff --git a/3.1/modules/pages/New folder/scripts/jHtmlArea.ColorPickerMenu-0.7.0.min.js b/3.1/modules/pages/New folder/scripts/jHtmlArea.ColorPickerMenu-0.7.0.min.js
new file mode 100644
index 00000000..768c9358
--- /dev/null
+++ b/3.1/modules/pages/New folder/scripts/jHtmlArea.ColorPickerMenu-0.7.0.min.js
@@ -0,0 +1,8 @@
+// jHtmlArea - http://jhtmlarea.codeplex.com - (c)2009 Chris Pietschmann
+(function($){if(jHtmlArea){var oldForecolor=jHtmlArea.fn.forecolor;jHtmlArea.fn.forecolor=function(c){if(c){oldForecolor.call(this,c);}else{var that=this;var rng=this.getRange();jHtmlAreaColorPickerMenu($(".forecolor",this.toolbar),{colorChosen:function(color){if($.browser.msie){rng.execCommand("ForeColor",false,color);}else{that.forecolor(color);}}});}};}
+var menu=window.jHtmlAreaColorPickerMenu=function(ownerElement,options){return new jHtmlAreaColorPickerMenu.fn.init(ownerElement,options);};menu.fn=menu.prototype={jhtmlareacolorpickermenu:"0.7.0",init:function(ownerElement,options){var opts=$.extend({},menu.defaultOptions,options);var that=this;var owner=this.owner=$(ownerElement);var position=owner.position();if(menu.instance){menu.instance.hide();}
+jHtmlAreaColorPickerMenu.instance=this;var picker=this.picker=$("").css({position:"absolute",left:position.left+opts.offsetLeft,top:position.top+owner.height()+opts.offsetTop,"z-index":opts["z-index"]}).addClass("jHtmlAreaColorPickerMenu");for(var i=0;i").css("background-color",c).appendTo(picker).click((function(color){return function(){if(opts.colorChosen){opts.colorChosen.call(this,color);}
+that.hide();};})(c));}
+$("").html("Automatic").addClass("automatic").appendTo(picker).click(function(){if(opts.colorChosen){opts.colorChosen.call(this,null);}
+that.hide();});var autoHide=false;picker.appendTo(owner.parent()).show().mouseout(function(){autoHide=true;that.currentTimeout=window.setTimeout(function(){if(autoHide===true){that.hide();}},1000);}).mouseover(function(){if(that.currentTimeout){window.clearTimeout(that.currentTimeout);that.currentTimeout=null;}
+autoHide=false;});},hide:function(){this.picker.hide();this.picker.remove();}};menu.fn.init.prototype=menu.fn;menu.defaultOptions={"z-index":0,offsetTop:0,offsetLeft:0,colors:["#ffffff","#cccccc","#c0c0c0","#999999","#666666","#333333","#000000","#ffcccc","#ff6666","#ff0000","#cc0000","#990000","#660000","#330000","#ffcc99","#ff9966","#ff9900","#ff6600","#cc6600","#993300","#663300","#ffff99","#ffff66","#ffcc66","#ffcc33","#cc9933","#996633","#663333","#ffffcc","#ffff33","#ffff00","#ffcc00","#999900","#666600","#333300","#99ff99","#66ff99","#33ff33","#33cc00","#009900","#006600","#003300","#99FFFF","#33FFFF","#66CCCC","#00CCCC","#339999","#336666","#003333","#CCFFFF","#66FFFF","#33CCFF","#3366FF","#3333FF","#000099","#000066","#CCCCFF","#9999FF","#6666CC","#6633FF","#6600CC","#333399","#330099","#FFCCFF","#FF99FF","#CC66CC","#CC33CC","#993399","#663366","#330033"],colorChosen:null};})(jQuery);
\ No newline at end of file
diff --git a/3.1/modules/pages/New folder/scripts/jquery-1.3.2-vsdoc.js b/3.1/modules/pages/New folder/scripts/jquery-1.3.2-vsdoc.js
new file mode 100644
index 00000000..27aefb87
--- /dev/null
+++ b/3.1/modules/pages/New folder/scripts/jquery-1.3.2-vsdoc.js
@@ -0,0 +1,6255 @@
+/*
+ * This file has been commented to support Visual Studio Intellisense.
+ * You should not use this file at runtime inside the browser--it is only
+ * intended to be used only for design-time IntelliSense. Please use the
+ * standard jQuery library for all production use.
+ *
+ * Comment version: 1.3.2a
+ */
+
+/*
+ * jQuery JavaScript Library v1.3.2
+ *
+ * Copyright (c) 2009 John Resig, http://jquery.com/
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+
+(function(){
+
+var
+ // Will speed up references to window, and allows munging its name.
+ window = this,
+ // Will speed up references to undefined, and allows munging its name.
+ undefined,
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ jQuery = window.jQuery = window.$ = function(selector, context) {
+ ///
+ /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements.
+ /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML.
+ /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s).
+ /// 4: $(callback) - A shorthand for $(document).ready().
+ ///
+ ///
+ /// 1: expression - An expression to search with.
+ /// 2: html - A string of HTML to create on the fly.
+ /// 3: elements - DOM element(s) to be encapsulated by a jQuery object.
+ /// 4: callback - The function to execute when the DOM is ready.
+ ///
+ ///
+ /// 1: context - A DOM Element, Document or jQuery to use as context.
+ ///
+ ///
+ /// The DOM node context originally passed to jQuery() (if none was passed then context will be equal to the document).
+ ///
+ ///
+ /// A selector representing selector originally passed to jQuery().
+ ///
+ ///
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // A simple way to check for HTML strings or ID strings
+ // (both of which we optimize for)
+ quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
+ // Is it a simple selector
+ isSimple = /^.[^:#\[\.,]*$/;
+
+jQuery.fn = jQuery.prototype = {
+ init: function( selector, context ) {
+ ///
+ /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements.
+ /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML.
+ /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s).
+ /// 4: $(callback) - A shorthand for $(document).ready().
+ ///
+ ///
+ /// 1: expression - An expression to search with.
+ /// 2: html - A string of HTML to create on the fly.
+ /// 3: elements - DOM element(s) to be encapsulated by a jQuery object.
+ /// 4: callback - The function to execute when the DOM is ready.
+ ///
+ ///
+ /// 1: context - A DOM Element, Document or jQuery to use as context.
+ ///
+ ///
+
+ // Make sure that a selection was provided
+ selector = selector || document;
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this[0] = selector;
+ this.length = 1;
+ this.context = selector;
+ return this;
+ }
+ // Handle HTML strings
+ if (typeof selector === "string") {
+ // Are we dealing with HTML string or an ID?
+ var match = quickExpr.exec(selector);
+
+ // Verify a match, and that no context was specified for #id
+ if (match && (match[1] || !context)) {
+
+ // HANDLE: $(html) -> $(array)
+ if (match[1])
+ selector = jQuery.clean([match[1]], context);
+
+ // HANDLE: $("#id")
+ else {
+ var elem = document.getElementById(match[3]);
+
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if (elem && elem.id != match[3])
+ return jQuery().find(selector);
+
+ // Otherwise, we inject the element directly into the jQuery object
+ var ret = jQuery(elem || []);
+ ret.context = document;
+ ret.selector = selector;
+ return ret;
+ }
+
+ // HANDLE: $(expr, [context])
+ // (which is just equivalent to: $(content).find(expr)
+ } else
+ return jQuery(context).find(selector);
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) )
+ return jQuery( document ).ready( selector );
+
+ // Make sure that old selector state is passed along
+ if ( selector.selector && selector.context ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return this.setArray(jQuery.isArray( selector ) ?
+ selector :
+ jQuery.makeArray(selector));
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.3.2",
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ ///
+ /// The number of elements currently matched.
+ /// Part of Core
+ ///
+ ///
+
+ return this.length;
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ ///
+ /// Access a single matched element. num is used to access the
+ /// Nth element matched.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// Access the element in the Nth position.
+ ///
+
+ return num == undefined ?
+
+ // Return a 'clean' array
+ Array.prototype.slice.call( this ) :
+
+ // Return just the object
+ this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ ///
+ /// Set the jQuery object to an array of elements, while maintaining
+ /// the stack.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// An array of elements
+ ///
+
+ // Build a new jQuery matched element set
+ var ret = jQuery( elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" )
+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
+ else if ( name )
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Force the current matched set of elements to become
+ // the specified array of elements (destroying the stack in the process)
+ // You should use pushStack() in order to do this, but maintain the stack
+ setArray: function( elems ) {
+ ///
+ /// Set the jQuery object to an array of elements. This operation is
+ /// completely destructive - be sure to use .pushStack() if you wish to maintain
+ /// the jQuery stack.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// An array of elements
+ ///
+
+ // Resetting the length to 0, then using the native Array push
+ // is a super-fast way to populate an object with array-like properties
+ this.length = 0;
+ Array.prototype.push.apply( this, elems );
+
+ return this;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ ///
+ /// Execute a function within the context of every matched element.
+ /// This means that every time the passed-in function is executed
+ /// (which is once for every element matched) the 'this' keyword
+ /// points to the specific element.
+ /// Additionally, the function, when executed, is passed a single
+ /// argument representing the position of the element in the matched
+ /// set.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// A function to execute
+ ///
+
+ return jQuery.each( this, callback, args );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ ///
+ /// Searches every matched element for the object and returns
+ /// the index of the element, if found, starting with zero.
+ /// Returns -1 if the object wasn't found.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// Object to search for
+ ///
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem && elem.jquery ? elem[0] : elem
+ , this );
+ },
+
+ attr: function( name, value, type ) {
+ ///
+ /// Set a single property to a computed value, on all matched elements.
+ /// Instead of a value, a function is provided, that computes the value.
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// The name of the property to set.
+ ///
+ ///
+ /// A function returning the value to set.
+ ///
+
+ var options = name;
+
+ // Look for the case where we're accessing a style value
+ if ( typeof name === "string" )
+ if ( value === undefined )
+ return this[0] && jQuery[ type || "attr" ]( this[0], name );
+
+ else {
+ options = {};
+ options[ name ] = value;
+ }
+
+ // Check to see if we're setting style values
+ return this.each(function(i){
+ // Set all the styles
+ for ( name in options )
+ jQuery.attr(
+ type ?
+ this.style :
+ this,
+ name, jQuery.prop( this, options[ name ], type, i, name )
+ );
+ });
+ },
+
+ css: function( key, value ) {
+ ///
+ /// Set a single style property to a value, on all matched elements.
+ /// If a number is provided, it is automatically converted into a pixel value.
+ /// Part of CSS
+ ///
+ ///
+ ///
+ /// The name of the property to set.
+ ///
+ ///
+ /// The value to set the property to.
+ ///
+
+ // ignore negative width and height values
+ if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
+ value = undefined;
+ return this.attr( key, value, "curCSS" );
+ },
+
+ text: function( text ) {
+ ///
+ /// Set the text contents of all matched elements.
+ /// Similar to html(), but escapes HTML (replace "<" and ">" with their
+ /// HTML entities).
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// The text value to set the contents of the element to.
+ ///
+
+ if ( typeof text !== "object" && text != null )
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+
+ var ret = "";
+
+ jQuery.each( text || this, function(){
+ jQuery.each( this.childNodes, function(){
+ if ( this.nodeType != 8 )
+ ret += this.nodeType != 1 ?
+ this.nodeValue :
+ jQuery.fn.text( [ this ] );
+ });
+ });
+
+ return ret;
+ },
+
+ wrapAll: function( html ) {
+ ///
+ /// Wrap all matched elements with a structure of other elements.
+ /// This wrapping process is most useful for injecting additional
+ /// stucture into a document, without ruining the original semantic
+ /// qualities of a document.
+ /// This works by going through the first element
+ /// provided and finding the deepest ancestor element within its
+ /// structure - it is that element that will en-wrap everything else.
+ /// This does not work with elements that contain text. Any necessary text
+ /// must be added after the wrapping is done.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// A DOM element that will be wrapped around the target.
+ ///
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).clone();
+
+ if ( this[0].parentNode )
+ wrap.insertBefore( this[0] );
+
+ wrap.map(function(){
+ var elem = this;
+
+ while ( elem.firstChild )
+ elem = elem.firstChild;
+
+ return elem;
+ }).append(this);
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ ///
+ /// Wraps the inner child contents of each matched elemenht (including text nodes) with an HTML structure.
+ ///
+ ///
+ /// A string of HTML or a DOM element that will be wrapped around the target contents.
+ ///
+ ///
+
+ return this.each(function(){
+ jQuery( this ).contents().wrapAll( html );
+ });
+ },
+
+ wrap: function( html ) {
+ ///
+ /// Wrap all matched elements with a structure of other elements.
+ /// This wrapping process is most useful for injecting additional
+ /// stucture into a document, without ruining the original semantic
+ /// qualities of a document.
+ /// This works by going through the first element
+ /// provided and finding the deepest ancestor element within its
+ /// structure - it is that element that will en-wrap everything else.
+ /// This does not work with elements that contain text. Any necessary text
+ /// must be added after the wrapping is done.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// A DOM element that will be wrapped around the target.
+ ///
+
+ return this.each(function(){
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ append: function() {
+ ///
+ /// Append content to the inside of every matched element.
+ /// This operation is similar to doing an appendChild to all the
+ /// specified elements, adding them into the document.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to append to the target
+ ///
+
+ return this.domManip(arguments, true, function(elem){
+ if (this.nodeType == 1)
+ this.appendChild( elem );
+ });
+ },
+
+ prepend: function() {
+ ///
+ /// Prepend content to the inside of every matched element.
+ /// This operation is the best way to insert elements
+ /// inside, at the beginning, of all matched elements.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to prepend to the target.
+ ///
+
+ return this.domManip(arguments, true, function(elem){
+ if (this.nodeType == 1)
+ this.insertBefore( elem, this.firstChild );
+ });
+ },
+
+ before: function() {
+ ///
+ /// Insert content before each of the matched elements.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to insert before each target.
+ ///
+
+ return this.domManip(arguments, false, function(elem){
+ this.parentNode.insertBefore( elem, this );
+ });
+ },
+
+ after: function() {
+ ///
+ /// Insert content after each of the matched elements.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// Content to insert after each target.
+ ///
+
+ return this.domManip(arguments, false, function(elem){
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ },
+
+ end: function() {
+ ///
+ /// End the most recent 'destructive' operation, reverting the list of matched elements
+ /// back to its previous state. After an end operation, the list of matched elements will
+ /// revert to the last state of matched elements.
+ /// If there was no destructive operation before, an empty set is returned.
+ /// Part of DOM/Traversing
+ ///
+ ///
+
+ return this.prevObject || jQuery( [] );
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: [].push,
+ sort: [].sort,
+ splice: [].splice,
+
+ find: function( selector ) {
+ ///
+ /// Searches for all elements that match the specified expression.
+ /// This method is a good way to find additional descendant
+ /// elements with which to process.
+ /// All searching is done using a jQuery expression. The expression can be
+ /// written using CSS 1-3 Selector syntax, or basic XPath.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ ///
+ /// An expression to search with.
+ ///
+ ///
+
+ if ( this.length === 1 ) {
+ var ret = this.pushStack( [], "find", selector );
+ ret.length = 0;
+ jQuery.find( selector, this[0], ret );
+ return ret;
+ } else {
+ return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
+ return jQuery.find( selector, elem );
+ })), "find", selector );
+ }
+ },
+
+ clone: function( events ) {
+ ///
+ /// Clone matched DOM Elements and select the clones.
+ /// This is useful for moving copies of the elements to another
+ /// location in the DOM.
+ /// Part of DOM/Manipulation
+ ///
+ ///
+ ///
+ /// (Optional) Set to false if you don't want to clone all descendant nodes, in addition to the element itself.
+ ///
+
+ // Do the clone
+ var ret = this.map(function(){
+ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var html = this.outerHTML;
+ if ( !html ) {
+ var div = this.ownerDocument.createElement("div");
+ div.appendChild( this.cloneNode(true) );
+ html = div.innerHTML;
+ }
+
+ return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
+ } else
+ return this.cloneNode(true);
+ });
+
+ // Copy the events from the original to the clone
+ if ( events === true ) {
+ var orig = this.find("*").andSelf(), i = 0;
+
+ ret.find("*").andSelf().each(function(){
+ if ( this.nodeName !== orig[i].nodeName )
+ return;
+
+ var events = jQuery.data( orig[i], "events" );
+
+ for ( var type in events ) {
+ for ( var handler in events[ type ] ) {
+ jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+ }
+ }
+
+ i++;
+ });
+ }
+
+ // Return the cloned set
+ return ret;
+ },
+
+ filter: function( selector ) {
+ ///
+ /// Removes all elements from the set of matched elements that do not
+ /// pass the specified filter. This method is used to narrow down
+ /// the results of a search.
+ /// })
+ /// Part of DOM/Traversing
+ ///
+ ///
+ ///
+ /// A function to use for filtering
+ ///
+ ///
+
+ return this.pushStack(
+ jQuery.isFunction( selector ) &&
+ jQuery.grep(this, function(elem, i){
+ return selector.call( elem, i );
+ }) ||
+
+ jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
+ return elem.nodeType === 1;
+ }) ), "filter", selector );
+ },
+
+ closest: function( selector ) {
+ ///
+ /// Get a set of elements containing the closest parent element that matches the specified selector, the starting element included.
+ ///
+ ///
+ ///
+ /// An expression to filter the elements with.
+ ///
+ ///
+
+ var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
+ closer = 0;
+
+ return this.map(function(){
+ var cur = this;
+ while ( cur && cur.ownerDocument ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
+ jQuery.data(cur, "closest", closer);
+ return cur;
+ }
+ cur = cur.parentNode;
+ closer++;
+ }
+ });
+ },
+
+ not: function( selector ) {
+ ///
+ /// Removes any elements inside the array of elements from the set
+ /// of matched elements. This method is used to remove one or more
+ /// elements from a jQuery object.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ /// A set of elements to remove from the jQuery set of matched elements.
+ ///
+ ///
+
+ if ( typeof selector === "string" )
+ // test special case where just one selector is passed in
+ if ( isSimple.test( selector ) )
+ return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
+ else
+ selector = jQuery.multiFilter( selector, this );
+
+ var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
+ return this.filter(function() {
+ return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
+ });
+ },
+
+ add: function( selector ) {
+ ///
+ /// Adds one or more Elements to the set of matched elements.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ /// One or more Elements to add
+ ///
+ ///
+
+ return this.pushStack( jQuery.unique( jQuery.merge(
+ this.get(),
+ typeof selector === "string" ?
+ jQuery( selector ) :
+ jQuery.makeArray( selector )
+ )));
+ },
+
+ is: function( selector ) {
+ ///
+ /// Checks the current selection against an expression and returns true,
+ /// if at least one element of the selection fits the given expression.
+ /// Does return false, if no element fits or the expression is not valid.
+ /// filter(String) is used internally, therefore all rules that apply there
+ /// apply here, too.
+ /// Part of DOM/Traversing
+ ///
+ ///
+ ///
+ /// The expression with which to filter
+ ///
+
+ return !!selector && jQuery.multiFilter( selector, this ).length > 0;
+ },
+
+ hasClass: function( selector ) {
+ ///
+ /// Checks the current selection against a class and returns whether at least one selection has a given class.
+ ///
+ /// The class to check against
+ /// True if at least one element in the selection has the class, otherwise false.
+
+ return !!selector && this.is( "." + selector );
+ },
+
+ val: function( value ) {
+ ///
+ /// Set the value of every matched element.
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// Set the property to the specified value.
+ ///
+
+ if ( value === undefined ) {
+ var elem = this[0];
+
+ if ( elem ) {
+ if( jQuery.nodeName( elem, 'option' ) )
+ return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type == "select-one";
+
+ // Nothing was selected
+ if ( index < 0 )
+ return null;
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ if ( option.selected ) {
+ // Get the specifc value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if ( one )
+ return value;
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ }
+
+ // Everything else, we just grab the value
+ return (elem.value || "").replace(/\r/g, "");
+
+ }
+
+ return undefined;
+ }
+
+ if ( typeof value === "number" )
+ value += '';
+
+ return this.each(function(){
+ if ( this.nodeType != 1 )
+ return;
+
+ if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
+ this.checked = (jQuery.inArray(this.value, value) >= 0 ||
+ jQuery.inArray(this.name, value) >= 0);
+
+ else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = jQuery.makeArray(value);
+
+ jQuery( "option", this ).each(function(){
+ this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
+ jQuery.inArray( this.text, values ) >= 0);
+ });
+
+ if ( !values.length )
+ this.selectedIndex = -1;
+
+ } else
+ this.value = value;
+ });
+ },
+
+ html: function( value ) {
+ ///
+ /// Set the html contents of every matched element.
+ /// This property is not available on XML documents.
+ /// Part of DOM/Attributes
+ ///
+ ///
+ ///
+ /// Set the html contents to the specified value.
+ ///
+
+ return value === undefined ?
+ (this[0] ?
+ this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
+ null) :
+ this.empty().append( value );
+ },
+
+ replaceWith: function( value ) {
+ ///
+ /// Replaces all matched element with the specified HTML or DOM elements.
+ ///
+ ///
+ /// The content with which to replace the matched elements.
+ ///
+ /// The element that was just replaced.
+
+ return this.after( value ).remove();
+ },
+
+ eq: function( i ) {
+ ///
+ /// Reduce the set of matched elements to a single element.
+ /// The position of the element in the set of matched elements
+ /// starts at 0 and goes to length - 1.
+ /// Part of Core
+ ///
+ ///
+ ///
+ /// pos The index of the element that you wish to limit to.
+ ///
+
+ return this.slice( i, +i + 1 );
+ },
+
+ slice: function() {
+ ///
+ /// Selects a subset of the matched elements. Behaves exactly like the built-in Array slice method.
+ ///
+ /// Where to start the subset (0-based).
+ /// Where to end the subset (not including the end element itself).
+ /// If omitted, ends at the end of the selection
+ /// The sliced elements
+
+ return this.pushStack( Array.prototype.slice.apply( this, arguments ),
+ "slice", Array.prototype.slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ ///
+ /// This member is internal.
+ ///
+ ///
+ ///
+
+ return this.pushStack( jQuery.map(this, function(elem, i){
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ andSelf: function() {
+ ///
+ /// Adds the previous selection to the current selection.
+ ///
+ ///
+
+ return this.add( this.prevObject );
+ },
+
+ domManip: function( args, table, callback ) {
+ ///
+ /// Args
+ ///
+ ///
+ /// Insert TBODY in TABLEs if one is not found.
+ ///
+ ///
+ /// If dir<0, process args in reverse order.
+ ///
+ ///
+ /// The function doing the DOM manipulation.
+ ///
+ ///
+ ///
+ /// Part of Core
+ ///
+
+ if ( this[0] ) {
+ var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
+ scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
+ first = fragment.firstChild;
+
+ if ( first )
+ for ( var i = 0, l = this.length; i < l; i++ )
+ callback.call( root(this[i], first), this.length > 1 || i > 0 ?
+ fragment.cloneNode(true) : fragment );
+
+ if ( scripts )
+ jQuery.each( scripts, evalScript );
+ }
+
+ return this;
+
+ function root( elem, cur ) {
+ return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
+ }
+ }
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+function evalScript( i, elem ) {
+ ///
+ /// This method is internal.
+ ///
+ ///
+
+ if ( elem.src )
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+
+ else
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+
+ if ( elem.parentNode )
+ elem.parentNode.removeChild( elem );
+}
+
+function now(){
+ ///
+ /// Gets the current date.
+ ///
+ /// The current date.
+ return +new Date;
+}
+
+jQuery.extend = jQuery.fn.extend = function() {
+ ///
+ /// Extend one object with one or more others, returning the original,
+ /// modified, object. This is a great utility for simple inheritance.
+ /// jQuery.extend(settings, options);
+ /// var settings = jQuery.extend({}, defaults, options);
+ /// Part of JavaScript
+ ///
+ ///
+ /// The object to extend
+ ///
+ ///
+ /// The object that will be merged into the first.
+ ///
+ ///
+ /// (optional) More objects to merge into the first
+ ///
+ ///
+
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) )
+ target = {};
+
+ // extend jQuery itself if only one argument is passed
+ if ( length == i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ )
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null )
+ // Extend the base object
+ for ( var name in options ) {
+ var src = target[ name ], copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy )
+ continue;
+
+ // Recurse if we're merging object values
+ if ( deep && copy && typeof copy === "object" && !copy.nodeType )
+ target[ name ] = jQuery.extend( deep,
+ // Never move original objects, clone them
+ src || ( copy.length != null ? [ ] : { } )
+ , copy );
+
+ // Don't bring in undefined values
+ else if ( copy !== undefined )
+ target[ name ] = copy;
+
+ }
+
+ // Return the modified object
+ return target;
+};
+
+// exclude the following css properties to add px
+var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+ // cache defaultView
+ defaultView = document.defaultView || {},
+ toString = Object.prototype.toString;
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ ///
+ /// Run this function to give control of the $ variable back
+ /// to whichever library first implemented it. This helps to make
+ /// sure that jQuery doesn't conflict with the $ object
+ /// of other libraries.
+ /// By using this function, you will only be able to access jQuery
+ /// using the 'jQuery' variable. For example, where you used to do
+ /// $("div p"), you now must do jQuery("div p").
+ /// Part of Core
+ ///
+ ///
+
+ window.$ = _$;
+
+ if ( deep )
+ window.jQuery = _jQuery;
+
+ return jQuery;
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ ///
+ /// Determines if the parameter passed is a function.
+ ///
+ /// The object to check
+ /// True if the parameter is a function; otherwise false.
+
+ return toString.call(obj) === "[object Function]";
+ },
+
+ isArray: function(obj) {
+ ///
+ /// Determine if the parameter passed is an array.
+ ///
+ /// Object to test whether or not it is an array.
+ /// True if the parameter is a function; otherwise false.
+
+ return toString.call(obj) === "[object Array]";
+ },
+
+ // check if an element is in a (or is an) XML document
+ isXMLDoc: function( elem ) {
+ ///
+ /// Determines if the parameter passed is an XML document.
+ ///
+ /// The object to test
+ /// True if the parameter is an XML document; otherwise false.
+
+ return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+ !!elem.ownerDocument && jQuery.isXMLDoc(elem.ownerDocument);
+ },
+
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ ///
+ /// Internally evaluates a script in a global context.
+ ///
+ ///
+
+ if ( data && /\S/.test(data) ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+
+ script.type = "text/javascript";
+ if ( jQuery.support.scriptEval )
+ script.appendChild( document.createTextNode( data ) );
+ else
+ script.text = data;
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709).
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ ///
+ /// Checks whether the specified element has the specified DOM node name.
+ ///
+ /// The element to examine
+ /// The node name to check
+ /// True if the specified node name matches the node's DOM node name; otherwise false
+
+ return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ ///
+ /// A generic iterator function, which can be used to seemlessly
+ /// iterate over both objects and arrays. This function is not the same
+ /// as $().each() - which is used to iterate, exclusively, over a jQuery
+ /// object. This function can be used to iterate over anything.
+ /// The callback has two arguments:the key (objects) or index (arrays) as first
+ /// the first, and the value as the second.
+ /// Part of JavaScript
+ ///
+ ///
+ /// The object, or array, to iterate over.
+ ///
+ ///
+ /// The function that will be executed on every object.
+ ///
+ ///
+
+ var name, i = 0, length = object.length;
+
+ if ( args ) {
+ if ( length === undefined ) {
+ for ( name in object )
+ if ( callback.apply( object[ name ], args ) === false )
+ break;
+ } else
+ for ( ; i < length; )
+ if ( callback.apply( object[ i++ ], args ) === false )
+ break;
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( length === undefined ) {
+ for ( name in object )
+ if ( callback.call( object[ name ], name, object[ name ] ) === false )
+ break;
+ } else
+ for ( var value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
+ }
+
+ return object;
+ },
+
+ prop: function( elem, value, type, i, name ) {
+ ///
+ /// This method is internal.
+ ///
+ ///
+ // This member is not documented within the jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.prop
+
+ // Handle executable functions
+ if ( jQuery.isFunction( value ) )
+ value = value.call( elem, i );
+
+ // Handle passing in a number to a CSS property
+ return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
+ value + "px" :
+ value;
+ },
+
+ className: {
+ // internal only, use addClass("class")
+ add: function( elem, classNames ) {
+ ///
+ /// Internal use only; use addClass('class')
+ ///
+ ///
+
+ jQuery.each((classNames || "").split(/\s+/), function(i, className){
+ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
+ elem.className += (elem.className ? " " : "") + className;
+ });
+ },
+
+ // internal only, use removeClass("class")
+ remove: function( elem, classNames ) {
+ ///
+ /// Internal use only; use removeClass('class')
+ ///
+ ///
+
+ if (elem.nodeType == 1)
+ elem.className = classNames !== undefined ?
+ jQuery.grep(elem.className.split(/\s+/), function(className){
+ return !jQuery.className.has( classNames, className );
+ }).join(" ") :
+ "";
+ },
+
+ // internal only, use hasClass("class")
+ has: function( elem, className ) {
+ ///
+ /// Internal use only; use hasClass('class')
+ ///
+ ///
+
+ return elem && jQuery.inArray(className, (elem.className || elem).toString().split(/\s+/)) > -1;
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ ///
+ /// Swap in/out style options.
+ ///
+
+ var old = {};
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( var name in options )
+ elem.style[ name ] = old[ name ];
+ },
+
+ css: function( elem, name, force, extra ) {
+ ///
+ /// This method is internal only.
+ ///
+ ///
+ // This method is undocumented in jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.css
+
+ if ( name == "width" || name == "height" ) {
+ var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
+
+ function getWH() {
+ val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+
+ if ( extra === "border" )
+ return;
+
+ jQuery.each( which, function() {
+ if ( !extra )
+ val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+ if ( extra === "margin" )
+ val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
+ else
+ val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+ });
+ }
+
+ if ( elem.offsetWidth !== 0 )
+ getWH();
+ else
+ jQuery.swap( elem, props, getWH );
+
+ return Math.max(0, Math.round(val));
+ }
+
+ return jQuery.curCSS( elem, name, force );
+ },
+
+ curCSS: function( elem, name, force ) {
+ ///
+ /// This method is internal only.
+ ///
+ ///
+ // This method is undocumented in jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.curCSS
+
+ var ret, style = elem.style;
+
+ // We need to handle opacity special in IE
+ if ( name == "opacity" && !jQuery.support.opacity ) {
+ ret = jQuery.attr( style, "opacity" );
+
+ return ret == "" ?
+ "1" :
+ ret;
+ }
+
+ // Make sure we're using the right name for getting the float value
+ if ( name.match( /float/i ) )
+ name = styleFloat;
+
+ if ( !force && style && style[ name ] )
+ ret = style[ name ];
+
+ else if ( defaultView.getComputedStyle ) {
+
+ // Only "float" is needed here
+ if ( name.match( /float/i ) )
+ name = "float";
+
+ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
+
+ var computedStyle = defaultView.getComputedStyle( elem, null );
+
+ if ( computedStyle )
+ ret = computedStyle.getPropertyValue( name );
+
+ // We should always get a number back from opacity
+ if ( name == "opacity" && ret == "" )
+ ret = "1";
+
+ } else if ( elem.currentStyle ) {
+ var camelCase = name.replace(/\-(\w)/g, function(all, letter){
+ return letter.toUpperCase();
+ });
+
+ ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
+ // Remember the original values
+ var left = style.left, rsLeft = elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ style.left = ret || 0;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret;
+ },
+
+ clean: function( elems, context, fragment ) {
+ ///
+ /// This method is internal only.
+ ///
+ ///
+ // This method is undocumented in the jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.clean
+
+
+ context = context || document;
+
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" )
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
+ var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
+ if ( match )
+ return [ context.createElement( match[1] ) ];
+ }
+
+ var ret = [], scripts = [], div = context.createElement("div");
+
+ jQuery.each(elems, function(i, elem){
+ if ( typeof elem === "number" )
+ elem += '';
+
+ if ( !elem )
+ return;
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
+ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
+ all :
+ front + ">" + tag + ">";
+ });
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
+
+ var wrap =
+ // option or optgroup
+ !tags.indexOf("", "" ] ||
+
+ !tags.indexOf("", "" ] ||
+
+ tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
+ [ 1, "