    function validateRequired(form) {                                                                       
        var bValid = true;
        var focusField = null;
        var i = 0;                                                                                          
        var fields = new Array();                                                                           
        oRequired = new required();                                                                         
                                                                                                                    
        for (x in oRequired) {                                                                              
            if ((form[oRequired[x][0]].type == 'text' || form[oRequired[x][0]].type == 'textarea' || form[oRequired[x][0]].type == 'select-one' || form[oRequired[x][0]].type == 'radio' || form[oRequired[x][0]].type == 'password') && form[oRequired[x][0]].value == '') {
                if (i == 0)
                    focusField = form[oRequired[x][0]]; 
                          
                fields[i++] = oRequired[x][1];
                        
                bValid = false;                                                                             
            }                                                                                               
        }                                                                                                   
                                                                                                                   
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));                                                                      
        }                                                                                                   
                                                                                                                   
        return bValid;                                                                                      
    }

    function isValidDate(day, month, year) {
        if (month < 1 || month > 12)
            return false;
		    
        if (day < 1 || day > 31)
            return false;
		    
        if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31)
            return false;
		    
        if (month == 2) {
            var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
            if (day>29 || (day == 29 && !leap))
                return false;
            }
		    
        return true;
    }
    function validateDate(form) {                                                                                                                             
        var bValid = true;   
        var focusField = null;                                                                                                                                  
        var i = 0;                                                                                                                                             
        var fields = new Array();                                                                                                                              
        oDate = new DateValidations();                                                                                                                                                                                                                                                                                        
               
        for (x in oDate) { 
            var value = form[oDate[x][0]].value;
            var datePattern = oDate[x][2]("datePatternStrict");
            
            if ((form[oDate[x][0]].type == 'text' || form[oDate[x][0]].type == 'textarea') && value.length > 0 && datePattern.length > 0) {
                var MONTH = "MM";
                var DAY = "dd";
                var YEAR = "yyyy";
                     
                var orderMonth = datePattern.indexOf(MONTH);
                var orderDay = datePattern.indexOf(DAY);
                var orderYear = datePattern.indexOf(YEAR);
            
                if ((orderDay < orderYear && orderDay > orderMonth)) {
                    var iDelim1 = orderMonth + MONTH.length;
                    var iDelim2 = orderDay + DAY.length;
                    var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                    var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
            
                    if (iDelim1 == orderDay && iDelim2 == orderYear) {
                        dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                    } else if (iDelim1 == orderDay) {
                        dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                    } else if (iDelim2 == orderYear) {   
                        dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                    } else {
                        dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                    }
            
                    var matched = dateRegexp.exec(value);
            
                    if(matched != null) { 
                        if (!isValidDate(matched[2], matched[1], matched[3])) {
                            if (i == 0)
                                focusField = form[oDate[x][0]]; 
                                 
                            fields[i++] = oDate[x][1];
                            bValid =  false;
                        }
                    } else {
                        if (i == 0)
                            focusField = form[oDate[x][0]]; 
            
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                    }
                } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                    var iDelim1 = orderDay + DAY.length;
                    var iDelim2 = orderMonth + MONTH.length;
                    var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                    var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
            
                    if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                        dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                    } else if (iDelim1 == orderMonth) {
                        dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                    } else if (iDelim2 == orderYear) {   
                        dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                    } else {
                        dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                    }
            
                    var matched = dateRegexp.exec(value);
            
                    if(matched != null) { 
                        if (!isValidDate(matched[1], matched[2], matched[3])) {
                            if (i == 0)
                                focusField = form[oDate[x][0]]; 
            
                            fields[i++] = oDate[x][1];
                            bValid =  false;
                        }
                    } else {
                        if (i == 0)
                            focusField = form[oDate[x][0]]; 
            
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                    }
                } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                    var iDelim1 = orderYear + YEAR.length;
                    var iDelim2 = orderMonth + MONTH.length;
                    var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                    var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
            
                    if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                        dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
                    } else if (iDelim1 == orderMonth) {
                        dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
                    } else if (iDelim2 == orderDay) {   
                        dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
                    } else {
                        dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
                    }
            
                    var matched = dateRegexp.exec(value);
            
                    if(matched != null) { 
            
                        if (!isValidDate(matched[3], matched[2], matched[1])) {
                            if (i == 0)
                                focusField = form[oDate[x][0]]; 
            
                            fields[i++] = oDate[x][1];
                            bValid =  false;
                        }
                    } else {
                        if (i == 0)
                            focusField = form[oDate[x][0]]; 
            
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                    }
                } else {
                    if (i == 0)
                        focusField = form[oDate[x][0]]; 
            
                    fields[i++] = oDate[x][1];
                    bValid =  false;
                }
            
            }//if                                                                                                                                                  
        }//for                                                                                                                                                                                                                                                                                                             
               
        if (fields.length > 0) { 
            focusField.focus();                                                                                                                                 
            alert(fields.join('\n'));                                                                                                                           
        }                                                                                                                                                                                                                                                                                                             
               
        return bValid;                                                                                                                                     
    }//validateDate              
	             
	function validateEmail(form) {                                                                                                    
                var bValid = true;
                var focusField = null;
                var i = 0;                                                                                                                    
                var fields = new Array();                                                                                                     
                oEmail = new email();                                                                                                        
                                                                                                                                              
                for (x in oEmail) {                                                                                                          
                    if ((form[oEmail[x][0]].type == 'text' || form[oEmail[x][0]].type == 'textarea') && form[oEmail[x][0]].value.length > 0) {   
                       if (!checkEmail(form[oEmail[x][0]].value)) {
                          if (i == 0)
                             focusField = form[oEmail[x][0]]; 
            
                          fields[i++] = oEmail[x][1];
            
                          bValid = false;                                                                                                     
                       }                                                                                                                      
                    }                                                                                                                         
                }                                                                                                                             
                                                                                                                                              
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));                                                                                                  
                }                                                                                                                             
                                                                                                                                              
                return bValid;                                                                                                                
            }      
            
            /**
             * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com), 
             * http://javascript.internet.com 
            */
            function checkEmail(emailStr) {
               if (emailStr.length == 0) 
                  return true;
               var emailPat=/^(.+)@(.+)$/;
               var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
               var validChars="\[^\\s" + specialChars + "\]";
               var quotedUser="(\"[^\"]*\")";
               var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
               var atom=validChars + '+';
               var word="(" + atom + "|" + quotedUser + ")";
               var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
               var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
               var matchArray=emailStr.match(emailPat);
               
               if (matchArray == null)
                  return false;
               
               var user=matchArray[1];
               var domain=matchArray[2];
               
               if (user.match(userPat) == null)
                   return false;
               
               var IPArray = domain.match(ipDomainPat);
               if (IPArray != null) {
                   for (var i = 1; i <= 4; i++) {
                      if (IPArray[i] > 255)
                         return false;
                   }
                   
                   return true;
               }
               
               var domainArray=domain.match(domainPat);
               if (domainArray == null)
                   return false;
               
               var atomPat=new RegExp(atom,"g");
               var domArr=domain.match(atomPat);
               var len=domArr.length;
            
               if (domArr[domArr.length-1].length < 2 || domArr[domArr.length-1].length > 4)
                  return false;
               
               if (len < 2)
                  return false;
               
               return true;
            }
	
	
