// Utilities for form verification
// Copyrights: Possible Worlds @ 2006

//   var legalUName = "/cr\d+u\d+/i";
//   var legalUName = /cr\d+u\d+/i;
   var legalUName = /cr\d+u[^\@]+\@[^\@]+/i;
   var legalPlName = /pl\d+u[^\@]+\@[^\@]+/i;
   var mailRE = /^[^\@]+\@[^\@]+$/;
   var engOnRE = /^[a-zA-Z0-9\_\-\.]+$/;
   var engOnlyRE = /^[a-zA-Z0-9\_\-]+$/;
   var engMailOnRE = /^\s*[a-zA-Z0-9\_\-\.\@]+\s*$/;
   var numOnly = /^[0-9]+$/;

function checkForm(formName)
{
   toSend = true;
   errCode = 0;

//  alert(formName)
//	   alert(arguments.length)
//	   alert(arguments.length)
//		   alert(arguments);
//	      alert(arguments[0]);
	   for (var i = 1; i < arguments.length; i+=3)
	   {
//	      alert(arguments[i]);
		  theForm = "document." + formName;
			  theFieldType  = arguments[i+1];
			  theField = eval(theForm + "." + arguments[i]);
			  switch (theFieldType) {
				  case "t":
//					  alert (" Text Field")
//'			   	      alert("The field is " + theField)
				      if (!theField.value) {
					     errCode = 1;
						 fldStr = arguments[i+2];
				      }
					 break;

				  case "e":
//					  English only no spaces field (such as password field
//'			   	      alert("The field is " + theField)
				      if (!theField.value) {
					     errCode = 1;
						 fldStr = arguments[i+2];
				      } else {
						  if (!engOnlyRE.test(theField.value)) {
					         errCode = 7;
						     fldStr = arguments[i+2];
						  }
					  }
					 break;


				  case "f":
					  // same as e (password), but allow empty value for cases where we allow not to enter password at all
//					  English only no spaces field (such as password field
//'			   	      alert("The field is " + theField)
				      if (!theField.value) {
				      } else {
						  if (!engOnlyRE.test(theField.value)) {
					         errCode = 7;
						     fldStr = arguments[i+2];
						  }
					  }
					 break;

				  case "q":
//					  equate password field, we compare the field with theField2 for equaty
//'			   	      alert("The field is " + theField)
                      theField2 = eval(theForm + "." + arguments[i] + "2");
				      if (theField.value != theField2.value) {
					         errCode = 8;
						     fldStr = arguments[i+2];
					  }
					 break;

				  case "m":
					  // email field
				      if (!theField.value) {
					     errCode = 1;
						 fldStr = arguments[i+2];
				      } else {
//						  alert(arguments[i]);
                        if  (
                            (!mailRE.test(theField.value)) || 
                        	  (!engMailOnRE.test(theField.value)))
	                         {
	                         	errCode = 5
					        	fldStr = arguments[i+2];
				        	  }
					  }
					 break;

				  case "i":
					  // general integer field (no limits
//					  alert (theField);
					   if (!checkNumOnly(theField)) {
					     errCode = 2;
						 fldStr = arguments[i+2];
					    }
						break;
			  

				  case "c":   
					  // Check box field that must be filled
//					  alert (theField);
                	   if (!theField.checked) {
					     errCode = 3;
						 fldStr = arguments[i+2];
					    }
						break;
			  
				  case "p":   
					  // popup menu that its first entry is 0 and another entry should be selected
			   	        if( theField.selectedIndex == 0) {
					     errCode = 4;
						 fldStr = arguments[i+2];
						}
						break;

                  case "r":   
					  // Radio button with only 2 entries
			            wasChecked = false;
		            	for (jdx=0; jdx<2; jdx++)  { // each radio may have 10 values
		        	    	if (theField[jdx].checked) {
                               wasChecked = true;
						       break;
				            }
		             	}			   	        
	            		if (!wasChecked) {
					        errCode = 6;
						    fldStr = arguments[i+2];
						}
						break;

			  } // switch field type
			  if (errCode) {
				  break;
			  } // if an error code leave the argument loop
       } // for

	   if (errCode) {
		   switch (errCode) {
	          case 1:  // normal text field must be filled
                 alert ("אנא הקלידו ערך בשדה  - " + fldStr )
                 theField.focus()
                 theField.select()
			    break;

		      case 2:  // normal Integer
                 alert ("Please enter an integer into the [" + fldStr + "]  field")
                 theField.focus()
                 theField.select()
			    break;
	   
		      case 3:  // normal Integer
                 alert ("The checkbox on the [" + fldStr + "]  field must be checked")
                 theField.focus()
                 theField.select()
			    break;
	   
		      case 4:  // normal Integer
                 alert ("עליכם לבחור ערך מהתפריט הבא  - " + fldStr)
                 theField.focus()
//                 theField.select()
			    break;
	   
	          case 5:  // E-mail
                 alert ("כתובת דואר אלקטרוני אינה חוקית בשדה  - " + fldStr)
                 theField.focus()
                 theField.select()
			    break;

	          case 6:  // Radiol
                 alert ("עליכם לבחור ערך (כפתור רדיו) בשדה  - " + fldStr)
			    break;

	          case 7:  // English Only
                 alert ("יש להקליד רק אותיות אנגליות בלבד (כולל _ או -) ללא רווח בשדה  - " + fldStr)
                 theField.focus()
                 theField.select()
			    break;

	          case 8:  // Password field
                 alert ("שדות הסיסמה אינם זהים ")
                 theField2.focus()
                 theField2.select()
			    break;

		   }
	   }

	   if (errCode) {
		   return false;
	   } else {
		   return true;
	   }
} // checkForm


function checkNumOnly(theField) 
{
   theRetValue = true;
//   alert (theField.value)
   if (theField.value && numOnly.test(theField.value))
   {
   } else {
       theRetValue = false;
       errCode = 2
   }
   document.retVal = theRetValue;
   return theRetValue
} // checkNumOnly


