").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
Rack Server là gì? Cách lựa chọn Server Rack phù hợp
03/08/2023
Khi xây dựng hạ tầng máy chủ, có hàng tá các loại Server và thiết bị mà bạn phải làm quen với nó. Và Rack Server là một trong số đó, đây sẽ là một lựa chọn hữu ích bởi nó đem lại rất nhiều lợi ích đi kèm. Tại bài viết “Rack Server là gì? Cách lựa chọn Server Rack phù hợp” sẽ mang lại cho bạn nhiều thông tin về loại server này!
Mục lục
Mục lục
1. Rack Server là gì?
Rack Server là một loại máy chủ được thiết kế đặc biệt để lắp đặt vào giá máy chủ, có thể được gọi là rack mounted server, rack mountable server, rack máy chủ hoặc máy chủ rack. Được sử dụng rộng rãi trong các trung tâm dữ liệu và các văn phòng nhỏ có phòng máy chủ riêng, máy chủ Rack có kích thước cơ sở lớn hơn so với các dòng máy tính hoặc máy chủ khác.
Máy chủ Rack thường được gắn vào giá đỡ bằng vít và ray chuyên dụng, điều này giúp dễ dàng quản lý và tối ưu hóa không gian trong môi trường máy chủ. Điểm mạnh của Rack Server là khả năng mở rộng linh hoạt, vì chiều cao hoặc số lượng đơn vị giá đỡ có thể thay đổi phù hợp với yêu cầu của hệ thống. Nếu bạn cần ít máy chủ, việc sử dụng Rack Server sẽ giúp tiết kiệm chi phí ban đầu.
Loại máy chủ này có thể được trang bị nhiều CPU, bộ nhớ và các thành phần khác, tùy thuộc vào kích thước của máy chủ. Nhờ vào khả năng mở rộng linh hoạt này, Rack Server được ưa chuộng trong nhiều ngành công nghiệp, bao gồm cả ứng dụng công nghiệp, quân sự và thương mại.
Tóm lại, đây là một giải pháp mạnh mẽ và linh hoạt để xây dựng hạ tầng máy chủ. Khi lựa chọn máy chủ Rack phù hợp, bạn cần xem xét yêu cầu và khả năng mở rộng của hệ thống để đảm bảo sự hiệu quả và tiết kiệm chi phí trong việc quản lý máy chủ của mình.
2. Công dụng của Rack Server
Rack Server có công dụng chủ yếu như tất cả các loại máy chủ khác, đó là cung cấp dữ liệu và các dịch vụ cụ thể cho khách hàng. Thường được sử dụng trong các trung tâm dữ liệu, có thể có hàng chục hoặc thậm chí hàng trăm tủ rack máy chủ. Vai trò của Rack Server là cố định và bảo vệ các thành phần máy chủ bên trong khi chúng được lắp vào tủ rack.
Máy chủ Rack thường có hình dạng nằm ngang và được lắp đặt trong các tủ (hay giá đỡ) có thể lắp vào và tháo ra bằng cách kéo ra hoặc đẩy vào, tương tự như cách lắp đặt máy chủ HDD. Kích thước của máy chủ Rack thường được đo bằng một đơn vị gọi là “U,” dùng để đo chiều cao của giá đỡ máy chủ.
Máy chủ Rack có thiết kế chắc chắn và thường được sử dụng để hỗ trợ các ứng dụng quân sự và công nghiệp. Những máy chủ công suất cao này phải trải qua các bài kiểm tra căng thẳng để đảm bảo chịu được các điều kiện môi trường khắc nghiệt như nhiệt độ cực cao hoặc cực thấp, độ ẩm cao, và rung động trong quá trình vận chuyển hoặc vận hành.
Các máy chủ Rack thường được chứng nhận theo các tiêu chuẩn quân sự và công nghiệp như MIL-STD-810 H, MIL-STD-461, FCC, CE hoặc DO-160. Chúng thường được sử dụng trong các chương trình quân sự, nơi chúng được đặt bên trong các tủ Rack Server nhỏ gọn và chắc chắn, được chứng nhận theo tiêu chuẩn MIL-STD-810, hoặc để hỗ trợ các ứng dụng điện toán nhúng.
3. Nguyên lý hoạt động của Rack Server
Nguyên lý hoạt động của Rack Server đó là khả năng dễ dàng di chuyển vào và ra khỏi giá đỡ máy chủ từ mặt cơ học. Điều này rất hữu ích vì nó cho phép các kỹ thuật viên, quản trị viên hệ thống và người vận hành dễ dàng chẩn đoán các sự cố kỹ thuật và thay thế các thành phần mà không cần tắt hoặc tháo rời toàn bộ hệ thống. Điều này trở nên cần thiết đặc biệt đối với các chương trình và ứng dụng quan trọng. Thời gian dừng hoạt động kéo dài có thể gây tổn thất tài chính, thương tật và thậm chí đe dọa tính mạng.
Máy chủ Rack sẽ được điều chỉnh hiệu suất, tài nguyên và dịch vụ để phù hợp với từng chương trình hoặc ứng dụng cụ thể. Ví dụ, để hỗ trợ tính toán tại chỗ và truy cập thông tin và tài nguyên quan trọng, lắp đặt các máy chủ quân sự từ xa trong sa mạc có thể yêu cầu cơ sở dữ liệu giá cao, web server, máy chủ email, lưu trữ tệp hoặc các ứng dụng khác.
Bên cạnh đó, các ngành thương mại hoặc ngành công nghiệp như giàn khoan dầu cũng có thể sử dụng mạng lưới các Rack Server để xử lý dữ liệu từ máy tính dây chuyền, camera an ninh hoặc hệ thống kiểm soát bẻ khóa. Điều này cho phép các công ty và tổ chức xử lý lượng dữ liệu lớn và hoạt động hiệu quả trong môi trường công nghiệp đòi hỏi sự ổn định và đáng tin cậy của máy chủ.
Có một số lợi ích khi sử dụng Rack Server mà bạn nên quan tâm:
Sức mạnh: Rack Server hoạt động như một hệ thống độc lập, được xây dựng với đầy đủ các thành phần cần thiết. Chúng cực kỳ mạnh mẽ và có thể xử lý các ứng dụng cao cấp
Tiện lợi: Khả năng dễ dàng gắn máy chủ vào giá đỡ rất tiện lợi và giúp tiết kiệm không gian, đặc biệt là so với các máy chủ tháp truyền thống. Điều này làm cho Rack Server trở thành lựa chọn phổ biến cho doanh nghiệp.
Khả năng làm mát: Rack Server thường được thiết kế để làm mát dễ dàng hơn so với các máy chủ khác. Chúng thường có quạt bên trong và được đặt trong giá đỡ để tăng lưu lượng gió, giúp duy trì nhiệt độ ổn định.
Tiết kiệm không gian: Điểm mạnh đáng kể của Rack Server là tính nhỏ gọn. Điều này làm cho chúng trở thành lựa chọn lý tưởng khi bạn cần nhiều máy chủ (nhưng ít hơn 10), nhưng không muốn sử dụng nhiều không gian hoặc tủ rack lớn.
Tuy nhiên, khi lựa chọn máy chủ phù hợp, bạn cần xem xét cẩn thận yêu cầu về nhiệt độ và điện của máy chủ, cũng như yêu cầu tính toán của công việc (CPU/giờ). Điều này sẽ giúp bạn tìm ra máy chủ tốt nhất để đáp ứng nhu cầu và đảm bảo hiệu suất tối ưu cho công việc của bạn.
5. Hướng dẫn lựa chọn Rack Server
5.1. Xác định yêu cầu sử dụng
Để lựa chọn một Rack Server phù hợp, trước tiên bạn cần xác định các yêu cầu cụ thể của công ty, chương trình và hoạt động của bạn. Điều này bao gồm việc định rõ số lượng máy chủ cần thiết cho dự án của bạn và kích thước (chiều rộng và chiều cao – RU) của Server Rack bạn định sử dụng.
Để xác định kích thước tủ rack thích hợp, bạn cần so sánh các kích thước này với kích thước vật lý của các máy chủ bạn có. Một Rack Server tốt nhất cho hoạt động hoặc chương trình của bạn sẽ phù hợp với các chỉ số của máy chủ như kích thước, trọng lượng và dung lượng (SWaP), cũng như khả năng mở rộng và nâng cấp.
5.2. Những tiêu chí cần quan tâm
Kích thước: Rack Server có nhiều hình dạng và kích thước khác nhau phù hợp với nhu cầu cụ thể của doanh nghiệp, quy mô và loại hình hoạt động kinh doanh. Bạn nên chọn máy chủ có kích thước phù hợp để chứa đủ thiết bị phần cứng mà bạn cần.
Trọng lượng và công suất: Trọng lượng và công suất của Rack Server cũng là một yếu tố quan trọng. Một máy chủ có trọng lượng phù hợp giúp tiết kiệm không gian, và công suất hoạt động cao giúp máy chủ có khả năng xử lý nhanh chóng và hiệu quả.
Khả năng mở rộng: Khả năng mở rộng là một tiêu chí quan trọng khi bạn phải chia sẻ nhiều tài nguyên máy chủ. Máy chủ càng lớn, càng cung cấp nhiều tùy chọn lưu trữ và mở rộng, nhưng bạn cũng cần xem xét việc máy chủ có thể xử lý năng lượng và tải trọng mở rộng.
Khả năng nâng cấp: Khả năng nâng cấp linh hoạt giúp máy chủ hoạt động tốt hơn khi bạn cần thêm các thành phần hoặc cải tiến hệ thống.
Tổng kết
Như vậy, để lựa chọn Rack Server phù hợp, bạn cần cân nhắc kỹ các yêu cầu và tiêu chí trên để chọn một máy chủ phù hợp với nhu cầu và đảm bảo hiệu suất và hiệu quả làm việc tốt nhất. Tothost Vietnam cũng cung cấp đa dạng các giải pháp về server, nếu bạn có nhu cầu hãy liên lạc với chúng tôi để được tư vấn tốt nhất!
Trong thế giới công nghệ hiện đại, server (hay còn được gọi là máy chủ) là một phần quan trọng không thể thiếu trong việc lưu trữ và quản lý dữ liệu trên mạng internet với khả năng kết nối nhiều thiết bị cùng lúc và lưu trữ lượng dữ liệu khổng lồ. Qua bài viết này, chúng ta sẽ cùng tìm hiểu về khái niệm, phân loại, vai trò và cách hoạt động của server.
Chắc hẳn khi tìm hiểu về VPS, bạn sẽ thấy một ứng dụng rất phổ biến của máy chủ ảo là treo game. Tất nhiên đó chỉ là một phần trong hàng loạt các khả năng mà máy chủ ảo có thể làm được nhưng việc treo game trên VPS có nhiều điều cần lưu ý hơn cho bạn. Hãy cùng Tothost tìm hiểu thêm qua bài viết này nhé!
Khi mua máy chủ riêng ảo đám mây, bạn sẽ thấy có rất nhiều loại với nhiều thông số kỹ thuật khác nhau. Thật khó để đưa ra quyết định. Làm thế nào để chọn đúng cấu hình Cloud VPS cần thiết? Dưới đây là một số tiêu chí cơ bản có thể giúp bạn chọn được máy chủ đám mây phù hợp nhất với nhu cầu của bạn.
Trong thời đại số ngày nay, công nghệ ngày càng làm thay đổi cách chúng ta liên lạc. Một trong những đột phá lớn nhất trong lĩnh vực này chính là Voice over Internet Protocol (VoIP). VoIP không chỉ là một phương tiện tiên tiến để thực hiện cuộc gọi, mà còn là một xu hướng quyết định định hình cách chúng ta kết nối và truyền đạt thông tin. Từ việc giảm chi phí đến tính linh hoạt trong cuộc sống công việc và cá nhân, bài viết này sẽ khám phá sâu hơn về cách VoIP đang thay đổi diện mạo của giao tiếp hiện đại.
Với sự phát triển và trưởng thành không ngừng của ảo hóa, quản lý vận hành và bảo trì và các công nghệ khác, điện toán đám mây đã trở nên dễ tiếp cận và trở thành xu hướng của thời đại. Và máy chủ đám mây cũng không nằm ngoài xu hướng. Nhiều công ty, thậm chí là cá nhân đã sử dụng máy chủ đám mây riêng ảo. Vậy, chúng ta có thể làm gì với máy chủ đám mây? Cùng tìm hiểu các ứng dụng của cloud VPS trong bài viết này nhé.