
Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_Validation=function Sys_Mvc_Validation(){return{};}
Sys.Mvc.$create_JsonValidationField=function Sys_Mvc_JsonValidationField(){return{};}
Sys.Mvc.$create_JsonValidationOptions=function Sys_Mvc_JsonValidationOptions(){return{};}
Sys.Mvc.$create_JsonValidationRule=function Sys_Mvc_JsonValidationRule(){return{};}
Sys.Mvc.$create_ValidationContext=function Sys_Mvc_ValidationContext(){return{};}
Sys.Mvc.NumberValidator=function Sys_Mvc_NumberValidator(){}
Sys.Mvc.NumberValidator.create=function Sys_Mvc_NumberValidator$create(rule){return Function.createDelegate(new Sys.Mvc.NumberValidator(),new Sys.Mvc.NumberValidator().validate);}
Sys.Mvc.NumberValidator.prototype={validate:function Sys_Mvc_NumberValidator$validate(value,context){if(Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)){return true;}
var n=Number.parseLocale(value);return(!isNaN(n));}}
Sys.Mvc.FormContext=function Sys_Mvc_FormContext(formElement,validationSummaryElement){this._errors=[];this.fields=new Array(0);this._formElement=formElement;this._validationSummaryElement=validationSummaryElement;formElement[Sys.Mvc.FormContext._formValidationTag]=this;if(validationSummaryElement){var ulElements=validationSummaryElement.getElementsByTagName('ul');if(ulElements.length>0){this._validationSummaryULElement=ulElements[0];}}
this._onClickHandler=Function.createDelegate(this,this._form_OnClick);this._onSubmitHandler=Function.createDelegate(this,this._form_OnSubmit);}
Sys.Mvc.FormContext._Application_Load=function Sys_Mvc_FormContext$_Application_Load(){var allFormOptions=window.mvcClientValidationMetadata;if(allFormOptions){while(allFormOptions.length>0){var thisFormOptions=allFormOptions.pop();Sys.Mvc.FormContext._parseJsonOptions(thisFormOptions);}}}
Sys.Mvc.FormContext._getFormElementsWithName=function Sys_Mvc_FormContext$_getFormElementsWithName(formElement,name){var allElementsWithNameInForm=[];var allElementsWithName=document.getElementsByName(name);for(var i=0;i<allElementsWithName.length;i++){var thisElement=allElementsWithName[i];if(Sys.Mvc.FormContext._isElementInHierarchy(formElement,thisElement)){Array.add(allElementsWithNameInForm,thisElement);}}
return allElementsWithNameInForm;}
Sys.Mvc.FormContext.getValidationForForm=function Sys_Mvc_FormContext$getValidationForForm(formElement){return formElement[Sys.Mvc.FormContext._formValidationTag];}
Sys.Mvc.FormContext._isElementInHierarchy=function Sys_Mvc_FormContext$_isElementInHierarchy(parent,child){while(child){if(parent===child){return true;}
child=child.parentNode;}
return false;}
Sys.Mvc.FormContext._parseJsonOptions=function Sys_Mvc_FormContext$_parseJsonOptions(options){var formElement=$get(options.FormId);var validationSummaryElement=(!Sys.Mvc._validationUtil.stringIsNullOrEmpty(options.ValidationSummaryId))?$get(options.ValidationSummaryId):null;var formContext=new Sys.Mvc.FormContext(formElement,validationSummaryElement);formContext.enableDynamicValidation();formContext.replaceValidationSummary=options.ReplaceValidationSummary;for(var i=0;i<options.Fields.length;i++){var field=options.Fields[i];var fieldElements=Sys.Mvc.FormContext._getFormElementsWithName(formElement,field.FieldName);var validationMessageElement=(!Sys.Mvc._validationUtil.stringIsNullOrEmpty(field.ValidationMessageId))?$get(field.ValidationMessageId):null;var fieldContext=new Sys.Mvc.FieldContext(formContext);Array.addRange(fieldContext.elements,fieldElements);fieldContext.validationMessageElement=validationMessageElement;fieldContext.replaceValidationMessageContents=field.ReplaceValidationMessageContents;for(var j=0;j<field.ValidationRules.length;j++){var rule=field.ValidationRules[j];var validator=Sys.Mvc.ValidatorRegistry.getValidator(rule);if(validator){var validation=Sys.Mvc.$create_Validation();validation.fieldErrorMessage=rule.ErrorMessage;validation.validator=validator;Array.add(fieldContext.validations,validation);}}
fieldContext.enableDynamicValidation();Array.add(formContext.fields,fieldContext);}
var registeredValidatorCallbacks=formElement.validationCallbacks;if(!registeredValidatorCallbacks){registeredValidatorCallbacks=[];formElement.validationCallbacks=registeredValidatorCallbacks;}
registeredValidatorCallbacks.push(Function.createDelegate(null,function(){return Sys.Mvc._validationUtil.arrayIsNullOrEmpty(formContext.validate('submit'));}));return formContext;}
Sys.Mvc.FormContext.prototype={_onClickHandler:null,_onSubmitHandler:null,_submitButtonClicked:null,_validationSummaryElement:null,_validationSummaryULElement:null,_formElement:null,replaceValidationSummary:false,addError:function Sys_Mvc_FormContext$addError(message){this.addErrors([message]);},addErrors:function Sys_Mvc_FormContext$addErrors(messages){if(!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)){Array.addRange(this._errors,messages);this._onErrorCountChanged();}},clearErrors:function Sys_Mvc_FormContext$clearErrors(){Array.clear(this._errors);this._onErrorCountChanged();},_displayError:function Sys_Mvc_FormContext$_displayError(){if(this._validationSummaryElement){if(this._validationSummaryULElement){Sys.Mvc._validationUtil.removeAllChildren(this._validationSummaryULElement);for(var i=0;i<this._errors.length;i++){var liElement=document.createElement('li');Sys.Mvc._validationUtil.setInnerText(liElement,this._errors[i]);this._validationSummaryULElement.appendChild(liElement);}}
Sys.UI.DomElement.removeCssClass(this._validationSummaryElement,Sys.Mvc.FormContext._validationSummaryValidCss);Sys.UI.DomElement.addCssClass(this._validationSummaryElement,Sys.Mvc.FormContext._validationSummaryErrorCss);}},_displaySuccess:function Sys_Mvc_FormContext$_displaySuccess(){var validationSummaryElement=this._validationSummaryElement;if(validationSummaryElement){var validationSummaryULElement=this._validationSummaryULElement;if(validationSummaryULElement){validationSummaryULElement.innerHTML='';}
Sys.UI.DomElement.removeCssClass(validationSummaryElement,Sys.Mvc.FormContext._validationSummaryErrorCss);Sys.UI.DomElement.addCssClass(validationSummaryElement,Sys.Mvc.FormContext._validationSummaryValidCss);}},enableDynamicValidation:function Sys_Mvc_FormContext$enableDynamicValidation(){Sys.UI.DomEvent.addHandler(this._formElement,'click',this._onClickHandler);Sys.UI.DomEvent.addHandler(this._formElement,'submit',this._onSubmitHandler);},_findSubmitButton:function Sys_Mvc_FormContext$_findSubmitButton(element){if(element.disabled){return null;}
var tagName=element.tagName.toUpperCase();var inputElement=element;if(tagName==='INPUT'){var type=inputElement.type;if(type==='submit'||type==='image'){return inputElement;}}
else if((tagName==='BUTTON')&&(inputElement.type==='submit')){return inputElement;}
return null;},_form_OnClick:function Sys_Mvc_FormContext$_form_OnClick(e){this._submitButtonClicked=this._findSubmitButton(e.target);},_form_OnSubmit:function Sys_Mvc_FormContext$_form_OnSubmit(e){var form=e.target;var submitButton=this._submitButtonClicked;if(submitButton&&submitButton.disableValidation){return;}
var errorMessages=this.validate('submit');if(!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(errorMessages)){e.preventDefault();}},_onErrorCountChanged:function Sys_Mvc_FormContext$_onErrorCountChanged(){if(!this._errors.length){this._displaySuccess();}
else{this._displayError();}},validate:function Sys_Mvc_FormContext$validate(eventName){var fields=this.fields;var errors=[];for(var i=0;i<fields.length;i++){var field=fields[i];var thisErrors=field.validate(eventName);if(thisErrors){Array.addRange(errors,thisErrors);}}
if(this.replaceValidationSummary){this.clearErrors();this.addErrors(errors);}
return errors;}}
Sys.Mvc.FieldContext=function Sys_Mvc_FieldContext(formContext){this._errors=[];this.elements=new Array(0);this.validations=new Array(0);this.formContext=formContext;this._onBlurHandler=Function.createDelegate(this,this._element_OnBlur);this._onChangeHandler=Function.createDelegate(this,this._element_OnChange);this._onInputHandler=Function.createDelegate(this,this._element_OnInput);this._onPropertyChangeHandler=Function.createDelegate(this,this._element_OnPropertyChange);}
Sys.Mvc.FieldContext.prototype={_onBlurHandler:null,_onChangeHandler:null,_onInputHandler:null,_onPropertyChangeHandler:null,defaultErrorMessage:null,formContext:null,replaceValidationMessageContents:false,validationMessageElement:null,addError:function Sys_Mvc_FieldContext$addError(message){this.addErrors([message]);},addErrors:function Sys_Mvc_FieldContext$addErrors(messages){if(!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)){Array.addRange(this._errors,messages);this._onErrorCountChanged();}},clearErrors:function Sys_Mvc_FieldContext$clearErrors(){Array.clear(this._errors);this._onErrorCountChanged();},_displayError:function Sys_Mvc_FieldContext$_displayError(){var validationMessageElement=this.validationMessageElement;if(validationMessageElement){if(this.replaceValidationMessageContents){Sys.Mvc._validationUtil.setInnerText(validationMessageElement,this._errors[0]);}
Sys.UI.DomElement.removeCssClass(validationMessageElement,Sys.Mvc.FieldContext._validationMessageValidCss);Sys.UI.DomElement.addCssClass(validationMessageElement,Sys.Mvc.FieldContext._validationMessageErrorCss);}
var elements=this.elements;for(var i=0;i<elements.length;i++){var element=elements[i];Sys.UI.DomElement.removeCssClass(element,Sys.Mvc.FieldContext._inputElementValidCss);Sys.UI.DomElement.addCssClass(element,Sys.Mvc.FieldContext._inputElementErrorCss);}},_displaySuccess:function Sys_Mvc_FieldContext$_displaySuccess(){var validationMessageElement=this.validationMessageElement;if(validationMessageElement){if(this.replaceValidationMessageContents){Sys.Mvc._validationUtil.setInnerText(validationMessageElement,'');}
Sys.UI.DomElement.removeCssClass(validationMessageElement,Sys.Mvc.FieldContext._validationMessageErrorCss);Sys.UI.DomElement.addCssClass(validationMessageElement,Sys.Mvc.FieldContext._validationMessageValidCss);}
var elements=this.elements;for(var i=0;i<elements.length;i++){var element=elements[i];Sys.UI.DomElement.removeCssClass(element,Sys.Mvc.FieldContext._inputElementErrorCss);Sys.UI.DomElement.addCssClass(element,Sys.Mvc.FieldContext._inputElementValidCss);}},_element_OnBlur:function Sys_Mvc_FieldContext$_element_OnBlur(e){if(e.target[Sys.Mvc.FieldContext._hasTextChangedTag]||e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]){this.validate('blur');}},_element_OnChange:function Sys_Mvc_FieldContext$_element_OnChange(e){e.target[Sys.Mvc.FieldContext._hasTextChangedTag]=true;},_element_OnInput:function Sys_Mvc_FieldContext$_element_OnInput(e){e.target[Sys.Mvc.FieldContext._hasTextChangedTag]=true;if(e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]){this.validate('input');}},_element_OnPropertyChange:function Sys_Mvc_FieldContext$_element_OnPropertyChange(e){if(e.rawEvent.propertyName==='value'){e.target[Sys.Mvc.FieldContext._hasTextChangedTag]=true;if(e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]){this.validate('input');}}},enableDynamicValidation:function Sys_Mvc_FieldContext$enableDynamicValidation(){var elements=this.elements;for(var i=0;i<elements.length;i++){var element=elements[i];if(Sys.Mvc._validationUtil.elementSupportsEvent(element,'onpropertychange')){var compatMode=document.documentMode;if(compatMode&&compatMode>=8){Sys.UI.DomEvent.addHandler(element,'propertychange',this._onPropertyChangeHandler);}}
else{Sys.UI.DomEvent.addHandler(element,'input',this._onInputHandler);}
Sys.UI.DomEvent.addHandler(element,'change',this._onChangeHandler);Sys.UI.DomEvent.addHandler(element,'blur',this._onBlurHandler);}},_getErrorString:function Sys_Mvc_FieldContext$_getErrorString(validatorReturnValue,fieldErrorMessage){var fallbackErrorMessage=fieldErrorMessage||this.defaultErrorMessage;if(Boolean.isInstanceOfType(validatorReturnValue)){return(validatorReturnValue)?null:fallbackErrorMessage;}
if(String.isInstanceOfType(validatorReturnValue)){return((validatorReturnValue).length)?validatorReturnValue:fallbackErrorMessage;}
return null;},_getStringValue:function Sys_Mvc_FieldContext$_getStringValue(){var elements=this.elements;return(elements.length>0)?elements[0].value:null;},_markValidationFired:function Sys_Mvc_FieldContext$_markValidationFired(){var elements=this.elements;for(var i=0;i<elements.length;i++){var element=elements[i];element[Sys.Mvc.FieldContext._hasValidationFiredTag]=true;}},_onErrorCountChanged:function Sys_Mvc_FieldContext$_onErrorCountChanged(){if(!this._errors.length){this._displaySuccess();}
else{this._displayError();}},validate:function Sys_Mvc_FieldContext$validate(eventName){var validations=this.validations;var errors=[];var value=this._getStringValue();for(var i=0;i<validations.length;i++){var validation=validations[i];var context=Sys.Mvc.$create_ValidationContext();context.eventName=eventName;context.fieldContext=this;context.validation=validation;var retVal=validation.validator(value,context);var errorMessage=this._getErrorString(retVal,validation.fieldErrorMessage);var inptEl=$get(context.fieldContext.elements[0].id);if(!Sys.Mvc._validationUtil.stringIsNullOrEmpty(errorMessage)&&(inptEl.className.match("vnotnes")==null)){Array.add(errors,errorMessage);}
else
Sys.UI.DomElement.removeCssClass(inptEl,Sys.Mvc.FieldContext._inputElementErrorCss);}
this._markValidationFired();this.clearErrors();this.addErrors(errors);return errors;}}
Sys.Mvc.RangeValidator=function Sys_Mvc_RangeValidator(minimum,maximum){this._minimum=minimum;this._maximum=maximum;}
Sys.Mvc.RangeValidator.create=function Sys_Mvc_RangeValidator$create(rule){var min=rule.ValidationParameters['minimum'];var max=rule.ValidationParameters['maximum'];return Function.createDelegate(new Sys.Mvc.RangeValidator(min,max),new Sys.Mvc.RangeValidator(min,max).validate);}
Sys.Mvc.RangeValidator.prototype={_minimum:null,_maximum:null,validate:function Sys_Mvc_RangeValidator$validate(value,context){if(Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)){return true;}
var n=Number.parseLocale(value);return(!isNaN(n)&&this._minimum<=n&&n<=this._maximum);}}
Sys.Mvc.RegularExpressionValidator=function Sys_Mvc_RegularExpressionValidator(pattern){this._pattern=pattern;}
Sys.Mvc.RegularExpressionValidator.create=function Sys_Mvc_RegularExpressionValidator$create(rule){var pattern=rule.ValidationParameters['pattern'];return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator(pattern),new Sys.Mvc.RegularExpressionValidator(pattern).validate);}
Sys.Mvc.RegularExpressionValidator.prototype={_pattern:null,validate:function Sys_Mvc_RegularExpressionValidator$validate(value,context){if(Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)){return true;}
var regExp=new RegExp(this._pattern);var matches=regExp.exec(value);return(!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(matches)&&matches[0].length===value.length);}}
Sys.Mvc.RequiredValidator=function Sys_Mvc_RequiredValidator(){}
Sys.Mvc.RequiredValidator.create=function Sys_Mvc_RequiredValidator$create(rule){return Function.createDelegate(new Sys.Mvc.RequiredValidator(),new Sys.Mvc.RequiredValidator().validate);}
Sys.Mvc.RequiredValidator._isRadioInputElement=function Sys_Mvc_RequiredValidator$_isRadioInputElement(element){if(element.tagName.toUpperCase()==='INPUT'){var inputType=(element.type).toUpperCase();if(inputType==='RADIO'){return true;}}
return false;}
Sys.Mvc.RequiredValidator._isSelectInputElement=function Sys_Mvc_RequiredValidator$_isSelectInputElement(element){if(element.tagName.toUpperCase()==='SELECT'){return true;}
return false;}
Sys.Mvc.RequiredValidator._isTextualInputElement=function Sys_Mvc_RequiredValidator$_isTextualInputElement(element){if(element.tagName.toUpperCase()==='INPUT'){var inputType=(element.type).toUpperCase();switch(inputType){case'TEXT':case'PASSWORD':case'FILE':return true;}}
if(element.tagName.toUpperCase()==='TEXTAREA'){return true;}
return false;}
Sys.Mvc.RequiredValidator._validateRadioInput=function Sys_Mvc_RequiredValidator$_validateRadioInput(elements){for(var i=0;i<elements.length;i++){var element=elements[i];if(element.checked){return true;}}
return false;}
Sys.Mvc.RequiredValidator._validateSelectInput=function Sys_Mvc_RequiredValidator$_validateSelectInput(optionElements){for(var i=0;i<optionElements.length;i++){var element=optionElements[i];if(element.selected){if(!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)){return true;}}}
return false;}
Sys.Mvc.RequiredValidator._validateTextualInput=function Sys_Mvc_RequiredValidator$_validateTextualInput(element){return(!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value));}
Sys.Mvc.RequiredValidator.prototype={validate:function Sys_Mvc_RequiredValidator$validate(value,context){var elements=context.fieldContext.elements;if(!elements.length){return true;}
var sampleElement=elements[0];if(Sys.Mvc.RequiredValidator._isTextualInputElement(sampleElement)){return Sys.Mvc.RequiredValidator._validateTextualInput(sampleElement);}
if(Sys.Mvc.RequiredValidator._isRadioInputElement(sampleElement)){return Sys.Mvc.RequiredValidator._validateRadioInput(elements);}
if(Sys.Mvc.RequiredValidator._isSelectInputElement(sampleElement)){return Sys.Mvc.RequiredValidator._validateSelectInput((sampleElement).options);}
return true;}}
Sys.Mvc.StringLengthValidator=function Sys_Mvc_StringLengthValidator(minLength,maxLength){this._minLength=minLength;this._maxLength=maxLength;}
Sys.Mvc.StringLengthValidator.create=function Sys_Mvc_StringLengthValidator$create(rule){var minLength=rule.ValidationParameters['minimumLength'];var maxLength=rule.ValidationParameters['maximumLength'];return Function.createDelegate(new Sys.Mvc.StringLengthValidator(minLength,maxLength),new Sys.Mvc.StringLengthValidator(minLength,maxLength).validate);}
Sys.Mvc.StringLengthValidator.prototype={_maxLength:0,_minLength:0,validate:function Sys_Mvc_StringLengthValidator$validate(value,context){if(Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)){return true;}
return(this._minLength<=value.length&&value.length<=this._maxLength);}}
Sys.Mvc._validationUtil=function Sys_Mvc__validationUtil(){}
Sys.Mvc._validationUtil.arrayIsNullOrEmpty=function Sys_Mvc__validationUtil$arrayIsNullOrEmpty(array){return(!array||!array.length);}
Sys.Mvc._validationUtil.stringIsNullOrEmpty=function Sys_Mvc__validationUtil$stringIsNullOrEmpty(value){return(!value||!value.length);}
Sys.Mvc._validationUtil.elementSupportsEvent=function Sys_Mvc__validationUtil$elementSupportsEvent(element,eventAttributeName){return(eventAttributeName in element);}
Sys.Mvc._validationUtil.removeAllChildren=function Sys_Mvc__validationUtil$removeAllChildren(element){while(element.firstChild){element.removeChild(element.firstChild);}}
Sys.Mvc._validationUtil.setInnerText=function Sys_Mvc__validationUtil$setInnerText(element,innerText){var textNode=document.createTextNode(innerText);Sys.Mvc._validationUtil.removeAllChildren(element);element.appendChild(textNode);}
Sys.Mvc.ValidatorRegistry=function Sys_Mvc_ValidatorRegistry(){}
Sys.Mvc.ValidatorRegistry.getValidator=function Sys_Mvc_ValidatorRegistry$getValidator(rule){var creator=Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];return(creator)?creator(rule):null;}
Sys.Mvc.ValidatorRegistry._getDefaultValidators=function Sys_Mvc_ValidatorRegistry$_getDefaultValidators(){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)};}
Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil');Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');Sys.Mvc.FormContext._validationSummaryErrorCss='validation-summary-errors';Sys.Mvc.FormContext._validationSummaryValidCss='validation-summary-valid';Sys.Mvc.FormContext._formValidationTag='__MVC_FormValidation';Sys.Mvc.FieldContext._hasTextChangedTag='__MVC_HasTextChanged';Sys.Mvc.FieldContext._hasValidationFiredTag='__MVC_HasValidationFired';Sys.Mvc.FieldContext._inputElementErrorCss='input-validation-error';Sys.Mvc.FieldContext._inputElementValidCss='input-validation-valid';Sys.Mvc.FieldContext._validationMessageErrorCss='field-validation-error';Sys.Mvc.FieldContext._validationMessageValidCss='field-validation-valid';Sys.Mvc.ValidatorRegistry.validators=Sys.Mvc.ValidatorRegistry._getDefaultValidators();Sys.Application.add_load(function(){Sys.Application.remove_load(arguments.callee);Sys.Mvc.FormContext._Application_Load();});
