PageRenderTime 44ms CodeModel.GetById 12ms app.highlight 27ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Samples/NerdDinner/NerdDinner/Scripts/MicrosoftMvcValidation.debug.js

https://github.com/tyronegroves/mvcturbine
JavaScript | 881 lines | 551 code | 78 blank | 252 comment | 84 complexity | 9960dfbd4af49dfa100dbefa298d3945 MD5 | raw file
  1//!----------------------------------------------------------
  2//! Copyright (C) Microsoft Corporation. All rights reserved.
  3//!----------------------------------------------------------
  4//! MicrosoftMvcValidation.js
  5
  6
  7Type.registerNamespace('Sys.Mvc');
  8
  9////////////////////////////////////////////////////////////////////////////////
 10// Sys.Mvc.Validation
 11
 12Sys.Mvc.$create_Validation = function Sys_Mvc_Validation() { return {}; }
 13
 14
 15////////////////////////////////////////////////////////////////////////////////
 16// Sys.Mvc.JsonValidationField
 17
 18Sys.Mvc.$create_JsonValidationField = function Sys_Mvc_JsonValidationField() { return {}; }
 19
 20
 21////////////////////////////////////////////////////////////////////////////////
 22// Sys.Mvc.JsonValidationOptions
 23
 24Sys.Mvc.$create_JsonValidationOptions = function Sys_Mvc_JsonValidationOptions() { return {}; }
 25
 26
 27////////////////////////////////////////////////////////////////////////////////
 28// Sys.Mvc.JsonValidationRule
 29
 30Sys.Mvc.$create_JsonValidationRule = function Sys_Mvc_JsonValidationRule() { return {}; }
 31
 32
 33////////////////////////////////////////////////////////////////////////////////
 34// Sys.Mvc.ValidationContext
 35
 36Sys.Mvc.$create_ValidationContext = function Sys_Mvc_ValidationContext() { return {}; }
 37
 38
 39////////////////////////////////////////////////////////////////////////////////
 40// Sys.Mvc.NumberValidator
 41
 42Sys.Mvc.NumberValidator = function Sys_Mvc_NumberValidator() {
 43}
 44Sys.Mvc.NumberValidator.create = function Sys_Mvc_NumberValidator$create(rule) {
 45    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
 46    /// </param>
 47    /// <returns type="Sys.Mvc.Validator"></returns>
 48    return Function.createDelegate(new Sys.Mvc.NumberValidator(), new Sys.Mvc.NumberValidator().validate);
 49}
 50Sys.Mvc.NumberValidator.prototype = {
 51    
 52    validate: function Sys_Mvc_NumberValidator$validate(value, context) {
 53        /// <param name="value" type="String">
 54        /// </param>
 55        /// <param name="context" type="Sys.Mvc.ValidationContext">
 56        /// </param>
 57        /// <returns type="Object"></returns>
 58        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
 59            return true;
 60        }
 61        var n = Number.parseLocale(value);
 62        return (!isNaN(n));
 63    }
 64}
 65
 66
 67////////////////////////////////////////////////////////////////////////////////
 68// Sys.Mvc.FormContext
 69
 70Sys.Mvc.FormContext = function Sys_Mvc_FormContext(formElement, validationSummaryElement) {
 71    /// <param name="formElement" type="Object" domElement="true">
 72    /// </param>
 73    /// <param name="validationSummaryElement" type="Object" domElement="true">
 74    /// </param>
 75    /// <field name="_validationSummaryErrorCss" type="String" static="true">
 76    /// </field>
 77    /// <field name="_validationSummaryValidCss" type="String" static="true">
 78    /// </field>
 79    /// <field name="_formValidationTag" type="String" static="true">
 80    /// </field>
 81    /// <field name="_onClickHandler" type="Sys.UI.DomEventHandler">
 82    /// </field>
 83    /// <field name="_onSubmitHandler" type="Sys.UI.DomEventHandler">
 84    /// </field>
 85    /// <field name="_errors" type="Array">
 86    /// </field>
 87    /// <field name="_submitButtonClicked" type="Object" domElement="true">
 88    /// </field>
 89    /// <field name="_validationSummaryElement" type="Object" domElement="true">
 90    /// </field>
 91    /// <field name="_validationSummaryULElement" type="Object" domElement="true">
 92    /// </field>
 93    /// <field name="fields" type="Array" elementType="FieldContext">
 94    /// </field>
 95    /// <field name="_formElement" type="Object" domElement="true">
 96    /// </field>
 97    /// <field name="replaceValidationSummary" type="Boolean">
 98    /// </field>
 99    this._errors = [];
100    this.fields = new Array(0);
101    this._formElement = formElement;
102    this._validationSummaryElement = validationSummaryElement;
103    formElement[Sys.Mvc.FormContext._formValidationTag] = this;
104    if (validationSummaryElement) {
105        var ulElements = validationSummaryElement.getElementsByTagName('ul');
106        if (ulElements.length > 0) {
107            this._validationSummaryULElement = ulElements[0];
108        }
109    }
110    this._onClickHandler = Function.createDelegate(this, this._form_OnClick);
111    this._onSubmitHandler = Function.createDelegate(this, this._form_OnSubmit);
112}
113Sys.Mvc.FormContext._Application_Load = function Sys_Mvc_FormContext$_Application_Load() {
114    var allFormOptions = window.mvcClientValidationMetadata;
115    if (allFormOptions) {
116        while (allFormOptions.length > 0) {
117            var thisFormOptions = allFormOptions.pop();
118            Sys.Mvc.FormContext._parseJsonOptions(thisFormOptions);
119        }
120    }
121}
122Sys.Mvc.FormContext._getFormElementsWithName = function Sys_Mvc_FormContext$_getFormElementsWithName(formElement, name) {
123    /// <param name="formElement" type="Object" domElement="true">
124    /// </param>
125    /// <param name="name" type="String">
126    /// </param>
127    /// <returns type="Array" elementType="Object" elementDomElement="true"></returns>
128    var allElementsWithNameInForm = [];
129    var allElementsWithName = document.getElementsByName(name);
130    for (var i = 0; i < allElementsWithName.length; i++) {
131        var thisElement = allElementsWithName[i];
132        if (Sys.Mvc.FormContext._isElementInHierarchy(formElement, thisElement)) {
133            Array.add(allElementsWithNameInForm, thisElement);
134        }
135    }
136    return allElementsWithNameInForm;
137}
138Sys.Mvc.FormContext.getValidationForForm = function Sys_Mvc_FormContext$getValidationForForm(formElement) {
139    /// <param name="formElement" type="Object" domElement="true">
140    /// </param>
141    /// <returns type="Sys.Mvc.FormContext"></returns>
142    return formElement[Sys.Mvc.FormContext._formValidationTag];
143}
144Sys.Mvc.FormContext._isElementInHierarchy = function Sys_Mvc_FormContext$_isElementInHierarchy(parent, child) {
145    /// <param name="parent" type="Object" domElement="true">
146    /// </param>
147    /// <param name="child" type="Object" domElement="true">
148    /// </param>
149    /// <returns type="Boolean"></returns>
150    while (child) {
151        if (parent === child) {
152            return true;
153        }
154        child = child.parentNode;
155    }
156    return false;
157}
158Sys.Mvc.FormContext._parseJsonOptions = function Sys_Mvc_FormContext$_parseJsonOptions(options) {
159    /// <param name="options" type="Sys.Mvc.JsonValidationOptions">
160    /// </param>
161    /// <returns type="Sys.Mvc.FormContext"></returns>
162    var formElement = $get(options.FormId);
163    var validationSummaryElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(options.ValidationSummaryId)) ? $get(options.ValidationSummaryId) : null;
164    var formContext = new Sys.Mvc.FormContext(formElement, validationSummaryElement);
165    formContext.enableDynamicValidation();
166    formContext.replaceValidationSummary = options.ReplaceValidationSummary;
167    for (var i = 0; i < options.Fields.length; i++) {
168        var field = options.Fields[i];
169        var fieldElements = Sys.Mvc.FormContext._getFormElementsWithName(formElement, field.FieldName);
170        var validationMessageElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(field.ValidationMessageId)) ? $get(field.ValidationMessageId) : null;
171        var fieldContext = new Sys.Mvc.FieldContext(formContext);
172        Array.addRange(fieldContext.elements, fieldElements);
173        fieldContext.validationMessageElement = validationMessageElement;
174        fieldContext.replaceValidationMessageContents = field.ReplaceValidationMessageContents;
175        for (var j = 0; j < field.ValidationRules.length; j++) {
176            var rule = field.ValidationRules[j];
177            var validator = Sys.Mvc.ValidatorRegistry.getValidator(rule);
178            if (validator) {
179                var validation = Sys.Mvc.$create_Validation();
180                validation.fieldErrorMessage = rule.ErrorMessage;
181                validation.validator = validator;
182                Array.add(fieldContext.validations, validation);
183            }
184        }
185        fieldContext.enableDynamicValidation();
186        Array.add(formContext.fields, fieldContext);
187    }
188    var registeredValidatorCallbacks = formElement.validationCallbacks;
189    if (!registeredValidatorCallbacks) {
190        registeredValidatorCallbacks = [];
191        formElement.validationCallbacks = registeredValidatorCallbacks;
192    }
193    registeredValidatorCallbacks.push(Function.createDelegate(null, function() {
194        return Sys.Mvc._validationUtil.arrayIsNullOrEmpty(formContext.validate('submit'));
195    }));
196    return formContext;
197}
198Sys.Mvc.FormContext.prototype = {
199    _onClickHandler: null,
200    _onSubmitHandler: null,
201    _submitButtonClicked: null,
202    _validationSummaryElement: null,
203    _validationSummaryULElement: null,
204    _formElement: null,
205    replaceValidationSummary: false,
206    
207    addError: function Sys_Mvc_FormContext$addError(message) {
208        /// <param name="message" type="String">
209        /// </param>
210        this.addErrors([ message ]);
211    },
212    
213    addErrors: function Sys_Mvc_FormContext$addErrors(messages) {
214        /// <param name="messages" type="Array" elementType="String">
215        /// </param>
216        if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) {
217            Array.addRange(this._errors, messages);
218            this._onErrorCountChanged();
219        }
220    },
221    
222    clearErrors: function Sys_Mvc_FormContext$clearErrors() {
223        Array.clear(this._errors);
224        this._onErrorCountChanged();
225    },
226    
227    _displayError: function Sys_Mvc_FormContext$_displayError() {
228        if (this._validationSummaryElement) {
229            if (this._validationSummaryULElement) {
230                Sys.Mvc._validationUtil.removeAllChildren(this._validationSummaryULElement);
231                for (var i = 0; i < this._errors.length; i++) {
232                    var liElement = document.createElement('li');
233                    Sys.Mvc._validationUtil.setInnerText(liElement, this._errors[i]);
234                    this._validationSummaryULElement.appendChild(liElement);
235                }
236            }
237            Sys.UI.DomElement.removeCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss);
238            Sys.UI.DomElement.addCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss);
239        }
240    },
241    
242    _displaySuccess: function Sys_Mvc_FormContext$_displaySuccess() {
243        var validationSummaryElement = this._validationSummaryElement;
244        if (validationSummaryElement) {
245            var validationSummaryULElement = this._validationSummaryULElement;
246            if (validationSummaryULElement) {
247                validationSummaryULElement.innerHTML = '';
248            }
249            Sys.UI.DomElement.removeCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss);
250            Sys.UI.DomElement.addCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss);
251        }
252    },
253    
254    enableDynamicValidation: function Sys_Mvc_FormContext$enableDynamicValidation() {
255        Sys.UI.DomEvent.addHandler(this._formElement, 'click', this._onClickHandler);
256        Sys.UI.DomEvent.addHandler(this._formElement, 'submit', this._onSubmitHandler);
257    },
258    
259    _findSubmitButton: function Sys_Mvc_FormContext$_findSubmitButton(element) {
260        /// <param name="element" type="Object" domElement="true">
261        /// </param>
262        /// <returns type="Object" domElement="true"></returns>
263        if (element.disabled) {
264            return null;
265        }
266        var tagName = element.tagName.toUpperCase();
267        var inputElement = element;
268        if (tagName === 'INPUT') {
269            var type = inputElement.type;
270            if (type === 'submit' || type === 'image') {
271                return inputElement;
272            }
273        }
274        else if ((tagName === 'BUTTON') && (inputElement.type === 'submit')) {
275            return inputElement;
276        }
277        return null;
278    },
279    
280    _form_OnClick: function Sys_Mvc_FormContext$_form_OnClick(e) {
281        /// <param name="e" type="Sys.UI.DomEvent">
282        /// </param>
283        this._submitButtonClicked = this._findSubmitButton(e.target);
284    },
285    
286    _form_OnSubmit: function Sys_Mvc_FormContext$_form_OnSubmit(e) {
287        /// <param name="e" type="Sys.UI.DomEvent">
288        /// </param>
289        var form = e.target;
290        var submitButton = this._submitButtonClicked;
291        if (submitButton && submitButton.disableValidation) {
292            return;
293        }
294        var errorMessages = this.validate('submit');
295        if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(errorMessages)) {
296            e.preventDefault();
297        }
298    },
299    
300    _onErrorCountChanged: function Sys_Mvc_FormContext$_onErrorCountChanged() {
301        if (!this._errors.length) {
302            this._displaySuccess();
303        }
304        else {
305            this._displayError();
306        }
307    },
308    
309    validate: function Sys_Mvc_FormContext$validate(eventName) {
310        /// <param name="eventName" type="String">
311        /// </param>
312        /// <returns type="Array" elementType="String"></returns>
313        var fields = this.fields;
314        var errors = [];
315        for (var i = 0; i < fields.length; i++) {
316            var field = fields[i];
317            var thisErrors = field.validate(eventName);
318            if (thisErrors) {
319                Array.addRange(errors, thisErrors);
320            }
321        }
322        if (this.replaceValidationSummary) {
323            this.clearErrors();
324            this.addErrors(errors);
325        }
326        return errors;
327    }
328}
329
330
331////////////////////////////////////////////////////////////////////////////////
332// Sys.Mvc.FieldContext
333
334Sys.Mvc.FieldContext = function Sys_Mvc_FieldContext(formContext) {
335    /// <param name="formContext" type="Sys.Mvc.FormContext">
336    /// </param>
337    /// <field name="_hasTextChangedTag" type="String" static="true">
338    /// </field>
339    /// <field name="_hasValidationFiredTag" type="String" static="true">
340    /// </field>
341    /// <field name="_inputElementErrorCss" type="String" static="true">
342    /// </field>
343    /// <field name="_inputElementValidCss" type="String" static="true">
344    /// </field>
345    /// <field name="_validationMessageErrorCss" type="String" static="true">
346    /// </field>
347    /// <field name="_validationMessageValidCss" type="String" static="true">
348    /// </field>
349    /// <field name="_onBlurHandler" type="Sys.UI.DomEventHandler">
350    /// </field>
351    /// <field name="_onChangeHandler" type="Sys.UI.DomEventHandler">
352    /// </field>
353    /// <field name="_onInputHandler" type="Sys.UI.DomEventHandler">
354    /// </field>
355    /// <field name="_onPropertyChangeHandler" type="Sys.UI.DomEventHandler">
356    /// </field>
357    /// <field name="_errors" type="Array">
358    /// </field>
359    /// <field name="defaultErrorMessage" type="String">
360    /// </field>
361    /// <field name="elements" type="Array" elementType="Object" elementDomElement="true">
362    /// </field>
363    /// <field name="formContext" type="Sys.Mvc.FormContext">
364    /// </field>
365    /// <field name="replaceValidationMessageContents" type="Boolean">
366    /// </field>
367    /// <field name="validationMessageElement" type="Object" domElement="true">
368    /// </field>
369    /// <field name="validations" type="Array" elementType="Validation">
370    /// </field>
371    this._errors = [];
372    this.elements = new Array(0);
373    this.validations = new Array(0);
374    this.formContext = formContext;
375    this._onBlurHandler = Function.createDelegate(this, this._element_OnBlur);
376    this._onChangeHandler = Function.createDelegate(this, this._element_OnChange);
377    this._onInputHandler = Function.createDelegate(this, this._element_OnInput);
378    this._onPropertyChangeHandler = Function.createDelegate(this, this._element_OnPropertyChange);
379}
380Sys.Mvc.FieldContext.prototype = {
381    _onBlurHandler: null,
382    _onChangeHandler: null,
383    _onInputHandler: null,
384    _onPropertyChangeHandler: null,
385    defaultErrorMessage: null,
386    formContext: null,
387    replaceValidationMessageContents: false,
388    validationMessageElement: null,
389    
390    addError: function Sys_Mvc_FieldContext$addError(message) {
391        /// <param name="message" type="String">
392        /// </param>
393        this.addErrors([ message ]);
394    },
395    
396    addErrors: function Sys_Mvc_FieldContext$addErrors(messages) {
397        /// <param name="messages" type="Array" elementType="String">
398        /// </param>
399        if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) {
400            Array.addRange(this._errors, messages);
401            this._onErrorCountChanged();
402        }
403    },
404    
405    clearErrors: function Sys_Mvc_FieldContext$clearErrors() {
406        Array.clear(this._errors);
407        this._onErrorCountChanged();
408    },
409    
410    _displayError: function Sys_Mvc_FieldContext$_displayError() {
411        var validationMessageElement = this.validationMessageElement;
412        if (validationMessageElement) {
413            if (this.replaceValidationMessageContents) {
414                Sys.Mvc._validationUtil.setInnerText(validationMessageElement, this._errors[0]);
415            }
416            Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss);
417            Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss);
418        }
419        var elements = this.elements;
420        for (var i = 0; i < elements.length; i++) {
421            var element = elements[i];
422            Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss);
423            Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss);
424        }
425    },
426    
427    _displaySuccess: function Sys_Mvc_FieldContext$_displaySuccess() {
428        var validationMessageElement = this.validationMessageElement;
429        if (validationMessageElement) {
430            if (this.replaceValidationMessageContents) {
431                Sys.Mvc._validationUtil.setInnerText(validationMessageElement, '');
432            }
433            Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss);
434            Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss);
435        }
436        var elements = this.elements;
437        for (var i = 0; i < elements.length; i++) {
438            var element = elements[i];
439            Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss);
440            Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss);
441        }
442    },
443    
444    _element_OnBlur: function Sys_Mvc_FieldContext$_element_OnBlur(e) {
445        /// <param name="e" type="Sys.UI.DomEvent">
446        /// </param>
447        if (e.target[Sys.Mvc.FieldContext._hasTextChangedTag] || e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {
448            this.validate('blur');
449        }
450    },
451    
452    _element_OnChange: function Sys_Mvc_FieldContext$_element_OnChange(e) {
453        /// <param name="e" type="Sys.UI.DomEvent">
454        /// </param>
455        e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;
456    },
457    
458    _element_OnInput: function Sys_Mvc_FieldContext$_element_OnInput(e) {
459        /// <param name="e" type="Sys.UI.DomEvent">
460        /// </param>
461        e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;
462        if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {
463            this.validate('input');
464        }
465    },
466    
467    _element_OnPropertyChange: function Sys_Mvc_FieldContext$_element_OnPropertyChange(e) {
468        /// <param name="e" type="Sys.UI.DomEvent">
469        /// </param>
470        if (e.rawEvent.propertyName === 'value') {
471            e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;
472            if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {
473                this.validate('input');
474            }
475        }
476    },
477    
478    enableDynamicValidation: function Sys_Mvc_FieldContext$enableDynamicValidation() {
479        var elements = this.elements;
480        for (var i = 0; i < elements.length; i++) {
481            var element = elements[i];
482            if (Sys.Mvc._validationUtil.elementSupportsEvent(element, 'onpropertychange')) {
483                var compatMode = document.documentMode;
484                if (compatMode && compatMode >= 8) {
485                    Sys.UI.DomEvent.addHandler(element, 'propertychange', this._onPropertyChangeHandler);
486                }
487            }
488            else {
489                Sys.UI.DomEvent.addHandler(element, 'input', this._onInputHandler);
490            }
491            Sys.UI.DomEvent.addHandler(element, 'change', this._onChangeHandler);
492            Sys.UI.DomEvent.addHandler(element, 'blur', this._onBlurHandler);
493        }
494    },
495    
496    _getErrorString: function Sys_Mvc_FieldContext$_getErrorString(validatorReturnValue, fieldErrorMessage) {
497        /// <param name="validatorReturnValue" type="Object">
498        /// </param>
499        /// <param name="fieldErrorMessage" type="String">
500        /// </param>
501        /// <returns type="String"></returns>
502        var fallbackErrorMessage = fieldErrorMessage || this.defaultErrorMessage;
503        if (Boolean.isInstanceOfType(validatorReturnValue)) {
504            return (validatorReturnValue) ? null : fallbackErrorMessage;
505        }
506        if (String.isInstanceOfType(validatorReturnValue)) {
507            return ((validatorReturnValue).length) ? validatorReturnValue : fallbackErrorMessage;
508        }
509        return null;
510    },
511    
512    _getStringValue: function Sys_Mvc_FieldContext$_getStringValue() {
513        /// <returns type="String"></returns>
514        var elements = this.elements;
515        return (elements.length > 0) ? elements[0].value : null;
516    },
517    
518    _markValidationFired: function Sys_Mvc_FieldContext$_markValidationFired() {
519        var elements = this.elements;
520        for (var i = 0; i < elements.length; i++) {
521            var element = elements[i];
522            element[Sys.Mvc.FieldContext._hasValidationFiredTag] = true;
523        }
524    },
525    
526    _onErrorCountChanged: function Sys_Mvc_FieldContext$_onErrorCountChanged() {
527        if (!this._errors.length) {
528            this._displaySuccess();
529        }
530        else {
531            this._displayError();
532        }
533    },
534    
535    validate: function Sys_Mvc_FieldContext$validate(eventName) {
536        /// <param name="eventName" type="String">
537        /// </param>
538        /// <returns type="Array" elementType="String"></returns>
539        var validations = this.validations;
540        var errors = [];
541        var value = this._getStringValue();
542        for (var i = 0; i < validations.length; i++) {
543            var validation = validations[i];
544            var context = Sys.Mvc.$create_ValidationContext();
545            context.eventName = eventName;
546            context.fieldContext = this;
547            context.validation = validation;
548            var retVal = validation.validator(value, context);
549            var errorMessage = this._getErrorString(retVal, validation.fieldErrorMessage);
550            if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(errorMessage)) {
551                Array.add(errors, errorMessage);
552            }
553        }
554        this._markValidationFired();
555        this.clearErrors();
556        this.addErrors(errors);
557        return errors;
558    }
559}
560
561
562////////////////////////////////////////////////////////////////////////////////
563// Sys.Mvc.RangeValidator
564
565Sys.Mvc.RangeValidator = function Sys_Mvc_RangeValidator(minimum, maximum) {
566    /// <param name="minimum" type="Number">
567    /// </param>
568    /// <param name="maximum" type="Number">
569    /// </param>
570    /// <field name="_minimum" type="Number">
571    /// </field>
572    /// <field name="_maximum" type="Number">
573    /// </field>
574    this._minimum = minimum;
575    this._maximum = maximum;
576}
577Sys.Mvc.RangeValidator.create = function Sys_Mvc_RangeValidator$create(rule) {
578    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
579    /// </param>
580    /// <returns type="Sys.Mvc.Validator"></returns>
581    var min = rule.ValidationParameters['minimum'];
582    var max = rule.ValidationParameters['maximum'];
583    return Function.createDelegate(new Sys.Mvc.RangeValidator(min, max), new Sys.Mvc.RangeValidator(min, max).validate);
584}
585Sys.Mvc.RangeValidator.prototype = {
586    _minimum: null,
587    _maximum: null,
588    
589    validate: function Sys_Mvc_RangeValidator$validate(value, context) {
590        /// <param name="value" type="String">
591        /// </param>
592        /// <param name="context" type="Sys.Mvc.ValidationContext">
593        /// </param>
594        /// <returns type="Object"></returns>
595        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
596            return true;
597        }
598        var n = Number.parseLocale(value);
599        return (!isNaN(n) && this._minimum <= n && n <= this._maximum);
600    }
601}
602
603
604////////////////////////////////////////////////////////////////////////////////
605// Sys.Mvc.RegularExpressionValidator
606
607Sys.Mvc.RegularExpressionValidator = function Sys_Mvc_RegularExpressionValidator(pattern) {
608    /// <param name="pattern" type="String">
609    /// </param>
610    /// <field name="_pattern" type="String">
611    /// </field>
612    this._pattern = pattern;
613}
614Sys.Mvc.RegularExpressionValidator.create = function Sys_Mvc_RegularExpressionValidator$create(rule) {
615    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
616    /// </param>
617    /// <returns type="Sys.Mvc.Validator"></returns>
618    var pattern = rule.ValidationParameters['pattern'];
619    return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator(pattern), new Sys.Mvc.RegularExpressionValidator(pattern).validate);
620}
621Sys.Mvc.RegularExpressionValidator.prototype = {
622    _pattern: null,
623    
624    validate: function Sys_Mvc_RegularExpressionValidator$validate(value, context) {
625        /// <param name="value" type="String">
626        /// </param>
627        /// <param name="context" type="Sys.Mvc.ValidationContext">
628        /// </param>
629        /// <returns type="Object"></returns>
630        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
631            return true;
632        }
633        var regExp = new RegExp(this._pattern);
634        var matches = regExp.exec(value);
635        return (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(matches) && matches[0].length === value.length);
636    }
637}
638
639
640////////////////////////////////////////////////////////////////////////////////
641// Sys.Mvc.RequiredValidator
642
643Sys.Mvc.RequiredValidator = function Sys_Mvc_RequiredValidator() {
644}
645Sys.Mvc.RequiredValidator.create = function Sys_Mvc_RequiredValidator$create(rule) {
646    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
647    /// </param>
648    /// <returns type="Sys.Mvc.Validator"></returns>
649    return Function.createDelegate(new Sys.Mvc.RequiredValidator(), new Sys.Mvc.RequiredValidator().validate);
650}
651Sys.Mvc.RequiredValidator._isRadioInputElement = function Sys_Mvc_RequiredValidator$_isRadioInputElement(element) {
652    /// <param name="element" type="Object" domElement="true">
653    /// </param>
654    /// <returns type="Boolean"></returns>
655    if (element.tagName.toUpperCase() === 'INPUT') {
656        var inputType = (element.type).toUpperCase();
657        if (inputType === 'RADIO') {
658            return true;
659        }
660    }
661    return false;
662}
663Sys.Mvc.RequiredValidator._isSelectInputElement = function Sys_Mvc_RequiredValidator$_isSelectInputElement(element) {
664    /// <param name="element" type="Object" domElement="true">
665    /// </param>
666    /// <returns type="Boolean"></returns>
667    if (element.tagName.toUpperCase() === 'SELECT') {
668        return true;
669    }
670    return false;
671}
672Sys.Mvc.RequiredValidator._isTextualInputElement = function Sys_Mvc_RequiredValidator$_isTextualInputElement(element) {
673    /// <param name="element" type="Object" domElement="true">
674    /// </param>
675    /// <returns type="Boolean"></returns>
676    if (element.tagName.toUpperCase() === 'INPUT') {
677        var inputType = (element.type).toUpperCase();
678        switch (inputType) {
679            case 'TEXT':
680            case 'PASSWORD':
681            case 'FILE':
682                return true;
683        }
684    }
685    if (element.tagName.toUpperCase() === 'TEXTAREA') {
686        return true;
687    }
688    return false;
689}
690Sys.Mvc.RequiredValidator._validateRadioInput = function Sys_Mvc_RequiredValidator$_validateRadioInput(elements) {
691    /// <param name="elements" type="Array" elementType="Object" elementDomElement="true">
692    /// </param>
693    /// <returns type="Object"></returns>
694    for (var i = 0; i < elements.length; i++) {
695        var element = elements[i];
696        if (element.checked) {
697            return true;
698        }
699    }
700    return false;
701}
702Sys.Mvc.RequiredValidator._validateSelectInput = function Sys_Mvc_RequiredValidator$_validateSelectInput(optionElements) {
703    /// <param name="optionElements" type="DOMElementCollection">
704    /// </param>
705    /// <returns type="Object"></returns>
706    for (var i = 0; i < optionElements.length; i++) {
707        var element = optionElements[i];
708        if (element.selected) {
709            if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)) {
710                return true;
711            }
712        }
713    }
714    return false;
715}
716Sys.Mvc.RequiredValidator._validateTextualInput = function Sys_Mvc_RequiredValidator$_validateTextualInput(element) {
717    /// <param name="element" type="Object" domElement="true">
718    /// </param>
719    /// <returns type="Object"></returns>
720    return (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value));
721}
722Sys.Mvc.RequiredValidator.prototype = {
723    
724    validate: function Sys_Mvc_RequiredValidator$validate(value, context) {
725        /// <param name="value" type="String">
726        /// </param>
727        /// <param name="context" type="Sys.Mvc.ValidationContext">
728        /// </param>
729        /// <returns type="Object"></returns>
730        var elements = context.fieldContext.elements;
731        if (!elements.length) {
732            return true;
733        }
734        var sampleElement = elements[0];
735        if (Sys.Mvc.RequiredValidator._isTextualInputElement(sampleElement)) {
736            return Sys.Mvc.RequiredValidator._validateTextualInput(sampleElement);
737        }
738        if (Sys.Mvc.RequiredValidator._isRadioInputElement(sampleElement)) {
739            return Sys.Mvc.RequiredValidator._validateRadioInput(elements);
740        }
741        if (Sys.Mvc.RequiredValidator._isSelectInputElement(sampleElement)) {
742            return Sys.Mvc.RequiredValidator._validateSelectInput((sampleElement).options);
743        }
744        return true;
745    }
746}
747
748
749////////////////////////////////////////////////////////////////////////////////
750// Sys.Mvc.StringLengthValidator
751
752Sys.Mvc.StringLengthValidator = function Sys_Mvc_StringLengthValidator(minLength, maxLength) {
753    /// <param name="minLength" type="Number" integer="true">
754    /// </param>
755    /// <param name="maxLength" type="Number" integer="true">
756    /// </param>
757    /// <field name="_maxLength" type="Number" integer="true">
758    /// </field>
759    /// <field name="_minLength" type="Number" integer="true">
760    /// </field>
761    this._minLength = minLength;
762    this._maxLength = maxLength;
763}
764Sys.Mvc.StringLengthValidator.create = function Sys_Mvc_StringLengthValidator$create(rule) {
765    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
766    /// </param>
767    /// <returns type="Sys.Mvc.Validator"></returns>
768    var minLength = rule.ValidationParameters['minimumLength'];
769    var maxLength = rule.ValidationParameters['maximumLength'];
770    return Function.createDelegate(new Sys.Mvc.StringLengthValidator(minLength, maxLength), new Sys.Mvc.StringLengthValidator(minLength, maxLength).validate);
771}
772Sys.Mvc.StringLengthValidator.prototype = {
773    _maxLength: 0,
774    _minLength: 0,
775    
776    validate: function Sys_Mvc_StringLengthValidator$validate(value, context) {
777        /// <param name="value" type="String">
778        /// </param>
779        /// <param name="context" type="Sys.Mvc.ValidationContext">
780        /// </param>
781        /// <returns type="Object"></returns>
782        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
783            return true;
784        }
785        return (this._minLength <= value.length && value.length <= this._maxLength);
786    }
787}
788
789
790////////////////////////////////////////////////////////////////////////////////
791// Sys.Mvc._validationUtil
792
793Sys.Mvc._validationUtil = function Sys_Mvc__validationUtil() {
794}
795Sys.Mvc._validationUtil.arrayIsNullOrEmpty = function Sys_Mvc__validationUtil$arrayIsNullOrEmpty(array) {
796    /// <param name="array" type="Array" elementType="Object">
797    /// </param>
798    /// <returns type="Boolean"></returns>
799    return (!array || !array.length);
800}
801Sys.Mvc._validationUtil.stringIsNullOrEmpty = function Sys_Mvc__validationUtil$stringIsNullOrEmpty(value) {
802    /// <param name="value" type="String">
803    /// </param>
804    /// <returns type="Boolean"></returns>
805    return (!value || !value.length);
806}
807Sys.Mvc._validationUtil.elementSupportsEvent = function Sys_Mvc__validationUtil$elementSupportsEvent(element, eventAttributeName) {
808    /// <param name="element" type="Object" domElement="true">
809    /// </param>
810    /// <param name="eventAttributeName" type="String">
811    /// </param>
812    /// <returns type="Boolean"></returns>
813    return (eventAttributeName in element);
814}
815Sys.Mvc._validationUtil.removeAllChildren = function Sys_Mvc__validationUtil$removeAllChildren(element) {
816    /// <param name="element" type="Object" domElement="true">
817    /// </param>
818    while (element.firstChild) {
819        element.removeChild(element.firstChild);
820    }
821}
822Sys.Mvc._validationUtil.setInnerText = function Sys_Mvc__validationUtil$setInnerText(element, innerText) {
823    /// <param name="element" type="Object" domElement="true">
824    /// </param>
825    /// <param name="innerText" type="String">
826    /// </param>
827    var textNode = document.createTextNode(innerText);
828    Sys.Mvc._validationUtil.removeAllChildren(element);
829    element.appendChild(textNode);
830}
831
832
833////////////////////////////////////////////////////////////////////////////////
834// Sys.Mvc.ValidatorRegistry
835
836Sys.Mvc.ValidatorRegistry = function Sys_Mvc_ValidatorRegistry() {
837    /// <field name="validators" type="Object" static="true">
838    /// </field>
839}
840Sys.Mvc.ValidatorRegistry.getValidator = function Sys_Mvc_ValidatorRegistry$getValidator(rule) {
841    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
842    /// </param>
843    /// <returns type="Sys.Mvc.Validator"></returns>
844    var creator = Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];
845    return (creator) ? creator(rule) : null;
846}
847Sys.Mvc.ValidatorRegistry._getDefaultValidators = function Sys_Mvc_ValidatorRegistry$_getDefaultValidators() {
848    /// <returns type="Object"></returns>
849    return { required: Function.createDelegate(null, Sys.Mvc.RequiredValidator.create), stringLength: Function.createDelegate(null, Sys.Mvc.StringLengthValidator.create), regularExpression: Function.createDelegate(null, Sys.Mvc.RegularExpressionValidator.create), range: Function.createDelegate(null, Sys.Mvc.RangeValidator.create), number: Function.createDelegate(null, Sys.Mvc.NumberValidator.create) };
850}
851
852
853Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');
854Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');
855Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');
856Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');
857Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');
858Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');
859Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');
860Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil');
861Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');
862Sys.Mvc.FormContext._validationSummaryErrorCss = 'validation-summary-errors';
863Sys.Mvc.FormContext._validationSummaryValidCss = 'validation-summary-valid';
864Sys.Mvc.FormContext._formValidationTag = '__MVC_FormValidation';
865Sys.Mvc.FieldContext._hasTextChangedTag = '__MVC_HasTextChanged';
866Sys.Mvc.FieldContext._hasValidationFiredTag = '__MVC_HasValidationFired';
867Sys.Mvc.FieldContext._inputElementErrorCss = 'input-validation-error';
868Sys.Mvc.FieldContext._inputElementValidCss = 'input-validation-valid';
869Sys.Mvc.FieldContext._validationMessageErrorCss = 'field-validation-error';
870Sys.Mvc.FieldContext._validationMessageValidCss = 'field-validation-valid';
871Sys.Mvc.ValidatorRegistry.validators = Sys.Mvc.ValidatorRegistry._getDefaultValidators();
872
873// ---- Do not remove this footer ----
874// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)
875// -----------------------------------
876
877// register validation
878Sys.Application.add_load(function() {
879  Sys.Application.remove_load(arguments.callee);
880  Sys.Mvc.FormContext._Application_Load();
881});