").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!c.settings.submitHandler||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&(!j.form&&j.hasAttribute("contenteditable")&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},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.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name"));var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=d),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);if("function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f){if(j=f.call(b,j),"string"!=typeof j)throw new TypeError("The normalizer should return a string value.");delete g.normalizer}for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],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 a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});!function(e){var n;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var t=window.Cookies,o=window.Cookies=e();o.noConflict=function(){return window.Cookies=t,o}}}(function(){function e(){for(var e=0,n={};e
Chassis Server là gì? Tiêu chí lựa chọn Chassis Server phù hợp
09/08/2023
Chassis server thường được thiết kế để chứa từ một đến nhiều máy chủ, cung cấp các tính năng như quản lý điều hành từ xa, cung cấp nguồn điện và làm mát hiệu quả cho tất cả các máy chủ trong khung. Điều này giúp giảm thiểu sự lãng phí của không gian, năng lượng và tài nguyên. Bài viết này sẽ về chassis server – lợi ích của việc sử dụng nó trong môi trường máy chủ doanh nghiệp.
Mục lục
Mục lục
1. Thế nào là Chassis Server?
Chassis Server, đôi khi còn được gọi là vỏ máy chủ, đóng vai trò như một lớp áo bảo vệ cho các bộ phận cấu thành bên trong máy. Đây là tấm bức bọc đảm bảo rằng CPU, RAM, Mainboard, ổ đĩa và những bộ phận quan trọng khác được giữ an toàn, không bị tác động từ môi trường bên ngoài. Điều thú vị là Chassis Server tồn tại trong nhiều kích thước, kiểu dáng và mức giá khác nhau, phù hợp với nhu cầu và phong cách riêng của mỗi người sử dụng.
Để dễ hiểu, hãy tưởng tượng Chassis Server như một chiếc hộp bọc chứa những linh kiện điện tử bên trong máy chủ. Nó giống như một cái vỏ độc đáo giữa thế giới bên ngoài và cơ hội hội tụ của các bộ phận quan trọng bên trong. Trong trường hợp máy tính để bàn, thì Chassis Server thường được gọi đơn giản là “Case” hoặc “thùng máy tính.”
2. Thông số kỹ thuật của Chassis Server
2.1. Form Factor
Chính là thông tin mô tả về kích thước và hình dạng của máy chủ. Ví dụ như: Rack 1U, Rack 2U, Tower server, Blade server… Để hiểu rõ hơn về ý nghĩa của những thông số này, bạn có thể tìm hiểu thêm trong phần tiếp theo của bài viết này.
Đây là số lượng khe cắm sẵn có để lắp đặt ổ cứng và các ổ đĩa khác.
2.3. Nguồn cấp điện (Power Supply)
Nguồn cấp điện là yếu tố quan trọng để đảm bảo máy chủ hoạt động một cách ổn định. Các nguồn có công suất khác nhau như 260W, 420W, 500W,… tùy theo từng loại máy chủ.
2.4. Kích Thước (Dimensions)
Thông số Dimensions của Chassis Server là gì? Nó chính là một cách thể hiện kích thước của thùng máy chủ dưới dạng chiều cao x chiều rộng x chiều sâu (H x W x D).
2.5. Khe Cắm Ổ Đĩa (Drive Bays)
Drive bays là thông số quan trọng cho biết có bao nhiêu khe cắm sẵn có để lắp đặt ổ cứng và các ổ đĩa khác.
Khe cắm 3.5″: Đây là các khe cắm tiêu chuẩn cho việc gắn các thành phần máy chủ có kích thước 2.5″ và 3.5″ như ổ đĩa cứng (HDD), ổ đĩa linh kiện (FDD), ổ ZIP… Thường thấy trong các thùng máy có từ 2 đến 6 khe cắm.
Khe cắm 5.25″: Đây là các khe cắm tiêu chuẩn cho các linh kiện kích thước 5.25″ như ổ đĩa CD, bảng chức năng, ổ đĩa DVD…
Như vậy, thông qua những thông số này, bạn có thể hiểu rõ hơn về cấu trúc và khả năng của một Chassis Server cũng như làm thế nào chúng cung cấp các yếu tố cần thiết để hệ thống máy chủ hoạt động một cách hiệu quả.
3. Phân loại Chassis Server
3.1. Rack Server
Rack Server, hay còn được gọi là Rackmount Chassis, là một loại Chassis Server được xác định dựa trên kích thước và hình dạng. Nhiệm vụ của nó là bảo vệ và chứa các thành phần quan trọng như RAM, CPU, và nhiều phần khác của máy chủ. Thay vì đứng thẳng như Tower Server, Rackmount Server Case có dạng nằm ngang và có nhiều ngăn lắp đặt bên trong. Chúng thường được lắp đặt trong các tủ rack, có thể trượt ra vào như các ngăn kéo thông thường.
Có nhiều kích thước khác nhau cho Rack Server, bao gồm Rack 1U, Rack 2U hay U4… Trong đó, U là đơn vị đo lường và 1U tương đương với 1,75 inch (4,45 cm). Máy chủ Rack 1U có kích thước nhỏ gọn, giúp tiết kiệm không gian lắp đặt, nhưng không thể so sánh được về hiệu suất và khả năng mở rộng với các máy chủ Rack 2U hoặc 4U.
3.2. Tower Server
Đây là một loại máy chủ được thiết kế theo hướng chiều dọc, tương tự như máy tính để bàn. Mục đích của Tower Server là bảo vệ và dễ dàng sửa chữa các thiết bị và linh kiện bên trong. Khi sử dụng, Tower Server tạo cảm giác như sử dụng một máy tính để bàn.
Khung này thường dành cho các tổ chức doanh nghiệp hoặc cá nhân cần sử dụng một hoặc hai máy chủ. Tower Server hoạt động êm ái và gây ít tiếng ồn hơn so với các dòng máy chủ khác, phù hợp cho việc sử dụng trong môi trường văn phòng. Tuy nhiên, so với máy chủ rack, hiệu suất của chúng có thể kém hơn một chút.
3.3. Blade Server
Loại Chassis Server này là gì? Blade Server là một dạng máy chủ nhỏ gọn được gắn vào một Rack Server. Mỗi Blade Server là một hệ thống máy chủ độc lập, với mainboard, RAM, CPU, ổ cứng riêng biệt, được sử dụng để triển khai nhiều hệ thống máy chủ.
Blade Server thay thế cho hai kiểu thiết kế truyền thống ở trên vì nó nhỏ gọn và đơn giản để cài đặt. Phần mềm hệ thống có thể quản lý và kết nối các Blade Server thành một cụm máy chủ. Chúng có khả năng cung cấp môi trường mạng tốc độ cao, chia sẻ tài nguyên và phục vụ cùng một cơ sở người dùng. Hơn nữa, việc thay thế Blade Server trong quá trình hoạt động dễ dàng giúp tiết kiệm thời gian bảo trì, nhờ vào khả năng cắm nóng (hot plug) – có thể thay thế các linh kiện trong khi hệ thống vẫn đang hoạt động.
4. Kích thước của Chassis Server
4.1. Rack Server
Kích thước của khung máy chủ Rack Server thường được đo bằng đơn vị U, như 1U, 2U, 3U, 4U,… Mỗi dạng sản phẩm có đơn vị đo lường riêng, thường dùng để chỉ chiều cao của Rack Server. Những khung này thường được đặt vào các tủ Rack. Kích thước của tủ Rack có thể khác nhau, từ 6U-15U đến 36U hoặc 42U, tùy thuộc vào nhu cầu của người sử dụng. Ví dụ, giá đỡ máy chủ 1U giúp tiết kiệm không gian và tối ưu hóa diện tích lắp đặt, nhưng điều này có thể giới hạn hiệu suất, khả năng mở rộng và tương thích. Có thể nói rằng kích thước của Chassis Server thay đổi tùy theo sản phẩm.
Tuy nhiên, các loại tủ rack 4U cung cấp hiệu suất, khả năng mở rộng và tương thích cao hơn so với 1U, vì chúng có thể hỗ trợ tới 4 bộ xử lý CPU trong cùng một máy chủ. Điều này đồng nghĩa với việc chúng chiếm nhiều không gian hơn trong việc lắp đặt.
4.2. Tower Server
Đây là sản phẩm có kích thước vừa phải, nhắm tới các doanh nghiệp, tổ chức, văn phòng và cá nhân có nhu cầu về một hoặc vài máy chủ. Thiết kế của Tower Server mang đến trải nghiệm quen thuộc của việc sử dụng máy tính để bàn, và phù hợp cho việc xây dựng lại máy chủ riêng lẻ đang hoạt động.
Đáng chú ý là Tower Server thường tạo ra tiếng ồn ít hơn đáng kể so với các mô hình Rack hoặc Blade, là một ưu điểm quan trọng cho việc lắp đặt trong môi trường văn phòng.
4.3. Blade Server
Blade Server là một dạng Chassis Server độc đáo, được gắn vào khung máy chủ Rack. Mỗi Blade Server hoàn chỉnh với mainboard, RAM, CPU, ổ cứng và hệ điều hành riêng, tạo nên hệ thống máy chủ riêng biệt.
Quản trị viên có khả năng kết nối các Blade Server thành một cụm máy chủ thông qua phần mềm. Điều này cho phép các Blade Server liên kết để cung cấp môi trường mạng tốc độ cao và chia sẻ tài nguyên. Việc thay thế trong quá trình hoạt động trở nên dễ dàng và tiết kiệm thời gian bảo trì, nhờ vào khả năng hoán đổi nóng – có thể thay thế các linh kiện trong khi hệ thống vẫn đang chạy.
Mỗi loại Chassis Server trên đáp ứng nhu cầu của từng đối tượng sử dụng. Do đó, khi chọn kích thước Chassis Server thích hợp, bạn nên hiểu rõ Chassis Server và mục đích sử dụng của nó.
5. Chassis Server đóng vai trò gì?
Bảo vệ các bộ phận của máy tính
Các yếu tố như bụi bẩn, các loại động vật nhỏ, nước và các chất gây ô nhiễm có thể gây tổn hại đáng kể đến các bộ phận quan trọng của máy tính. Nhờ Chassis Server, chúng được bảo vệ và an toàn khỏi những yếu tố tiềm ẩn từ môi trường bên ngoài. Không chỉ vậy, thùng máy Server còn giúp hấp thụ tác động vật lý, đảm bảo rằng bo mạch và các bộ phận khác không bị xoắn hoặc hỏng hóc.
Tạo nên không gian gọn gàng và ngăn nắp hơn
Máy chủ thường đi kèm với nhiều phụ kiện và linh kiện, nhưng không phải tất cả đều có thể được chứa trong một không gian hạn chế. Nếu không có Chassis Server để giữ chúng lại, các linh kiện này sẽ trải ra ngoài, tạo nên sự bất tiện và hỗn loạn. Thùng máy Server chính là “ngôi nhà” giúp bảo vệ và duy trì tổ chức cho tất cả các phụ kiện quan trọng.
Một chức năng quan trọng khác của Chassis Server là giúp máy chủ duy trì nhiệt độ ổn định trong quá trình hoạt động. Các lỗ thông khí đặc biệt được tích hợp trong thùng máy giúp tạo ra luồng không khí. Điều này giúp thoát hơi nóng và làm mát phần cứng, ngăn chặn sự quá nhiệt và tránh các vấn đề liên quan đến nhiệt độ.
Giảm thiểu tiếng ồn không mong muốn khi máy chủ hoạt động
Các bộ phận chạy và vận hành có thể tạo ra tiếng ồn khá khó chịu, nhưng nhờ việc giữ chúng bên trong không gian kín của thùng máy Server, tiếng ồn này sẽ được giảm bớt đáng kể.
Tóm lại, Chassis Server không chỉ đơn thuần là một tấm vỏ đơn giản mà có những ưu điểm và chức năng quan trọng đáng để quan tâm. Từ việc bảo vệ, duy trì không gian gọn gàng, làm mát đến giảm tiếng ồn, Chassis Server thực sự góp phần làm cho hệ thống máy chủ hoạt động một cách hiệu quả và ổn định hơn.
6. Tiêu chí lựa chọn Chassis Server phù hợp
Chắc chắn nhiều người đang đối diện với sự phân vân khi phải chọn một loại thùng máy chủ phù hợp, phải không? Để giúp bạn đưa ra quyết định chính xác, Tothost muốn gợi ý một số tiêu chí lựa chọn dưới đây:
Định rõ nhu cầu và nguồn lực của doanh nghiệp.
Xem xét về hình dạng và kích thước của Chassis Server.
Tìm hiểu các loại Chassis Server qua các nhóm, diễn đàn có liên quan.
Tìm đơn vị cung cấp uy tín và chất lượng.
Nếu bạn còn đang mơ hồ về các tiêu chí lựa chọn Chassis Server là gì, hãy thử đặt doanh nghiệp của bạn vào những trường hợp dưới đây:
Trường hợp 1: Tower Server
Nếu bạn là cá nhân hoặc đại diện cho doanh nghiệp vừa và nhỏ, có từ 1 đến 2 máy chủ, thì Tower Server có thể là lựa chọn phù hợp. Được thiết kế giống như các vỏ máy tính để bàn thông thường, Tower Server mang lại sự quen thuộc và dễ sử dụng. Loại này tiết kiệm chi phí mà vẫn đảm bảo hiệu suất cần thiết.
Trường hợp 2: Rack Server
Đối với các doanh nghiệp sở hữu hệ thống máy chủ lớn hơn, Rack Server có thể là lựa chọn thích hợp. Khung máy chủ này hỗ trợ tính năng hot-swap, cho phép bạn thay thế và lắp đặt các linh kiện trong quá trình hoạt động của máy tính.
Trường hợp 3: Blade Server
Nếu doanh nghiệp bạn cần một hệ thống máy chủ mật độ cao,
Blade Server có thể là sự lựa chọn đáng xem xét. Loại thùng máy chủ này nhỏ gọn và giá rẻ hơn so với các hệ thống khác, nhưng vẫn cung cấp hiệu suất mạnh mẽ.
Nhớ rằng, mỗi loại Chassis Server phù hợp với từng nhu cầu cụ thể. Do đó, để chọn kích thước Chassis Server thích hợp, bạn nên hiểu rõ về chúng và mục đích sử dụng của mình.
Lời kết
Hy vọng bài viết đã cung cấp cho bạn tất cả những thông tin xung quanh Chassis Server, nếu bạn có hứng thú sử dụng Cloud Server, bạn có thể xem tại đây, hoặc đọc thêm về các loại Server tại: https://tothost.vn/kien-thuc
Ứng dụng Điện toán đám mây (Cloud Computing) là sử dụng công nghệ đám mây phục vụ cho nhiều công việc khác nhau, được kết nối qua internet. Đám mây mang lại lợi thế bao gồm khả năng mở rộng, tính linh hoạt, hiệu quả chi phí, bảo mật và đổi mới cho các tổ chức ở mọi quy mô và lĩnh vực. Do đó, nó được các tổ chức áp dụng để đạt được mục tiêu và giải quyết các vấn đề của họ.Dưới đây là Top 10 ứng dụng phổ biến nhất của điện toán đám mây.
Nếu bạn đang thắc mắc liệu có nên chuyển đổi sang Điện toán đám mây (Cloud Computing) hay vẫn nên chọn on-premise thì bài viết này sẽ giúp bạn hiểu rõ hơn về những lợi ích của việc chuyển đổi này.
Khi bạn kết nối máy tính hoặc thiết bị của mình với internet, bạn cần có địa chỉ IP. Địa chỉ IP có hai loại phân bổ: động và tĩnh. Tại bài viết này, TotHost sẽ hướng dẫn bạn Cách kiểm tra địa chỉ IP bạn đang sử dụng là động hay tĩnh.
cPanel là một control panel – hệ thống quản trị web hosting phổ biến và mạnh mẽ nhất hiện nay, hoạt động dựa trên nền tảng Linux. Nó có giao diện đơn giản, linh hoạt hỗ trợ quản trị hosting và website một cách dễ dàng. Tại đây, TotHost sẽ hướng dẫn bạn cách tạo Backup và Restore trên cPanel.
Hiện nay, công nghệ trí tuệ nhân tạo đang bùng nổ mạnh mẽ tạo ra những tiềm năng to lớn trong nhiều lĩnh vực trong cuộc sống. Để làm được điều đó thì không thể thiếu AI tạo sinh (Generative AI). Vậy, Gen AI là gì? Nó có đóng góp gì trong thực tiễn? Hãy cùng tìm hiểu qua bài viết này nhé!
Cụm từ “đứt cáp quang biển” hay “cá mập cắn cáp” thường được nhắc tới mỗi khi kết nối mạng Việt Nam với quốc tế gặp vấn đề. Vậy cáp quang biển là gì? Việt Nam hiện tại đang có bao nhiêu tuyến cáp quang? Cùng TotHost tìm hiểu nhé!