15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)letters = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)numbers = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26);
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)colors  = new Array("FF","CC","99","66","33","00");
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var endResult;
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function doTest()
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   endResult = "";
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   // make up email address
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   for (var k=0;k<4000;k++)
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   {
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      name = makeName(6);
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      (k%2)?email=name+"@mac.com":email=name+"(at)mac.com";
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      // validate the email address
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      var pattern = /^[a-zA-Z0-9\-\._]+@[a-zA-Z0-9\-_]+(\.?[a-zA-Z0-9\-_]*)\.[a-zA-Z]{2,3}$/;
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if(pattern.test(email))
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      {
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         var r = email + " appears to be a valid email address.";
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         addResult(r);
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      else
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      {
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         r = email + " does NOT appear to be a valid email address.";
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         addResult(r);
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   }
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   // make up ZIP codes
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   for (var s=0;s<4000;s++)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   {
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      var zipGood = true;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      var zip = makeNumber(4);
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      (s%2)?zip=zip+"xyz":zip=zip.concat("7");
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      // validate the zip code
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      for (var i = 0; i < zip.length; i++) {
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          var ch = zip.charAt(i);
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          if (ch < "0" || ch > "9") {
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              zipGood = false;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              r = zip + " contains letters.";
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              addResult(r);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          }
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (zipGood && zip.length>5)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      {
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         zipGood = false;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         r = zip + " is longer than five characters.";
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         addResult(r);
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      if (zipGood)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      {
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         r = zip + " appears to be a valid ZIP code.";
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         addResult(r);
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      }
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   }
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function makeName(n)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   var tmp = "";
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   for (var i=0;i<n;i++)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   {
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      var l = Math.floor(26*Math.random());
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      tmp += letters[l];
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   }
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   return tmp;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function makeNumber(n)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   var tmp = "";
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   for (var i=0;i<n;i++)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   {
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      var l = Math.floor(9*Math.random());
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      tmp = tmp.concat(l);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   }
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   return tmp;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function addResult(r)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)   endResult += "\n" + r;
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)doTest();
90