PageRenderTime 61ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/js/gen_validatorv31.js

https://github.com/willdeberry/sudoservers
JavaScript | 808 lines | 751 code | 37 blank | 20 comment | 131 complexity | 53c19cc759a86de986b40fcc145623d1 MD5 | raw file
  1. /*
  2. -------------------------------------------------------------------------
  3. JavaScript Form Validator (gen_validatorv31.js)
  4. Version 3.1.2
  5. Copyright (C) 2003-2008 JavaScript-Coder.com. All rights reserved.
  6. You can freely use this script in your Web pages.
  7. You may adapt this script for your own needs, provided these opening credit
  8. lines are kept intact.
  9. The Form validation script is distributed free from JavaScript-Coder.com
  10. For updates, please visit:
  11. http://www.javascript-coder.com/html-form/javascript-form-validation.phtml
  12. Questions & comments please send to form.val at javascript-coder.com
  13. -------------------------------------------------------------------------
  14. */
  15. function Validator(frmname)
  16. {
  17. this.formobj=document.forms[frmname];
  18. if(!this.formobj)
  19. {
  20. alert("Error: couldnot get Form object "+frmname);
  21. return;
  22. }
  23. if(this.formobj.onsubmit)
  24. {
  25. this.formobj.old_onsubmit = this.formobj.onsubmit;
  26. this.formobj.onsubmit=null;
  27. }
  28. else
  29. {
  30. this.formobj.old_onsubmit = null;
  31. }
  32. this.formobj._sfm_form_name=frmname;
  33. this.formobj.onsubmit=form_submit_handler;
  34. this.addValidation = add_validation;
  35. this.setAddnlValidationFunction=set_addnl_vfunction;
  36. this.clearAllValidations = clear_all_validations;
  37. this.disable_validations = false;//new
  38. document.error_disp_handler = new sfm_ErrorDisplayHandler();
  39. this.EnableOnPageErrorDisplay=validator_enable_OPED;
  40. this.EnableOnPageErrorDisplaySingleBox=validator_enable_OPED_SB;
  41. this.show_errors_together=true;
  42. this.EnableMsgsTogether=sfm_enable_show_msgs_together;
  43. document.set_focus_onerror=true;
  44. this.EnableFocusOnError=sfm_validator_enable_focus;
  45. }
  46. function sfm_validator_enable_focus(enable)
  47. {
  48. document.set_focus_onerror = enable;
  49. }
  50. function set_addnl_vfunction(functionname)
  51. {
  52. this.formobj.addnlvalidation = functionname;
  53. }
  54. function sfm_set_focus(objInput)
  55. {
  56. if(document.set_focus_onerror)
  57. {
  58. objInput.focus();
  59. }
  60. }
  61. function sfm_enable_show_msgs_together()
  62. {
  63. this.show_errors_together=true;
  64. this.formobj.show_errors_together=true;
  65. }
  66. function clear_all_validations()
  67. {
  68. for(var itr=0;itr < this.formobj.elements.length;itr++)
  69. {
  70. this.formobj.elements[itr].validationset = null;
  71. }
  72. }
  73. function form_submit_handler()
  74. {
  75. var bRet = true;
  76. document.error_disp_handler.clear_msgs();
  77. for(var itr=0;itr < this.elements.length;itr++)
  78. {
  79. if(this.elements[itr].validationset &&
  80. !this.elements[itr].validationset.validate())
  81. {
  82. bRet = false;
  83. }
  84. if(!bRet && !this.show_errors_together)
  85. {
  86. break;
  87. }
  88. }
  89. if(this.addnlvalidation)
  90. {
  91. str =" var ret = "+this.addnlvalidation+"()";
  92. eval(str);
  93. if(!ret)
  94. {
  95. bRet=false;
  96. }
  97. }
  98. if(!bRet)
  99. {
  100. document.error_disp_handler.FinalShowMsg();
  101. return false;
  102. }
  103. return true;
  104. }
  105. function add_validation(itemname,descriptor,errstr)
  106. {
  107. var condition = null;
  108. if(arguments.length > 3)
  109. {
  110. condition = arguments[3];
  111. }
  112. if(!this.formobj)
  113. {
  114. alert("Error: The form object is not set properly");
  115. return;
  116. }//if
  117. var itemobj = this.formobj[itemname];
  118. if(itemobj.length && isNaN(itemobj.selectedIndex) )
  119. //for radio button; don't do for 'select' item
  120. {
  121. itemobj = itemobj[0];
  122. }
  123. if(!itemobj)
  124. {
  125. alert("Error: Couldnot get the input object named: "+itemname);
  126. return;
  127. }
  128. if(!itemobj.validationset)
  129. {
  130. itemobj.validationset = new ValidationSet(itemobj,this.show_errors_together);
  131. }
  132. itemobj.validationset.add(descriptor,errstr,condition);
  133. itemobj.validatorobj=this;
  134. }
  135. function validator_enable_OPED()
  136. {
  137. document.error_disp_handler.EnableOnPageDisplay(false);
  138. }
  139. function validator_enable_OPED_SB()
  140. {
  141. document.error_disp_handler.EnableOnPageDisplay(true);
  142. }
  143. function sfm_ErrorDisplayHandler()
  144. {
  145. this.msgdisplay = new AlertMsgDisplayer();
  146. this.EnableOnPageDisplay= edh_EnableOnPageDisplay;
  147. this.ShowMsg=edh_ShowMsg;
  148. this.FinalShowMsg=edh_FinalShowMsg;
  149. this.all_msgs=new Array();
  150. this.clear_msgs=edh_clear_msgs;
  151. }
  152. function edh_clear_msgs()
  153. {
  154. this.msgdisplay.clearmsg(this.all_msgs);
  155. this.all_msgs = new Array();
  156. }
  157. function edh_FinalShowMsg()
  158. {
  159. this.msgdisplay.showmsg(this.all_msgs);
  160. }
  161. function edh_EnableOnPageDisplay(single_box)
  162. {
  163. if(true == single_box)
  164. {
  165. this.msgdisplay = new SingleBoxErrorDisplay();
  166. }
  167. else
  168. {
  169. this.msgdisplay = new DivMsgDisplayer();
  170. }
  171. }
  172. function edh_ShowMsg(msg,input_element)
  173. {
  174. var objmsg = new Array();
  175. objmsg["input_element"] = input_element;
  176. objmsg["msg"] = msg;
  177. this.all_msgs.push(objmsg);
  178. }
  179. function AlertMsgDisplayer()
  180. {
  181. this.showmsg = alert_showmsg;
  182. this.clearmsg=alert_clearmsg;
  183. }
  184. function alert_clearmsg(msgs)
  185. {
  186. }
  187. function alert_showmsg(msgs)
  188. {
  189. var whole_msg="";
  190. var first_elmnt=null;
  191. for(var m=0;m < msgs.length;m++)
  192. {
  193. if(null == first_elmnt)
  194. {
  195. first_elmnt = msgs[m]["input_element"];
  196. }
  197. whole_msg += msgs[m]["msg"] + "\n";
  198. }
  199. alert(whole_msg);
  200. if(null != first_elmnt)
  201. {
  202. sfm_set_focus(first_elmnt);
  203. }
  204. }
  205. function sfm_show_error_msg(msg,input_elmt)
  206. {
  207. document.error_disp_handler.ShowMsg(msg,input_elmt);
  208. }
  209. function SingleBoxErrorDisplay()
  210. {
  211. this.showmsg=sb_div_showmsg;
  212. this.clearmsg=sb_div_clearmsg;
  213. }
  214. function sb_div_clearmsg(msgs)
  215. {
  216. var divname = form_error_div_name(msgs);
  217. show_div_msg(divname,"");
  218. }
  219. function sb_div_showmsg(msgs)
  220. {
  221. var whole_msg="<ul>\n";
  222. for(var m=0;m < msgs.length;m++)
  223. {
  224. whole_msg += "<li>" + msgs[m]["msg"] + "</li>\n";
  225. }
  226. whole_msg += "</ul>";
  227. var divname = form_error_div_name(msgs);
  228. show_div_msg(divname,whole_msg);
  229. }
  230. function form_error_div_name(msgs)
  231. {
  232. var input_element= null;
  233. for(var m in msgs)
  234. {
  235. input_element = msgs[m]["input_element"];
  236. if(input_element){break;}
  237. }
  238. var divname ="";
  239. if(input_element)
  240. {
  241. divname = input_element.form._sfm_form_name + "_errorloc";
  242. }
  243. return divname;
  244. }
  245. function DivMsgDisplayer()
  246. {
  247. this.showmsg=div_showmsg;
  248. this.clearmsg=div_clearmsg;
  249. }
  250. function div_clearmsg(msgs)
  251. {
  252. for(var m in msgs)
  253. {
  254. var divname = element_div_name(msgs[m]["input_element"]);
  255. show_div_msg(divname,"");
  256. }
  257. }
  258. function element_div_name(input_element)
  259. {
  260. var divname = input_element.form._sfm_form_name + "_" +
  261. input_element.name + "_errorloc";
  262. divname = divname.replace(/[\[\]]/gi,"");
  263. return divname;
  264. }
  265. function div_showmsg(msgs)
  266. {
  267. var whole_msg;
  268. var first_elmnt=null;
  269. for(var m in msgs)
  270. {
  271. if(null == first_elmnt)
  272. {
  273. first_elmnt = msgs[m]["input_element"];
  274. }
  275. var divname = element_div_name(msgs[m]["input_element"]);
  276. show_div_msg(divname,msgs[m]["msg"]);
  277. }
  278. if(null != first_elmnt)
  279. {
  280. sfm_set_focus(first_elmnt);
  281. }
  282. }
  283. function show_div_msg(divname,msgstring)
  284. {
  285. if(divname.length<=0) return false;
  286. if(document.layers)
  287. {
  288. divlayer = document.layers[divname];
  289. if(!divlayer){return;}
  290. divlayer.document.open();
  291. divlayer.document.write(msgstring);
  292. divlayer.document.close();
  293. }
  294. else
  295. if(document.all)
  296. {
  297. divlayer = document.all[divname];
  298. if(!divlayer){return;}
  299. divlayer.innerHTML=msgstring;
  300. }
  301. else
  302. if(document.getElementById)
  303. {
  304. divlayer = document.getElementById(divname);
  305. if(!divlayer){return;}
  306. divlayer.innerHTML =msgstring;
  307. }
  308. divlayer.style.visibility="visible";
  309. }
  310. function ValidationDesc(inputitem,desc,error,condition)
  311. {
  312. this.desc=desc;
  313. this.error=error;
  314. this.itemobj = inputitem;
  315. this.condition = condition;
  316. this.validate=vdesc_validate;
  317. }
  318. function vdesc_validate()
  319. {
  320. if(this.condition != null )
  321. {
  322. if(!eval(this.condition))
  323. {
  324. return true;
  325. }
  326. }
  327. if(!validateInput(this.desc,this.itemobj,this.error))
  328. {
  329. this.itemobj.validatorobj.disable_validations=true;
  330. sfm_set_focus(this.itemobj);
  331. return false;
  332. }
  333. return true;
  334. }
  335. function ValidationSet(inputitem,msgs_together)
  336. {
  337. this.vSet=new Array();
  338. this.add= add_validationdesc;
  339. this.validate= vset_validate;
  340. this.itemobj = inputitem;
  341. this.msgs_together = msgs_together;
  342. }
  343. function add_validationdesc(desc,error,condition)
  344. {
  345. this.vSet[this.vSet.length]=
  346. new ValidationDesc(this.itemobj,desc,error,condition);
  347. }
  348. function vset_validate()
  349. {
  350. var bRet = true;
  351. for(var itr=0;itr<this.vSet.length;itr++)
  352. {
  353. bRet = bRet && this.vSet[itr].validate();
  354. if(!bRet && !this.msgs_together)
  355. {
  356. break;
  357. }
  358. }
  359. return bRet;
  360. }
  361. function validateEmail(email)
  362. {
  363. var splitted = email.match("^(.+)@(.+)$");
  364. if(splitted == null) return false;
  365. if(splitted[1] != null )
  366. {
  367. var regexp_user=/^\"?[\w-_\.]*\"?$/;
  368. if(splitted[1].match(regexp_user) == null) return false;
  369. }
  370. if(splitted[2] != null)
  371. {
  372. var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
  373. if(splitted[2].match(regexp_domain) == null)
  374. {
  375. var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
  376. if(splitted[2].match(regexp_ip) == null) return false;
  377. }// if
  378. return true;
  379. }
  380. return false;
  381. }
  382. function IsCheckSelected(objValue,chkValue)
  383. {
  384. var selected=false;
  385. var objcheck = objValue.form.elements[objValue.name];
  386. if(objcheck.length)
  387. {
  388. var idxchk=-1;
  389. for(var c=0;c < objcheck.length;c++)
  390. {
  391. if(objcheck[c].value == chkValue)
  392. {
  393. idxchk=c;
  394. break;
  395. }//if
  396. }//for
  397. if(idxchk>= 0)
  398. {
  399. if(objcheck[idxchk].checked=="1")
  400. {
  401. selected=true;
  402. }
  403. }//if
  404. }
  405. else
  406. {
  407. if(objValue.checked == "1")
  408. {
  409. selected=true;
  410. }//if
  411. }//else
  412. return selected;
  413. }
  414. function TestDontSelectChk(objValue,chkValue,strError)
  415. {
  416. var pass = true;
  417. pass = IsCheckSelected(objValue,chkValue)?false:true;
  418. if(pass==false)
  419. {
  420. if(!strError || strError.length ==0)
  421. {
  422. strError = "Can't Proceed as you selected "+objValue.name;
  423. }//if
  424. sfm_show_error_msg(strError,objValue);
  425. }
  426. return pass;
  427. }
  428. function TestShouldSelectChk(objValue,chkValue,strError)
  429. {
  430. var pass = true;
  431. pass = IsCheckSelected(objValue,chkValue)?true:false;
  432. if(pass==false)
  433. {
  434. if(!strError || strError.length ==0)
  435. {
  436. strError = "You should select "+objValue.name;
  437. }//if
  438. sfm_show_error_msg(strError,objValue);
  439. }
  440. return pass;
  441. }
  442. function TestRequiredInput(objValue,strError)
  443. {
  444. var ret = true;
  445. var val = objValue.value;
  446. val = val.replace(/^\s+|\s+$/g,"");//trim
  447. if(eval(val.length) == 0)
  448. {
  449. if(!strError || strError.length ==0)
  450. {
  451. strError = objValue.name + " : Required Field";
  452. }//if
  453. sfm_show_error_msg(strError,objValue);
  454. ret=false;
  455. }//if
  456. return ret;
  457. }
  458. function TestMaxLen(objValue,strMaxLen,strError)
  459. {
  460. var ret = true;
  461. if(eval(objValue.value.length) > eval(strMaxLen))
  462. {
  463. if(!strError || strError.length ==0)
  464. {
  465. strError = objValue.name + " : "+ strMaxLen +" characters maximum ";
  466. }//if
  467. sfm_show_error_msg(strError,objValue);
  468. ret = false;
  469. }//if
  470. return ret;
  471. }
  472. function TestMinLen(objValue,strMinLen,strError)
  473. {
  474. var ret = true;
  475. if(eval(objValue.value.length) < eval(strMinLen))
  476. {
  477. if(!strError || strError.length ==0)
  478. {
  479. strError = objValue.name + " : " + strMinLen + " characters minimum ";
  480. }//if
  481. sfm_show_error_msg(strError,objValue);
  482. ret = false;
  483. }//if
  484. return ret;
  485. }
  486. function TestInputType(objValue,strRegExp,strError,strDefaultError)
  487. {
  488. var ret = true;
  489. var charpos = objValue.value.search(strRegExp);
  490. if(objValue.value.length > 0 && charpos >= 0)
  491. {
  492. if(!strError || strError.length ==0)
  493. {
  494. strError = strDefaultError;
  495. }//if
  496. sfm_show_error_msg(strError,objValue);
  497. ret = false;
  498. }//if
  499. return ret;
  500. }
  501. function TestEmail(objValue,strError)
  502. {
  503. var ret = true;
  504. if(objValue.value.length > 0 && !validateEmail(objValue.value) )
  505. {
  506. if(!strError || strError.length ==0)
  507. {
  508. strError = objValue.name+": Enter a valid Email address ";
  509. }//if
  510. sfm_show_error_msg(strError,objValue);
  511. ret = false;
  512. }//if
  513. return ret;
  514. }
  515. function TestLessThan(objValue,strLessThan,strError)
  516. {
  517. var ret = true;
  518. if(isNaN(objValue.value))
  519. {
  520. sfm_show_error_msg(objValue.name +": Should be a number ",objValue);
  521. ret = false;
  522. }//if
  523. else
  524. if(eval(objValue.value) >= eval(strLessThan))
  525. {
  526. if(!strError || strError.length ==0)
  527. {
  528. strError = objValue.name + " : value should be less than "+ strLessThan;
  529. }//if
  530. sfm_show_error_msg(strError,objValue);
  531. ret = false;
  532. }//if
  533. return ret;
  534. }
  535. function TestGreaterThan(objValue,strGreaterThan,strError)
  536. {
  537. var ret = true;
  538. if(isNaN(objValue.value))
  539. {
  540. sfm_show_error_msg(objValue.name+": Should be a number ",objValue);
  541. ret = false;
  542. }//if
  543. else
  544. if(eval(objValue.value) <= eval(strGreaterThan))
  545. {
  546. if(!strError || strError.length ==0)
  547. {
  548. strError = objValue.name + " : value should be greater than "+ strGreaterThan;
  549. }//if
  550. sfm_show_error_msg(strError,objValue);
  551. ret = false;
  552. }//if
  553. return ret;
  554. }
  555. function TestRegExp(objValue,strRegExp,strError)
  556. {
  557. var ret = true;
  558. if( objValue.value.length > 0 &&
  559. !objValue.value.match(strRegExp) )
  560. {
  561. if(!strError || strError.length ==0)
  562. {
  563. strError = objValue.name+": Invalid characters found ";
  564. }//if
  565. sfm_show_error_msg(strError,objValue);
  566. ret = false;
  567. }//if
  568. return ret;
  569. }
  570. function TestDontSelect(objValue,dont_sel_index,strError)
  571. {
  572. var ret = true;
  573. if(objValue.selectedIndex == null)
  574. {
  575. sfm_show_error_msg("ERROR: dontselect command for non-select Item");
  576. ret = false;
  577. }
  578. if(objValue.selectedIndex == eval(dont_sel_index))
  579. {
  580. if(!strError || strError.length ==0)
  581. {
  582. strError = objValue.name+": Please Select one option ";
  583. }//if
  584. sfm_show_error_msg(strError,objValue);
  585. ret = false;
  586. }
  587. return ret;
  588. }
  589. function TestSelectOneRadio(objValue,strError)
  590. {
  591. var objradio = objValue.form.elements[objValue.name];
  592. var one_selected=false;
  593. for(var r=0;r < objradio.length;r++)
  594. {
  595. if(objradio[r].checked)
  596. {
  597. one_selected=true;
  598. break;
  599. }
  600. }
  601. if(false == one_selected)
  602. {
  603. if(!strError || strError.length ==0)
  604. {
  605. strError = "Please select one option from "+objValue.name;
  606. }
  607. sfm_show_error_msg(strError,objValue);
  608. }
  609. return one_selected;
  610. }
  611. function validateInput(strValidateStr,objValue,strError)
  612. {
  613. var ret = true;
  614. var epos = strValidateStr.search("=");
  615. var command = "";
  616. var cmdvalue = "";
  617. if(epos >= 0)
  618. {
  619. command = strValidateStr.substring(0,epos);
  620. cmdvalue = strValidateStr.substr(epos+1);
  621. }
  622. else
  623. {
  624. command = strValidateStr;
  625. }
  626. switch(command)
  627. {
  628. case "req":
  629. case "required":
  630. {
  631. ret = TestRequiredInput(objValue,strError)
  632. break;
  633. }//case required
  634. case "maxlength":
  635. case "maxlen":
  636. {
  637. ret = TestMaxLen(objValue,cmdvalue,strError)
  638. break;
  639. }//case maxlen
  640. case "minlength":
  641. case "minlen":
  642. {
  643. ret = TestMinLen(objValue,cmdvalue,strError)
  644. break;
  645. }//case minlen
  646. case "alnum":
  647. case "alphanumeric":
  648. {
  649. ret = TestInputType(objValue,"[^A-Za-z0-9]",strError,
  650. objValue.name+": Only alpha-numeric characters allowed ");
  651. break;
  652. }
  653. case "alnum_s":
  654. case "alphanumeric_space":
  655. {
  656. ret = TestInputType(objValue,"[^A-Za-z0-9\\s]",strError,
  657. objValue.name+": Only alpha-numeric characters and space allowed ");
  658. break;
  659. }
  660. case "num":
  661. case "numeric":
  662. {
  663. ret = TestInputType(objValue,"[^0-9]",strError,
  664. objValue.name+": Only digits allowed ");
  665. break;
  666. }
  667. case "dec":
  668. case "decimal":
  669. {
  670. ret = TestInputType(objValue,"[^0-9\.]",strError,
  671. objValue.name+": Only numbers allowed ");
  672. break;
  673. }
  674. case "alphabetic":
  675. case "alpha":
  676. {
  677. ret = TestInputType(objValue,"[^A-Za-z]",strError,
  678. objValue.name+": Only alphabetic characters allowed ");
  679. break;
  680. }
  681. case "alphabetic_space":
  682. case "alpha_s":
  683. {
  684. ret = TestInputType(objValue,"[^A-Za-z\\s]",strError,
  685. objValue.name+": Only alphabetic characters and space allowed ");
  686. break;
  687. }
  688. case "email":
  689. {
  690. ret = TestEmail(objValue,strError);
  691. break;
  692. }
  693. case "lt":
  694. case "lessthan":
  695. {
  696. ret = TestLessThan(objValue,cmdvalue,strError);
  697. break;
  698. }
  699. case "gt":
  700. case "greaterthan":
  701. {
  702. ret = TestGreaterThan(objValue,cmdvalue,strError);
  703. break;
  704. }//case greaterthan
  705. case "regexp":
  706. {
  707. ret = TestRegExp(objValue,cmdvalue,strError);
  708. break;
  709. }
  710. case "dontselect":
  711. {
  712. ret = TestDontSelect(objValue,cmdvalue,strError)
  713. break;
  714. }
  715. case "dontselectchk":
  716. {
  717. ret = TestDontSelectChk(objValue,cmdvalue,strError)
  718. break;
  719. }
  720. case "shouldselchk":
  721. {
  722. ret = TestShouldSelectChk(objValue,cmdvalue,strError)
  723. break;
  724. }
  725. case "selone_radio":
  726. {
  727. ret = TestSelectOneRadio(objValue,strError);
  728. break;
  729. }
  730. }//switch
  731. return ret;
  732. }
  733. function VWZ_IsListItemSelected(listname,value)
  734. {
  735. for(var i=0;i < listname.options.length;i++)
  736. {
  737. if(listname.options[i].selected == true &&
  738. listname.options[i].value == value)
  739. {
  740. return true;
  741. }
  742. }
  743. return false;
  744. }
  745. function VWZ_IsChecked(objcheck,value)
  746. {
  747. if(objcheck.length)
  748. {
  749. for(var c=0;c < objcheck.length;c++)
  750. {
  751. if(objcheck[c].checked == "1" &&
  752. objcheck[c].value == value)
  753. {
  754. return true;
  755. }
  756. }
  757. }
  758. else
  759. {
  760. if(objcheck.checked == "1" )
  761. {
  762. return true;
  763. }
  764. }
  765. return false;
  766. }
  767. /*
  768. Copyright (C) 2003-2009 JavaScript-Coder.com . All rights reserved.
  769. */