
function tmt_validatorInit(){
var formNodes=document.getElementsByTagName("form");
for(var i=0;i<formNodes.length;i++){
if(formNodes[i].getAttribute("tmt:validate")=="true"){
formNodes[i].tmt_validator=new tmt_formValidator(formNodes[i]);
if(typeof formNodes[i].onsubmit!="function"){
formNodes[i].onsubmit=function(){
return tmt_validateForm(this);
}
}
else{
formNodes[i].tmt_oldSubmit=formNodes[i].onsubmit;
formNodes[i].onsubmit=function(){
if(this.tmt_oldSubmit()){
return tmt_validateForm(this);
}
return false;
}
}
}
}
}
function tmt_validateForm(formNode){
var errorMsg="";
var formValidator=formNode.tmt_validator;
if(formValidator){
var focusGiven=false;
var invalidFields=new Array();
for(var i=0;i<formValidator.validators.length;i++){
if(formValidator.validators[i].validate()){
errorMsg+=formValidator.validators[i].message+"\n";
invalidFields[invalidFields.length]=formValidator.validators[i];
if(!focusGiven&&(formValidator.validators[i].type=="text")){
formValidator.validators[i].getFocus();
focusGiven=true;
}
}
}
if(errorMsg!=""){
if(!formValidator.callback){
alert(errorMsg);
}
else{
eval(formValidator.callback+"(formNode, invalidFields)");
}
}
else{
formValidator.blockSubmit();
}
}
return errorMsg.length==0;
}
function tmt_formValidator(formNode){
this.validators=new Array();
if(formNode.getAttribute("tmt:callback")&&window[formNode.getAttribute("tmt:callback")]){
this.callback=formNode.getAttribute("tmt:callback");
}
var fieldsArray=tmt_getTextfieldNodes(formNode);
for(var i=0;i<fieldsArray.length;i++){
this.validators[this.validators.length]=tmt_textValidatorFactory(fieldsArray[i]);
if(fieldsArray[i].getAttribute("type")){
if((fieldsArray[i].getAttribute("type").toLowerCase()=="file")&&(fieldsArray[i].getAttribute("tmt:image")=="true")){
fieldsArray[i].onchange=function(){
tmt_validateImg(this);
}
}
}
if(fieldsArray[i].getAttribute("tmt:filters")){
addEvent(fieldsArray[i],"keyup",function(){tmt_filterField(this);});
addEvent(fieldsArray[i],"blur",function(){tmt_filterField(this);});
}
}
var selectNodes=formNode.getElementsByTagName("select");
for(var j=0;j<selectNodes.length;j++){
this.validators[this.validators.length]=tmt_selectValidatorFactory(selectNodes[j]);
}
var boxTable=tmt_getNodesTable(formNode,"checkbox");
for(var boxName in boxTable){
this.validators[this.validators.length]=tmt_boxValidatorFactory(boxTable[boxName]);
}
var radioTable=tmt_getNodesTable(formNode,"radio");
for(var radioName in radioTable){
this.validators[this.validators.length]=tmt_radioValidatorFactory(radioTable[radioName]);
}
this.buttons=tmt_getSubmitNodes(formNode);
this.blockSubmit=function(){
if(!formNode.getAttribute("tmt:blocksubmit")&&!(formNode.getAttribute("tmt:blocksubmit")=="false")){
for(var i=0;i<this.buttons.length;i++){
if(this.buttons[i].getAttribute("tmt:waitmessage")){
this.buttons[i].value=this.buttons[i].getAttribute("tmt:waitmessage");
}
this.buttons[i].disabled=true;
}
}
}
}
function tmt_abstractValidator(fieldNode){
this.message="";
this.name=fieldNode.name;
if(fieldNode.getAttribute("tmt:message")){
this.message=fieldNode.getAttribute("tmt:message");
}
var errorClass="";
if(fieldNode.getAttribute("tmt:errorclass")){
errorClass=fieldNode.getAttribute("tmt:errorclass");
}
this.flagInvalid=function(){
if(errorClass){
if(fieldNode.className.indexOf(errorClass)==-1){
fieldNode.className=fieldNode.className+" "+errorClass;
}
}
fieldNode.setAttribute("title",this.message);
}
this.flagValid=function(){
if(errorClass){
var regClass=new RegExp("\\b"+errorClass);
fieldNode.className=fieldNode.className.replace(regClass,"");
}
fieldNode.removeAttribute("title");
}
this.validate=function(){
if(fieldNode.disabled){
this.flagValid();
return false;
}
if(!this.isValid()){
this.flagInvalid();
return true;
}
else{
this.flagValid();
return false;
}
}
}
function tmt_textValidatorFactory(fieldNode){
var obj=new tmt_abstractValidator(fieldNode);
obj.type="text";
var required=false;
if(fieldNode.getAttribute("tmt:required")){
required=fieldNode.getAttribute("tmt:required");
}
obj.getFocus=function(){
try{
fieldNode.focus();
fieldNode.select();
}
catch(exception){
}
}
obj.isEmpty=function(){
return fieldNode.value=="";
}
obj.isRequired=function(){
return required;
}
obj.isValid=function(){
if(obj.isEmpty()&&(required!="conditional")){
if(obj.isRequired()){
return false;
}
else{
return true;
}
}
else{
for(var rule in tmt_globalRules){
if(fieldNode.getAttribute("tmt:"+rule)){
if(!eval("tmt_globalRules."+rule+"(fieldNode)")){
return false;
}
}
}
}
return true;
}
return obj;
}
function tmt_selectValidatorFactory(selectNode){
var obj=new tmt_abstractValidator(selectNode);
obj.type="select";
var required=false;
var invalidIndex;
if(selectNode.getAttribute("tmt:invalidindex")){
invalidIndex=selectNode.getAttribute("tmt:invalidindex");
}
var invalidValue;
if(selectNode.getAttribute("tmt:invalidvalue")!=null){
invalidValue=selectNode.getAttribute("tmt:invalidvalue");
}
obj.isRequired=function(){
return required;
}
obj.isValid=function(){
if(selectNode.selectedIndex==invalidIndex){
return false;
}
if(selectNode.value==invalidValue){
return false;
}
for(var rule in tmt_globalRules){
if(selectNode.getAttribute("tmt:"+rule)){
if(!eval("tmt_globalRules."+rule+"(selectNode)")){
return false;
}
}
}
return true;
}
return obj;
}
function tmt_groupValidatorFactory(buttonGroup){
this.name=buttonGroup.name;
this.message="";
this.errorClass="";
for(var i=0;i<buttonGroup.elements.length;i++){
if(buttonGroup.elements[i].getAttribute("tmt:message")){
this.message=buttonGroup.elements[i].getAttribute("tmt:message");
}
if(buttonGroup.elements[i].getAttribute("tmt:errorclass")){
this.errorClass=buttonGroup.elements[i].getAttribute("tmt:errorclass");
}
}
this.flagInvalid=function(){
if(this.errorClass){
for(var i=0;i<buttonGroup.elements.length;i++){
if(buttonGroup.elements[i].className.indexOf(this.errorClass)==-1){
buttonGroup.elements[i].className=buttonGroup.elements[i].className+" "+this.errorClass;
}
buttonGroup.elements[i].setAttribute("title",this.message);
}
}
}
this.flagValid=function(){
if(this.errorClass){
var regClass=new RegExp("\\b"+this.errorClass);
for(var i=0;i<buttonGroup.elements.length;i++){
buttonGroup.elements[i].className=buttonGroup.elements[i].className.replace(regClass,"");
buttonGroup.elements[i].removeAttribute("title");
}
}
}
this.validate=function(){
var errorMsg="";
if(!this.isValid()){
errorMsg+=this.message;
this.flagInvalid();
}
else{
this.flagValid();
}
return errorMsg;
}
}
function tmt_boxValidatorFactory(boxGroup){
var obj=new tmt_groupValidatorFactory(boxGroup);
obj.type="box";
var minchecked=0;
var maxchecked=boxGroup.elements.length;
for(var i=0;i<boxGroup.elements.length;i++){
if(boxGroup.elements[i].getAttribute("tmt:minchecked")){
minchecked=boxGroup.elements[i].getAttribute("tmt:minchecked");
}
if(boxGroup.elements[i].getAttribute("tmt:maxchecked")){
maxchecked=boxGroup.elements[i].getAttribute("tmt:maxchecked");
}
}
obj.isValid=function(){
var checkCounter=0;
for(var i=0;i<boxGroup.elements.length;i++){
if(boxGroup.elements[i].checked){
checkCounter++;
}
}
return(checkCounter>=minchecked)&&(checkCounter<=maxchecked);
}
return obj;
}
function tmt_radioValidatorFactory(radioGroup){
var obj=new tmt_groupValidatorFactory(radioGroup);
obj.type="radio";
obj.isRequired=function(){
var requiredFlag=false;
for(var i=0;i<radioGroup.elements.length;i++){
if(radioGroup.elements[i].disabled==false){
if(radioGroup.elements[i].getAttribute("tmt:required")){
requiredFlag=radioGroup.elements[i].getAttribute("tmt:required");
}
}
}
return requiredFlag;
}
obj.isValid=function(){
if(obj.isRequired()){
for(var i=0;i<radioGroup.elements.length;i++){
if(radioGroup.elements[i].checked){
return true;
}
}
return false;
}
else{
return true;
}
}
return obj;
}
var tmt_globalRules=new Object;
tmt_globalRules.datepattern=function(fieldNode){
var globalObj=tmt_globalDatePatterns[fieldNode.getAttribute("tmt:datepattern")];
if(globalObj){
var dateBits=fieldNode.value.split(globalObj.s);
var testDate=new Date(dateBits[globalObj.y],(dateBits[globalObj.m]-1),dateBits[globalObj.d]);
var isDate=(testDate.getFullYear()==dateBits[globalObj.y])
&&(testDate.getMonth()==dateBits[globalObj.m]-1)
&&(testDate.getDate()==dateBits[globalObj.d]);
return isDate&&globalObj.rex.test(fieldNode.value);
}
}
tmt_globalRules.equalto=function(fieldNode){
var twinNode=document.getElementById(fieldNode.getAttribute("tmt:equalto"));
return twinNode.value==fieldNode.value;
}
tmt_globalRules.maxlength=function(fieldNode){
if(fieldNode.value.length>fieldNode.getAttribute("tmt:maxlength")){
return false;
}
return true;
}
tmt_globalRules.maxnumber=function(fieldNode){
if(parseFloat(fieldNode.value)>fieldNode.getAttribute("tmt:maxnumber")){
return false;
}
return true;
}
tmt_globalRules.minlength=function(fieldNode){
if(fieldNode.value.length<fieldNode.getAttribute("tmt:minlength")){
return false;
}
return true;
}
tmt_globalRules.minnumber=function(fieldNode){
if(parseFloat(fieldNode.value)<fieldNode.getAttribute("tmt:minnumber")){
return false;
}
return true;
}
tmt_globalRules.pattern=function(fieldNode){
var reg=tmt_globalPatterns[fieldNode.getAttribute("tmt:pattern")];
if(reg){
return reg.test(fieldNode.value);
}
else{
return true;
}
}
tmt_globalRules.image=function(fieldNode){
if(!fieldNode.isValidImg){
fieldNode.isValidImg="true";
}
return fieldNode.isValidImg=="true";
}
function tmt_validateImg(fieldNode){
var imgURL="file:///"+fieldNode.value;
var img=new Image();
img.maxSize=fieldNode.getAttribute("tmt:imagemaxsize");
img.maxWidth=fieldNode.getAttribute("tmt:imagemaxwidth");
img.minWidth=fieldNode.getAttribute("tmt:imageminwidth");
img.maxHeight=fieldNode.getAttribute("tmt:imagemaxheight");
img.minHeight=fieldNode.getAttribute("tmt:imageminheight");
img.fieldNode=fieldNode;
img.onload=tmt_validateImgCallback;
img.src=imgURL;
}
function tmt_validateImgCallback(){
var errorsCount=0;
if(this.fileSize&&this.maxSize&&(this.fileSize/1024)>this.maxSize){
errorsCount++;
}
if(this.maxWidth&&(this.width>this.maxWidth)){
errorsCount++;
}
if(this.minWidth&&(this.width<this.minWidth)){
errorsCount++;
}
if(this.maxHeight&&(this.height>this.maxHeight)){
errorsCount++;
}
if(this.minHeight&&(this.height<this.minHeight)){
errorsCount++;
}
this.fieldNode.isValidImg=(errorsCount!=0)?"false":"true";
}
var tmt_globalPatterns=new Object;
tmt_globalPatterns.email=new RegExp("^[\\w\\.=-]+@[\\w\\.-]+\\.[\\w\\.-]{2,4}$");
tmt_globalPatterns.lettersonly=new RegExp("^[a-zA-Z]*$");
tmt_globalPatterns.alphanumeric=new RegExp("^\\w*$");
tmt_globalPatterns.integer=new RegExp("^-?\\d\\d*$");
tmt_globalPatterns.positiveinteger=new RegExp("^\\d\\d*$");
tmt_globalPatterns.number=new RegExp("^-?(\\d\\d*\\.\\d*$)|(^-?\\d\\d*$)|(^-?\\.\\d\\d*$)");
tmt_globalPatterns.filepath_pdf=new RegExp("\\\\[\\w_]*\\.([pP][dD][fF])$");
tmt_globalPatterns.filepath_jpg_gif=new RegExp("\\\\[\\w_]*\\.([gG][iI][fF])|([jJ][pP][eE]?[gG])$");
tmt_globalPatterns.filepath_jpg=new RegExp("\\\\[\\w_]*\\.([jJ][pP][eE]?[gG])$");
tmt_globalPatterns.filepath_zip=new RegExp("\\\\[\\w_]*\\.([zZ][iI][pP])$");
tmt_globalPatterns.filepath=new RegExp("\\\\[\\w_]*\\.\\w{3}$");
var tmt_globalDatePatterns=new Object;
tmt_globalDatePatterns["YYYY-MM-DD"]=tmt_dateInfo("^\([0-9]{4}\)\\-\([0-1][0-9]\)\\-\([0-3][0-9]\)$",0,1,2,"-");
tmt_globalDatePatterns["YYYY-M-D"]=tmt_dateInfo("^\([0-9]{4}\)\\-\([0-1]?[0-9]\)\\-\([0-3]?[0-9]\)$",0,1,2,"-");
tmt_globalDatePatterns["MM.DD.YYYY"]=tmt_dateInfo("^\([0-1][0-9]\)\\.\([0-3][0-9]\)\\.\([0-9]{4}\)$",2,0,1,".");
tmt_globalDatePatterns["M.D.YYYY"]=tmt_dateInfo("^\([0-1]?[0-9]\)\\.\([0-3]?[0-9]\)\\.\([0-9]{4}\)$",2,0,1,".");
tmt_globalDatePatterns["MM/DD/YYYY"]=tmt_dateInfo("^\([0-1][0-9]\)\/\([0-3][0-9]\)\/\([0-9]{4}\)$",2,0,1,"/");
tmt_globalDatePatterns["M/D/YYYY"]=tmt_dateInfo("^\([0-1]?[0-9]\)\/\([0-3]?[0-9]\)\/\([0-9]{4}\)$",2,0,1,"/");
tmt_globalDatePatterns["MM-DD-YYYY"]=tmt_dateInfo("^\([0-21][0-9]\)\\-\([0-3][0-9]\)\\-\([0-9]{4}\)$",2,0,1,"-");
tmt_globalDatePatterns["M-D-YYYY"]=tmt_dateInfo("^\([0-1]?[0-9]\)\\-\([0-3]?[0-9]\)\\-\([0-9]{4}\)$",2,0,1,"-");
tmt_globalDatePatterns["DD.MM.YYYY"]=tmt_dateInfo("^\([0-3][0-9]\)\\.\([0-1][0-9]\)\\.\([0-9]{4}\)$",2,1,0,".");
tmt_globalDatePatterns["D.M.YYYY"]=tmt_dateInfo("^\([0-3]?[0-9]\)\\.\([0-1]?[0-9]\)\\.\([0-9]{4}\)$",2,1,0,".");
tmt_globalDatePatterns["DD/MM/YYYY"]=tmt_dateInfo("^\([0-3][0-9]\)\/\([0-1][0-9]\)\/\([0-9]{4}\)$",2,1,0,"/");
tmt_globalDatePatterns["D/M/YYYY"]=tmt_dateInfo("^\([0-3]?[0-9]\)\/\([0-1]?[0-9]\)\/\([0-9]{4}\)$",2,1,0,"/");
tmt_globalDatePatterns["DD-MM-YYYY"]=tmt_dateInfo("^\([0-3][0-9]\)\\-\([0-1][0-9]\)\\-\([0-9]{4}\)$",2,1,0,"-");
tmt_globalDatePatterns["D-M-YYYY"]=tmt_dateInfo("^\([0-3]?[0-9]\)\\-\([0-1]?[0-9]\)\\-\([0-9]{4}\)$",2,1,0,"-");
function tmt_dateInfo(rex,year,month,day,separator){
var infoObj=new Object;
infoObj.rex=new RegExp(rex);
infoObj.y=year;
infoObj.m=month;
infoObj.d=day;
infoObj.s=separator;
return infoObj;
}
var tmt_globalFilters=new Object;
tmt_globalFilters.ltrim=tmt_filterInfo("^(\\s*)(\\b[\\w\\W]*)$","$2");
tmt_globalFilters.rtrim=tmt_filterInfo("^([\\w\\W]*)(\\b\\s*)$","$1");
tmt_globalFilters.nospaces=tmt_filterInfo("\\s*","");
tmt_globalFilters.nocommas=tmt_filterInfo(",","");
tmt_globalFilters.nodots=tmt_filterInfo("\\.","");
tmt_globalFilters.noquotes=tmt_filterInfo("'","");
tmt_globalFilters.nodoublequotes=tmt_filterInfo('"',"");
tmt_globalFilters.nohtml=tmt_filterInfo("<[^>]*>","");
tmt_globalFilters.alphanumericonly=tmt_filterInfo("[^\\w]","");
tmt_globalFilters.numbersonly=tmt_filterInfo("[^\\d]","");
tmt_globalFilters.lettersonly=tmt_filterInfo("[^a-zA-Z]","");
tmt_globalFilters.commastodots=tmt_filterInfo(",",".");
tmt_globalFilters.dotstocommas=tmt_filterInfo("\\.",",");
tmt_globalFilters.numberscommas=tmt_filterInfo("[^\\d,]","");
tmt_globalFilters.numbersdots=tmt_filterInfo("[^\\d\\.]","");
function tmt_filterInfo(rex,replaceStr){
var infoObj=new Object;
infoObj.rex=new RegExp(rex,"g");
infoObj.str=replaceStr;
return infoObj;
}
function tmt_filterField(fieldNode){
var filtersArray=fieldNode.getAttribute("tmt:filters").split(",");
for(var i=0;i<filtersArray.length;i++){
var filtObj=tmt_globalFilters[filtersArray[i]];
if(filtObj){
fieldNode.value=fieldNode.value.replace(filtObj.rex,filtObj.str)
}
if(filtersArray[i]=="demoronizer"){
fieldNode.value=tmt_filterDemoronizer(fieldNode.value);
}
}
}
function tmt_filterDemoronizer(str){
str=str.replace(new RegExp(String.fromCharCode(710),"g"),"^");
str=str.replace(new RegExp(String.fromCharCode(732),"g"),"~");
str=str.replace(new RegExp(String.fromCharCode(8216),"g"),"'");
str=str.replace(new RegExp(String.fromCharCode(8217),"g"),"'");
str=str.replace(new RegExp(String.fromCharCode(8220),"g"),'"');
str=str.replace(new RegExp(String.fromCharCode(8221),"g"),'"');
str=str.replace(new RegExp(String.fromCharCode(8211),"g"),"-");
str=str.replace(new RegExp(String.fromCharCode(8212),"g"),"--");
str=str.replace(new RegExp(String.fromCharCode(8218),"g"),",");
str=str.replace(new RegExp(String.fromCharCode(8222),"g"),",,");
str=str.replace(new RegExp(String.fromCharCode(8226),"g"),"*");
str=str.replace(new RegExp(String.fromCharCode(8230),"g"),"...");
str=str.replace(new RegExp(String.fromCharCode(8364),"g"),"€");
return str;
}
function tmt_getSubmitNodes(startNode){
var submitArray=new Array();
var inputNodes=startNode.getElementsByTagName("input");
for(var i=0;i<inputNodes.length;i++){
if(inputNodes[i].getAttribute("type").toLowerCase()=="submit"){
submitArray[submitArray.length]=inputNodes[i];
}
}
return submitArray;
}
function tmt_getTextfieldNodes(startNode){
var inputsArray=new Array();
var inputNodes=startNode.getElementsByTagName("input");
var areaNodes=startNode.getElementsByTagName("textarea");
for(var i=0;i<inputNodes.length;i++){
if(!inputNodes[i].getAttribute("type")){
inputNodes[i].setAttribute("type","text");
}
var fieldType=inputNodes[i].getAttribute("type").toLowerCase();
if((fieldType=="text")||(fieldType=="password")||(fieldType=="file")||(fieldType=="hidden")){
inputsArray[inputsArray.length]=inputNodes[i];
}
}
for(var j=0;j<areaNodes.length;j++){
inputsArray[inputsArray.length]=areaNodes[j];
}
return inputsArray;
}
function tmt_getNodesTable(formNode,type){
var boxHolder=new Object;
var boxNodes=formNode.getElementsByTagName("input");
for(var i=0;i<boxNodes.length;i++){
if(boxNodes[i].getAttribute("type")&&(boxNodes[i].getAttribute("type").toLowerCase()==type)){
var boxName=boxNodes[i].name;
if(boxHolder[boxName]){
boxHolder[boxName].elements[boxHolder[boxName].elements.length]=boxNodes[i];
}
else{
boxHolder[boxName]=new Object;
boxHolder[boxName].name=boxName;
boxHolder[boxName].elements=new Array;
boxHolder[boxName].elements[0]=boxNodes[i];
}
}
}
return boxHolder;
}
function addEvent(obj,type,fn){
if(obj.addEventListener){
obj.addEventListener(type,fn,false);
}
else if(obj.attachEvent){
obj["e"+type+fn]=fn;
obj[type+fn]=function(){
obj["e"+type+fn](window.event);
}
obj.attachEvent("on"+type,obj[type+fn]);
}
}
addEvent(window,"load",tmt_validatorInit);