a";
-
- var all = div.getElementsByTagName("*"),
- a = div.getElementsByTagName("a")[0];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return;
- }
-
- jQuery.support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: div.firstChild.nodeType === 3,
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText insted)
- style: /red/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: a.getAttribute("href") === "/a",
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55$/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: div.getElementsByTagName("input")[0].value === "on",
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
-
- parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
-
- // Will be defined later
- deleteExpando: true,
- checkClone: false,
- scriptEval: false,
- noCloneEvent: true,
- boxModel: null
- };
-
- script.type = "text/javascript";
- try {
- script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
- } catch(e) {}
-
- root.insertBefore( script, root.firstChild );
-
- // Make sure that the execution of code works by injecting a script
- // tag with appendChild/createTextNode
- // (IE doesn't support this, fails, and uses .text instead)
- if ( window[ id ] ) {
- jQuery.support.scriptEval = true;
- delete window[ id ];
- }
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete script.test;
-
- } catch(e) {
- jQuery.support.deleteExpando = false;
- }
-
- root.removeChild( script );
-
- if ( div.attachEvent && div.fireEvent ) {
- div.attachEvent("onclick", function click() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- jQuery.support.noCloneEvent = false;
- div.detachEvent("onclick", click);
- });
- div.cloneNode(true).fireEvent("onclick");
- }
-
- div = document.createElement("div");
- div.innerHTML = "";
-
- var fragment = document.createDocumentFragment();
- fragment.appendChild( div.firstChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
-
- // Figure out if the W3C box model works as expected
- // document.body must exist before we can do this
- jQuery(function() {
- var div = document.createElement("div");
- div.style.width = div.style.paddingLeft = "1px";
-
- document.body.appendChild( div );
- jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
- document.body.removeChild( div ).style.display = 'none';
-
- div = null;
- });
-
- // Technique from Juriy Zaytsev
- // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
- var eventSupported = function( eventName ) {
- var el = document.createElement("div");
- eventName = "on" + eventName;
-
- var isSupported = (eventName in el);
- if ( !isSupported ) {
- el.setAttribute(eventName, "return;");
- isSupported = typeof el[eventName] === "function";
- }
- el = null;
-
- return isSupported;
- };
-
- jQuery.support.submitBubbles = eventSupported("submit");
- jQuery.support.changeBubbles = eventSupported("change");
-
- // release memory in IE
- root = script = div = all = a = null;
-})();
-
-jQuery.props = {
- "for": "htmlFor",
- "class": "className",
- readonly: "readOnly",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- rowspan: "rowSpan",
- colspan: "colSpan",
- tabindex: "tabIndex",
- usemap: "useMap",
- frameborder: "frameBorder"
-};
-var expando = "jQuery" + now(), uuid = 0, windowData = {};
-
-jQuery.extend({
- cache: {},
-
- expando:expando,
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- "object": true,
- "applet": true
- },
-
- data: function( elem, name, data ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- return;
- }
-
- elem = elem == window ?
- windowData :
- elem;
-
- var id = elem[ expando ], cache = jQuery.cache, thisCache;
-
- if ( !id && typeof name === "string" && data === undefined ) {
- return null;
- }
-
- // Compute a unique ID for the element
- if ( !id ) {
- id = ++uuid;
- }
-
- // Avoid generating a new cache unless none exists and we
- // want to manipulate it.
- if ( typeof name === "object" ) {
- elem[ expando ] = id;
- thisCache = cache[ id ] = jQuery.extend(true, {}, name);
-
- } else if ( !cache[ id ] ) {
- elem[ expando ] = id;
- cache[ id ] = {};
- }
-
- thisCache = cache[ id ];
-
- // Prevent overriding the named cache with undefined values
- if ( data !== undefined ) {
- thisCache[ name ] = data;
- }
-
- return typeof name === "string" ? thisCache[ name ] : thisCache;
- },
-
- removeData: function( elem, name ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- return;
- }
-
- elem = elem == window ?
- windowData :
- elem;
-
- var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
-
- // If we want to remove a specific section of the element's data
- if ( name ) {
- if ( thisCache ) {
- // Remove the section of cache data
- delete thisCache[ name ];
-
- // If we've removed all the data, remove the element's cache
- if ( jQuery.isEmptyObject(thisCache) ) {
- jQuery.removeData( elem );
- }
- }
-
- // Otherwise, we want to remove all of the element's data
- } else {
- if ( jQuery.support.deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- // Completely remove the data cache
- delete cache[ id ];
- }
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- if ( typeof key === "undefined" && this.length ) {
- return jQuery.data( this[0] );
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- }
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
- } else {
- return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
- jQuery.data( this, key, value );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-jQuery.extend({
- queue: function( elem, type, data ) {
- if ( !elem ) {
- return;
- }
-
- type = (type || "fx") + "queue";
- var q = jQuery.data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( !data ) {
- return q || [];
- }
-
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery.data( elem, type, jQuery.makeArray(data) );
-
- } else {
- q.push( data );
- }
-
- return q;
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ), fn = queue.shift();
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift("inprogress");
- }
-
- fn.call(elem, function() {
- jQuery.dequeue(elem, type);
- });
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function( i, elem ) {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
-
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
- type = type || "fx";
-
- return this.queue( type, function() {
- var elem = this;
- setTimeout(function() {
- jQuery.dequeue( elem, type );
- }, time );
- });
- },
-
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- }
-});
-var rclass = /[\n\t]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rspecialurl = /href|src|style/,
- rtype = /(button|input)/i,
- rfocusable = /(button|input|object|select|textarea)/i,
- rclickable = /^(a|area)$/i,
- rradiocheck = /radio|checkbox/;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name, fn ) {
- return this.each(function(){
- jQuery.attr( this, name, "" );
- if ( this.nodeType === 1 ) {
- this.removeAttribute( name );
- }
- });
- },
-
- addClass: function( value ) {
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.addClass( value.call(this, i, self.attr("class")) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- var classNames = (value || "").split( rspace );
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var elem = this[i];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className ) {
- elem.className = value;
-
- } else {
- var className = " " + elem.className + " ", setClass = elem.className;
- for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
- setClass += " " + classNames[c];
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.removeClass( value.call(this, i, self.attr("class")) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- var classNames = (value || "").split(rspace);
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var elem = this[i];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- var className = (" " + elem.className + " ").replace(rclass, " ");
- for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[c] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value, isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className, i = 0, self = jQuery(this),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery.data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ";
- for ( var i = 0, l = this.length; i < l; i++ ) {
- if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( 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;
- }
-
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
-
-
- // Everything else, we just grab the value
- return (elem.value || "").replace(rreturn, "");
-
- }
-
- return undefined;
- }
-
- var isFunction = jQuery.isFunction(value);
-
- return this.each(function(i) {
- var self = jQuery(this), val = value;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call(this, i, self.val());
- }
-
- // Typecast each time if the value is a Function and the appended
- // value is therefore different each time.
- if ( typeof val === "number" ) {
- val += "";
- }
-
- if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
- this.checked = jQuery.inArray( self.val(), val ) >= 0;
-
- } else if ( jQuery.nodeName( this, "select" ) ) {
- var values = jQuery.makeArray(val);
-
- jQuery( "option", this ).each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- this.selectedIndex = -1;
- }
-
- } else {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attr: function( elem, name, value, pass ) {
- // don't set attributes on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery(elem)[name](value);
- }
-
- var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
- // Whether we are setting (or getting)
- set = value !== undefined;
-
- // Try to normalize/fix the name
- name = notxml && jQuery.props[ name ] || name;
-
- // Only do all the following if this is a node (faster for style)
- if ( elem.nodeType === 1 ) {
- // These attributes require special treatment
- var special = rspecialurl.test( name );
-
- // Safari mis-reports the default selected property of an option
- // Accessing the parent's selectedIndex property fixes it
- if ( name === "selected" && !jQuery.support.optSelected ) {
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
-
- // If applicable, access the attribute via the DOM 0 way
- if ( name in elem && notxml && !special ) {
- if ( set ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- }
-
- elem[ name ] = value;
- }
-
- // browsers index elements by id/name on forms, give priority to attributes.
- if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
- return elem.getAttributeNode( name ).nodeValue;
- }
-
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- if ( name === "tabIndex" ) {
- var attributeNode = elem.getAttributeNode( "tabIndex" );
-
- return attributeNode && attributeNode.specified ?
- attributeNode.value :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
-
- return elem[ name ];
- }
-
- if ( !jQuery.support.style && notxml && name === "style" ) {
- if ( set ) {
- elem.style.cssText = "" + value;
- }
-
- return elem.style.cssText;
- }
-
- if ( set ) {
- // convert the value to a string (all browsers do this but IE) see #1070
- elem.setAttribute( name, "" + value );
- }
-
- var attr = !jQuery.support.hrefNormalized && notxml && special ?
- // Some attributes require a special call on IE
- elem.getAttribute( name, 2 ) :
- elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return attr === null ? undefined : attr;
- }
-
- // elem is actually elem.style ... set the style
- // Using attr for specific style information is now deprecated. Use style instead.
- return jQuery.style( elem, name, value );
- }
-});
-var rnamespaces = /\.(.*)$/,
- fcleanup = function( nm ) {
- return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
- return "\\" + ch;
- });
- };
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
- // Bind an event to an element
- // Original by Dean Edwards
- add: function( elem, types, handler, data ) {
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // For whatever reason, IE has trouble passing the window object
- // around, causing it to be cloned in the process
- if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
- elem = window;
- }
-
- var handleObjIn, handleObj;
-
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the function being executed has a unique ID
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure
- var elemData = jQuery.data( elem );
-
- // If no elemData is found then we must be trying to bind to one of the
- // banned noData elements
- if ( !elemData ) {
- return;
- }
-
- var events = elemData.events = elemData.events || {},
- eventHandle = elemData.handle, eventHandle;
-
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function() {
- // Handle the second event of a trigger and when
- // an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
- jQuery.event.handle.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- }
-
- // Add elem as a property of the handle function
- // This is to prevent a memory leak with non-native events in IE.
- eventHandle.elem = elem;
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = types.split(" ");
-
- var type, i = 0, namespaces;
-
- while ( (type = types[ i++ ]) ) {
- handleObj = handleObjIn ?
- jQuery.extend({}, handleObjIn) :
- { handler: handler, data: data };
-
- // Namespaced event handlers
- if ( type.indexOf(".") > -1 ) {
- namespaces = type.split(".");
- type = namespaces.shift();
- handleObj.namespace = namespaces.slice(0).sort().join(".");
-
- } else {
- namespaces = [];
- handleObj.namespace = "";
- }
-
- handleObj.type = type;
- handleObj.guid = handler.guid;
-
- // Get the current list of functions bound to this event
- var handlers = events[ type ],
- special = jQuery.event.special[ type ] || {};
-
- // Init the event handler queue
- if ( !handlers ) {
- handlers = events[ type ] = [];
-
- // Check for a special event handler
- // Only use addEventListener/attachEvent if the special
- // events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add the function to the element's handler list
- handlers.push( handleObj );
-
- // Keep track of which events have been used, for global triggering
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, pos ) {
- // don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
- elemData = jQuery.data( elem ),
- events = elemData && elemData.events;
-
- if ( !elemData || !events ) {
- return;
- }
-
- // types is actually an event object here
- if ( types && types.type ) {
- handler = types.handler;
- types = types.type;
- }
-
- // Unbind all events for the element
- if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
- types = types || "";
-
- for ( type in events ) {
- jQuery.event.remove( elem, type + types );
- }
-
- return;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- types = types.split(" ");
-
- while ( (type = types[ i++ ]) ) {
- origType = type;
- handleObj = null;
- all = type.indexOf(".") < 0;
- namespaces = [];
-
- if ( !all ) {
- // Namespaced event handlers
- namespaces = type.split(".");
- type = namespaces.shift();
-
- namespace = new RegExp("(^|\\.)" +
- jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
- }
-
- eventType = events[ type ];
-
- if ( !eventType ) {
- continue;
- }
-
- if ( !handler ) {
- for ( var j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( all || namespace.test( handleObj.namespace ) ) {
- jQuery.event.remove( elem, origType, handleObj.handler, j );
- eventType.splice( j--, 1 );
- }
- }
-
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
-
- for ( var j = pos || 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( handler.guid === handleObj.guid ) {
- // remove the given handler for the given type
- if ( all || namespace.test( handleObj.namespace ) ) {
- if ( pos == null ) {
- eventType.splice( j--, 1 );
- }
-
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
-
- if ( pos != null ) {
- break;
- }
- }
- }
-
- // remove generic event handler if no more handlers exist
- if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- removeEvent( elem, type, elemData.handle );
- }
-
- ret = null;
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- var handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- delete elemData.events;
- delete elemData.handle;
-
- if ( jQuery.isEmptyObject( elemData ) ) {
- jQuery.removeData( elem );
- }
- }
- },
-
- // bubbling is internal
- trigger: function( event, data, elem /*, bubbling */ ) {
- // Event object or event type
- var type = event.type || event,
- bubbling = arguments[3];
-
- if ( !bubbling ) {
- event = typeof event === "object" ?
- // jQuery.Event object
- event[expando] ? event :
- // Object literal
- jQuery.extend( jQuery.Event(type), event ) :
- // Just the event type (string)
- jQuery.Event(type);
-
- if ( type.indexOf("!") >= 0 ) {
- event.type = type = type.slice(0, -1);
- event.exclusive = true;
- }
-
- // Handle a global trigger
- if ( !elem ) {
- // Don't bubble custom events when global (to avoid too much overhead)
- event.stopPropagation();
-
- // Only trigger if we've ever bound an event for it
- if ( jQuery.event.global[ type ] ) {
- jQuery.each( jQuery.cache, function() {
- if ( this.events && this.events[type] ) {
- jQuery.event.trigger( event, data, this.handle.elem );
- }
- });
- }
- }
-
- // Handle triggering a single element
-
- // don't do events on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
-
- // Clean up in case it is reused
- event.result = undefined;
- event.target = elem;
-
- // Clone the incoming data, if any
- data = jQuery.makeArray( data );
- data.unshift( event );
- }
-
- event.currentTarget = elem;
-
- // Trigger the event, it is assumed that "handle" is a function
- var handle = jQuery.data( elem, "handle" );
- if ( handle ) {
- handle.apply( elem, data );
- }
-
- var parent = elem.parentNode || elem.ownerDocument;
-
- // Trigger an inline bound script
- try {
- if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
- if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
- event.result = false;
- }
- }
-
- // prevent IE from throwing an error for some elements with some event types, see #3533
- } catch (e) {}
-
- if ( !event.isPropagationStopped() && parent ) {
- jQuery.event.trigger( event, data, parent, true );
-
- } else if ( !event.isDefaultPrevented() ) {
- var target = event.target, old,
- isClick = jQuery.nodeName(target, "a") && type === "click",
- special = jQuery.event.special[ type ] || {};
-
- if ( (!special._default || special._default.call( elem, event ) === false) &&
- !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
-
- try {
- if ( target[ type ] ) {
- // Make sure that we don't accidentally re-trigger the onFOO events
- old = target[ "on" + type ];
-
- if ( old ) {
- target[ "on" + type ] = null;
- }
-
- jQuery.event.triggered = true;
- target[ type ]();
- }
-
- // prevent IE from throwing an error for some elements with some event types, see #3533
- } catch (e) {}
-
- if ( old ) {
- target[ "on" + type ] = old;
- }
-
- jQuery.event.triggered = false;
- }
- }
- },
-
- handle: function( event ) {
- var all, handlers, namespaces, namespace, events;
-
- event = arguments[0] = jQuery.event.fix( event || window.event );
- event.currentTarget = this;
-
- // Namespaced event handlers
- all = event.type.indexOf(".") < 0 && !event.exclusive;
-
- if ( !all ) {
- namespaces = event.type.split(".");
- event.type = namespaces.shift();
- namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- var events = jQuery.data(this, "events"), handlers = events[ event.type ];
-
- if ( events && handlers ) {
- // Clone the handlers to prevent manipulation
- handlers = handlers.slice(0);
-
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- var handleObj = handlers[ j ];
-
- // Filter the functions by class
- if ( all || namespace.test( handleObj.namespace ) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handleObj.handler;
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- var ret = handleObj.handler.apply( this, arguments );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
-
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
- }
-
- return event.result;
- },
-
- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
- fix: function( event ) {
- if ( event[ expando ] ) {
- return event;
- }
-
- // store a copy of the original event object
- // and "clone" to set read-only properties
- var originalEvent = event;
- event = jQuery.Event( originalEvent );
-
- for ( var i = this.props.length, prop; i; ) {
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary
- if ( !event.target ) {
- event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
- }
-
- // check if target is a textnode (safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement ) {
- event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
- }
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var doc = document.documentElement, body = document.body;
- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- // Add which for key events
- if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
- event.which = event.charCode || event.keyCode;
- }
-
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey ) {
- event.metaKey = event.ctrlKey;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button !== undefined ) {
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
- }
-
- return event;
- },
-
- // Deprecated, use jQuery.guid instead
- guid: 1E8,
-
- // Deprecated, use jQuery.proxy instead
- proxy: jQuery.proxy,
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady,
- teardown: jQuery.noop
- },
-
- live: {
- add: function( handleObj ) {
- jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) );
- },
-
- remove: function( handleObj ) {
- var remove = true,
- type = handleObj.origType.replace(rnamespaces, "");
-
- jQuery.each( jQuery.data(this, "events").live || [], function() {
- if ( type === this.origType.replace(rnamespaces, "") ) {
- remove = false;
- return false;
- }
- });
-
- if ( remove ) {
- jQuery.event.remove( this, handleObj.origType, liveHandler );
- }
- }
-
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( this.setInterval ) {
- this.onbeforeunload = eventHandle;
- }
-
- return false;
- },
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- }
-};
-
-var removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- elem.removeEventListener( type, handle, false );
- } :
- function( elem, type, handle ) {
- elem.detachEvent( "on" + type, handle );
- };
-
-jQuery.Event = function( src ) {
- // Allow instantiation without the 'new' keyword
- if ( !this.preventDefault ) {
- return new jQuery.Event( src );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
- // Event type
- } else {
- this.type = src;
- }
-
- // timeStamp is buggy for some events on Firefox(#3843)
- // So we won't rely on the native value
- this.timeStamp = now();
-
- // Mark it as fixed
- this[ expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
- }
- // otherwise set the returnValue property of the original event to false (IE)
- e.returnValue = false;
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
- // Check if mouse(over|out) are still within the same parent element
- var parent = event.relatedTarget;
-
- // Firefox sometimes assigns relatedTarget a XUL element
- // which we cannot access the parentNode property of
- try {
- // Traverse up the tree
- while ( parent && parent !== this ) {
- parent = parent.parentNode;
- }
-
- if ( parent !== this ) {
- // set the correct event type
- event.type = event.data;
-
- // handle event if we actually just moused on to a non sub-element
- jQuery.event.handle.apply( this, arguments );
- }
-
- // assuming we've left the element since we most likely mousedover a xul element
- } catch(e) { }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
- event.type = event.data;
- jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- setup: function( data ) {
- jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
- },
- teardown: function( data ) {
- jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
- }
- };
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function( data, namespaces ) {
- if ( this.nodeName.toLowerCase() !== "form" ) {
- jQuery.event.add(this, "click.specialSubmit", function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- return trigger( "submit", this, arguments );
- }
- });
-
- jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- return trigger( "submit", this, arguments );
- }
- });
-
- } else {
- return false;
- }
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialSubmit" );
- }
- };
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
- var formElems = /textarea|input|select/i,
-
- changeFilters,
-
- getVal = function( elem ) {
- var type = elem.type, val = elem.value;
-
- if ( type === "radio" || type === "checkbox" ) {
- val = elem.checked;
-
- } else if ( type === "select-multiple" ) {
- val = elem.selectedIndex > -1 ?
- jQuery.map( elem.options, function( elem ) {
- return elem.selected;
- }).join("-") :
- "";
-
- } else if ( elem.nodeName.toLowerCase() === "select" ) {
- val = elem.selectedIndex;
- }
-
- return val;
- },
-
- testChange = function testChange( e ) {
- var elem = e.target, data, val;
-
- if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
- return;
- }
-
- data = jQuery.data( elem, "_change_data" );
- val = getVal(elem);
-
- // the current data will be also retrieved by beforeactivate
- if ( e.type !== "focusout" || elem.type !== "radio" ) {
- jQuery.data( elem, "_change_data", val );
- }
-
- if ( data === undefined || val === data ) {
- return;
- }
-
- if ( data != null || val ) {
- e.type = "change";
- return jQuery.event.trigger( e, arguments[1], elem );
- }
- };
-
- jQuery.event.special.change = {
- filters: {
- focusout: testChange,
-
- click: function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
- return testChange.call( this, e );
- }
- },
-
- // Change has to be called before submit
- // Keydown will be called before keypress, which is used in submit-event delegation
- keydown: function( e ) {
- var elem = e.target, type = elem.type;
-
- if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
- (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
- type === "select-multiple" ) {
- return testChange.call( this, e );
- }
- },
-
- // Beforeactivate happens also before the previous element is blurred
- // with this event you can't trigger a change event, but you can store
- // information/focus[in] is not needed anymore
- beforeactivate: function( e ) {
- var elem = e.target;
- jQuery.data( elem, "_change_data", getVal(elem) );
- }
- },
-
- setup: function( data, namespaces ) {
- if ( this.type === "file" ) {
- return false;
- }
-
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
- }
-
- return formElems.test( this.nodeName );
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialChange" );
-
- return formElems.test( this.nodeName );
- }
- };
-
- changeFilters = jQuery.event.special.change.filters;
-}
-
-function trigger( type, elem, args ) {
- args[0].type = type;
- return jQuery.event.handle.apply( elem, args );
-}
-
-// Create "bubbling" focus and blur events
-if ( document.addEventListener ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
- jQuery.event.special[ fix ] = {
- setup: function() {
- this.addEventListener( orig, handler, true );
- },
- teardown: function() {
- this.removeEventListener( orig, handler, true );
- }
- };
-
- function handler( e ) {
- e = jQuery.event.fix( e );
- e.type = fix;
- return jQuery.event.handle.call( this, e );
- }
- });
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
- jQuery.fn[ name ] = function( type, data, fn ) {
- // Handle object literals
- if ( typeof type === "object" ) {
- for ( var key in type ) {
- this[ name ](key, data, type[key], fn);
- }
- return this;
- }
-
- if ( jQuery.isFunction( data ) ) {
- fn = data;
- data = undefined;
- }
-
- var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
- jQuery( this ).unbind( event, handler );
- return fn.apply( this, arguments );
- }) : fn;
-
- if ( type === "unload" && name !== "one" ) {
- this.one( type, data, fn );
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.add( this[i], type, handler, data );
- }
- }
-
- return this;
- };
-});
-
-jQuery.fn.extend({
- unbind: function( type, fn ) {
- // Handle object literals
- if ( typeof type === "object" && !type.preventDefault ) {
- for ( var key in type ) {
- this.unbind(key, type[key]);
- }
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.remove( this[i], type, fn );
- }
- }
-
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.live( types, data, fn, selector );
- },
-
- undelegate: function( selector, types, fn ) {
- if ( arguments.length === 0 ) {
- return this.unbind( "live" );
-
- } else {
- return this.die( types, null, fn, selector );
- }
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
-
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- var event = jQuery.Event( type );
- event.preventDefault();
- event.stopPropagation();
- jQuery.event.trigger( event, data, this[0] );
- return event.result;
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments, i = 1;
-
- // link all the functions, so any of them can unbind this click handler
- while ( i < args.length ) {
- jQuery.proxy( fn, args[ i++ ] );
- }
-
- return this.click( jQuery.proxy( fn, function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- }));
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-var liveMap = {
- focus: "focusin",
- blur: "focusout",
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
- jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
- var type, i = 0, match, namespaces, preType,
- selector = origSelector || this.selector,
- context = origSelector ? this : jQuery( this.context );
-
- if ( jQuery.isFunction( data ) ) {
- fn = data;
- data = undefined;
- }
-
- types = (types || "").split(" ");
-
- while ( (type = types[ i++ ]) != null ) {
- match = rnamespaces.exec( type );
- namespaces = "";
-
- if ( match ) {
- namespaces = match[0];
- type = type.replace( rnamespaces, "" );
- }
-
- if ( type === "hover" ) {
- types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
- continue;
- }
-
- preType = type;
-
- if ( type === "focus" || type === "blur" ) {
- types.push( liveMap[ type ] + namespaces );
- type = type + namespaces;
-
- } else {
- type = (liveMap[ type ] || type) + namespaces;
- }
-
- if ( name === "live" ) {
- // bind live handler
- context.each(function(){
- jQuery.event.add( this, liveConvert( type, selector ),
- { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
- });
-
- } else {
- // unbind live handler
- context.unbind( liveConvert( type, selector ), fn );
- }
- }
-
- return this;
- }
-});
-
-function liveHandler( event ) {
- var stop, elems = [], selectors = [], args = arguments,
- related, match, handleObj, elem, j, i, l, data,
- events = jQuery.data( this, "events" );
-
- // Make sure we avoid non-left-click bubbling in Firefox (#3861)
- if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
- return;
- }
-
- event.liveFired = this;
-
- var live = events.live.slice(0);
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
- selectors.push( handleObj.selector );
-
- } else {
- live.splice( j--, 1 );
- }
- }
-
- match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
- for ( i = 0, l = match.length; i < l; i++ ) {
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( match[i].selector === handleObj.selector ) {
- elem = match[i].elem;
- related = null;
-
- // Those two events require additional checking
- if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
- related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
- }
-
- if ( !related || related !== elem ) {
- elems.push({ elem: elem, handleObj: handleObj });
- }
- }
- }
- }
-
- for ( i = 0, l = elems.length; i < l; i++ ) {
- match = elems[i];
- event.currentTarget = match.elem;
- event.data = match.handleObj.data;
- event.handleObj = match.handleObj;
-
- if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
- stop = false;
- break;
- }
- }
-
- return stop;
-}
-
-function liveConvert( type, selector ) {
- return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( fn ) {
- return fn ? this.bind( name, fn ) : this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-});
-
-// Prevent memory leaks in IE
-// Window isn't included so as not to unbind existing unload events
-// More info:
-// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
-if ( window.attachEvent && !window.addEventListener ) {
- window.attachEvent("onunload", function() {
- for ( var id in jQuery.cache ) {
- if ( jQuery.cache[ id ].handle ) {
- // Try/Catch is to handle iframes being unloaded, see #4280
- try {
- jQuery.event.remove( jQuery.cache[ id ].handle.elem );
- } catch(e) {}
- }
- }
- });
-}
-/*!
- * Sizzle CSS Selector Engine - v1.0
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function(selector, context, results, seed) {
- results = results || [];
- var origContext = context = context || document;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set );
- }
- }
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
- var ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
- }
-
- if ( context ) {
- var ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
- set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray(set);
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- var cur = parts.pop(), pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
- } else if ( context && context.nodeType === 1 ) {
- for ( var i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
- } else {
- for ( var i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function(results){
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort(sortOrder);
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- var filter = Expr.filter[ type ], found, item, left = match[1];
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": function(checkSet, part){
- var isPartStr = typeof part === "string";
-
- if ( isPartStr && !/\W/.test(part) ) {
- part = part.toLowerCase();
-
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = part.toLowerCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = part.toLowerCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
- ID: function(match){
- return match[1].replace(/\\/g, "");
- },
- TAG: function(match, curLoop){
- return match[1].toLowerCase();
- },
- CHILD: function(match){
- if ( match[1] === "nth" ) {
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
- ATTR: function(match, curLoop, inplace, result, not, isXML){
- var name = match[1].replace(/\\/g, "");
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
- PSEUDO: function(match, curLoop, inplace, result, not){
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
- return false;
- }
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
- POS: function(match){
- match.unshift( true );
- return match;
- }
- },
- filters: {
- enabled: function(elem){
- return elem.disabled === false && elem.type !== "hidden";
- },
- disabled: function(elem){
- return elem.disabled === true;
- },
- checked: function(elem){
- return elem.checked === true;
- },
- selected: function(elem){
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- elem.parentNode.selectedIndex;
- return elem.selected === true;
- },
- parent: function(elem){
- return !!elem.firstChild;
- },
- empty: function(elem){
- return !elem.firstChild;
- },
- has: function(elem, i, match){
- return !!Sizzle( match[3], elem ).length;
- },
- header: function(elem){
- return /h\d/i.test( elem.nodeName );
- },
- text: function(elem){
- return "text" === elem.type;
- },
- radio: function(elem){
- return "radio" === elem.type;
- },
- checkbox: function(elem){
- return "checkbox" === elem.type;
- },
- file: function(elem){
- return "file" === elem.type;
- },
- password: function(elem){
- return "password" === elem.type;
- },
- submit: function(elem){
- return "submit" === elem.type;
- },
- image: function(elem){
- return "image" === elem.type;
- },
- reset: function(elem){
- return "reset" === elem.type;
- },
- button: function(elem){
- return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
- },
- input: function(elem){
- return /input|select|textarea|button/i.test(elem.nodeName);
- }
- },
- setFilters: {
- first: function(elem, i){
- return i === 0;
- },
- last: function(elem, i, match, array){
- return i === array.length - 1;
- },
- even: function(elem, i){
- return i % 2 === 0;
- },
- odd: function(elem, i){
- return i % 2 === 1;
- },
- lt: function(elem, i, match){
- return i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[3] - 0;
- },
- nth: function(elem, i, match){
- return match[3] - 0 === i;
- },
- eq: function(elem, i, match){
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function(elem, match, i, array){
- var name = match[1], filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var i = 0, l = not.length; i < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- } else {
- Sizzle.error( "Syntax error, unrecognized expression: " + name );
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
- if ( type === "first" ) {
- return true;
- }
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first === 0 ) {
- return diff === 0;
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
- ID: function(elem, match){
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
- TAG: function(elem, match){
- return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
- },
- CLASS: function(elem, match){
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
- ATTR: function(elem, match){
- var name = match[1],
- result = Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
- POS: function(elem, match, i, array){
- var name = match[2], filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS;
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
- return "\\" + (num - 0 + 1);
- }));
-}
-
-var makeArray = function(array, results) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch(e){
- makeArray = function(array, results) {
- var ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
- } else {
- if ( typeof array.length === "number" ) {
- for ( var i = 0, l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.sourceIndex ? -1 : 1;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.ownerDocument ? -1 : 1;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-function getText( elems ) {
- var ret = "", elem;
-
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
-
- // Get the text from text nodes and CDATA nodes
- if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
- ret += elem.nodeValue;
-
- // Traverse everything else, except comment nodes
- } else if ( elem.nodeType !== 8 ) {
- ret += getText( elem.childNodes );
- }
- }
-
- return ret;
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "";
-
- // Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
- }
- };
-
- Expr.filter.ID = function(elem, match){
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
- root = form = null; // release memory in IE
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "";
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
- Expr.attrHandle.href = function(elem){
- return elem.getAttribute("href", 2);
- };
- }
-
- div = null; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function(query, context, extra, seed){
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && context.nodeType === 9 && !isXML(context) ) {
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(e){}
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- div = null; // release memory in IE
- })();
-}
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function(match, context, isXML) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- div = null; // release memory in IE
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- elem = elem[dir];
- var match = false;
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- elem = elem[dir];
- var match = false;
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-var contains = document.compareDocumentPosition ? function(a, b){
- return !!(a.compareDocumentPosition(b) & 16);
-} : function(a, b){
- return a !== b && (a.contains ? a.contains(b) : true);
-};
-
-var isXML = function(elem){
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function(selector, context){
- var tmpSet = [], later = "", match,
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = getText;
-jQuery.isXMLDoc = isXML;
-jQuery.contains = contains;
-
-return;
-
-window.Sizzle = Sizzle;
-
-})();
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- slice = Array.prototype.slice;
-
-// Implement the identical functionality for filter and not
-var winnow = function( elements, qualifier, keep ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- return !!qualifier.call( elem, i, elem ) === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return (elem === qualifier) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
- });
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var ret = this.pushStack( "", "find", selector ), length = 0;
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( var n = length; n < ret.length; n++ ) {
- for ( var r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && jQuery.filter( selector, this ).length > 0;
- },
-
- closest: function( selectors, context ) {
- if ( jQuery.isArray( selectors ) ) {
- var ret = [], cur = this[0], match, matches = {}, selector;
-
- if ( cur && selectors.length ) {
- for ( var i = 0, l = selectors.length; i < l; i++ ) {
- selector = selectors[i];
-
- if ( !matches[selector] ) {
- matches[selector] = jQuery.expr.match.POS.test( selector ) ?
- jQuery( selector, context || this.context ) :
- selector;
- }
- }
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( selector in matches ) {
- match = matches[selector];
-
- if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
- ret.push({ selector: selector, elem: cur });
- delete matches[selector];
- }
- }
- cur = cur.parentNode;
- }
- }
-
- return ret;
- }
-
- var pos = jQuery.expr.match.POS.test( selectors ) ?
- jQuery( selectors, context || this.context ) : null;
-
- return this.map(function( i, cur ) {
- while ( cur && cur.ownerDocument && cur !== context ) {
- if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
- return cur;
- }
- cur = cur.parentNode;
- }
- return null;
- });
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
- if ( !elem || typeof elem === "string" ) {
- return jQuery.inArray( this[0],
- // If it receives a string, the selector is used
- // If it receives nothing, the siblings are used
- elem ? jQuery( elem ) : this.parent().children() );
- }
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context || this.context ) :
- jQuery.makeArray( selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, slice.call(arguments).join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [], cur = elem[dir];
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
- rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
- rtagName = /<([\w:]+)/,
- rtbody = /" + tag + ">";
- },
- wrapMap = {
- option: [ 1, "" ],
- legend: [ 1, "" ],
- thead: [ 1, "
", "
" ],
- tr: [ 2, "
", "
" ],
- td: [ 3, "
", "
" ],
- col: [ 2, "
", "
" ],
- area: [ 1, "" ],
- _default: [ 0, "", "" ]
- };
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize and This is a p
- * @before $.metadata.setType("elem", "script")
- * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
- * @desc Reads metadata from a nested script element
- *
- * @param String type The encoding type
- * @param String name The name of the attribute to be used to get metadata (optional)
- * @cat Plugins/Metadata
- * @descr Sets the type of encoding to be used when loading metadata for the first time
- * @type undefined
- * @see metadata()
- */
-
-(function($) {
-
-$.extend({
- metadata : {
- defaults : {
- type: 'class',
- name: 'metadata',
- cre: /({.*})/,
- single: 'metadata'
- },
- setType: function( type, name ){
- this.defaults.type = type;
- this.defaults.name = name;
- },
- get: function( elem, opts ){
- var settings = $.extend({},this.defaults,opts);
- // check for empty string in single property
- if ( !settings.single.length ) settings.single = 'metadata';
-
- var data = $.data(elem, settings.single);
- // returned cached data if it already exists
- if ( data ) return data;
-
- data = "{}";
-
- if ( settings.type == "class" ) {
- var m = settings.cre.exec( elem.className );
- if ( m )
- data = m[1];
- } else if ( settings.type == "elem" ) {
- if( !elem.getElementsByTagName )
- return undefined;
- var e = elem.getElementsByTagName(settings.name);
- if ( e.length )
- data = $.trim(e[0].innerHTML);
- } else if ( elem.getAttribute != undefined ) {
- var attr = elem.getAttribute( settings.name );
- if ( attr )
- data = attr;
- }
-
- if ( data.indexOf( '{' ) <0 )
- data = "{" + data + "}";
-
- data = eval("(" + data + ")");
-
- $.data( elem, settings.single, data );
- return data;
- }
- }
-});
-
-/**
- * Returns the metadata object for the first member of the jQuery object.
- *
- * @name metadata
- * @descr Returns element's metadata object
- * @param Object opts An object contianing settings to override the defaults
- * @type jQuery
- * @cat Plugins/Metadata
- */
-$.fn.metadata = function( opts ){
- return $.metadata.get( this[0], opts );
-};
-
-})(jQuery);
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ar.js b/thirdparty/jquery-validate/localization/messages_ar.js
deleted file mode 100644
index 71e97a88e..000000000
--- a/thirdparty/jquery-validate/localization/messages_ar.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin into arabic.
- * Locale: AR
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "هذا الحقل إلزامي",
- remote: "يرجى تصحيح هذا الحقل للمتابعة",
- email: "رجاء إدخال عنوان بريد إلكتروني صحيح",
- url: "رجاء إدخال عنوان موقع إلكتروني صحيح",
- date: "رجاء إدخال تاريخ صحيح",
- dateISO: "رجاء إدخال تاريخ صحيح (ISO)",
- number: "رجاء إدخال عدد بطريقة صحيحة",
- digits: "رجاء إدخال أرقام فقط",
- creditcard: "رجاء إدخال رقم بطاقة ائتمان صحيح",
- equalTo: "رجاء إدخال نفس القيمة",
- accept: "رجاء إدخال ملف بامتداد موافق عليه",
- maxlength: jQuery.validator.format("الحد الأقصى لعدد الحروف هو {0}"),
- minlength: jQuery.validator.format("الحد الأدنى لعدد الحروف هو {0}"),
- rangelength: jQuery.validator.format("عدد الحروف يجب أن يكون بين {0} و {1}"),
- range: jQuery.validator.format("رجاء إدخال عدد قيمته بين {0} و {1}"),
- max: jQuery.validator.format("رجاء إدخال عدد أقل من أو يساوي (0}"),
- min: jQuery.validator.format("رجاء إدخال عدد أكبر من أو يساوي (0}")
-});
-
diff --git a/thirdparty/jquery-validate/localization/messages_bg.js b/thirdparty/jquery-validate/localization/messages_bg.js
deleted file mode 100644
index 9232f7202..000000000
--- a/thirdparty/jquery-validate/localization/messages_bg.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: BG
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Полето е задължително.",
- remote: "Моля, въведете правилната стойност.",
- email: "Моля, въведете валиден email.",
- url: "Моля, въведете валидно URL.",
- date: "Моля, въведете валидна дата.",
- dateISO: "Моля, въведете валидна дата (ISO).",
- number: "Моля, въведете валиден номер.",
- digits: "Моля, въведете само цифри",
- creditcard: "Моля, въведете валиден номер на кредитна карта.",
- equalTo: "Моля, въведете същата стойност отново.",
- accept: "Моля, въведете стойност с валидно разширение.",
- maxlength: $.validator.format("Моля, въведете повече от {0} символа."),
- minlength: $.validator.format("Моля, въведете поне {0} символа."),
- rangelength: $.validator.format("Моля, въведете стойност с дължина между {0} и {1} символа."),
- range: $.validator.format("Моля, въведете стойност между {0} и {1}."),
- max: $.validator.format("Моля, въведете стойност по-малка или равна на {0}."),
- min: $.validator.format("Моля, въведете стойност по-голяма или равна на {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ca.js b/thirdparty/jquery-validate/localization/messages_ca.js
deleted file mode 100644
index f8235345c..000000000
--- a/thirdparty/jquery-validate/localization/messages_ca.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: CA
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Aquest camp és obligatori.",
- remote: "Si us plau, omple aquest camp.",
- email: "Si us plau, escriu una adreça de correu-e vàlida",
- url: "Si us plau, escriu una URL vàlida.",
- date: "Si us plau, escriu una data vàlida.",
- dateISO: "Si us plau, escriu una data (ISO) vàlida.",
- number: "Si us plau, escriu un número enter vàlid.",
- digits: "Si us plau, escriu només dígits.",
- creditcard: "Si us plau, escriu un número de tarjeta vàlid.",
- equalTo: "Si us plau, escriu el maateix valor de nou.",
- accept: "Si us plau, escriu un valor amb una extensió acceptada.",
- maxlength: jQuery.validator.format("Si us plau, no escriguis més de {0} caracters."),
- minlength: jQuery.validator.format("Si us plau, no escriguis menys de {0} caracters."),
- rangelength: jQuery.validator.format("Si us plau, escriu un valor entre {0} i {1} caracters."),
- range: jQuery.validator.format("Si us plau, escriu un valor entre {0} i {1}."),
- max: jQuery.validator.format("Si us plau, escriu un valor menor o igual a {0}."),
- min: jQuery.validator.format("Si us plau, escriu un valor major o igual a {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_cn.js b/thirdparty/jquery-validate/localization/messages_cn.js
deleted file mode 100644
index 8415f4ad7..000000000
--- a/thirdparty/jquery-validate/localization/messages_cn.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: CN
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "必选字段",
- remote: "请修正该字段",
- email: "请输入正确格式的电子邮件",
- url: "请输入合法的网址",
- date: "请输入合法的日期",
- dateISO: "请输入合法的日期 (ISO).",
- number: "请输入合法的数字",
- digits: "只能输入整数",
- creditcard: "请输入合法的信用卡号",
- equalTo: "请再次输入相同的值",
- accept: "请输入拥有合法后缀名的字符串",
- maxlength: jQuery.validator.format("请输入一个长度最多是 {0} 的字符串"),
- minlength: jQuery.validator.format("请输入一个长度最少是 {0} 的字符串"),
- rangelength: jQuery.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
- range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
- max: jQuery.validator.format("请输入一个最大为 {0} 的值"),
- min: jQuery.validator.format("请输入一个最小为 {0} 的值")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_cs.js b/thirdparty/jquery-validate/localization/messages_cs.js
deleted file mode 100644
index ab998190f..000000000
--- a/thirdparty/jquery-validate/localization/messages_cs.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: CS
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Tento údaj je povinný.",
- remote: "Prosím, opravte tento údaj.",
- email: "Prosím, zadejte platný e-mail.",
- url: "Prosím, zadejte platné URL.",
- date: "Prosím, zadejte platné datum.",
- dateISO: "Prosím, zadejte platné datum (ISO).",
- number: "Prosím, zadejte číslo.",
- digits: "Prosím, zadávejte pouze číslice.",
- creditcard: "Prosím, zadejte číslo kreditní karty.",
- equalTo: "Prosím, zadejte znovu stejnou hodnotu.",
- accept: "Prosím, zadejte soubor se správnou příponou.",
- maxlength: jQuery.validator.format("Prosím, zadejte nejvíce {0} znaků."),
- minlength: jQuery.validator.format("Prosím, zadejte nejméně {0} znaků."),
- rangelength: jQuery.validator.format("Prosím, zadejte od {0} do {1} znaků."),
- range: jQuery.validator.format("Prosím, zadejte hodnotu od {0} do {1}."),
- max: jQuery.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."),
- min: jQuery.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}.")
-});
diff --git a/thirdparty/jquery-validate/localization/messages_da.js b/thirdparty/jquery-validate/localization/messages_da.js
deleted file mode 100644
index 1f729e0a0..000000000
--- a/thirdparty/jquery-validate/localization/messages_da.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: DA
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Dette felt er påkrævet.",
- maxlength: jQuery.validator.format("Indtast højst {0} tegn."),
- minlength: jQuery.validator.format("Indtast mindst {0} tegn."),
- rangelength: jQuery.validator.format("Indtast mindst {0} og højst {1} tegn."),
- email: "Indtast en gyldig email-adresse.",
- url: "Indtast en gyldig URL.",
- date: "Indtast en gyldig dato.",
- number: "Indtast et tal.",
- digits: "Indtast kun cifre.",
- equalTo: "Indtast den samme værdi igen.",
- range: jQuery.validator.format("Angiv en værdi mellem {0} og {1}."),
- max: jQuery.validator.format("Angiv en værdi der højst er {0}."),
- min: jQuery.validator.format("Angiv en værdi der mindst er {0}."),
- creditcard: "Indtast et gyldigt kreditkortnummer."
-});
diff --git a/thirdparty/jquery-validate/localization/messages_de.js b/thirdparty/jquery-validate/localization/messages_de.js
deleted file mode 100644
index 0c03e3020..000000000
--- a/thirdparty/jquery-validate/localization/messages_de.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: DE
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Dieses Feld ist ein Pflichtfeld.",
- maxlength: jQuery.validator.format("Geben Sie bitte maximal {0} Zeichen ein."),
- minlength: jQuery.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."),
- rangelength: jQuery.validator.format("Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein."),
- email: "Geben Sie bitte eine gültige E-Mail Adresse ein.",
- url: "Geben Sie bitte eine gültige URL ein.",
- date: "Bitte geben Sie ein gültiges Datum ein.",
- number: "Geben Sie bitte eine Nummer ein.",
- digits: "Geben Sie bitte nur Ziffern ein.",
- equalTo: "Bitte denselben Wert wiederholen.",
- range: jQuery.validator.format("Geben Sie bitten einen Wert zwischen {0} und {1}."),
- max: jQuery.validator.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."),
- min: jQuery.validator.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."),
- creditcard: "Geben Sie bitte ein gültige Kreditkarten-Nummer ein."
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_el.js b/thirdparty/jquery-validate/localization/messages_el.js
deleted file mode 100644
index 52607a5ad..000000000
--- a/thirdparty/jquery-validate/localization/messages_el.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: EL
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Αυτό το πεδίο είναι υποχρεωτικό.",
- remote: "Παρακαλώ διορθώστε αυτό το πεδίο.",
- email: "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.",
- url: "Παρακαλώ εισάγετε ένα έγκυρο URL.",
- date: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.",
- dateISO: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).",
- number: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό.",
- digits: "Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.",
- creditcard: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.",
- equalTo: "Παρακαλώ εισάγετε την ίδια τιμή ξανά.",
- accept: "Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.",
- maxlength: $.validator.format("Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες."),
- minlength: $.validator.format("Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες."),
- rangelength: $.validator.format("Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων."),
- range: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}."),
- max: $.validator.format("Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}."),
- min: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.")
-});
-
diff --git a/thirdparty/jquery-validate/localization/messages_es.js b/thirdparty/jquery-validate/localization/messages_es.js
deleted file mode 100644
index b9a24145d..000000000
--- a/thirdparty/jquery-validate/localization/messages_es.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ES
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Este campo es obligatorio.",
- remote: "Por favor, rellena este campo.",
- email: "Por favor, escribe una dirección de correo válida",
- url: "Por favor, escribe una URL válida.",
- date: "Por favor, escribe una fecha válida.",
- dateISO: "Por favor, escribe una fecha (ISO) válida.",
- number: "Por favor, escribe un número entero válido.",
- digits: "Por favor, escribe sólo dígitos.",
- creditcard: "Por favor, escribe un número de tarjeta válido.",
- equalTo: "Por favor, escribe el mismo valor de nuevo.",
- accept: "Por favor, escribe un valor con una extensión aceptada.",
- maxlength: jQuery.validator.format("Por favor, no escribas más de {0} caracteres."),
- minlength: jQuery.validator.format("Por favor, no escribas menos de {0} caracteres."),
- rangelength: jQuery.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."),
- range: jQuery.validator.format("Por favor, escribe un valor entre {0} y {1}."),
- max: jQuery.validator.format("Por favor, escribe un valor menor o igual a {0}."),
- min: jQuery.validator.format("Por favor, escribe un valor mayor o igual a {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_fa.js b/thirdparty/jquery-validate/localization/messages_fa.js
deleted file mode 100644
index 1ea531e9f..000000000
--- a/thirdparty/jquery-validate/localization/messages_fa.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: FA
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "تکمیل این فیلد اجباری است.",
- remote: "لطفا این فیلد را تصحیح کنید.",
- email: ".لطفا یک ایمیل صحیح وارد کنید",
- url: "لطفا آدرس صحیح وارد کنید.",
- date: "لطفا یک تاریخ صحیح وارد کنید",
- dateISO: "لطفا تاریخ صحیح وارد کنید (ISO).",
- number: "لطفا عدد صحیح وارد کنید.",
- digits: "لطفا تنها رقم وارد کنید",
- creditcard: "لطفا کریدیت کارت صحیح وارد کنید.",
- equalTo: "لطفا مقدار برابری وارد کنید",
- accept: "لطفا مقداری وارد کنید که ",
- maxlength: jQuery.validator.format("لطفا بیشتر از {0} حرف وارد نکنید."),
- minlength: jQuery.validator.format("لطفا کمتر از {0} حرف وارد نکنید."),
- rangelength: jQuery.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."),
- range: jQuery.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."),
- max: jQuery.validator.format("لطفا مقداری کمتر از {0} حرف وارد کنید."),
- min: jQuery.validator.format("لطفا مقداری بیشتر از {0} حرف وارد کنید.")
-});
diff --git a/thirdparty/jquery-validate/localization/messages_fi.js b/thirdparty/jquery-validate/localization/messages_fi.js
deleted file mode 100644
index eb4736998..000000000
--- a/thirdparty/jquery-validate/localization/messages_fi.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: FI
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Tämä kenttä on pakollinen.",
- maxlength: jQuery.validator.format("Voit syöttää enintään {0} merkkiä."),
- minlength: jQuery.validator.format("Vähintään {0} merkkiä."),
- rangelength: jQuery.validator.format("Syötä vähintään {0} ja enintään {1} merkkiä."),
- email: "Syö:tä oikea sähköpostiosoite.",
- url: "Syötä oikea URL osoite.",
- date: "Syötä oike päivämäärä.",
- dateISO: "Syötä oike päivämäärä (VVVV-MM-DD).",
- number: "Syötä numero.",
- digits: "Syötä pelkästään numeroita.",
- equalTo: "Syötä sama arvo uudestaan.",
- range: jQuery.validator.format("Syötä arvo {0} ja {1} väliltä."),
- max: jQuery.validator.format("Syötä arvo joka on yhtä suuri tai suurempi kuin {0}."),
- min: jQuery.validator.format("Syötä arvo joka on pienempi tai yhtä suuri kuin {0}."),
- creditcard: "Syötä voimassa oleva luottokorttinumero."
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_fr.js b/thirdparty/jquery-validate/localization/messages_fr.js
deleted file mode 100644
index f9e1340cd..000000000
--- a/thirdparty/jquery-validate/localization/messages_fr.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: FR
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Ce champ est requis.",
- remote: "Veuillez remplir ce champ pour continuer.",
- email: "Veuillez entrer une adresse email valide.",
- url: "Veuillez entrer une URL valide.",
- date: "Veuillez entrer une date valide.",
- dateISO: "Veuillez entrer une date valide (ISO).",
- number: "Veuillez entrer un nombre valide.",
- digits: "Veuillez entrer (seulement) une valeur numérique.",
- creditcard: "Veuillez entrer un numéro de carte de crédit valide.",
- equalTo: "Veuillez entrer une nouvelle fois la même valeur.",
- accept: "Veuillez entrer une valeur avec une extension valide.",
- maxlength: jQuery.validator.format("Veuillez ne pas entrer plus de {0} caractères."),
- minlength: jQuery.validator.format("Veuillez entrer au moins {0} caractères."),
- rangelength: jQuery.validator.format("Veuillez entrer entre {0} et {1} caractères."),
- range: jQuery.validator.format("Veuillez entrer une valeur entre {0} et {1}."),
- max: jQuery.validator.format("Veuillez entrer une valeur inférieure ou égale à {0}."),
- min: jQuery.validator.format("Veuillez entrer une valeur supérieure ou égale à {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ge.js b/thirdparty/jquery-validate/localization/messages_ge.js
deleted file mode 100644
index 5c3ee684f..000000000
--- a/thirdparty/jquery-validate/localization/messages_ge.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: GE
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "ამ ველის შევსება აუცილებელია.",
- remote: "გთხოვთ მიუთითოთ სწორი მნიშვნელობა.",
- email: "გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.",
- url: "გთხოვთ მიუთითოთ კორექტული URL.",
- date: "გთხოვთ მიუთითოთ კორექტული თარიღი.",
- dateISO: "გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.",
- number: "გთხოვთ მიუთითოთ ციფრი.",
- digits: "გთხოვთ მიუთითოთ მხოლოდ ციფრები.",
- creditcard: "გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.",
- equalTo: "გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.",
- accept: "გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.",
- maxlength: jQuery.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."),
- minlength: jQuery.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."),
- rangelength: jQuery.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."),
- range: jQuery.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."),
- max: jQuery.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."),
- min: jQuery.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_he.js b/thirdparty/jquery-validate/localization/messages_he.js
deleted file mode 100644
index c89eafe1b..000000000
--- a/thirdparty/jquery-validate/localization/messages_he.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: HE
- */
-jQuery.extend(jQuery.validator.messages, {
- required: ".השדה הזה הינו שדה חובה",
- remote: "נא לתקן שדה זה.",
- email: "נא למלא כתובת דוא\"ל חוקית",
- url: "נא למלא כתובת אינטרנט חוקית.",
- date: "נא למלא תאריך חוקי",
- dateISO: "נא למלא תאריך חוקי (ISO).",
- number: "נא למלא מספר.",
- digits: ".נא למלא רק מספרים",
- creditcard: "נא למלא מספר כרטיס אשראי חוקי.",
- equalTo: "נא למלא את אותו ערך שוב.",
- accept: "נא למלא ערך עם סיומת חוקית.",
- maxlength: jQuery.validator.format(".נא לא למלא יותר מ- {0} תווים"),
- minlength: jQuery.validator.format("נא למלא לפחות {0} תווים."),
- rangelength: jQuery.validator.format("נא למלא ערך בין {0} ל- {1} תווים."),
- range: jQuery.validator.format("נא למלא ערך בין {0} ל- {1}."),
- max: jQuery.validator.format("נא למלא ערך קטן או שווה ל- {0}."),
- min: jQuery.validator.format("נא למלא ערך גדול או שווה ל- {0}.")
-});
diff --git a/thirdparty/jquery-validate/localization/messages_hu.js b/thirdparty/jquery-validate/localization/messages_hu.js
deleted file mode 100644
index 086222aa1..000000000
--- a/thirdparty/jquery-validate/localization/messages_hu.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: HU
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Kötelező megadni.",
- maxlength: jQuery.validator.format("Legfeljebb {0} karakter hosszú legyen."),
- minlength: jQuery.validator.format("Legalább {0} karakter hosszú legyen."),
- rangelength: jQuery.validator.format("Legalább {0} és legfeljebb {1} karakter hosszú legyen."),
- email: "Érvényes e-mail címnek kell lennie.",
- url: "Érvényes URL-nek kell lennie.",
- date: "Dátumnak kell lennie.",
- number: "Számnak kell lennie.",
- digits: "Csak számjegyek lehetnek.",
- equalTo: "Meg kell egyeznie a két értéknek.",
- range: jQuery.validator.format("{0} és {1} közé kell esnie."),
- max: jQuery.validator.format("Nem lehet nagyobb, mint {0}."),
- min: jQuery.validator.format("Nem lehet kisebb, mint {0}."),
- creditcard: "Érvényes hitelkártyaszámnak kell lennie."
-});
diff --git a/thirdparty/jquery-validate/localization/messages_it.js b/thirdparty/jquery-validate/localization/messages_it.js
deleted file mode 100644
index ec44bca56..000000000
--- a/thirdparty/jquery-validate/localization/messages_it.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: IT
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Campo obbligatorio.",
- remote: "Controlla questo campo.",
- email: "Inserisci un indirizzo email valido.",
- url: "Inserisci un indirizzo web valido.",
- date: "Inserisci una data valida.",
- dateISO: "Inserisci una data valida (ISO).",
- number: "Inserisci un numero valido.",
- digits: "Inserisci solo numeri.",
- creditcard: "Inserisci un numero di carta di credito valido.",
- equalTo: "Il valore non corrisponde.",
- accept: "Inserisci un valore con un'estensione valida.",
- maxlength: jQuery.validator.format("Non inserire più di {0} caratteri."),
- minlength: jQuery.validator.format("Inserisci almeno {0} caratteri."),
- rangelength: jQuery.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri."),
- range: jQuery.validator.format("Inserisci un valore compreso tra {0} e {1}."),
- max: jQuery.validator.format("Inserisci un valore minore o uguale a {0}."),
- min: jQuery.validator.format("Inserisci un valore maggiore o uguale a {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ja.js b/thirdparty/jquery-validate/localization/messages_ja.js
deleted file mode 100644
index f404c1439..000000000
--- a/thirdparty/jquery-validate/localization/messages_ja.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Language: JA
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "このフィールドは必須です。",
- remote: "このフィールドを修正してください。",
- email: "有効なEメールアドレスを入力してください。",
- url: "有効なURLを入力してください。",
- date: "有効な日付を入力してください。",
- dateISO: "有効な日付(ISO)を入力してください。",
- number: "有効な数字を入力してください。",
- digits: "数字のみを入力してください。",
- creditcard: "有効なクレジットカード番号を入力してください。",
- equalTo: "同じ値をもう一度入力してください。",
- accept: "有効な拡張子を含む値を入力してください。",
- maxlength: jQuery.format("{0} 文字以内で入力してください。"),
- minlength: jQuery.format("{0} 文字以上で入力してください。"),
- rangelength: jQuery.format("{0} 文字から {1} 文字までの値を入力してください。"),
- range: jQuery.format("{0} から {1} までの値を入力してください。"),
- max: jQuery.format("{0} 以下の値を入力してください。"),
- min: jQuery.format("{1} 以上の値を入力してください。")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_kk.js b/thirdparty/jquery-validate/localization/messages_kk.js
deleted file mode 100644
index b37789463..000000000
--- a/thirdparty/jquery-validate/localization/messages_kk.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: KK
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Бұл өрісті міндетті түрде толтырыңыз.",
- remote: "Дұрыс мағына енгізуіңізді сұраймыз.",
- email: "Нақты электронды поштаңызды енгізуіңізді сұраймыз.",
- url: "Нақты URL-ды енгізуіңізді сұраймыз.",
- date: "Нақты URL-ды енгізуіңізді сұраймыз.",
- dateISO: "Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.",
- number: "Күнді енгізуіңізді сұраймыз.",
- digits: "Тек қана сандарды енгізуіңізді сұраймыз.",
- creditcard: "Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.",
- equalTo: "Осы мәнді қайта енгізуіңізді сұраймыз.",
- accept: "Файлдың кеңейтуін дұрыс таңдаңыз.",
- maxlength: jQuery.format("Ұзындығы {0} символдан көр болмасын."),
- minlength: jQuery.format("Ұзындығы {0} символдан аз болмасын."),
- rangelength: jQuery.format("Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз."),
- range: jQuery.format("Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз."),
- max: jQuery.format("{0} аз немесе тең санын енгізуіңіді сұраймыз."),
- min: jQuery.format("{0} көп немесе тең санын енгізуіңізді сұраймыз.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_lt.js b/thirdparty/jquery-validate/localization/messages_lt.js
deleted file mode 100644
index a890dbe63..000000000
--- a/thirdparty/jquery-validate/localization/messages_lt.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin in lithuanian.
- * Locale: LT
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Šis laukas yra privalomas.",
- remote: "Prašau pataisyti šį lauką.",
- email: "Prašau įvesti teisingą elektroninio pašto adresą.",
- url: "Prašau įvesti teisingą URL.",
- date: "Prašau įvesti teisingą datą.",
- dateISO: "Prašau įvesti teisingą datą (ISO).",
- number: "Prašau įvesti teisingą skaičių.",
- digits: "Prašau naudoti tik skaitmenis.",
- creditcard: "Prašau įvesti teisingą kreditinės kortelės numerį.",
- equalTo: "Prašau įvestį tą pačią reikšmę dar kartą.",
- accept: "Prašau įvesti reikšmę su teisingu plėtiniu.",
- maxlength: $.format("Prašau įvesti ne daugiau kaip {0} simbolių."),
- minlength: $.format("Prašau įvesti bent {0} simbolius."),
- rangelength: $.format("Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių."),
- range: $.format("Prašau įvesti reikšmę intervale nuo {0} iki {1}."),
- max: $.format("Prašau įvesti reikšmę mažesnę arba lygią {0}."),
- min: $.format("Prašau įvesti reikšmę didesnę arba lygią {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_lv.js b/thirdparty/jquery-validate/localization/messages_lv.js
deleted file mode 100644
index 944e918c0..000000000
--- a/thirdparty/jquery-validate/localization/messages_lv.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: LV
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Šis lauks ir obligāts.",
- remote: "Lūdzu, pārbaudiet šo lauku.",
- email: "Lūdzu, ievadiet derīgu e-pasta adresi.",
- url: "Lūdzu, ievadiet derīgu URL adresi.",
- date: "Lūdzu, ievadiet derīgu datumu.",
- dateISO: "Lūdzu, ievadiet derīgu datumu (ISO).",
- number: "Lūdzu, ievadiet derīgu numuru.",
- digits: "Lūdzu, ievadiet tikai ciparus.",
- creditcard: "Lūdzu, ievadiet derīgu kredītkartes numuru.",
- equalTo: "Lūdzu, ievadiet to pašu vēlreiz.",
- accept: "Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.",
- maxlength: jQuery.validator.format("Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes."),
- minlength: jQuery.validator.format("Lūdzu, ievadiet vismaz {0} rakstzīmes."),
- rangelength: jQuery.validator.format("Lūdzu ievadiet {0} līdz {1} rakstzīmes."),
- range: jQuery.validator.format("Lūdzu, ievadiet skaitli no {0} līdz {1}."),
- max: jQuery.validator.format("Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}."),
- min: jQuery.validator.format("Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_nl.js b/thirdparty/jquery-validate/localization/messages_nl.js
deleted file mode 100644
index e266158a8..000000000
--- a/thirdparty/jquery-validate/localization/messages_nl.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: NL
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Dit is een verplicht veld.",
- remote: "Controleer dit veld.",
- email: "Vul hier een geldig e-mailadres in.",
- url: "Vul hier een geldige URL in.",
- date: "Vul hier een geldige datum in.",
- dateISO: "Vul hier een geldige datum in (ISO-formaat).",
- number: "Vul hier een geldig getal in.",
- digits: "Vul hier alleen getallen in.",
- creditcard: "Vul hier een geldig creditcardnummer in.",
- equalTo: "Vul hier dezelfde waarde in.",
- accept: "Vul hier een waarde in met een geldige extensie.",
- maxlength: jQuery.validator.format("Vul hier maximaal {0} tekens in."),
- minlength: jQuery.validator.format("Vul hier minimaal {0} tekens in."),
- rangelength: jQuery.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."),
- range: jQuery.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."),
- max: jQuery.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),
- min: jQuery.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_no.js b/thirdparty/jquery-validate/localization/messages_no.js
deleted file mode 100644
index 89706fc36..000000000
--- a/thirdparty/jquery-validate/localization/messages_no.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: NO (Norwegian)
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Dette feltet er obligatorisk.",
- maxlength: jQuery.validator.format("Maksimalt {0} tegn."),
- minlength: jQuery.validator.format("Minimum {0} tegn."),
- rangelength: jQuery.validator.format("Angi minimum {0} og maksimum {1} tegn."),
- email: "Oppgi en gyldig epostadresse.",
- url: "Angi en gyldig URL.",
- date: "Angi en gyldig dato.",
- dateISO: "Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).",
- dateSE: "Angi en gyldig dato.",
- number: "Angi et gyldig nummer.",
- numberSE: "Angi et gyldig nummer.",
- digits: "Skriv kun tall.",
- equalTo: "Skriv samme verdi igjen.",
- range: jQuery.validator.format("Angi en verdi mellom {0} og {1}."),
- max: jQuery.validator.format("Angi en verdi som er større eller lik {0}."),
- min: jQuery.validator.format("Angi en verdi som er mindre eller lik {0}."),
- creditcard: "Angi et gyldig kredittkortnummer."
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_pl.js b/thirdparty/jquery-validate/localization/messages_pl.js
deleted file mode 100644
index 27190d8a3..000000000
--- a/thirdparty/jquery-validate/localization/messages_pl.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: PL
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "To pole jest wymagane.",
- remote: "Proszę o wypełnienie tego pola.",
- email: "Proszę o podanie prawidłowego adresu email.",
- url: "Proszę o podanie prawidłowego URL.",
- date: "Proszę o podanie prawidłowej daty.",
- dateISO: "Proszę o podanie prawidłowej daty (ISO).",
- number: "Proszę o podanie prawidłowej liczby.",
- digits: "Proszę o podanie samych cyfr.",
- creditcard: "Proszę o podanie prawidłowej karty kredytowej.",
- equalTo: "Proszę o podanie tej samej wartości ponownie.",
- accept: "Proszę o podanie wartości z prawidłowym rozszerzeniem.",
- maxlength: jQuery.validator.format("Proszę o podanie nie więcej niż {0} znaków."),
- minlength: jQuery.validator.format("Proszę o podanie przynajmniej {0} znaków."),
- rangelength: jQuery.validator.format("Proszę o podanie wartości o długości od {0} do {1} znaków."),
- range: jQuery.validator.format("Proszę o podanie wartości z przedziału od {0} do {1}."),
- max: jQuery.validator.format("Proszę o podanie wartości mniejszej bądź równej {0}."),
- min: jQuery.validator.format("Proszę o podanie wartości większej bądź równej {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ptbr.js b/thirdparty/jquery-validate/localization/messages_ptbr.js
deleted file mode 100644
index 07118575b..000000000
--- a/thirdparty/jquery-validate/localization/messages_ptbr.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: PT_BR
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Este campo é requerido.",
- remote: "Por favor, corrija este campo.",
- email: "Por favor, forneça um endereço eletrônico válido.",
- url: "Por favor, forneça uma URL válida.",
- date: "Por favor, forneça uma data válida.",
- dateISO: "Por favor, forneça uma data válida (ISO).",
- number: "Por favor, forneça um número válida.",
- digits: "Por favor, forneça somente dígitos.",
- creditcard: "Por favor, forneça um cartão de crédito válido.",
- equalTo: "Por favor, forneça o mesmo valor novamente.",
- accept: "Por favor, forneça um valor com uma extensão válida.",
- maxlength: jQuery.validator.format("Por favor, forneça não mais que {0} caracteres."),
- minlength: jQuery.validator.format("Por favor, forneça ao menos {0} caracteres."),
- rangelength: jQuery.validator.format("Por favor, forneça um valor entre {0} e {1} caracteres de comprimento."),
- range: jQuery.validator.format("Por favor, forneça um valor entre {0} e {1}."),
- max: jQuery.validator.format("Por favor, forneça um valor menor ou igual a {0}."),
- min: jQuery.validator.format("Por favor, forneça um valor maior ou igual a {0}.")
-});
diff --git a/thirdparty/jquery-validate/localization/messages_ptpt.js b/thirdparty/jquery-validate/localization/messages_ptpt.js
deleted file mode 100644
index 1e3fea29c..000000000
--- a/thirdparty/jquery-validate/localization/messages_ptpt.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Translated default messages for the jQuery validation plugin.
- * Locale: PT_PT
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Campo de preenchimento obrigatório.",
- remote: "Por favor, corrija este campo.",
- email: "Por favor, introduza um endereço eletrónico válido.",
- url: "Por favor, introduza um URL válido.",
- date: "Por favor, introduza uma data válida.",
- dateISO: "Por favor, introduza uma data válida (ISO).",
- number: "Por favor, introduza um número válido.",
- digits: "Por favor, introduza apenas dígitos.",
- creditcard: "Por favor, introduza um número de cartão de crédito válido.",
- equalTo: "Por favor, introduza de novo o mesmo valor.",
- accept: "Por favor, introduza um ficheiro com uma extensão válida.",
- maxlength: jQuery.validator.format("Por favor, não introduza mais do que {0} caracteres."),
- minlength: jQuery.validator.format("Por favor, introduza pelo menos {0} caracteres."),
- rangelength: jQuery.validator.format("Por favor, introduza entre {0} e {1} caracteres."),
- range: jQuery.validator.format("Por favor, introduza um valor entre {0} e {1}."),
- max: jQuery.validator.format("Por favor, introduza um valor menor ou igual a {0}."),
- min: jQuery.validator.format("Por favor, introduza um valor maior ou igual a {0}.")
-});
diff --git a/thirdparty/jquery-validate/localization/messages_ro.js b/thirdparty/jquery-validate/localization/messages_ro.js
deleted file mode 100644
index ae9a67cf9..000000000
--- a/thirdparty/jquery-validate/localization/messages_ro.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: RO
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Acest câmp este obligatoriu.",
- remote: "Te rugăm să completezi acest câmp.",
- email: "Te rugăm să introduci o adresă de email validă",
- url: "Te rugăm sa introduci o adresă URL validă.",
- date: "Te rugăm să introduci o dată corectă.",
- dateISO: "Te rugăm să introduci o dată (ISO) corectă.",
- number: "Te rugăm să introduci un număr întreg valid.",
- digits: "Te rugăm să introduci doar cifre.",
- creditcard: "Te rugăm să introduci un numar de carte de credit valid.",
- equalTo: "Te rugăm să reintroduci valoarea.",
- accept: "Te rugăm să introduci o valoare cu o extensie validă.",
- maxlength: jQuery.validator.format("Te rugăm să nu introduci mai mult de {0} caractere."),
- minlength: jQuery.validator.format("Te rugăm să introduci cel puțin {0} caractere."),
- rangelength: jQuery.validator.format("Te rugăm să introduci o valoare între {0} și {1} caractere."),
- range: jQuery.validator.format("Te rugăm să introduci o valoare între {0} și {1}."),
- max: jQuery.validator.format("Te rugăm să introduci o valoare egal sau mai mică decât {0}."),
- min: jQuery.validator.format("Te rugăm să introduci o valoare egal sau mai mare decât {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ru.js b/thirdparty/jquery-validate/localization/messages_ru.js
deleted file mode 100644
index 419ac24db..000000000
--- a/thirdparty/jquery-validate/localization/messages_ru.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: RU
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Это поле необходимо заполнить.",
- remote: "Пожалуйста, введите правильное значение.",
- email: "Пожалуйста, введите корретный адрес электронной почты.",
- url: "Пожалуйста, введите корректный URL.",
- date: "Пожалуйста, введите корректную дату.",
- dateISO: "Пожалуйста, введите корректную дату в формате ISO.",
- number: "Пожалуйста, введите число.",
- digits: "Пожалуйста, вводите только цифры.",
- creditcard: "Пожалуйста, введите правильный номер кредитной карты.",
- equalTo: "Пожалуйста, введите такое же значение ещё раз.",
- accept: "Пожалуйста, выберите файл с правильным расширением.",
- maxlength: jQuery.validator.format("Пожалуйста, введите не больше {0} символов."),
- minlength: jQuery.validator.format("Пожалуйста, введите не меньше {0} символов."),
- rangelength: jQuery.validator.format("Пожалуйста, введите значение длиной от {0} до {1} символов."),
- range: jQuery.validator.format("Пожалуйста, введите число от {0} до {1}."),
- max: jQuery.validator.format("Пожалуйста, введите число, меньшее или равное {0}."),
- min: jQuery.validator.format("Пожалуйста, введите число, большее или равное {0}.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_se.js b/thirdparty/jquery-validate/localization/messages_se.js
deleted file mode 100644
index 3dee36908..000000000
--- a/thirdparty/jquery-validate/localization/messages_se.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SE
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Detta fält är obligatoriskt.",
- maxlength: jQuery.validator.format("Du får ange högst {0} tecken."),
- minlength: jQuery.validator.format("Du måste ange minst {0} tecken."),
- rangelength: jQuery.validator.format("Ange minst {0} och max {1} tecken."),
- email: "Ange en korrekt e-postadress.",
- url: "Ange en korrekt URL.",
- date: "Ange ett korrekt datum.",
- dateISO: "Ange ett korrekt datum (&ARING;&ARING;&ARING;&ARING;-MM-DD).",
- number: "Ange ett korrekt nummer.",
- digits: "Ange endast siffror.",
- equalTo: "Ange samma värde igen.",
- range: jQuery.validator.format("Ange ett värde mellan {0} och {1}."),
- max: jQuery.validator.format("Ange ett värde som är större eller lika med {0}."),
- min: jQuery.validator.format("Ange ett värde som är mindre eller lika med {0}."),
- creditcard: "Ange ett korrekt kreditkortsnummer."
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_sk.js b/thirdparty/jquery-validate/localization/messages_sk.js
deleted file mode 100644
index 442d31d07..000000000
--- a/thirdparty/jquery-validate/localization/messages_sk.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SK
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Povinné zadať.",
- maxlength: jQuery.validator.format("Maximálne {0} znakov."),
- minlength: jQuery.validator.format("Minimálne {0} znakov."),
- rangelength: jQuery.validator.format("Minimálne {0} a Maximálne {0} znakov."),
- email: "E-mailová adresa musí byť platná.",
- url: "URL musí byť platný.",
- date: "Musí byť dátum.",
- number: "Musí byť číslo.",
- digits: "Môže obsahovať iba číslice.",
- equalTo: "Dva hodnoty sa musia rovnať.",
- range: jQuery.validator.format("Musí byť medzi {0} a {1}."),
- max: jQuery.validator.format("Nemôže byť viac ako{0}."),
- min: jQuery.validator.format("Nemôže byť menej ako{0}."),
- creditcard: "Číslo platobnej karty musí byť platné."
-});
diff --git a/thirdparty/jquery-validate/localization/messages_sr.js b/thirdparty/jquery-validate/localization/messages_sr.js
deleted file mode 100644
index 1a8917470..000000000
--- a/thirdparty/jquery-validate/localization/messages_sr.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SR
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Поље је обавезно.",
- remote: "Средите ово поље.",
- email: "Унесите исправну и-мејл адресу",
- url: "Унесите исправан URL.",
- date: "Унесите исправан датум.",
- dateISO: "Унесите исправан датум (ISO).",
- number: "Унесите исправан број.",
- digits: "Унесите само цифе.",
- creditcard: "Унесите исправан број кредитне картице.",
- equalTo: "Унесите исту вредност поново.",
- accept: "Унесите вредност са одговарајућом екстензијом.",
- maxlength: $.validator.format("Унесите мање од {0}карактера."),
- minlength: $.validator.format("Унесите барем {0} карактера."),
- rangelength: $.validator.format("Унесите вредност дугачку између {0} и {1} карактера."),
- range: $.validator.format("Унесите вредност између {0} и {1}."),
- max: $.validator.format("Унесите вредност мању или једнаку {0}."),
- min: $.validator.format("Унесите вредност већу или једнаку {0}.")
-});
diff --git a/thirdparty/jquery-validate/localization/messages_tr.js b/thirdparty/jquery-validate/localization/messages_tr.js
deleted file mode 100644
index 9df81e47e..000000000
--- a/thirdparty/jquery-validate/localization/messages_tr.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: TR
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Bu alanın doldurulması zorunludur.",
- remote: "Lütfen bu alanı düzeltin.",
- email: "Lütfen geçerli bir e-posta adresi giriniz.",
- url: "Lütfen geçerli bir web adresi (URL) giriniz.",
- date: "Lütfen geçerli bir tarih giriniz.",
- dateISO: "Lütfen geçerli bir tarih giriniz(ISO formatında)",
- number: "Lütfen geçerli bir sayı giriniz.",
- digits: "Lütfen sadece sayısal karakterler giriniz.",
- creditcard: "Lütfen geçerli bir kredi kartı giriniz.",
- equalTo: "Lütfen aynı değeri tekrar giriniz.",
- accept: "Lütfen geçerli uzantıya sahip bir değer giriniz.",
- maxlength: jQuery.validator.format("Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz."),
- minlength: jQuery.validator.format("Lütfen en az {0} karakter uzunluğunda bir değer giriniz."),
- rangelength: jQuery.validator.format("Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz."),
- range: jQuery.validator.format("Lütfen {0} ile {1} arasında bir değer giriniz."),
- max: jQuery.validator.format("Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz."),
- min: jQuery.validator.format("Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz.")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_tw.js b/thirdparty/jquery-validate/localization/messages_tw.js
deleted file mode 100644
index 248153518..000000000
--- a/thirdparty/jquery-validate/localization/messages_tw.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: TW (Taiwan - Traditional Chinese)
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "必填",
- remote: "請修正此欄位",
- email: "請輸入正確的電子信箱",
- url: "請輸入合法的URL",
- date: "請輸入合法的日期",
- dateISO: "請輸入合法的日期 (ISO).",
- number: "請輸入數字",
- digits: "請輸入整數",
- creditcard: "請輸入合法的信用卡號碼",
- equalTo: "請重複輸入一次",
- accept: "請輸入有效的後缀字串",
- maxlength: jQuery.validator.format("請輸入長度不大於{0} 的字串"),
- minlength: jQuery.validator.format("請輸入長度不小於 {0} 的字串"),
- rangelength: jQuery.validator.format("請輸入長度介於 {0} 和 {1} 之間的字串"),
- range: jQuery.validator.format("請輸入介於 {0} 和 {1} 之間的數值"),
- max: jQuery.validator.format("請輸入不大於 {0} 的數值"),
- min: jQuery.validator.format("請輸入不小於 {0} 的數值")
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/messages_ua.js b/thirdparty/jquery-validate/localization/messages_ua.js
deleted file mode 100644
index 25434a65f..000000000
--- a/thirdparty/jquery-validate/localization/messages_ua.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: UA (Ukrainian)
- */
-jQuery.extend(jQuery.validator.messages, {
- required: "Це поле необхідно заповнити.",
- remote: "Будь ласка, введіть правильне значення.",
- email: "Будь ласка, введіть коректну адресу електронної пошти.",
- url: "Будь ласка, введіть коректний URL.",
- date: "Будь ласка, введіть коректну дату.",
- dateISO: "Будь ласка, введіть коректну дату у форматі ISO.",
- number: "Будь ласка, введіть число.",
- digits: "Вводите потрібно лише цифри.",
- creditcard: "Будь ласка, введіть правильний номер кредитної карти.",
- equalTo: "Будь ласка, введіть таке ж значення ще раз.",
- accept: "Будь ласка, виберіть файл з правильним розширенням.",
- maxlength: jQuery.validator.format("Будь ласка, введіть не більше {0} символів."),
- minlength: jQuery.validator.format("Будь ласка, введіть не менше {0} символів."),
- rangelength: jQuery.validator.format("Будь ласка, введіть значення довжиною від {0} до {1} символів."),
- range: jQuery.validator.format("Будь ласка, введіть число від {0} до {1}."),
- max: jQuery.validator.format("Будь ласка, введіть число, менше або рівно {0}."),
- min: jQuery.validator.format("Будь ласка, введіть число, більше або рівно {0}.")
-});
diff --git a/thirdparty/jquery-validate/localization/methods_de.js b/thirdparty/jquery-validate/localization/methods_de.js
deleted file mode 100644
index 3e8ac8437..000000000
--- a/thirdparty/jquery-validate/localization/methods_de.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: DE
- */
-jQuery.extend(jQuery.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
- },
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
- }
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/methods_nl.js b/thirdparty/jquery-validate/localization/methods_nl.js
deleted file mode 100644
index 152e94de0..000000000
--- a/thirdparty/jquery-validate/localization/methods_nl.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: NL
- */
-jQuery.extend(jQuery.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value);
- }
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/localization/methods_pt.js b/thirdparty/jquery-validate/localization/methods_pt.js
deleted file mode 100644
index 21879d3bb..000000000
--- a/thirdparty/jquery-validate/localization/methods_pt.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: PT_BR
- */
-jQuery.extend(jQuery.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value);
- }
-});
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/test/events.html b/thirdparty/jquery-validate/test/events.html
deleted file mode 100644
index a6515197e..000000000
--- a/thirdparty/jquery-validate/test/events.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-Test for jQuery validate() plugin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/thirdparty/jquery-validate/test/firebug/errorIcon.png b/thirdparty/jquery-validate/test/firebug/errorIcon.png
deleted file mode 100644
index 2d75261bb..000000000
Binary files a/thirdparty/jquery-validate/test/firebug/errorIcon.png and /dev/null differ
diff --git a/thirdparty/jquery-validate/test/firebug/firebug.css b/thirdparty/jquery-validate/test/firebug/firebug.css
deleted file mode 100644
index 1f041c4da..000000000
--- a/thirdparty/jquery-validate/test/firebug/firebug.css
+++ /dev/null
@@ -1,209 +0,0 @@
-
-html, body {
- margin: 0;
- background: #FFFFFF;
- font-family: Lucida Grande, Tahoma, sans-serif;
- font-size: 11px;
- overflow: hidden;
-}
-
-a {
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-.toolbar {
- height: 14px;
- border-top: 1px solid ThreeDHighlight;
- border-bottom: 1px solid ThreeDShadow;
- padding: 2px 6px;
- background: ThreeDFace;
-}
-
-.toolbarRight {
- position: absolute;
- top: 4px;
- right: 6px;
-}
-
-#log {
- overflow: auto;
- position: absolute;
- left: 0;
- width: 100%;
-}
-
-#commandLine {
- position: absolute;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 18px;
- border: none;
- border-top: 1px solid ThreeDShadow;
-}
-
-/************************************************************************************************/
-
-.logRow {
- position: relative;
- border-bottom: 1px solid #D7D7D7;
- padding: 2px 4px 1px 6px;
- background-color: #FFFFFF;
-}
-
-.logRow-command {
- font-family: Monaco, monospace;
- color: blue;
-}
-
-.objectBox-null {
- padding: 0 2px;
- border: 1px solid #666666;
- background-color: #888888;
- color: #FFFFFF;
-}
-
-.objectBox-string {
- font-family: Monaco, monospace;
- color: red;
- white-space: pre;
-}
-
-.objectBox-number {
- color: #000088;
-}
-
-.objectBox-function {
- font-family: Monaco, monospace;
- color: DarkGreen;
-}
-
-.objectBox-object {
- color: DarkGreen;
- font-weight: bold;
-}
-
-/************************************************************************************************/
-
-.logRow-info,
-.logRow-error,
-.logRow-warning {
- background: #FFFFFF no-repeat 2px 2px;
- padding-left: 20px;
- padding-bottom: 3px;
-}
-
-.logRow-info {
- background-image: url(infoIcon.png);
-}
-
-.logRow-warning {
- background-color: cyan;
- background-image: url(warningIcon.png);
-}
-
-.logRow-error {
- background-color: LightYellow;
- background-image: url(errorIcon.png);
-}
-
-.errorMessage {
- vertical-align: top;
- color: #FF0000;
-}
-
-.objectBox-sourceLink {
- position: absolute;
- right: 4px;
- top: 2px;
- padding-left: 8px;
- font-family: Lucida Grande, sans-serif;
- font-weight: bold;
- color: #0000FF;
-}
-
-/************************************************************************************************/
-
-.logRow-group {
- background: #EEEEEE;
- border-bottom: none;
-}
-
-.logGroup {
- background: #EEEEEE;
-}
-
-.logGroupBox {
- margin-left: 24px;
- border-top: 1px solid #D7D7D7;
- border-left: 1px solid #D7D7D7;
-}
-
-/************************************************************************************************/
-
-.selectorTag,
-.selectorId,
-.selectorClass {
- font-family: Monaco, monospace;
- font-weight: normal;
-}
-
-.selectorTag {
- color: #0000FF;
-}
-
-.selectorId {
- color: DarkBlue;
-}
-
-.selectorClass {
- color: red;
-}
-
-/************************************************************************************************/
-
-.objectBox-element {
- font-family: Monaco, monospace;
- color: #000088;
-}
-
-.nodeChildren {
- margin-left: 16px;
-}
-
-.nodeTag {
- color: blue;
-}
-
-.nodeValue {
- color: #FF0000;
- font-weight: normal;
-}
-
-.nodeText,
-.nodeComment {
- margin: 0 2px;
- vertical-align: top;
-}
-
-.nodeText {
- color: #333333;
-}
-
-.nodeComment {
- color: DarkGreen;
-}
-
-/************************************************************************************************/
-
-.propertyNameCell {
- vertical-align: top;
-}
-
-.propertyName {
- font-weight: bold;
-}
diff --git a/thirdparty/jquery-validate/test/firebug/firebug.html b/thirdparty/jquery-validate/test/firebug/firebug.html
deleted file mode 100644
index 861e63932..000000000
--- a/thirdparty/jquery-validate/test/firebug/firebug.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
- Firebug
-
-
-
-
-