/* ------------------------------------------------------------
 * Dependency: \javascript-coder\gen_validator2.js
 *             \doc.async.com.br\FormChek.js
 *
 * ------------------------------------------------------------
 */


// e.g. emails = a@a.com, b@b.com; c@c.com
function validateMultipleEmails(emails) {
    pattern = /\s*(;|,)\s*/;
    emailList = emails.split(pattern);
    for ( i = 0; i < emailList.length; i++) {
       if(!validateEmailv2(emailList[i])) {
         return false;
       }
    }
    return true;
}



// e.g. parmValue = 10.1.11.18
function isIPAddress(parmValue) {
    ipPattern = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/ ;
    if (parmValue.match(ipPattern)) {
      return true;
    } else {
      return false;
    }
}

// e.g. multipleIP = 111.111.111.111, 23.23.23.23; 255.255.255.255
function isMulitpleIPAddresses(multipleIP) {
    pattern = /\s*(;|,)\s*/;
    ipList = multipleIP.split(pattern);
    for ( i = 0; i < ipList.length; i++) {
       if(!isIPAddress(ipList[i])) {
         return false;
       }
    }
    return true;
}



///////////////////////////////////////////////////////////////////////
//
// - validate datetime format (for all AD years, including leap year handling)
// - should be in the following format:
//    {
//     yyyy-mm-dd hh24:mi:ss
//     yyyy/mm/dd hh24:mi:ss
//     yyyy.mm.dd hh24:mi:ss
//
//     yyyy-mm-dd hh12:mi:ss am
//     yyyy/mm/dd hh12:mi:ss am
//     yyyy.mm.dd hh12:mi:ss am
//
//     yyyy-mm-dd hh12:mi:ss pm
//     yyyy/mm/dd hh12:mi:ss pm
//     yyyy.mm.dd hh12:mi:ss pm
//    }
//
// - reference website
//     http://www.regexlib.com/REDetails.aspx?regexp_id=763
//     http://www.regexlib.com/RETester.aspx?regexp_id=763
//
// - remarks
//	 month: 0?[1-9]|1[012]
//	 date: 0?[1-9]|[12]\d|3[01]
//
///////////////////////////////////////////////////////////////////////
function isDateTime(parm) {
    //var re = /^(?=\d)(?:(?!(?:1582(?:\.|-|\/)10(?:\.|-|\/)(?:0?[5-9]|1[0-4]))|(?:1752(?:\.|-|\/)0?9(?:\.|-|\/)(?:0?[3-9]|1[0-3])))(?=(?:(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:\d\d)(?:[02468][048]|[13579][26]))\D0?2\D29)|(?:\d{4}\D(?!(?:0?[2469]|11)\D31)(?!0?2(?:\.|-|\/)(?:29|30))))(\d{4})([-\/.])(0?\d|1[012])\2((?!00)[012]?\d|3[01])(?:$|(?=\x20\d)\x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]\d){0,2}(?:\x20[aApP][mM]))|(?:[01]\d|2[0-3])(?::[0-5]\d){1,2})?$/;
    var re = /^(?=\d)(?:(?!(?:1582(?:\.|-|\/)10(?:\.|-|\/)(?:0?[5-9]|1[0-4]))|(?:1752(?:\.|-|\/)0?9(?:\.|-|\/)(?:0?[3-9]|1[0-3])))(?=(?:(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:\d\d)(?:[02468][048]|[13579][26]))\D0?2\D29)|(?:\d{4}\D(?!(?:0?[2469]|11)\D31)(?!0?2(?:\.|-|\/)(?:29|30))))(\d{4})([-\/.])(0?[1-9]|1[012])\2(0?[1-9]|[12]\d|3[01])(?:$|(?=\x20\d)\x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]\d){0,2}(?:\x20[aApP][mM]))|(?:[01]\d|2[0-3])(?::[0-5]\d){1,2})?$/;
    return re.test(parm);
}


///////////////////////////////////////////////////////////////////////
//
// - validate date format by adding 00:00:00 into the parameter
//   and then invoke validateDateTime function
// - for usage, please refer to validateDateTime
//
///////////////////////////////////////////////////////////////////////
function isDate(parm) {
    return isDateTime(parm + " 00:00:00");
}


///////////////////////////////////////////////////////////////////////
//
// - validate time format by adding 2005/01/01 into the parameter
//   and then invoke validateDateTime function
// - for usage, please refer to validateDateTime
//
///////////////////////////////////////////////////////////////////////
function isTime(parm) {
    return isDateTime("2005/01/01 " + parm);
}







function chkAreaTextBytes(parmObject) {
	var escaped = encodeURI(parmObject.value);
	if (-1!=escaped.indexOf("%")) {
		var count = escaped.split("%").length-1;
		if (count==0) count++;
		var tmp = escaped.length - (count*3);
		count = count + tmp;
	} else {
		count = escaped.length;
	}
	return count;
}




function checkPwd(parmObject) {
	var re1 = /^\w*\d{1}\w*\d{1}\w*$/;
	var re2 = /^\w*[A-Za-z]{1}\w*[A-Za-z]{1}\w*$/;
    return (re1.test(parmObject.value) && re2.test(parmObject.value));
}


function wttValidateData(parmLayer, parmObject, parmValidateStr, parmError) {

    var epos = parmValidateStr.search("=");
    var  command  = "";
    var  cmdvalue = "";
    if(epos >= 0)
    {
     command  = parmValidateStr.substring(0,epos);
     cmdvalue = parmValidateStr.substr(epos+1);
    }
    else
    {
     command = parmValidateStr;
    }
    switch(command)
    {
        //////////////////////////////////////////////////////////////////////////////
        case "req":
        case "required":
         {
           if(eval(parmObject.value.length) == 0)
           {
              failureStyle(parmLayer, parmObject, parmError);
              return false;
           }//if
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case required
        //////////////////////////////////////////////////////////////////////////////
        case "maxlength":
        case "maxlen":
          {
             if (eval(parmObject.value.length) > 0) {
               if(eval(parmObject.value.length) >  eval(cmdvalue))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
             } //if
             successStyle(parmLayer, parmObject, parmError);
             break;
          }//case maxlen
        //////////////////////////////////////////////////////////////////////////////
        case "minlength":
        case "minlen":
           {
             if (eval(parmObject.value.length) > 0) {
               if(eval(parmObject.value.length) <  eval(cmdvalue))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
             } // end if
             successStyle(parmLayer, parmObject, parmError);
             break;
            }//case minlen
        //////////////////////////////////////////////////////////////////////////////
        case "fixlen":
           {
             if(eval(parmObject.value.length) !=  eval(cmdvalue))
             {
               failureStyle(parmLayer, parmObject, parmError);
               return false;
             }//if
             successStyle(parmLayer, parmObject, parmError);
             break;
         }//case fixlen

        //////////////////////////////////////////////////////////////////////////////
        case "alnum":
        case "alphanumeric":
           {
              var charpos = parmObject.value.search("[^A-Za-z0-9]");
              if(parmObject.value.length > 0 &&  charpos >= 0)
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//case alphanumeric
        //////////////////////////////////////////////////////////////////////////////
        case "num":
        case "numeric":
           {
              var charpos = parmObject.value.search("[^0-9]");
              if(parmObject.value.length > 0 &&  charpos >= 0)
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//numeric
        //////////////////////////////////////////////////////////////////////////////
        case "signednumeric":
           {
              var reSignedInteger = /^(\+|\-)?\d+$/ ;
              if(parmObject.value.length > 0 && !parmObject.value.match(reSignedInteger))
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//numeric
        //////////////////////////////////////////////////////////////////////////////
        case "float":
           {
              // BKTYC 20070731 - allows negative value to pass
//              var floatPattern = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/ ;
              var floatPattern = /^-?((\d+(\.\d*)?)|((\d*\.)?\d+))$/ ;
              if(parmObject.value.length > 0 && !parmObject.value.match(floatPattern))
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//float
        //////////////////////////////////////////////////////////////////////////////
        case "signedfloat":
           {

              var signedfloatPattern = /^(((\+|\-)?\d+(\.\d*)?)|((\+|\-)?(\d*\.)?\d+))$/ ;
              if(parmObject.value.length > 0 && !parmObject.value.match(signedfloatPattern))
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//signedfloat
        //////////////////////////////////////////////////////////////////////////////
        case "alphabetic":
        case "alpha":
           {
              var charpos = parmObject.value.search("[^A-Za-z]");
              if(parmObject.value.length > 0 &&  charpos >= 0)
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//alpha
        //////////////////////////////////////////////////////////////////////////////
		case "alnumhyphen":
			{
              var charpos = parmObject.value.search("[^A-Za-z0-9\-_]");
              if(parmObject.value.length > 0 &&  charpos >= 0)
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
			break;
			}        //////////////////////////////////////////////////////////////////////////////
		case "printablechar":
			{
              var charpos = parmObject.value.search("[^ -~]");
              if(parmObject.value.length > 0 &&  charpos >= 0)
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
			break;
			}
		//////////////////////////////////////////////////////////////////////////////
        case "email":
          {
            if (parmObject.value.length > 0) {
               if(!validateEmailv2(parmObject.value))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
           } // if
           successStyle(parmLayer, parmObject, parmError);
           break;
          }//case email
		//////////////////////////////////////////////////////////////////////////////
        case "emails":
          {
            if (parmObject.value.length > 0) {
               if(!validateMultipleEmails(parmObject.value))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
           } // if
           successStyle(parmLayer, parmObject, parmError);
           break;
          }//case emails
        //////////////////////////////////////////////////////////////////////////////
        case "lt":
        case "lessthan":
         {
            if(isNaN(parmObject.value))
            {
              //alert(parmObject.name+": Should be a number ");
              failureStyle(parmLayer, parmObject, parmError);
              return false;
            }//if
            if(eval(parmObject.value) >=  eval(cmdvalue))
            {
              failureStyle(parmLayer, parmObject, parmError);
              return false;
             }//if
            successStyle(parmLayer, parmObject, parmError);
            break;
         }//case lessthan
        //////////////////////////////////////////////////////////////////////////////
        case "le":
         {
            if(isNaN(parmObject.value))
            {
              //alert(parmObject.name+": Should be a number ");
              failureStyle(parmLayer, parmObject, parmError);
              return false;
            }//if
            if(eval(parmObject.value) > eval(cmdvalue))
            {
              failureStyle(parmLayer, parmObject, parmError);
              return false;
             }//if
            successStyle(parmLayer, parmObject, parmError);
            break;
         }//case lessthanequal
        //////////////////////////////////////////////////////////////////////////////
        case "gt":
        case "greaterthan":
         {
            if(isNaN(parmObject.value))
            {
              //alert(parmObject.name+": Should be a number ");
              failureStyle(parmLayer, parmObject, parmError);
              return false;
            }//if
             if(eval(parmObject.value) <=  eval(cmdvalue))
             {
               failureStyle(parmLayer, parmObject, parmError);
               return false;
             }//if
            successStyle(parmLayer, parmObject, parmError);
            break;
         }//case greaterthan
        //////////////////////////////////////////////////////////////////////////////
        case "ge":
         {
            if(isNaN(parmObject.value))
            {
              //alert(parmObject.name+": Should be a number ");
              failureStyle(parmLayer, parmObject, parmError);
              return false;
            }//if
             if(eval(parmObject.value) <  eval(cmdvalue))
             {
               failureStyle(parmLayer, parmObject, parmError);
               return false;
             }//if
            successStyle(parmLayer, parmObject, parmError);
            break;
         }//case greaterthanequal
        //////////////////////////////////////////////////////////////////////////////
        case "regexp":
         {
		 	if(parmObject.value.length > 0)
			{
	            if(!parmObject.value.match(cmdvalue))
	            {
	              failureStyle(parmLayer, parmObject, parmError);
	              return false;
	            }//if
			}
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case regexp
        //////////////////////////////////////////////////////////////////////////////
        case "dontselect":
         {
            if(parmObject.selectedIndex == null)
            {
              failureStyle(parmLayer, parmObject, parmError);
              return false;
            }
            if(parmObject.selectedIndex == eval(cmdvalue))
            {
              failureStyle(parmLayer, parmObject, parmError);
              return false;
             }
             successStyle(parmLayer, parmObject, parmError);
             break;
         }//case dontselect
        //////////////////////////////////////////////////////////////////////////////
        case "date":
         {
           if(parmObject.value.length > 0) {
               if(!isDate(parmObject.value))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
           } // if
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case date
        //////////////////////////////////////////////////////////////////////////////
        case "time":
         {
           if(parmObject.value.length > 0) {
               if(!isTime(parmObject.value))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
           } // if
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case time
        //////////////////////////////////////////////////////////////////////////////
        case "datetime":
         {
           if(parmObject.value.length > 0) {
               if(!isDateTime(parmObject.value))
               {
                 failureStyle(parmLayer, parmObject, parmError);
                 return false;
               }//if
           } // if
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case datetime
        //////////////////////////////////////////////////////////////////////////////
        case "ipaddress":
         {
		 	if(parmObject.value.length > 0)
			{
	            if(! isIPAddress(parmObject.value))
	            {
	              failureStyle(parmLayer, parmObject, parmError);
	              return false;
	            }//if
			}
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case ipaddress
        //////////////////////////////////////////////////////////////////////////////
        case "ipaddresses":
         {
		 	if(parmObject.value.length > 0)
			{
	            if(!isMulitpleIPAddresses(parmObject.value))
	            {
	              failureStyle(parmLayer, parmObject, parmError);
	              return false;
	            }//if
			}
           successStyle(parmLayer, parmObject, parmError);
           break;
         }//case ipaddresses
        //////////////////////////////////////////////////////////////////////////////
        case "creditcard":
           {
             if (parmObject.value.length > 0) {
              if(!isCreditCard(parmObject.value))
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
            } // if  
            successStyle(parmLayer, parmObject, parmError);
            break;
           }//creditcard
        //////////////////////////////////////////////////////////////////////////////
        case "contact":
           {
              var contactPattern = /^(\d+(#\d+)?)$/ ;
              if(parmObject.value.length > 0 && !parmObject.value.match(contactPattern))
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//contact
        //////////////////////////////////////////////////////////////////////////////
        case "radioReq":
           {
               if (parmObject.form[parmObject.name].length == null) {
           	   		if (parmObject.form[parmObject.name].checked) {
           	   			successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
           	   			return true;
           	   		}
           	   		else {
           	   			failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
           	   			return false;
           	   		}
           	   }
           	   else {
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   var isValid = false;
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       isValid = true;
	                       break;
	                   } // end if
	               } // end for
	               
	               if (isValid) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	               	       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	                   failureStyle(parmLayer, parmObject, parmError);
	                   return false;
	               }
	           }
               break;
           }//radio_req
        //////////////////////////////////////////////////////////////////////////////
        case "checkboxReq":
           {
           	   var isValid = false;
           	   
               if (parmObject.form[parmObject.name].length == null) {
           	   		if (parmObject.form[parmObject.name].checked) {
           	   			successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
           	   			return true;
           	   		}
           	   		else {
           	   			failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
           	   			return false;
           	   		}
           	   }
           	   else {
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       isValid = true;
	                       break;
	                   } // end if
	               } // end for
	               
	               if (isValid) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	               	       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	               	   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   	   failureStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   }
	                   return false;
	               }
	           }
               break;
           }// checkboxReq
        //////////////////////////////////////////////////////////////////////////////
        case "checkboxReqOnlyOne":
           {
           	   var selected = 0;
           	   var isValid = false;
           	   
           	   if (parmObject.form[parmObject.name].length == null) {
           	   		if (parmObject.form[parmObject.name].checked) {
           	   			successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
           	   			return true;
           	   		}
           	   		else {
           	   			failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
           	   			return false;
           	   		}
           	   }
           	   else {
           	   
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       selected++;
	                   } // end if
	               } // end for
	               
	               if (selected == 1) {
	               		isValid = true;
	               }
	               
	               if (isValid) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	               	       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	               	   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   	   failureStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   }
	                   return false;
	               }
	           }
               break;
           }// checkboxReqOnlyOne
        //////////////////////////////////////////////////////////////////////////////
        case "checkboxMultiSelectReqGE":
           {
               var selected = 0;
               
               if (parmObject.form[parmObject.name].length == null) {
                   if (parmObject.form[parmObject.name].checked) {
                       selected++;
                   }
                   
	               if (selected >= eval(cmdvalue)) {
                       successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return true;
	               } else {
                       failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return false;
	               }
	           }
			   else {
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       selected++;
	                   } // end if
	               } // end for
	
	               if (selected >= eval(cmdvalue)) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       failureStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   }
	                   return false;
	               }
	           }
               break;
           }// checkboxMultiSelectReqGE
        //////////////////////////////////////////////////////////////////////////////
        case "checkboxMultiSelectReqLE":
           {
               var selected = 0;

               if (parmObject.form[parmObject.name].length == null) {
                   if (parmObject.form[parmObject.name].checked) {
                       selected++;
                   }
                   
	               if (selected <= eval(cmdvalue)) {
                       successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return true;
	               } else {
                       failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return false;
	               }
	           }
	           else {
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       selected++;
	                   } // end if
	               } // end for
	
	               if (selected <= eval(cmdvalue)) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       failureStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   }
	                   return false;
	               }
	           }
               break;
           }// checkboxMultiSelectReqLE
        //////////////////////////////////////////////////////////////////////////////
        case "checkboxMultiSelectGE":
           {
               var selected = 0;

               if (parmObject.form[parmObject.name].length == null) {
                   if (parmObject.form[parmObject.name].checked) {
                       selected++;
                   }
                   
	               if (selected >= eval(cmdvalue) || selected == 0) {
                       successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return true;
	               } else {
                       failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return false;
	               }
	           }
	           else {
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       selected++;
	                   }
	               } // end for
	
	               if (selected >= eval(cmdvalue) || selected == 0) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       failureStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   }
	                   return false;
	               }
	           }
	           
               break;
           }// checkboxMultiSelectReqGE
        //////////////////////////////////////////////////////////////////////////////
        case "checkboxMultiSelectLE":
           {
               var selected = 0;

               if (parmObject.form[parmObject.name].length == null) {
                   if (parmObject.form[parmObject.name].checked) {
                       selected++;
                   }
                   
	               if (selected <= eval(cmdvalue) || selected == 0) {
                       successStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return true;
	               } else {
                       failureStyle(parmLayer, parmObject.form[parmObject.name], parmError);
	                   return false;
	               }
	           }
	           else {
	               for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                   if (parmObject.form[parmObject.name][i].checked) {
	                       selected++;
	                   } // end if
	               } // end for
	
	               if (selected <= eval(cmdvalue) || selected == 0) {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       successStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   } // end for
	                   return true;
	               } else {
	                   for (var i=0; i<parmObject.form[parmObject.name].length; i++) {
	                       failureStyle(parmLayer, parmObject.form[parmObject.name][i], parmError);
	                   }
	                   return false;
	               }
	           }
               break;
           }// checkboxMultiSelectReqGE
        //////////////////////////////////////////////////////////////////////////////
        case "textAreaMaxByte":
           {
           	   //alert(chkAreaTextBytes(parmObject));
           	   if ( eval(chkAreaTextBytes(parmObject)) > eval(cmdvalue) ) {
           	   	   failureStyle(parmLayer, parmObject, parmError);
           	   	   return false;
           	   } else {
           	   	   successStyle(parmLayer, parmObject, parmError);
           	   	   return true;	
           	   }
           	   break;
           }//textAreaMaxByte
        //////////////////////////////////////////////////////////////////////////////
        case "textAreaMinByte":
           {
           	   //alert(chkAreaTextBytes(parmObject));
           	   if ( eval(chkAreaTextBytes(parmObject)) < eval(cmdvalue) ) {
           	   	   failureStyle(parmLayer, parmObject, parmError);
           	   	   return false;
           	   } else {
           	   	   successStyle(parmLayer, parmObject, parmError);
           	   	   return true;	
           	   }
           	   break;
           }//textAreaMinByte
        case "geByElementID":
			{
				if(parmObject.value < document.getElementById(cmdvalue).value)
				{
					failureStyle(parmLayer, parmObject, parmError);
					return false;
				}//if
				successStyle(parmLayer, parmObject, parmError);
	            break;
	        }//geByElementID
        //////////////////////////////////////////////////////////////////////////////
        case "leByElementID":
	        {
	            if(parmObject.value > document.getElementById(cmdvalue).value)
	            {
	              failureStyle(parmLayer, parmObject, parmError);
	              return false;
				}//if
	            successStyle(parmLayer, parmObject, parmError);
	            
	            break;
	        }//leByElementID
        //////////////////////////////////////////////////////////////////////////////
        case "pwd":
	        {
	            if(!checkPwd(parmObject))
	            {
	              failureStyle(parmLayer, parmObject, parmError);
	              return false;
				}//if
	            successStyle(parmLayer, parmObject, parmError);
	            
	            break;
	        }//leByElementID
        //////////////////////////////////////////////////////////////////////////////
        case "maxFraction":
           {
              var exp = new RegExp('\\.\\d{0,' + cmdvalue + '}$|^(?:[^\\.]|\\.(?!\\d))*$');
              if(exp.test(parmObject.value) === false)
              {
                failureStyle(parmLayer, parmObject, parmError);
                return false;
              }//if
              successStyle(parmLayer, parmObject, parmError);
              break;
           }//maxFraction
        //////////////////////////////////////////////////////////////////////////////
        case "weekdayExclude":
	        {
	           var dateValue = parmObject.value.split("/");
	           var weekdayExcludeDateObject = new Date();
	           var weekdayExcludeValue = cmdvalue.split(",");
	           
			   weekdayExcludeDateObject.setFullYear(dateValue[0]);
			   weekdayExcludeDateObject.setMonth(parseFloat(dateValue[1]) - 1);
			   weekdayExcludeDateObject.setDate(dateValue[2]);
			   
           
               for (var i = 0; i < weekdayExcludeValue.length; i++) {
                   if (weekdayExcludeDateObject.getDay() == weekdayExcludeValue[i]) {
						failureStyle(parmLayer, parmObject, parmError);
	              		return false;
                   } // end if
               } // end for
               
                successStyle(parmLayer, parmObject, parmError);
	            break;
	        }//dayExclude
        //////////////////////////////////////////////////////////////////////////////

    }//switch
    return true;

}





function failureStyle(parmLayer, parmObject, parmError) {
  if (parmObject.className == null || parmObject.className.length == 0) {
    parmObject.normalBackground=parmObject.style.background;
    parmObject.style.background="pink";
  } else {
    parmObject.className = parmObject.className.replace('Error', '') + 'Error';
  }
  removeErrorIcon(parmLayer, parmObject);
  addErrorIcon(parmLayer, parmObject, parmError);
}

// TODO: bug fix for successStyle, when the object is the selectManyCheckbox without styleClass,
//       it will not work well.

function successStyle(parmLayer, parmObject, parmError) {
  if (parmObject.className == null || parmObject.className.length == 0) {
    if (parmObject.normalBackground != null) {
      parmObject.style.background=parmObject.normalBackground;
    } else {
      parmObject.style.background='';
    }
  } else {
    parmObject.className = parmObject.className.replace('Error', '');
  }
  removeErrorIcon(parmLayer, parmObject);
}





function addErrorIcon(parmLayer, parmObject, parmError)
{
  var ni = document.getElementById(parmLayer);
  var divIdName = "subValidationLayer"+parmObject.id;
  var newdiv = document.createElement('div');
  newdiv.setAttribute("id",divIdName);
  newdiv.style.zIndex = 9;
  newdiv.style.position="absolute";
  newdiv.innerHTML = "<img src='../../common/images/error_icon2.gif' title='" + parmError + "' >";
  ni.appendChild(newdiv);
}


function removeErrorIcon(parmLayer, parmObject)
{
    var d = document.getElementById(parmLayer);
    var olddiv = document.getElementById("subValidationLayer"+parmObject.id);
    if (olddiv != null) {
      d.removeChild(olddiv);
    }
}




