").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
Web 1.0 tập trung vào việc truy xuất và đọc thông tin. Web 2.0 tập trung vào việc đọc, viết, tạo ra và tương tác với người dùng cuối. Nó được gọi một cách nổi tiếng là mạng xã hội tương tác. Web 3.0 là thế hệ thứ ba của World Wide Web và là tầm nhìn về một web phi tập trung hiện đang được phát triển. Nó tập trung vào việc đọc, viết và sở hữu thông tin. Chúng ta hãy cùng làm một phép so sánh giữa chúng.
Mục lục
Mục lục
1. Giới thiệu chung về World Wide Web
World Wide Web, thường được gọi đơn giản là web, đã trải qua một số chuyển đổi trong lịch sử của nó và tiếp tục phát triển đến ngày nay.
Website không được sinh ra cùng thời điểm với internet. Sự ra đời của web vào năm 1989 đã thay đổi hướng đi của internet từ một công cụ được sử dụng bởi các nhà nghiên cứu, học giả và người dùng kỹ thuật sang một công nghệ mà bất kỳ ai, ở bất kỳ đâu, có thể sử dụng để duyệt các trang web và truy cập thông tin.
Các công nghệ web sau đó đã tiến hóa và mở rộng, thêm những cách mới để người dùng internet tương tác. Web đã trở thành một nhân tố thúc đẩy cho nền kinh tế số hiện đại.
Được chấp nhận chung rằng có ba giai đoạn tiến hóa chính của web, được đơn giản hóa bằng các thuật ngữ Web 1.0, Web 2.0 và Web 3.0. Với sự quan tâm ngày càng gia tăng về Web 3.0 khi công nghệ blockchain và bảo mật trở nên ngày càng phổ biến, quan trọng là nhìn lại các thế hệ trước và so sánh chúng với những gì tiếp theo.
Đầu tiên chúng ta hãy đến với sự tiến hoá của Web.
Thế hệ đầu tiên, được gọi là Web 1.0, được phát minh vào năm 1989 bởi Tim Berners-Lee, một nhà khoa học máy tính người Anh đã áp dụng các khái niệm siêu văn bản để liên kết văn bản kỹ thuật số được đề xuất vào năm 1963 bởi Ted Nelson, một nhà tiên phong công nghệ thông tin người Mỹ. Ngoài việc lập trình trình duyệt đầu tiên, Berners-Lee còn viết ngôn ngữ đánh dấu siêu văn bản (HTML), nói cho trình duyệt biết cách hiển thị nội dung, cũng như Giao thức Truyền tải Siêu Văn bản (HTTP) chỉ định cách máy chủ web chuyển tệp tin đến trình duyệt. Ông cũng bắt đầu thiết kế phần mềm cho một Semantic Web (Web ngữ nghĩa) sẽ liên kết dữ liệu trên các trang web, nhưng ràng buộc về phần cứng đã ngăn cản việc triển khai nó.
Công chúng không có nhiều nhận thức về web cho đến năm 1993, khi Mosaic, trình duyệt phổ biến đầu tiên, được phát hành, sau đó đổi tên thành Netscape Navigator. Các trình duyệt đồ họa thân thiện với người dùng tương tự đã được phát triển, bao gồm Microsoft Internet Explorer và, sau đó, Apple Safari. Các công cụ tìm kiếm phổ biến đầu tiên – như Yahoo! Search, Lycos và AltaVista – xuất hiện, nhưng đến năm 2004, Google đã đánh bại nhiều trong số chúng.
2.2. Phát triển mạnh mẽ
Xung quanh sự chuyển đổi của thiên niên kỷ, các chuyên gia bắt đầu thúc đẩy ý tưởng về một web nâng cấp mang tính tương tác hơn, gọi là Web 2.0. Họ bắt đầu gọi web hiện tại với khả năng kết nối cơ bản và hầu như chỉ là các trang web tĩnh là Web 1.0. Berners-Lee mở rộng ý tưởng về Semantic Web của mình qua một bài viết trên Scientific American. Nhà xuất bản Tim O’Reilly đã giúp thúc đẩy Web 2.0 bằng cách tổ chức một hội nghị dành riêng cho nó.
2.3. Công nghệ mới ra đời
Giấc mơ về một web tương tác đã thành hiện thực sau vài năm với sự phổ biến chóng mặt của các mạng xã hội như Facebook. Tổ chức World Wide Web Consortium, cơ quan quy chuẩn của web, đã phát hành một tiêu chuẩn Web Ngữ nghĩa. Cùng một thời điểm, hai công nghệ cốt lõi của Web 3.0 đã ra đời: tiền điện tử và blockchain.
Các nhà báo và nhà công nghệ nổi tiếng, bao gồm Gavin Wood, đồng sáng lập Ethereum, một nền tảng blockchain nổi tiếng, đã bắt đầu phổ biến thuật ngữ Web 3.0 và Web 3 để chỉ một phiên bản phi tập trung và có nhận thức ngữ nghĩa của web.
3. So sánh giữa Web 1.0 – Web 2.0 – Web 3.0
3.1. Sự khác nhau
Web 1.0
Web 2.0
Web 3.0
Đặc điểm chính
Web tĩnh, chỉ đọc
Web tương tác, người dùng tạo nội dung
Semantic Web, trí tuệ nhân tạo, web phi tập trung
Kiến trúc
Client-Server
Client-Server
Phi tập trung, phân tán
Nền tảng công nghệ
HTML, CSS, JavaScript
AJAX, PHP, Ruby on Rails, Python
Blockchain, AI, Internet of Things (IoT)
Giao diện người dùng
Đơn giản, tĩnh, không có tương tác
Đa phương tiện, phong phú
Thông minh, tương tác đa dạng, giao diện trực quan
Nội dung
Thông tin thống nhất
Tạo nội dung, mạng xã hội, Wiki, Blog
Dữ liệu mở, trí tuệ nhân tạo
Tương tác
Chỉ đọc
Chia sẻ, bình luận đánh giá
Đa dạng, tự động
Ví dụ
Website tĩnh, thông tin công ty
Mạng xã hội (Facebook, Twitter), Wikipedia, Youtube, blog cá nhân, diễn đàn
Ứng dụng phi tập trung (Blockchain), trợ lý ảo (Siri, Alexa), thương mại điện tử dựa trên AI, dịch vụ trí tuệ nhân tạo
Bảng so sánh Web 1.0, Web 2.0 và Web 3.0
3.2. Sự tương đồng
Có những điểm tương đồng giữa Web 1.0, Web 2.0 và Web 3.0 như sau:
Đều liên quan đến mối quan hệ giữa người dùng cuối và thông tin.
Cung cấp cho người dùng một phiên bản của chức năng “đọc”.
Cùng phụ thuộc vào Internet để thực hiện các nhiệm vụ của mình.
4. Công dụng
4.1. Web 1.0:
Web 1.0 hoạt động như một mạng phân phối nội dung (CDN), cho phép một phần của trang web được hiển thị trên trang web. Do đó, nó có thể được sử dụng như một trang web cá nhân. Người dùng sẽ phải trả tiền dựa trên mỗi lượt xem trang. Nó được tạo thành từ các thư mục cho phép người dùng lấy một bộ sưu tập thông tin cụ thể.
4.2. Web 2.0:
Mạng xã hội bao gồm nhiều nền tảng và công cụ. Mọi người đóng góp ý kiến, hiểu biết, kinh nghiệm và suy nghĩ của mình trên những trang này. Do đó, Web 2.0 tương tác một cách đáng kể với người dùng cuối. Người dùng cuối không chỉ là người sử dụng các chương trình, mà còn là người tham gia/xem thông qua các podcast, gắn thẻ, viết blog, việc tạo và bình chọn nội dung qua RSS, mạng xã hội, mạng xã hội, đánh dấu trang mạng xã hội và nhiều hơn nữa.
4.3. Web 3.0:
Đây là phiên bản nâng cao của Web 1.0 ban đầu từ những năm 1990 và đầu 2000. Web 3.0 là thế hệ tiếp theo của web hiện tại mà chúng ta quen thuộc. Điểm đặc biệt của Web 3 được kể đến là:
Phân tán: Thay vì sử dụng cách tiếp cận tập trung như Web 1.0 và Web 2.0, Web 3.0 được xây dựng trên mô hình ngang hàng và thuật toán đồng thuận. Công nghệ blockchain, hoặc một đối thủ như Solid, là yếu tố quan trọng trong mô hình dữ liệu phân tán của Web 3.0.
Tiền điện tử: Một yếu tố quan trọng khác trong quá trình phi tập trung của Web 3.0 là tiền điện tử, cung cấp một lựa chọn thanh toán khác ngoài tiền tệ do chính phủ phát hành. Ngoài ra, token không thể thay thế (NFT) cung cấp cho người dùng một cách khác để tạo, quản lý và sở hữu tài sản bằng công nghệ blockchain cơ bản của Web 3.0.
Trí tuệ nhân tạo: Việc sử dụng trí tuệ nhân tạo để hỗ trợ quy trình làm việc và tự động hóa cũng như cải thiện trải nghiệm người dùng là một đặc điểm nổi bật khác của thế giới Web 3.0 đang nổi lên. Trí tuệ nhân tạo giúp tăng khả năng mở rộng và hiệu suất của web chính nó, cũng như định nghĩa các hình thức tìm kiếm thông minh mới.
5. Điều gì tiếp theo cho Web 3.0 là gì?
Web 3.0 đang tiếp tục phát triển và đang được định nghĩa. Do đó, còn nhiều điều chưa biết về cái mà Web 3.0 sẽ trở thành cuối cùng. Tuy nhiên, có một vài hướng tiếp theo khá rõ ràng cho tương lai gần của Web 3.0 và xa hơn. Các hướng này bao gồm:
Tiêu chuẩn web mới: Web 3.0 có thể bao gồm một tập hợp các tiêu chuẩn internet mới thay đổi cách web hoạt động. Một giao thức như vậy là HTTP (Hypertext Transfer Protocol), một tiêu chuẩn cho các máy chủ web dựa trên giao thức TCP/IP từ lâu. HTTP/3, hoặc phiên bản HTTP 3, là một tiêu chuẩn mới của Tổ chức Kỹ thuật Internet. Nó sử dụng giao thức vận chuyển QUIC thay thế TCP/IP và cung cấp khả năng chống chịu, hiệu suất và khả năng mở rộng tốt hơn.
Địa chỉ IPv6: Cả Web 1.0 và Web 2.0 dựa trên lớp địa chỉ IPv4, có số lượng địa chỉ web giới hạn. Trái lại, IPv6 có không gian địa chỉ lớn hơn, cho phép số lượng thiết bị dự kiến tăng lên trong thời đại Web 3.0 có địa chỉ IP công khai riêng của chúng.
Sự phát triển của DAOs: Web 3.0 bao gồm khái niệm về tổ chức tự động phi tập trung (DAOs) như một cấu trúc quản lý và quản trị mới cho các dịch vụ và tổ chức trên web. Giống như blockchain, DAOs dựa vào sự đồng thuận phân tán để đưa ra quyết định thay vì một cơ quan tập trung
Mở rộng tài chính phi tập trung: Sự phi tập trung trong Web 3.0 có thể dẫn đến sự gia tăng tiếp tục của các dịch vụ tài chính phi tập trung (DeFi) vượt qua các cấu trúc ngân hàng truyền thống và có thể có tác động sâu sắc đến hệ thống tài chính toàn cầu.
Thêm ứng dụng phi tập trung: Sự ra đời của Web 3.0 có thể thúc đẩy sự phát triển của các ứng dụng phi tập trung sử dụng blockchain và hợp đồng thông minh để điều khiển một phần lớn sự tự động hóa của các ứng dụng phân tán. Khi Web 3.0 tiếp tục phát triển và được định nghĩa, sự tập trung vào phi tập trung, tự động hóa và trí tuệ có khả năng tiếp tục là nền tảng cho một thế hệ mới của các sản phẩm và dịch vụ web.
Lời kết
Các công nghệ web sau đó đã tiến hóa và mở rộng, thêm những cách mới để người dùng internet tương tác. Web đã trở thành một nhân tố thúc đẩy cho nền kinh tế số hiện đại.
Được chấp nhận chung rằng có ba giai đoạn tiến hóa chính của web, được đơn giản hóa bằng các thuật ngữ Web 1.0, Web 2.0 và Web 3.0. Với sự quan tâm ngày càng gia tăng về Web 3.0 khi công nghệ blockchain và bảo mật trở nên ngày càng phổ biến, quan trọng là nhìn lại các thế hệ trước và so sánh chúng với những gì tiếp theo.
Và tất nhiên khi sở hữu Website bạn cần có Hosting đi kèm, bạn có thể tham khảo tại:
Ứ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é!