﻿

var shiftPressed = false;
     


      
    String.prototype.trim = function () 
    {
        return this.replace(/^\s*/, "").replace(/\s*$/, "");
    }

      function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if ((charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 8))
            return false;

         return true;
      }
      
      function isShiftUp(evt)
      {
           var charCode = (evt.which) ? evt.which : event.keyCode
           if (charCode == 16) shiftPressed = false;
           return true;
      }
      
      function isShiftDown(evt)
      {
           var charCode = (evt.which) ? evt.which : event.keyCode
           if (charCode == 16) shiftPressed = true;
           return true;
      }
      
      function isPhoneChars(evt)
      {
      
         var charCode = (evt.which) ? evt.which : event.keyCode
        // if (charCode == 16) shiftPressed = true;
         if (shiftPressed == true && (charCode == 40 || charCode == 41)) return true;
         if ((charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 8 && charCode != 45 && charCode != 32 ))
            return false;

         return true;
      }



      function formatPhone(idval)
      {
        document.getElementById(idval).value = validatephone(document.getElementById(idval).value);
      }
    
    function validatephone(phoneStr)
    {
      var phonestr=""
      var  phoneval, prefix, tempPhone, tempPhoneLen;
      
      
      tempPhone = phoneStr.trim();      
      tempPhone = clearphonestr(tempPhone);
      
      tempPhoneLen = tempPhone.length;
      if (tempPhoneLen > 4)
      {      
         prefix = "";
         if (tempPhone != "")
         {
           if (tempPhoneLen > 10)
           {
             prefix = tempPhone.substr(0,tempPhoneLen-10);             
           }
           phonestr = tempPhone;
           phonestr = "-"+phoneStr.substr(phoneStr.length-4, 4);
           if (tempPhoneLen >= 7)
           {           
             phonestr = tempPhone.substr(tempPhone.length-7,7).substr(0,3) + phonestr;           
           }
             else
           {           
             phonestr = tempPhone.substr(0,tempPhoneLen-4)+phonestr;
           }
           if (tempPhoneLen >=10)
           {
            phonestr = prefix+" "+"("+tempPhone.substr(0,10).substr(0,3)+") " +phonestr;            
           }
           else if (tempPhoneLen >= 7)
           {
            phonestr = tempPhone.substr(0,tempPhoneLen-7)+" "+phonestr;
           }
         } 
          return phonestr;
      }
      else
      {
        return phoneStr;
      }
      
    }
    
    function clearphonestr(phonestr)
    {
       var tempstr;
       
       tempstr = phonestr;
       tempstr = tempstr.replace(/-/g,"");
       tempstr = tempstr.replace(/\(/g,"");
       tempstr = tempstr.replace(/\)/g,"");
       tempstr = tempstr.replace(/ /g,"");
       return tempstr;
    }    
    
    
    function formatDate(idval)
      {
        var curdate,newdate;
        if (document.getElementById(idval).value != "")
        {
            curdate = document.getElementById(idval).value;
            newdate = makemediumdate(validatedate(curdate));
            if (newdate != "") 
            {
                document.getElementById(idval).value = newdate;
                document.getElementById(idval+"Error").style.visibility= "hidden";
            }
            else
            {
              document.getElementById(idval+"Error").style.visibility= "visible";
              document.getElementById(idval+"Error").innerHTML ="<--- Invalid Date or unknown format.";
            }
        }
        else
        {
                  document.getElementById(idval+"Error").style.visibility= "hidden";
        }
        
      }
      
    function validatedate(dateToValidate)
    {
       var dateVal;       
       
       if (isNumericDate(dateToValidate) )
       {
         dateVal =  parseNumericDate(dateToValidate);
         
       } 
       else
       {
         dateVal = parseTextDate(dateToValidate);
       }
       
       return dateVal;
     }
       
       function isNumericDate(dateToValidate)
       {
         var compactedStr;
         
         compactedStr = dateToValidate.trim().replace(/-/g,"").replace(/ /g,"").replace(/\//g,"");
         return ! isNaN(compactedStr);
         
       }
       
       function parseNumericDate(datestr)
       {
         datestr = datestr.trim();
         if (datestr.indexOf("/") != -1 && datestr.indexOf("-") != -1)
         {
           datestr = datestr.replace(/ /g, "");
           
         }
         var termsArray = [];
         termsArray = getTerms(datestr);
         if (termsArray == null) return null;
         if (termsArray.length == 0)
         {
            return null;
         }
          else 
         {
            var possibleYears = [false,false,false];
            var possibleMonths = [false,false,false];
            var possibleDays = [false,false,false];
            var yearidx = -1;
            var monthidx = -1;
            var dayidx=-1;
            
            if (canMonth(termsArray[0])) possibleMonths[0] = true;
            if (canMonth(termsArray[1])) possibleMonths[1] = true;            
            possibleMonths[2] = false;
            if (canDay(termsArray[0])) possibleDays[0] = true;
            if (canDay(termsArray[1])) possibleDays[1] = true;
            if (canDay(termsArray[2])) possibleDays[2] = true;
            if (possibleDays[0] == false)
            {
              yearidx = 0;
              if (possibleDays[2] == false) 
              {                
                return null;
              }
              else
              {
                dayidx = 2;
              }
              if (possibleMonths[1] == false)
              {               
                return null;
              }
              else
              {
                monthidx=1;
              }
            }
            else
            {
              if (possibleMonths[0] && possibleDays[1])
              {
                yearidx = 2;
                dayidx = 1;
                monthidx = 0;
              }
              else
              {
                if (possibleMonths[1])
                {
                    monthidx = 1;
                    if (possibleDays[0])
                    {
                      yearidx = 2;
                      dayidx = 0;
                    }
                    else
                    {
                        if (possibleDays[2])
                        {
                          yearidx = 1;
                          dayidx = 2;
                        }
                        else
                        {                          
                          return null;
                        }
                    }
                }
                else
                {                  
                  return null;
                }
              }
            }
            if (yearidx != -1 && dayidx != -1 && monthidx != -1)
            {
                if (parseInt(termsArray[yearidx],10) < 30 ) 
                {
                   termsArray[yearidx] = (2000+parseInt(termsArray[yearidx],10)).toString();
                } else if (parseInt(termsArray[yearidx],10) < 100 ) 
                {
                  termsArray[yearidx] = (1900+parseInt(termsArray[yearidx],10)).toString();
                }
                
                var retDate = new Date();
                retDate.setFullYear(termsArray[yearidx], termsArray[monthidx]-1, termsArray[dayidx]);
                if (retDate.getDate() < parseInt(termsArray[dayidx])) return null;
                return retDate;
            }
         }
          
         
       }
       
       function canDay(valstr)
       {
        if (isNaN(valstr))
        {
            return false;
        }
        else
        {
            if (parseInt(valstr,10) > 0 && parseInt(valstr,10) <=31) return true;
        }
        return false;    
       }
       
       function canMonth(valstr)
       {
         if (isNaN(valstr))
         {
            return false;
         }
         else
         {
           if (parseInt(valstr,10) > 0 && parseInt(valstr,10) <=12) return true;
         }
         
         return false;
       }
       
       function getTerms(datestr)
       {
          var term;
          var sepidx;
          
          if (sepidx = datestr.match("\/|-| ") == null)
          {
            // parse no separator. year must be at end string must be 6 or 8 chars
            if (datestr.length != 6 && datestr.length != 8) return;
            var result = [];
            result[0] = datestr.substring(0,2);
            result[1] = datestr.substring(2,4);
            result[2] = datestr.substring(4);
            return result;
          }
          else
          {
            // parse with separator.
            
            var result= datestr.split(/[\-+| +|\/+]+/);
            return result;
            
          }
          
       }
       
       function parseTextDate(datestr)
       {
         var monthnum = getMonthNumFromString(datestr);
         if (monthnum == 0) return null;
         if ((/,/).test(datestr))
         {
           //year is last term           
           var yearstr = datestr.substr(datestr.lastIndexOf(",")+1,datestr.length - datestr.lastIndexOf(",")+1);
           yearstr = yearstr.trim();
           if (isNaN(yearstr))
           {
             return null;
           }
           else
           {
                if (parseInt(yearstr,10) < 30 ) 
                {
                   yearstr = (2000+parseInt(yearstr,10)).toString();
                } else if (parseInt(yearstr,10) < 100 ) 
                {
                  yearstr = (1900+parseInt(yearstr,10)).toString();
                }
                
                var daystr = datestr.match(/\d+/g)[0].trim();
                
                
                var retDate = new Date();
                retDate.setFullYear(yearstr, monthnum-1, daystr);
                if (retDate.getDate() < parseInt(daystr)) return null;
                return retDate;
                
           }
         }
         else
         {
           //no comma in date 
           terms = datestr.match(/\d+/g);
           if (terms == null) return null;
           if (terms.length == 1)
           {
                var retDate = new Date();
                retDate.setFullYear(new Date().getFullYear(), monthnum-1, terms[0]);
                if (retDate.getDate() < parseInt(terms[0])) return null;
                return retDate;
           }
           else if (terms.length == 2)
           {
             var yearterm, dayterm;
             if (canDay(terms[0]))
             {
                if (parseInt(terms[1],10) < 30 ) 
                {
                   yearterm = (2000+parseInt(terms[1],10)).toString();
                } else if (parseInt(terms[1],10) < 100 ) 
                {
                  yearterm = (1900+parseInt(terms[1],10)).toString();
                }
                else
                {
                  yearterm = terms[1];
                }
                dayterm = terms[0];                
                var retDate = new Date();
                retDate.setFullYear(yearterm, monthnum-1, terms[0]);
                if (retDate.getDate() < parseInt(terms[0])) return null;
                return retDate; 
             }
             else if (canDay(terms[1]))
             {
                if (parseInt(terms[0],10) < 30 ) 
                {
                   yearterm = (parseInt(terms[0],10)+2000).toString();
                } else if (parseInt(terms[0],10) < 100 ) 
                {
                  yearterm = (parseInt(terms[0],10)+1900).toString();
                }
                else
                {
                 yearterm = terms[0];
                }
                var retDate = new Date();
                retDate.setFullYear(yearterm, monthnum-1, terms[1]);
                if (retDate.getDate() < parseInt(terms[1])) return null;
                return retDate;
             }
             else
             {
                return null;
             }
             
           }
           
         }  
         
       }
       
       function getMonthNumFromString(datestr)
       {
         
          if ((/JAN|JANUARY/i).test(datestr)) return 1;
          if ((/FEB|FEBRUARY/i).test(datestr)) return 2;
          if ((/MAR|MARCH/i).test(datestr)) return 3;
          if ((/APR|APRIL/i).test(datestr)) return 4;
          if ((/MAY|MAY/i).test(datestr)) return 5;
          if ((/JUN|JUNE/i).test(datestr)) return 6;
          if ((/JUL|JULY/i).test(datestr)) return 7;
          if ((/AUG|AUGUST/i).test(datestr)) return 8;
          if ((/SEP|SPT|SEPT|SEPTEMBER/i).test(datestr)) return 9;
          if ((/OCT|OCTOBER/i).test(datestr)) return 10;
          if ((/NOV|NOVEMBER/i).test(datestr)) return 11;
          if ((/DEC|DECEMBER/i).test(datestr)) return 12;
         return 0;
          
       }
       
       function makemediumdate(dtVal)
       {
         var newdate, dtValDate;
         
         if (dtVal == "" || dtVal == null) 
         {
            return "";
         }
         else
         {
           if (dtVal == 0) return "";
           var newdate = "";
           newdate = dtVal.getDate().toString()+"-";
           switch (dtVal.getMonth()+1)
           {
             case 1:
               newdate = newdate + "Jan-";
               break;
             case 2:
               newdate = newdate + "Feb-";
               break;
             case 3:
               newdate = newdate + "Mar-";
               break;
             case 4:
               newdate = newdate + "Apr-";
               break;
             case 5:
               newdate = newdate + "May-";
               break;
             case 6:
               newdate = newdate + "Jun-";
               break;
             case 7:
               newdate = newdate + "Jul-";
               break;
             case 8:
               newdate = newdate + "Aug-";
               break;
             case 9:
               newdate = newdate + "Sep-";
               break;
             case 10:
               newdate = newdate + "Oct-";
               break;
             case 11:
               newdate = newdate + "Nov-";
               break;
             case 12:
               newdate = newdate + "Dec-";
               break;                              
           }
           newdate += dtVal.getFullYear().toString();
           return newdate;
         }
         return "";
       }
    
        function testEmail(source, args)
        {
          if (validateEmail('Email'))
          {
            args.IsValid = true;
          } 
          else
          {
            args.IsValid = false;
          }
        }
        
        function validateEmail(idval)
        {
            var mailStr = document.getElementById(idval).value;            
            var valid = false;
            
            if (mailStr == "")
            {
              document.getElementById(idval+"Error").style.visibility= "hidden";
              return true;
            }
            if (new RegExp(/@/g).test(mailStr))
            {
             // has at least one @
             if (mailStr.match(/@/g).length == 1)
             {
               if (mailStr.lastIndexOf('.') > mailStr.lastIndexOf('@') + 1 && mailStr.lastIndexOf('.') < mailStr.length-1 && mailStr.lastIndexOf('@') > 0)
               {
                 valid = true;
                 document.getElementById(idval+"Error").style.visibility= "hidden";
               }                   
             }                 
            }
            if (!valid)
            {
                document.getElementById(idval+"Error").style.visibility= "visible";
                document.getElementById(idval+"Error").innerHTML ="<--- Invalid Email Format.";
                return false;
            }
            else
            {
              return true;
            }
        }
        
        function getRadioSelected(radioItem)
        {
            var radio  = document.forms[0].elements[radioItem];
            var x = 0;
            while (x< radio.length)
            {
              if (radio[x].checked) return radio[x].value;
              x++;
            }
            return '';
        }
        
        function testPhoneOrEmail(source, args)
        {
            if (document.getElementById('Phone').value == '' && getRadioSelected('ContactPreference') == 'By Phone')    
            {
                args.IsValid = false;
                document.getElementById('CustomPhoneValidator').innerHTML = "Phone needed for contact preference.";
                return;
            }
            if (document.getElementById('Email').value == '' && getRadioSelected('ContactPreference') == 'Email')    
            {
                args.IsValid = false;
                document.getElementById('CustomPhoneValidator').innerHTML = "Email needed for contact preference";
                return;
            }
            if (! requireTwo('Phone','Email') )
            {
                args.IsValid = false;
            }
            else
            {
                args.IsValid = true;
            }
        }
        
        function requireTwo(field1,field2)
        {
           if (document.getElementById(field1).value == '' && document.getElementById(field2).value == '') return false;
           return true;
           
        }
       