// // Form check script // Copyright 2006 TheDeal LLC // V 1.0 // // FormElement object (Name, Description, Type, Required, Extra, Min, Max) // | TYPE | EXTRA | MIN | MAX | // |----------------------------------------------------------| // | integer | | min value | max value | // | float | # decimal pl | min value | max value | // | date | format m/d/y | min date | max date | // | namecheck | prefix | New only | | // | multiname | new/null | | | // |----------------------------------------------------------| // var formElementList = new Array(); function verifyAndSubmit (n) { if ( verifyForm(n) ) document.forms[n].submit(); } function verifyForm(n) { var formObj = document.forms[n]; var formOK = true; var reqMessage = ""; var numMessage = ""; var datMessage = ""; var chkMessage = ""; var invMessage = ""; if ( formObj ) { for (var i = 0; i < formElementList.length; i++){ var fieldElement = formElementList[i]; var o = formObj.elements[fieldElement.name]; if (o){ if ( fieldElement.bg == null ) fieldElement.bg = o.style.background; var elementOK = true; var fieldVal = getFieldValue(o); if ( fieldElement.type == "multiname" && fieldElement.req ) { if ( fieldElement.extra != null ) { if ( fieldVal == "nochange" || fieldVal == "empty" ) fieldVal = null; } else { if ( fieldVal == "empty" ) fieldVal = null; } } if ( fieldElement.req && fieldVal == null ) { reqMessage += " -- " + fieldElement.desc + "\n"; formOK = false; elementOK = false; } if ( fieldVal != null ) { switch(fieldElement.type){ case "integer": if ( !isInteger(fieldVal) ) { numMessage += " -- " + fieldElement.desc + "\n"; formOK = false; elementOK = false; } else { if ( !isInRange(fieldVal, fieldElement.min, fieldElement.max) ) { numMessage += " -- " + fieldElement.desc + " - Not in range [" + fieldElement.min + " : " + fieldElement.max + "]\n"; formOK = false; elementOK = false; } } break; case "float": if ( !isFloat(fieldVal, fieldElement.extra) ) { numMessage += " -- " + fieldElement.desc + " - max " + fieldElement.extra + " decimal places\n"; formOK = false; elementOK = false; } else { if ( !isInRange(fieldVal, fieldElement.min, fieldElement.max) ) { numMessage += " -- " + fieldElement.desc + " - Not in range [" + fieldElement.min + " : " + fieldElement.max + "]\n"; formOK = false; elementOK = false; } } break; case "date": if ( !isDate(fieldVal, fieldElement.extra) ) { datMessage += " -- " + fieldElement.desc + " [" + fieldElement.extra + "]\n"; formOK = false; elementOK = false; } else { if ( !isDateInRange (fieldVal, fieldElement.min, fieldElement.max) ) { var a = confirm(fieldElement.desc + " - Not in range [" + fieldElement.min + " : " + fieldElement.max + "]\n Are you sure?\n"); if ( !a ) { datMessage += " -- " + fieldElement.desc + " - Not in range [" + fieldElement.min + " : " + fieldElement.max + "]\n"; formOK = false; elementOK = false; } } } break; case "namecheck": if ( !idDBCheck(fieldElement.extra, fieldElement.min) ) { chkMessage += " -- " + fieldElement.desc + "\n"; formOK = false; elementOK = false; } break; default: } // end Switch loop } // End if fieldVal != null if ( elementOK ) { o.style.background = fieldElement.bg; } else { o.style.background = "#FFCCCC"; } } // end if o } // end for loop if ( !formOK ) { var alertMessage = "Please correct the following before submiting!\n\n"; if ( reqMessage.length > 3 ) alertMessage += " Required fields:\n" + reqMessage + "\n"; if ( invMessage.length > 3 ) alertMessage += " Invalid input:\n" + invMessage + "\n"; if ( numMessage.length > 3 ) alertMessage += " Invalid number format:\n" + numMessage + "\n"; if ( datMessage.length > 3 ) alertMessage += " Invalid date format:\n" + datMessage + "\n"; if ( chkMessage.length > 3 ) alertMessage += " Name not check in Database:\n" + chkMessage + "\n"; alert(alertMessage); } return formOK; } } // // Get field value // function getFieldValue (o) { var fieldValue = null; switch(o.type){ case "select-one": if (o.selectedIndex != -1 && o.options[o.selectedIndex].text != ""){ fieldValue = o.options[o.selectedIndex].text; } break; case "select-multiple": if (o.selectedIndex != -1){ fieldValue = "selected"; } break; case "text": if ( trimText(o.value) != "" ) { fieldValue = o.value; } break; case "textarea": if (trimText(o.value) != "" && o.value == null){ fieldValue = o.value; } break; case "password": if ( trimText(o.value) != "" ) { fieldValue = o.value; } break; case "hidden": if ( trimText(o.value) != "" ) { fieldValue = o.value; } break; default: } // end switch if (o.type == undefined){ var bnch = false; for (var j = 0; j < o.length; j++){ if (o[j].checked){ bnch = true; } } if (bnch){ fieldValue = "checked"; } } // end if undefined return fieldValue; } // // // function isInRange (v, min, max) { var isinrange = true; if ( min != null && v < min ) isinrange = false; if ( max != null && v > max ) isinrange = false; return isinrange; } // // // function isDateInRange (v, min, max) { var isinrange = true; var d = Date.parse(v); if ( min != null ) { var dm = Date.parse(min); if ( d < dm ) isinrange = false; } if ( max != null ) { var dm = Date.parse(max); if ( d > dm ) isinrange = false; } return isinrange; } // // Database check // function idDBCheck (id, newonly) { var dbCheck = false; var o = document.getElementById(id+ "_id"); if (o && o.value != 0 ){ dbCheck = true; if ( newonly && o.value > 0 ) { dbCheck = false; alert("Add new company only! Can not select from database!"); } } return dbCheck; } // // Check if value is Date // function isDate (d, f) { var isdate = true; var pdel = "/"; var pmm = -1; var plm = 0; var pdd = -1; var pld = 0; var pyy = -1; var ply = 0; var plena = 0; var plenb = 0; var pitem = 0; var pminyear = 0; var pmaxyear = 0; var cy = 0; var cm = 0; var cd = 0; if ( f == "mm/dd/yyyy" ) { plena = 10; plenb = 10; pdel = "/"; pmm = 0; plm = 2; pdd = 1; pld = 2; pyy = 2; ply = 4; pitem = 3; pminyear = 1900; pmaxyear = 3000; } else if ( f == "mm-dd-yyyy" ) { plena = 10; plenb = 10; pdel = "-"; pmm = 0; plm = 2; pdd = 1; pld = 2; pyy = 2; ply = 4; pitem = 3; pminyear = 1900; pmaxyear = 3000; } else if ( f == "mm/dd/yy" ) { plena = 8; plenb = 8; pdel = "/"; pmm = 0; plm = 2; pdd = 1; pld = 2; pyy = 2; ply = 2; pitem = 3; pminyear = 0; pmaxyear = 99; } if ( d != null ) { if ( d.length < plena || d.length > plenb ) isdate = false; else { var ditems = d.split(pdel); if ( ditems.length != pitem ) isdate = false; else { var tyy = ditems[pyy]; var tmm = ditems[pmm]; var tdd = ditems[pdd]; if ( isInteger(tyy) && ply == tyy.length ) { if ( tyy < pminyear || tyy > pmaxyear ) isdate = false; } else { isdate = false; } if ( isdate && isInteger(tmm) && plm == tmm.length ) { if ( tmm < 1 || tmm > 12 ) isdate = false; } else { isdate = false; } if ( isdate && isInteger(tdd) && pld == tdd.length ) { var lastDay = getLastOfMonth(tmm, tyy); if ( tdd < 1 || tdd > lastDay ) isdate = false; } else { isdate = false; } } } } return isdate; } // // Get last day of month // function getLastOfMonth (m, y) { var lastDayOfMonth = [31,28,31,30,31,30,31,31,30,31,30,31]; if ( y % 4 == 0 ) { lastDayOfMonth[1] = 29; } return lastDayOfMonth[m-1]; } // // Check if value is Float // function isFloat (n, d) { var Numbers = "0123456789."; var isnum=true; var charAt; for (i = 0; i < n.length && isnum == true; i++) { charAt = n.charAt(i); if ( Numbers.indexOf(charAt) == -1) { if ( i == 0 && charAt == '-' ) { } else { isnum = false; } } } if ( isnum && d && d > 0 ) { var tn = n + ""; var pindex = tn.indexOf("."); if ( pindex > 0 ) { var ptemp = tn.length - pindex - 1; if ( ptemp > d ) { isnum = false; } } } return isnum; } // // Check if value is Integer // function isInteger (n) { var Numbers = "0123456789"; var isnum=true; var charAt; for (i = 0; i < n.length && isnum == true; i++) { charAt = n.charAt(i); if ( Numbers.indexOf(charAt) == -1) { if ( i == 0 && charAt == '-' ) { } else { isnum = false; } } } return isnum; } // // Trim text // function trimText(str) { return str.replace(/^\s*|\s*$/g,""); } // // Add new FormElement (Name, Description, Type, Required, Extra, Min, Max) // function addFormElement(n, d, t, r, e, min, max) { var fe = new FormElement(n, d, t, r, e, min, max); formElementList[formElementList.length] = fe; } // // FormElement object // function FormElement (pname, pdesc, ptype, preq, pextra, pmin, pmax) { this.name = pname; this.desc = pdesc; this.req = preq; this.type = ptype; this.extra = pextra; this.min = pmin; this.max = pmax; this.bg = null; }