var LiveValidation=function(a,b){this.initialize(a,b)};LiveValidation.VERSION="1.3 standalone";LiveValidation.TEXTAREA=1;LiveValidation.TEXT=2;LiveValidation.PASSWORD=3;LiveValidation.CHECKBOX=4;LiveValidation.SELECT=5;LiveValidation.FILE=6;LiveValidation.massValidate=function(a){var b=true;for(var c=0,d=a.length;c<d;++c){var e=a[c].validate();if(b){b=e}}return b};LiveValidation.prototype={validClass:"LV_valid",invalidClass:"LV_invalid",messageClass:"LV_validation_message",validFieldClass:"LV_valid_field",invalidFieldClass:"LV_invalid_field",initialize:function(a,b){var c=this;if(!a){throw new Error("LiveValidation::initialize - No element reference or element id has been provided!")}this.element=a.nodeName?a:document.getElementById(a);if(!this.element){throw new Error("LiveValidation::initialize - No element with reference or id of '"+a+"' exists!")}this.validations=[];this.elementType=this.getElementType();this.form=this.element.form;var d=b||{};this.validMessage=d.validMessage||"Ok";var e=d.insertAfterWhatNode||this.element;this.insertAfterWhatNode=e.nodeType?e:document.getElementById(e);this.onValid=d.onValid||function(){this.insertMessage(this.createMessageSpan());this.addFieldClass()};this.onInvalid=d.onInvalid||function(){this.insertMessage(this.createMessageSpan());this.addFieldClass()};this.onlyOnBlur=d.onlyOnBlur||false;this.wait=d.wait||0;this.onlyOnSubmit=d.onlyOnSubmit||false;if(this.form){this.formObj=LiveValidationForm.getInstance(this.form);this.formObj.addField(this)}this.oldOnFocus=this.element.onfocus||function(){};this.oldOnBlur=this.element.onblur||function(){};this.oldOnClick=this.element.onclick||function(){};this.oldOnChange=this.element.onchange||function(){};this.oldOnKeyup=this.element.onkeyup||function(){};this.element.onfocus=function(a){c.doOnFocus(a);return c.oldOnFocus.call(this,a)};if(!this.onlyOnSubmit){switch(this.elementType){case LiveValidation.CHECKBOX:this.element.onclick=function(a){c.validate();return c.oldOnClick.call(this,a)};case LiveValidation.SELECT:case LiveValidation.FILE:this.element.onchange=function(a){c.validate();return c.oldOnChange.call(this,a)};break;default:if(!this.onlyOnBlur){this.element.onkeyup=function(a){c.deferValidation();return c.oldOnKeyup.call(this,a)}}this.element.onblur=function(a){c.doOnBlur(a);return c.oldOnBlur.call(this,a)}}}},destroy:function(){if(this.formObj){this.formObj.removeField(this);this.formObj.destroy()}this.element.onfocus=this.oldOnFocus;if(!this.onlyOnSubmit){switch(this.elementType){case LiveValidation.CHECKBOX:this.element.onclick=this.oldOnClick;case LiveValidation.SELECT:case LiveValidation.FILE:this.element.onchange=this.oldOnChange;break;default:if(!this.onlyOnBlur){this.element.onkeyup=this.oldOnKeyup}this.element.onblur=this.oldOnBlur}}this.validations=[];this.removeMessageAndFieldClass()},add:function(a,b){this.validations.push({type:a,params:b||{}});return this},remove:function(a,b){var c=false;for(var d=0,e=this.validations.length;d<e;d++){if(this.validations[d].type==a){if(this.validations[d].params==b){c=true;break}}}if(c){this.validations.splice(d,1)}return this},deferValidation:function(a){if(this.wait>=300){this.removeMessageAndFieldClass()}var b=this;if(this.timeout){clearTimeout(b.timeout)}this.timeout=setTimeout(function(){b.validate()},b.wait)},doOnBlur:function(a){this.focused=false;this.validate(a)},doOnFocus:function(a){this.focused=true;this.removeMessageAndFieldClass()},getElementType:function(){switch(true){case this.element.nodeName.toUpperCase()=="TEXTAREA":return LiveValidation.TEXTAREA;case this.element.nodeName.toUpperCase()=="INPUT"&&this.element.type.toUpperCase()=="TEXT":return LiveValidation.TEXT;case this.element.nodeName.toUpperCase()=="INPUT"&&this.element.type.toUpperCase()=="PASSWORD":return LiveValidation.PASSWORD;case this.element.nodeName.toUpperCase()=="INPUT"&&this.element.type.toUpperCase()=="CHECKBOX":return LiveValidation.CHECKBOX;case this.element.nodeName.toUpperCase()=="INPUT"&&this.element.type.toUpperCase()=="FILE":return LiveValidation.FILE;case this.element.nodeName.toUpperCase()=="SELECT":return LiveValidation.SELECT;case this.element.nodeName.toUpperCase()=="INPUT":throw new Error("LiveValidation::getElementType - Cannot use LiveValidation on an "+this.element.type+" input!");default:throw new Error("LiveValidation::getElementType - Element must be an input, select, or textarea!")}},doValidations:function(){this.validationFailed=false;for(var a=0,b=this.validations.length;a<b;++a){var c=this.validations[a];switch(c.type){case Validate.Presence:case Validate.Confirmation:case Validate.Acceptance:this.displayMessageWhenEmpty=true;this.validationFailed=!this.validateElement(c.type,c.params);break;default:this.validationFailed=!this.validateElement(c.type,c.params);break}if(this.validationFailed){return false}}this.message=this.validMessage;return true},validateElement:function(a,b){var c=this.elementType==LiveValidation.SELECT?this.element.options[this.element.selectedIndex].value:this.element.value;if(a==Validate.Acceptance){if(this.elementType!=LiveValidation.CHECKBOX){throw new Error("LiveValidation::validateElement - Element to validate acceptance must be a checkbox!")}c=this.element.checked}var d=true;try{a(c,b)}catch(e){if(e instanceof Validate.Error){if(c!==""||c===""&&this.displayMessageWhenEmpty){this.validationFailed=true;this.message=e.message;d=false}}else{throw e}}finally{return d}},validate:function(){if(!this.element.disabled){var a=this.doValidations();if(a){this.onValid();return true}else{this.onInvalid();return false}}else{return true}},enable:function(){this.element.disabled=false;return this},disable:function(){this.element.disabled=true;this.removeMessageAndFieldClass();return this},createMessageSpan:function(){var a=document.createElement("span");var b=document.createTextNode(this.message);a.appendChild(b);return a},insertMessage:function(a){this.removeMessage();if(this.displayMessageWhenEmpty&&(this.elementType==LiveValidation.CHECKBOX||this.element.value=="")||this.element.value!=""){var b=this.validationFailed?this.invalidClass:this.validClass;a.className+=" "+this.messageClass+" "+b;if(this.insertAfterWhatNode.nextSibling){this.insertAfterWhatNode.parentNode.insertBefore(a,this.insertAfterWhatNode.nextSibling)}else{this.insertAfterWhatNode.parentNode.appendChild(a)}}},addFieldClass:function(){this.removeFieldClass();if(!this.validationFailed){if(this.displayMessageWhenEmpty||this.element.value!=""){if(this.element.className.indexOf(this.validFieldClass)==-1){this.element.className+=" "+this.validFieldClass}}}else{if(this.element.className.indexOf(this.invalidFieldClass)==-1){this.element.className+=" "+this.invalidFieldClass}}},removeMessage:function(){var a;var b=this.insertAfterWhatNode;while(b.nextSibling){if(b.nextSibling.nodeType===1){a=b.nextSibling;break}b=b.nextSibling}if(a&&a.className.indexOf(this.messageClass)!=-1){this.insertAfterWhatNode.parentNode.removeChild(a)}},removeFieldClass:function(){if(this.element.className.indexOf(this.invalidFieldClass)!=-1){this.element.className=this.element.className.split(this.invalidFieldClass).join("")}if(this.element.className.indexOf(this.validFieldClass)!=-1){this.element.className=this.element.className.split(this.validFieldClass).join(" ")}},removeMessageAndFieldClass:function(){this.removeMessage();this.removeFieldClass()}};var LiveValidationForm=function(a){this.initialize(a)};LiveValidationForm.instances={};LiveValidationForm.getInstance=function(a){var b=Math.random()*Math.random();if(!a.id){a.id="formId_"+b.toString().replace(/\./,"")+(new Date).valueOf()}if(!LiveValidationForm.instances[a.id]){LiveValidationForm.instances[a.id]=new LiveValidationForm(a)}return LiveValidationForm.instances[a.id]};LiveValidationForm.prototype={initialize:function(a){this.name=a.id;this.element=a;this.fields=[];this.oldOnSubmit=this.element.onsubmit||function(){};var b=this;this.element.onsubmit=function(a){return LiveValidation.massValidate(b.fields)?b.oldOnSubmit.call(this,a||window.event)!==false:false}},addField:function(a){this.fields.push(a)},removeField:function(a){var b=[];for(var c=0,d=this.fields.length;c<d;c++){if(this.fields[c]!==a){b.push(this.fields[c])}}this.fields=b},destroy:function(a){if(this.fields.length!=0&&!a){return false}this.element.onsubmit=this.oldOnSubmit;LiveValidationForm.instances[this.name]=null;return true}};var Validate={Presence:function(a,b){var b=b||{};var c=b.failureMessage||"Wajib diisi";if(a===""||a===null||a===undefined){Validate.fail(c)}return true},Numericality:function(a,b){var c=a;var a=Number(a);var b=b||{};var d=b.minimum||b.minimum==0?b.minimum:null;var e=b.maximum||b.maximum==0?b.maximum:null;var f=b.is||b.is==0?b.is:null;var g=b.notANumberMessage||"Must be a number!";var h=b.notAnIntegerMessage||"Must be an integer!";var i=b.wrongNumberMessage||"Must be "+f+"!";var j=b.tooLowMessage||"Must not be less than "+d+"!";var k=b.tooHighMessage||"Must not be more than "+e+"!";if(!isFinite(a)){Validate.fail(g)}if(b.onlyInteger&&(/\.0+$|\.$/.test(String(c))||a!=parseInt(a))){Validate.fail(h)}switch(true){case f!==null:if(a!=Number(f)){Validate.fail(i)}break;case d!==null&&e!==null:Validate.Numericality(a,{tooLowMessage:j,minimum:d});Validate.Numericality(a,{tooHighMessage:k,maximum:e});break;case d!==null:if(a<Number(d)){Validate.fail(j)}break;case e!==null:if(a>Number(e)){Validate.fail(k)}break}return true},Format:function(a,b){var a=String(a);var b=b||{};var c=b.failureMessage||"Not valid!";var d=b.pattern||/./;var e=b.negate||false;if(!e&&!d.test(a)){Validate.fail(c)}if(e&&d.test(a)){Validate.fail(c)}return true},Email:function(a,b){var b=b||{};var c=b.failureMessage||"Must be a valid email address!";Validate.Format(a,{failureMessage:c,pattern:/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i});return true},Length:function(a,b){var a=String(a);var b=b||{};var c=b.minimum||b.minimum==0?b.minimum:null;var d=b.maximum||b.maximum==0?b.maximum:null;var e=b.is||b.is==0?b.is:null;var f=b.wrongLengthMessage||"Must be "+e+" characters long!";var g=b.tooShortMessage||"Must not be less than "+c+" characters long!";var h=b.tooLongMessage||"Must not be more than "+d+" characters long!";switch(true){case e!==null:if(a.length!=Number(e)){Validate.fail(f)}break;case c!==null&&d!==null:Validate.Length(a,{tooShortMessage:g,minimum:c});Validate.Length(a,{tooLongMessage:h,maximum:d});break;case c!==null:if(a.length<Number(c)){Validate.fail(g)}break;case d!==null:if(a.length>Number(d)){Validate.fail(h)}break;default:throw new Error("Validate::Length - Length(s) to validate against must be provided!")}return true},Inclusion:function(a,b){var b=b||{};var c=b.failureMessage||"Must be included in the list!";var d=b.caseSensitive===false?false:true;if(b.allowNull&&a==null){return true}if(!b.allowNull&&a==null){Validate.fail(c)}var e=b.within||[];if(!d){var f=[];for(var g=0,h=e.length;g<h;++g){var i=e[g];if(typeof i=="string"){i=i.toLowerCase()}f.push(i)}e=f;if(typeof a=="string"){a=a.toLowerCase()}}var j=false;for(var k=0,h=e.length;k<h;++k){if(e[k]==a){j=true}if(b.partialMatch){if(a.indexOf(e[k])!=-1){j=true}}}if(!b.negate&&!j||b.negate&&j){Validate.fail(c)}return true},Exclusion:function(a,b){var b=b||{};b.failureMessage=b.failureMessage||"Must not be included in the list!";b.negate=true;Validate.Inclusion(a,b);return true},Confirmation:function(a,b){if(!b.match){throw new Error("Validate::Confirmation - Error validating confirmation: Id of element to match must be provided!")}var b=b||{};var c=b.failureMessage||"Does not match!";var d=b.match.nodeName?b.match:document.getElementById(b.match);if(!d){throw new Error("Validate::Confirmation - There is no reference with name of, or element with id of '"+b.match+"'!")}if(a!=d.value){Validate.fail(c)}return true},Acceptance:function(a,b){var b=b||{};var c=b.failureMessage||"Must be accepted!";if(!a){Validate.fail(c)}return true},Custom:function(a,b){var b=b||{};var c=b.against||function(){return true};var d=b.args||{};var e=b.failureMessage||"Not valid!";if(!c(a,d)){Validate.fail(e)}return true},now:function(a,b,c){if(!a){throw new Error("Validate::now - Validation function must be provided!")}var d=true;try{a(b,c||{})}catch(e){if(e instanceof Validate.Error){d=false}else{throw e}}finally{return d}},fail:function(a){throw new Validate.Error(a)},Error:function(a){this.message=a;this.name="ValidationError"}}
