GitHub
Tests: 12 • Commercial: 2 • Pet projects: 4 • Legacy: 4
Total: 22

.NET Framework

Test
2021

Project Request

ASP.NET MVC • C# • SQL Server
Idea of the project: if someone wants to order a project development, here you can send an application.
Test
2020

ProjectC

ASP.NET MVC • C# • JSON • jQuery
JSON data processing.
Test
2020

Vehicle Maintenance

ASP.NET MVC • VB.NET • JSON
Idea of the project: if someone wants to order a project development, here you can send an application.
Test
2019

Movie Navigator

ASP.NET MVC • VB.NET
Request information about movie from IMDB.
Test
2018

Customers Exchange

ASP.NET MVC • C# • SQL Server
Automated teller machine emulation.
Test
2016

ATM

ASP.NET MVC • C#
Automated teller machine emulation.

.NET Core

Pet project
2022

Mail Daemon

.NET 9 • Console • JSON
Utility to send mails with customizable settings.

Custom

Code
2024

Buns of code

.NET Framework • C# • JavaScript
Code snippets from my projects, ready to use; tiny tests; code examples.

PHP

Test
2024

Mediabox

PHP 8 • Laravel 11 • Vue.js • Composer • SQLite
Test project for media files management.
Test
2020

Loan Castle

PHP • MariaDB
Jums jāizstrādā kāda lielāk projekta prototips. Izstrādājot prototipu, paturiet prātā, ka projektam attīstoties, šo prototipu varētu vajadzēt pilnveidot.
Test
2020

Content Management

PHP • MySQL • AJAX
Создать простой сайт, где будет страница с формой для авторизации и страница для авторизованного пользователя.
Test
2019

Laravel

PHP • Laravel • Vue.js • Composer • SQLite
Izveidot aplikāciju, kura ik pēc noteikta intervāla (60 sekundes) veic ierakstu datubāzē izmantojot Laravel freimworka iebūvēto funkcionalitāti.
Test
2019

Phone Check

PHP • JavaScript • JSON • Docker
Implement application to detect country by phone number.

Frontend

Test
2021

Forex Wall

npm • React
For this exercise, what we need is a simple live wall for tracking currencies.

Business projects

Commercial
2008

Certification Center

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • SQL Server • ADO.NET • Dapper • JavaScript • jQuery • Git
Transport registration and certification services in Latvia, Customer Relationship Management.
Commercial
2000

Amerikas Auto

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • SQL Server • ADO.NET • Entity Framework • JavaScript • jQuery • Git
Car service and spare parts for all USA and European car models, Customer Relationship Management.

Pet projects

Pet project
2023

Geolocation Assistant

.NET 8 • ASP.NET Core • C# • Web API • JSON • Git
Website for determining geolocation by IP or geotagged photo.
Pet project
2008

Web Dynamics

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • Web API • JSON • SQL Server • Dapper • JavaScript • jQuery • SVG • Git
Software development blog. Articles, books, videos, content management.
Pet project
2000

Blackball

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • Web API • JSON • XML • SQL Server • Dapper • JavaScript • jQuery • SVG • Git
My entertainment portal created from scratch.

Good old times

Legacy
2000

DOS Clock

Turbo Pascal • Assembler
Digital clock.
Legacy
2000

BrainOut

Turbo Pascal • Assembler
Tank battle game.
Legacy
1999

Airport Administrator

Turbo Pascal
Курсовая работа в институте.
Legacy
1998

Atomizer

Turbo Pascal • Assembler
Atomizer, aka «Studio2D». Graphic raster editor. AGI is my own «Atomizer Generated Image» file format.

Movie Navigator

2019 Test

Request information about movie from IMDB.

ASP.NET MVC VB.NET
Information
Source code
  Core
  Home
Root / MovieNavigator.Web / Scripts / jquery.validate-vsdoc.js
/* * This file has been commented to support Visual Studio Intellisense. * You should not use this file at runtime inside the browser--it is only * intended to be used only for design-time IntelliSense. Please use the * standard jQuery library for all production use. * * Comment version: 1.17.0 */ /* * Note: While Microsoft is not the author of this file, Microsoft is * offering you a license subject to the terms of the Microsoft Software * License Terms for Microsoft ASP.NET Model View Controller 3. * Microsoft reserves all other rights. The notices below are provided * for informational purposes only and are not the license terms under * which Microsoft distributed this file. * * jQuery Validation Plugin - v1.17.0 - 12/5/2016 * https://github.com/jzaefferer/jquery-validation * Copyright (c) 2013 Jörn Zaefferer; Licensed MIT * */ (function($) { $.extend($.fn, {     // http://docs.jquery.com/Plugins/Validation/validate     validate: function( options ) {         /// <summary>         /// Validates the selected form. This method sets up event handlers for submit, focus,         /// keyup, blur and click to trigger validation of the entire form or individual         /// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,         /// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.         /// </summary>         /// <param name="options" type="Object">         /// A set of key/value pairs that configure the validate. All options are optional.         /// </param>         // if nothing is selected, return nothing; can't chain anyway         if (!this.length) {             options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );             return;         }         // check if a validator for this form was already created         var validator = $.data(this[0], 'validator');         if ( validator ) {             return validator;         }                  validator = new $.validator( options, this[0] );         $.data(this[0], 'validator', validator);                  if ( validator.settings.onsubmit ) {                      // allow suppresing validation by adding a cancel class to the submit button             this.find("input, button").filter(".cancel").click(function() {                 validator.cancelSubmit = true;             });                          // when a submitHandler is used, capture the submitting button             if (validator.settings.submitHandler) {                 this.find("input, button").filter(":submit").click(function() {                     validator.submitButton = this;                 });             }                      // validate the form on submit             this.submit( function( event ) {                 if ( validator.settings.debug )                     // prevent form submit to be able to see console output                     event.preventDefault();                                      function handle() {                     if ( validator.settings.submitHandler ) {                         if (validator.submitButton) {                             // insert a hidden input as a replacement for the missing submit button                             var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);                         }                         validator.settings.submitHandler.call( validator, validator.currentForm );                         if (validator.submitButton) {                             // and clean up afterwards; thanks to no-block-scope, hidden can be referenced                             hidden.remove();                         }                         return false;                     }                     return true;                 }                                      // prevent submit for invalid forms or custom submit handlers                 if ( validator.cancelSubmit ) {                     validator.cancelSubmit = false;                     return handle();                 }                 if ( validator.form() ) {                     if ( validator.pendingRequest ) {                         validator.formSubmitted = true;                         return false;                     }                     return handle();                 } else {                     validator.focusInvalid();                     return false;                 }             });         }                  return validator;     },     // http://docs.jquery.com/Plugins/Validation/valid     valid: function() {         /// <summary>         /// Checks if the selected form is valid or if all selected elements are valid.         /// validate() needs to be called on the form before checking it using this method.         /// </summary>         /// <returns type="Boolean" /> if ( $(this[0]).is('form')) { return this.validate().form(); } else { var valid = true; var validator = $(this[0].form).validate(); this.each(function() {                 valid &= validator.element(this); }); return valid; } },     // attributes: space seperated list of attributes to retrieve and remove     removeAttrs: function(attributes) {         /// <summary>         /// Remove the specified attributes from the first matched element and return them.         /// </summary>         /// <param name="attributes" type="String">         /// A space-seperated list of attribute names to remove.         /// </param>         var result = {},             $element = this;         $.each(attributes.split(/\s/), function(index, value) {             result[value] = $element.attr(value);             $element.removeAttr(value);         });         return result;     },     // http://docs.jquery.com/Plugins/Validation/rules     rules: function(command, argument) {         /// <summary>         /// Return the validations rules for the first selected element.         /// </summary>         /// <param name="command" type="String">         /// Can be either "add" or "remove".         /// </param>         /// <param name="argument" type="">         /// A list of rules to add or remove.         /// </param>         var element = this[0];                  if (command) {             var settings = $.data(element.form, 'validator').settings;             var staticRules = settings.rules;             var existingRules = $.validator.staticRules(element);             switch(command) {             case "add":                 $.extend(existingRules, $.validator.normalizeRule(argument));                 staticRules[element.name] = existingRules;                 if (argument.messages)                     settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );                 break;             case "remove":                 if (!argument) {                     delete staticRules[element.name];                     return existingRules;                 }                 var filtered = {};                 $.each(argument.split(/\s/), function(index, method) {                     filtered[method] = existingRules[method];                     delete existingRules[method];                 });                 return filtered;             }         }                  var data = $.validator.normalizeRules(         $.extend(             {},             $.validator.metadataRules(element),             $.validator.classRules(element),             $.validator.attributeRules(element),             $.validator.staticRules(element)         ), element);                  // make sure required is at front         if (data.required) {             var param = data.required;             delete data.required;             data = $.extend({required: param}, data);         }                  return data;     } }); // Custom selectors $.extend($.expr[":"], {     // http://docs.jquery.com/Plugins/Validation/blank     blank: function(a) {return !$.trim("" + a.value);},     // http://docs.jquery.com/Plugins/Validation/filled     filled: function(a) {return !!$.trim("" + a.value);},     // http://docs.jquery.com/Plugins/Validation/unchecked     unchecked: function(a) {return !a.checked;} }); // constructor for validator $.validator = function( options, form ) {     this.settings = $.extend( true, {}, $.validator.defaults, options );     this.currentForm = form;     this.init(); }; $.validator.format = function(source, params) {     /// <summary>     /// Replaces {n} placeholders with arguments.     /// One or more arguments can be passed, in addition to the string template itself, to insert     /// into the string.     /// </summary>     /// <param name="source" type="String">     /// The string to format.     /// </param>     /// <param name="params" type="String">     /// The first argument to insert, or an array of Strings to insert     /// </param>     /// <returns type="String" />     if ( arguments.length == 1 )         return function() {             var args = $.makeArray(arguments);             args.unshift(source);             return $.validator.format.apply( this, args );         };     if ( arguments.length > 2 && params.constructor != Array ) {         params = $.makeArray(arguments).slice(1);     }     if ( params.constructor != Array ) {         params = [ params ];     }     $.each(params, function(i, n) {         source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);     });     return source; }; $.extend($.validator, {          defaults: {         messages: {},         groups: {},         rules: {},         errorClass: "error",         validClass: "valid",         errorElement: "label",         focusInvalid: true,         errorContainer: $( [] ),         errorLabelContainer: $( [] ),         onsubmit: true,         ignore: [],         ignoreTitle: false,         onfocusin: function(element) {             this.lastActive = element;                              // hide error label and remove error class on focus if enabled             if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {                 this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );                 this.addWrapper(this.errorsFor(element)).hide();             }         },         onfocusout: function(element) {             if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {                 this.element(element);             }         },         onkeyup: function(element) {             if ( element.name in this.submitted || element == this.lastElement ) {                 this.element(element);             }         },         onclick: function(element) {             // click on selects, radiobuttons and checkboxes             if ( element.name in this.submitted )                 this.element(element);             // or option elements, check parent select in that case             else if (element.parentNode.name in this.submitted)                 this.element(element.parentNode);         },         highlight: function( element, errorClass, validClass ) {             $(element).addClass(errorClass).removeClass(validClass);         },         unhighlight: function( element, errorClass, validClass ) {             $(element).removeClass(errorClass).addClass(validClass);         }     },     // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults     setDefaults: function(settings) {         /// <summary>         /// Modify default settings for validation.         /// Accepts everything that Plugins/Validation/validate accepts.         /// </summary>         /// <param name="settings" type="Options">         /// Options to set as default.         /// </param>         $.extend( $.validator.defaults, settings );     },     messages: {         required: "This field is required.",         remote: "Please fix this field.",         email: "Please enter a valid email address.",         url: "Please enter a valid URL.",         date: "Please enter a valid date.",         dateISO: "Please enter a valid date (ISO).",         number: "Please enter a valid number.",         digits: "Please enter only digits.",         creditcard: "Please enter a valid credit card number.",         equalTo: "Please enter the same value again.",         accept: "Please enter a value with a valid extension.",         maxlength: $.validator.format("Please enter no more than {0} characters."),         minlength: $.validator.format("Please enter at least {0} characters."),         rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),         range: $.validator.format("Please enter a value between {0} and {1}."),         max: $.validator.format("Please enter a value less than or equal to {0}."),         min: $.validator.format("Please enter a value greater than or equal to {0}.")     },          autoCreateRanges: false,          prototype: {                  init: function() {             this.labelContainer = $(this.settings.errorLabelContainer);             this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);             this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );             this.submitted = {};             this.valueCache = {};             this.pendingRequest = 0;             this.pending = {};             this.invalid = {};             this.reset();                          var groups = (this.groups = {});             $.each(this.settings.groups, function(key, value) {                 $.each(value.split(/\s/), function(index, name) {                     groups[name] = key;                 });             });             var rules = this.settings.rules;             $.each(rules, function(key, value) {                 rules[key] = $.validator.normalizeRule(value);             });                          function delegate(event) {                 var validator = $.data(this[0].form, "validator"),                     eventType = "on" + event.type.replace(/^validate/, "");                 validator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );             }             $(this.currentForm)                 .validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate)                 .validateDelegate(":radio, :checkbox, select, option", "click", delegate);             if (this.settings.invalidHandler)                 $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);         },         // http://docs.jquery.com/Plugins/Validation/Validator/form         form: function() {             /// <summary>             /// Validates the form, returns true if it is valid, false otherwise.             /// This behaves as a normal submit event, but returns the result.             /// </summary>             /// <returns type="Boolean" />             this.checkForm();             $.extend(this.submitted, this.errorMap);             this.invalid = $.extend({}, this.errorMap);             if (!this.valid())                 $(this.currentForm).triggerHandler("invalid-form", [this]);             this.showErrors();             return this.valid();         },                  checkForm: function() {             this.prepareForm();             for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {                 this.check( elements[i] );             }             return this.valid();         },                  // http://docs.jquery.com/Plugins/Validation/Validator/element         element: function( element ) {             /// <summary>             /// Validates a single element, returns true if it is valid, false otherwise.             /// This behaves as validation on blur or keyup, but returns the result.             /// </summary>             /// <param name="element" type="Selector">             /// An element to validate, must be inside the validated form.             /// </param>             /// <returns type="Boolean" />             element = this.clean( element );             this.lastElement = element;             this.prepareElement( element );             this.currentElements = $(element);             var result = this.check( element );             if ( result ) {                 delete this.invalid[element.name];             } else {                 this.invalid[element.name] = true;             }             if ( !this.numberOfInvalids() ) {                 // Hide error containers on last error                 this.toHide = this.toHide.add( this.containers );             }             this.showErrors();             return result;         },         // http://docs.jquery.com/Plugins/Validation/Validator/showErrors         showErrors: function(errors) {             /// <summary>             /// Show the specified messages.             /// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.             /// </summary>             /// <param name="errors" type="Object">             /// One or more key/value pairs of input names and messages.             /// </param>             if(errors) {                 // add items to error list and map                 $.extend( this.errorMap, errors );                 this.errorList = [];                 for ( var name in errors ) {                     this.errorList.push({                         message: errors[name],                         element: this.findByName(name)[0]                     });                 }                 // remove items from success list                 this.successList = $.grep( this.successList, function(element) {                     return !(element.name in errors);                 });             }             this.settings.showErrors                 ? this.settings.showErrors.call( this, this.errorMap, this.errorList )                 : this.defaultShowErrors();         },                  // http://docs.jquery.com/Plugins/Validation/Validator/resetForm         resetForm: function() {             /// <summary>             /// Resets the controlled form.             /// Resets input fields to their original value (requires form plugin), removes classes             /// indicating invalid elements and hides error messages.             /// </summary>             if ( $.fn.resetForm )                 $( this.currentForm ).resetForm();             this.submitted = {};             this.prepareForm();             this.hideErrors();             this.elements().removeClass( this.settings.errorClass );         },                  numberOfInvalids: function() {             /// <summary>             /// Returns the number of invalid fields.             /// This depends on the internal validator state. It covers all fields only after             /// validating the complete form (on submit or via $("form").valid()). After validating             /// a single element, only that element is counted. Most useful in combination with the             /// invalidHandler-option.             /// </summary>             /// <returns type="Number" />             return this.objectLength(this.invalid);         },                  objectLength: function( obj ) {             var count = 0;             for ( var i in obj )                 count++;             return count;         },                  hideErrors: function() {             this.addWrapper( this.toHide ).hide();         },                  valid: function() {             return this.size() == 0;         },                  size: function() {             return this.errorList.length;         },                  focusInvalid: function() {             if( this.settings.focusInvalid ) {                 try {                     $(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])                     .filter(":visible")                     .focus()                     // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find                     .trigger("focusin");                 } catch(e) {                     // ignore IE throwing errors when focusing hidden elements                 }             }         },                  findLastActive: function() {             var lastActive = this.lastActive;             return lastActive && $.grep(this.errorList, function(n) {                 return n.element.name == lastActive.name;             }).length == 1 && lastActive;         },                  elements: function() {             var validator = this,                 rulesCache = {};                          // select all valid inputs inside the form (no submit or reset buttons)             // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved             return $([]).add(this.currentForm.elements)             .filter(":input")             .not(":submit, :reset, :image, [disabled]")             .not( this.settings.ignore )             .filter(function() {                 !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);                              // select only the first element for each name, and only those with rules specified                 if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )                     return false;                                  rulesCache[this.name] = true;                 return true;             });         },                  clean: function( selector ) {             return $( selector )[0];         },                  errors: function() {             return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );         },                  reset: function() {             this.successList = [];             this.errorList = [];             this.errorMap = {};             this.toShow = $([]);             this.toHide = $([]);             this.currentElements = $([]);         },                  prepareForm: function() {             this.reset();             this.toHide = this.errors().add( this.containers );         },                  prepareElement: function( element ) {             this.reset();             this.toHide = this.errorsFor(element);         },              check: function( element ) {             element = this.clean( element );                          // if radio/checkbox, validate first element in group instead             if (this.checkable(element)) {              element = this.findByName(element.name).not(this.settings.ignore)[0];             }                          var rules = $(element).rules();             var dependencyMismatch = false;             for (var method in rules) {                 var rule = { method: method, parameters: rules[method] };                 try {                     var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );                                          // if a method indicates that the field is optional and therefore valid,                     // don't mark it as valid when there are no other rules                     if ( result == "dependency-mismatch" ) {                         dependencyMismatch = true;                         continue;                     }                     dependencyMismatch = false;                                          if ( result == "pending" ) {                         this.toHide = this.toHide.not( this.errorsFor(element) );                         return;                     }                                          if( !result ) {                         this.formatAndAdd( element, rule );                         return false;                     }                 } catch(e) {                     this.settings.debug && window.console && console.log("exception occured when checking element " + element.id                          + ", check the '" + rule.method + "' method", e);                     throw e;                 }             }             if (dependencyMismatch)                 return;             if ( this.objectLength(rules) )                 this.successList.push(element);             return true;         },                  // return the custom message for the given element and validation method         // specified in the element's "messages" metadata         customMetaMessage: function(element, method) {             if (!$.metadata)                 return;                          var meta = this.settings.meta                 ? $(element).metadata()[this.settings.meta]                 : $(element).metadata();                          return meta && meta.messages && meta.messages[method];         },                  // return the custom message for the given element name and validation method         customMessage: function( name, method ) {             var m = this.settings.messages[name];             return m && (m.constructor == String                 ? m                 : m[method]);         },                  // return the first defined argument, allowing empty strings         findDefined: function() {             for(var i = 0; i < arguments.length; i++) {                 if (arguments[i] !== undefined)                     return arguments[i];             }             return undefined;         },                  defaultMessage: function( element, method) {             return this.findDefined(                 this.customMessage( element.name, method ),                 this.customMetaMessage( element, method ),                 // title is never undefined, so handle empty string as undefined                 !this.settings.ignoreTitle && element.title || undefined,                 $.validator.messages[method],                 "<strong>Warning: No message defined for " + element.name + "</strong>"             );         },                  formatAndAdd: function( element, rule ) {             var message = this.defaultMessage( element, rule.method ),                 theregex = /\$?\{(\d+)\}/g;             if ( typeof message == "function" ) {                 message = message.call(this, rule.parameters, element);             } else if (theregex.test(message)) {                 message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);             }                         this.errorList.push({                 message: message,                 element: element             });                          this.errorMap[element.name] = message;             this.submitted[element.name] = message;         },                  addWrapper: function(toToggle) {             if ( this.settings.wrapper )                 toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );             return toToggle;         },                  defaultShowErrors: function() {             for ( var i = 0; this.errorList[i]; i++ ) {                 var error = this.errorList[i];                 this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );                 this.showLabel( error.element, error.message );             }             if( this.errorList.length ) {                 this.toShow = this.toShow.add( this.containers );             }             if (this.settings.success) {                 for ( var i = 0; this.successList[i]; i++ ) {                     this.showLabel( this.successList[i] );                 }             }             if (this.settings.unhighlight) {                 for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {                     this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );                 }             }             this.toHide = this.toHide.not( this.toShow );             this.hideErrors();             this.addWrapper( this.toShow ).show();         },                  validElements: function() {             return this.currentElements.not(this.invalidElements());         },                  invalidElements: function() {             return $(this.errorList).map(function() {                 return this.element;             });         },                  showLabel: function(element, message) {             var label = this.errorsFor( element );             if ( label.length ) {                 // refresh error/success class                 label.removeClass().addClass( this.settings.errorClass );                              // check if we have a generated label, replace the message then                 label.attr("generated") && label.html(message);             } else {                 // create label                 label = $("<" + this.settings.errorElement + "/>")                     .attr({"for": this.idOrName(element), generated: true})                     .addClass(this.settings.errorClass)                     .html(message || "");                 if ( this.settings.wrapper ) {                     // make sure the element is visible, even in IE                     // actually showing the wrapped element is handled elsewhere                     label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();                 }                 if ( !this.labelContainer.append(label).length )                     this.settings.errorPlacement                         ? this.settings.errorPlacement(label, $(element) )                         : label.insertAfter(element);             }             if ( !message && this.settings.success ) {                 label.text("");                 typeof this.settings.success == "string"                     ? label.addClass( this.settings.success )                     : this.settings.success( label );             }             this.toShow = this.toShow.add(label);         },                  errorsFor: function(element) {             var name = this.idOrName(element);         return this.errors().filter(function() {                 return $(this).attr('for') == name;             });         },                  idOrName: function(element) {             return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);         },         checkable: function( element ) {             return /radio|checkbox/i.test(element.type);         },                  findByName: function( name ) {             // select by name and filter by form for performance over form.find("[name=...]")             var form = this.currentForm;             return $(document.getElementsByName(name)).map(function(index, element) {                 return element.form == form && element.name == name && element || null;             });         },                  getLength: function(value, element) {             switch( element.nodeName.toLowerCase() ) {             case 'select':                 return $("option:selected", element).length;             case 'input':                 if( this.checkable( element) )                     return this.findByName(element.name).filter(':checked').length;             }             return value.length;         },              depend: function(param, element) {             return this.dependTypes[typeof param]                 ? this.dependTypes[typeof param](param, element)                 : true;         },              dependTypes: {             "boolean": function(param, element) {                 return param;             },             "string": function(param, element) {                 return !!$(param, element.form).length;             },             "function": function(param, element) {                 return param(element);             }         },                  optional: function(element) {             return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";         },                  startRequest: function(element) {             if (!this.pending[element.name]) {                 this.pendingRequest++;                 this.pending[element.name] = true;             }         },                  stopRequest: function(element, valid) {             this.pendingRequest--;             // sometimes synchronization fails, make sure pendingRequest is never < 0             if (this.pendingRequest < 0)                 this.pendingRequest = 0;             delete this.pending[element.name];             if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {                 $(this.currentForm).submit();                 this.formSubmitted = false;             } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {                 $(this.currentForm).triggerHandler("invalid-form", [this]);                 this.formSubmitted = false;             }         },                  previousValue: function(element) {             return $.data(element, "previousValue") || $.data(element, "previousValue", {                 old: null,                 valid: true,                 message: this.defaultMessage( element, "remote" )             });         }              },          classRuleSettings: {         required: {required: true},         email: {email: true},         url: {url: true},         date: {date: true},         dateISO: {dateISO: true},         dateDE: {dateDE: true},         number: {number: true},         numberDE: {numberDE: true},         digits: {digits: true},         creditcard: {creditcard: true}     },          addClassRules: function(className, rules) {         /// <summary>         /// Add a compound class method - useful to refactor common combinations of rules into a single         /// class.         /// </summary>         /// <param name="name" type="String">         /// The name of the class rule to add         /// </param>         /// <param name="rules" type="Options">         /// The compound rules         /// </param>         className.constructor == String ?             this.classRuleSettings[className] = rules :             $.extend(this.classRuleSettings, className);     },          classRules: function(element) {         var rules = {};         var classes = $(element).attr('class');         classes && $.each(classes.split(' '), function() {             if (this in $.validator.classRuleSettings) {                 $.extend(rules, $.validator.classRuleSettings[this]);             }         });         return rules;     },          attributeRules: function(element) {         var rules = {};         var $element = $(element);         for (var method in $.validator.methods) {             var value = $element.attr(method);             if (value) {                 rules[method] = value;             }         }                  // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs         if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {             delete rules.maxlength;         }                  return rules;     },          metadataRules: function(element) {         if (!$.metadata) return {};                  var meta = $.data(element.form, 'validator').settings.meta;         return meta ?             $(element).metadata()[meta] :             $(element).metadata();     },          staticRules: function(element) {         var rules = {};         var validator = $.data(element.form, 'validator');         if (validator.settings.rules) {             rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};         }         return rules;     },          normalizeRules: function(rules, element) {         // handle dependency check         $.each(rules, function(prop, val) {             // ignore rule when param is explicitly false, eg. required:false             if (val === false) {                 delete rules[prop];                 return;             }             if (val.param || val.depends) {                 var keepRule = true;                 switch (typeof val.depends) {                     case "string":                         keepRule = !!$(val.depends, element.form).length;                         break;                     case "function":                         keepRule = val.depends.call(element, element);                         break;                 }                 if (keepRule) {                     rules[prop] = val.param !== undefined ? val.param : true;                 } else {                     delete rules[prop];                 }             }         });                  // evaluate parameters         $.each(rules, function(rule, parameter) {             rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;         });                  // clean number parameters         $.each(['minlength', 'maxlength', 'min', 'max'], function() {             if (rules[this]) {                 rules[this] = Number(rules[this]);             }         });         $.each(['rangelength', 'range'], function() {             if (rules[this]) {                 rules[this] = [Number(rules[this][0]), Number(rules[this][1])];             }         });                  if ($.validator.autoCreateRanges) {             // auto-create ranges             if (rules.min && rules.max) {                 rules.range = [rules.min, rules.max];                 delete rules.min;                 delete rules.max;             }             if (rules.minlength && rules.maxlength) {                 rules.rangelength = [rules.minlength, rules.maxlength];                 delete rules.minlength;                 delete rules.maxlength;             }         }                  // To support custom messages in metadata ignore rule methods titled "messages"         if (rules.messages) {             delete rules.messages;         }                  return rules;     },          // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}     normalizeRule: function(data) {         if( typeof data == "string" ) {             var transformed = {};             $.each(data.split(/\s/), function() {                 transformed[this] = true;             });             data = transformed;         }         return data;     },          // http://docs.jquery.com/Plugins/Validation/Validator/addMethod     addMethod: function(name, method, message) {         /// <summary>         /// Add a custom validation method. It must consist of a name (must be a legal javascript         /// identifier), a javascript based function and a default string message.         /// </summary>         /// <param name="name" type="String">         /// The name of the method, used to identify and referencing it, must be a valid javascript         /// identifier         /// </param>         /// <param name="method" type="Function">         /// The actual method implementation, returning true if an element is valid         /// </param>         /// <param name="message" type="String" optional="true">         /// (Optional) The default message to display for this method. Can be a function created by         /// jQuery.validator.format(value). When undefined, an already existing message is used         /// (handy for localization), otherwise the field-specific messages have to be defined.         /// </param>         $.validator.methods[name] = method;         $.validator.messages[name] = message != undefined ? message : $.validator.messages[name];         if (method.length < 3) {             $.validator.addClassRules(name, $.validator.normalizeRule(name));         }     },     methods: {         // http://docs.jquery.com/Plugins/Validation/Methods/required         required: function(value, element, param) {             // check if dependency is met             if ( !this.depend(param, element) )                 return "dependency-mismatch";             switch( element.nodeName.toLowerCase() ) {             case 'select':                 // could be an array for select-multiple or a string, both are fine this way                 var val = $(element).val();                 return val && val.length > 0;             case 'input':                 if ( this.checkable(element) )                     return this.getLength(value, element) > 0;             default:                 return $.trim(value).length > 0;             }         },                  // http://docs.jquery.com/Plugins/Validation/Methods/remote         remote: function(value, element, param) {             if ( this.optional(element) )                 return "dependency-mismatch";                          var previous = this.previousValue(element);             if (!this.settings.messages[element.name] )                 this.settings.messages[element.name] = {};             previous.originalMessage = this.settings.messages[element.name].remote;             this.settings.messages[element.name].remote = previous.message;                          param = typeof param == "string" && {url:param} || param;                          if ( this.pending[element.name] ) {                 return "pending";             }             if ( previous.old === value ) {                 return previous.valid;             }             previous.old = value;             var validator = this;             this.startRequest(element);             var data = {};             data[element.name] = value;             $.ajax($.extend(true, {                 url: param,                 mode: "abort",                 port: "validate" + element.name,                 dataType: "json",                 data: data,                 success: function(response) {                     validator.settings.messages[element.name].remote = previous.originalMessage;                     var valid = response === true;                     if ( valid ) {                         var submitted = validator.formSubmitted;                         validator.prepareElement(element);                         validator.formSubmitted = submitted;                         validator.successList.push(element);                         validator.showErrors();                     } else {                         var errors = {};                         var message = response || validator.defaultMessage(element, "remote");                         errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;                         validator.showErrors(errors);                     }                     previous.valid = valid;                     validator.stopRequest(element, valid);                 }             }, param));             return "pending";         },         // http://docs.jquery.com/Plugins/Validation/Methods/minlength         minlength: function(value, element, param) {             return this.optional(element) || this.getLength($.trim(value), element) >= param;         },                  // http://docs.jquery.com/Plugins/Validation/Methods/maxlength         maxlength: function(value, element, param) {             return this.optional(element) || this.getLength($.trim(value), element) <= param;         },                  // http://docs.jquery.com/Plugins/Validation/Methods/rangelength         rangelength: function(value, element, param) {             var length = this.getLength($.trim(value), element);             return this.optional(element) || ( length >= param[0] && length <= param[1] );         },                  // http://docs.jquery.com/Plugins/Validation/Methods/min         min: function( value, element, param ) {             return this.optional(element) || value >= param;         },                  // http://docs.jquery.com/Plugins/Validation/Methods/max         max: function( value, element, param ) {             return this.optional(element) || value <= param;         },                  // http://docs.jquery.com/Plugins/Validation/Methods/range         range: function( value, element, param ) {             return this.optional(element) || ( value >= param[0] && value <= param[1] );         },                  // http://docs.jquery.com/Plugins/Validation/Methods/email         email: function(value, element) {             // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/             return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);         },              // http://docs.jquery.com/Plugins/Validation/Methods/url         url: function(value, element) {             // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/             return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);         },         // http://docs.jquery.com/Plugins/Validation/Methods/date         date: function(value, element) {             return this.optional(element) || !/Invalid|NaN/.test(new Date(value));         },              // http://docs.jquery.com/Plugins/Validation/Methods/dateISO         dateISO: function(value, element) {             return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);         },              // http://docs.jquery.com/Plugins/Validation/Methods/number         number: function(value, element) {             return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);         },              // http://docs.jquery.com/Plugins/Validation/Methods/digits         digits: function(value, element) {             return this.optional(element) || /^\d+$/.test(value);         },                  // http://docs.jquery.com/Plugins/Validation/Methods/creditcard         // based on http://en.wikipedia.org/wiki/Luhn         creditcard: function(value, element) {             if ( this.optional(element) )                 return "dependency-mismatch";             // accept only digits and dashes             if (/[^0-9-]+/.test(value))                 return false;             var nCheck = 0,                 nDigit = 0,                 bEven = false;             value = value.replace(/\D/g, "");             for (var n = value.length - 1; n >= 0; n--) {                 var cDigit = value.charAt(n);                 var nDigit = parseInt(cDigit, 10);                 if (bEven) {                     if ((nDigit *= 2) > 9)                         nDigit -= 9;                 }                 nCheck += nDigit;                 bEven = !bEven;             }             return (nCheck % 10) == 0;         },                  // http://docs.jquery.com/Plugins/Validation/Methods/accept         accept: function(value, element, param) {             param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";             return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));         },                  // http://docs.jquery.com/Plugins/Validation/Methods/equalTo         equalTo: function(value, element, param) {             // bind to the blur event of the target in order to revalidate whenever the target field is updated             // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead             var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {                 $(element).valid();             });             return value == target.val();         }              }      }); // deprecated, use $.validator.format instead $.format = $.validator.format; })(jQuery); // ajax mode: abort // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() ;(function($) {     var pendingRequests = {};         // Use a prefilter if available (1.5+)     if ( $.ajaxPrefilter ) {         $.ajaxPrefilter(function(settings, _, xhr) {          var port = settings.port;          if (settings.mode == "abort") {              if ( pendingRequests[port] ) {                  pendingRequests[port].abort();              }                pendingRequests[port] = xhr;          }      });     } else {         // Proxy ajax         var ajax = $.ajax;         $.ajax = function(settings) {             var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,                 port = ( "port" in settings ? settings : $.ajaxSettings ).port;             if (mode == "abort") {                 if ( pendingRequests[port] ) {                     pendingRequests[port].abort();                 }              return (pendingRequests[port] = ajax.apply(this, arguments));          }          return ajax.apply(this, arguments);      }; } })(jQuery); // provides cross-browser focusin and focusout events // IE has native support, in other browsers, use event caputuring (neither bubbles) // provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation // handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target ;(function($) {     // only implement if not provided by jQuery core (since 1.4)     // TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs     if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {         $.each({             focus: 'focusin',             blur: 'focusout'             }, function( original, fix ){             $.event.special[fix] = {                 setup:function() {                     this.addEventListener( original, handler, true );                 },                 teardown:function() {                     this.removeEventListener( original, handler, true );                 },                 handler: function(e) {                     arguments[0] = $.event.fix(e);                     arguments[0].type = fix;                     return $.event.handle.apply(this, arguments);                 }             };             function handler(e) {                 e = $.event.fix(e);                 e.type = fix;                 return $.event.handle.call(this, e);             }         });     };     $.extend($.fn, {         validateDelegate: function(delegate, type, handler) {             return this.bind(type, function(event) {                 var target = $(event.target);                 if (target.is(delegate)) {                     return handler.apply(target, arguments);                 }             });         }     }); })(jQuery);