/* These are common validation functions. */

function validate_whole_number(field) {
/* Assumes positive whole numbers. */
var valid = "0123456789"
var ok = "yes";
var temp;
for (var i=0; i<field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") ok = "no";
 }
if (ok == "no") return false;
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_existence(field) {
if (field.value.length <= 0)
   return false;
else  
   return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_existence_of_drop_down_list_selection(field) {
if (field.selectedIndex == 0)
   return false;
else  
   return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_existence_of_non_optional_drop_down_list_selection(field) {
if (field.selectedIndex == -1)
   return false;
else  
   return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_radio_button_checked(field) {
var ok = "no"
for (var i=0; i<field.length; i++) 
 {
  if (field[i].checked) 
   {
    ok = "yes";
    break;
   }
 }
if (ok == "no") return false;
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_date(field) {
<!-- Modified using the following as basis:
<!-- By Mattias Sjsberg 11-28-96

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
var valid = "0123456789-"
var temp;

for (var i=0; i< field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") return false;
 } 
if (field.value.length != 10) return false;

b = field.value.substring(5, 7) // month
c = field.value.substring(4, 5) // '-'
d = field.value.substring(8,10) // day
e = field.value.substring(7, 8) // '-'
f = field.value.substring(0, 4) // year

if (b<1 || b>12) return false;
if (c != '-') return false;
if (d<1 || d>31) return false;
if (e != '-') return false;
if (f<1900 || f>3000) return false;
if (b==4 || b==6 || b==9 || b==11)
 {
  if (d==31) return false;
 }
if (b==2)
 {
  var g=parseInt(f/4)
  if (isNaN(g)) return false;
  if (d>29) return false;
  if (d==29 && ((f/4)!=parseInt(f/4))) return false;
 }
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_yyyy_mm_date(field) {
<!-- Validate the date of format yyyy-mm is correct. -->
var valid = "0123456789-"
var temp;

for (var i=0; i< field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") return false;
 } 
if (field.value.length != 7) return false;

b = field.value.substring(5, 7) // month
c = field.value.substring(4, 5) // '-'
f = field.value.substring(0, 4) // year

if (b<1 || b>12) return false;
if (c != '-') return false;
if (f<1900 || f>3000) return false;
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_year(field) {
var valid = "0123456789"
var temp;

for (var i=0; i< field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") return false;
 } 
if (field.value.length != 4) return false;
if (field.value<1900 || field.value>3000) return false;
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_month(field) {
var valid = "0123456789"
var temp;

for (var i=0; i< field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") return false;
 } 
if (field.value.length != 2) return false;
if (field.value<1 || field.value>12) return false;
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////


function validate_time(field) {
<!-- Validate the time of format hh:mm is correct. -->
var valid = "0123456789:"
var temp;

for (var i=0; i< field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") return false;
 } 
if (field.value.length != 5) return false;

mm = field.value.substring(3, 5) // minute
c = field.value.substring(2, 3) // ':'
hh = field.value.substring(0, 2) // hour

if (mm<0 || mm>59) return false;
if (c != ':') return false;
if (hh<0 || hh>24) return false;
if (hh==24 && mm>0) return false;
return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_datetime(field) {
// Validate date time in format yyyy-mm-dd hh:mm
var valid = "0123456789-: "
var temp;

if (field.value.length != 16) return false;

for (var i=0; i< field.value.length; i++) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") return false;
 } 

b = field.value.substring(5, 7) // month
c = field.value.substring(4, 5) // '-'
d = field.value.substring(8,10) // day
e = field.value.substring(7, 8) // '-'
f = field.value.substring(0, 4) // year
g = field.value.substring(10,11) // ' '
h = field.value.substring(11,13) // hour
i = field.value.substring(13,14) // ':'
j = field.value.substring(14,16) // minute

if (b<1 || b>12) return false;
if (c != '-') return false;
if (d<1 || d>31) return false;
if (e != '-') return false;
if (f<1900 || f>3000) return false;
if (b==4 || b==6 || b==9 || b==11)
 {
  if (d==31) return false;
 }
if (b==2)
 {
  var g=parseInt(f/4)
  if (isNaN(g)) return false;
  if (d>29) return false;
  if (d==29 && ((f/4)!=parseInt(f/4))) return false;
 }

if (h<0 || h>24) return false;
if (i != ':') return false;
if (j<0 || j>59) return false;
if (h==24 && j>0) return false;

return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_postal_code(field) {
var valid_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var valid_number = "0123456789"
var temp;

// Must be 6 characters in length.
if (field.value.length != 6) return false;

// First, third, fifth characters must be alphabetic.
for (var i=0; i<6; i=i+2) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid_alphabet.indexOf(temp) == "-1") return false;
 } 

// Second, fourth, sixth characters must be numbers.
for (var i=1; i<6; i=i+2) 
 {
  temp = "" + field.value.substring(i, i+1);
  if (valid_number.indexOf(temp) == "-1") return false;
 } 

return true;
}

//////////////////////////////////////////////////////////////////////////////////////////////

function validate_email_address(field) {
<!-- Modified using the following as basis:

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

/*
BGB - Sept 2000. 
Note that script doesn't handle international domains, I added .ca
Consider txtLength to determine that although there is a .com in wow@wow.commmm, 
 this is an invalid address.
Note this script has lots of holes in it, there are probably better ones available, 
 but it should handle the non-esoteric email addresses we are likely to consider.
 For example, this can't handle wow@wow.ca.com
*/

var txt=field.value;
var i;
var txtLength=txt.length

if (txt.indexOf("@")<3) return false;

/*
if ((txt.indexOf(".com")<5)&&(txt.indexOf(".org")<5)
    &&(txt.indexOf(".gov")<5)&&(txt.indexOf(".net")<5)
    &&(txt.indexOf(".mil")<5)&&(txt.indexOf(".edu")<5)
    &&(txt.indexOf(".ca")<5)) return false;
*/

i=txt.indexOf(".ca");
if (i != -1) { if ((i < 5) || (i + 3 != txtLength)) return false; else return true; };
i=txt.indexOf(".com");
if (i != -1) { if ((i < 5) || (i + 4 != txtLength)) return false; else return true; };
i=txt.indexOf(".org");
if (i != -1) { if ((i < 5) || (i + 4 != txtLength)) return false; else return true; };
i=txt.indexOf(".gov");
if (i != -1) { if ((i < 5) || (i + 4 != txtLength)) return false; else return true; };
i=txt.indexOf(".net");
if (i != -1) { if ((i < 5) || (i + 4 != txtLength)) return false; else return true; };
i=txt.indexOf(".mil");
if (i != -1) { if ((i < 5) || (i + 4 != txtLength)) return false; else return true; };
i=txt.indexOf(".edu");
if (i != -1) { if ((i < 5) || (i + 4 != txtLength)) return false; else return true; };

return false;
}

//////////////////////////////////////////////////////////////////////////////////////////////
