isDOM = document.getElementById ? 1:0;

function trim ( s ) {
	s = s.replace (/^\s*|\s*$/g, "");
	return s;
}

function empty ( x ) {
	return (x.length > 0) ? false : true;
}

function is_numeric ( n ) {
	var v = 1.0 * n ;

//	if ( v == 0.0 || isNaN(v) )
	if ( isNaN(v) )
		return false ;
	else
		return true ;
}

function isValidEmail(emailAddress) {
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((([0-1]?[0-9]{1,2}\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    if (!re.test(emailAddress)) {
    	return false;
    }
    return true;
}

function validateDate( strValue ) {
  var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

  //check to see if in correct format
  if(!objRegExp.test(strValue))
    return false; //doesn't match pattern, bad date
  else{
    var strSeparator = strValue.substring(4,5) //find date separator
    var arrayDate = strValue.split(strSeparator); //split date into month, day, year
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}
    var intDay = parseInt(arrayDate[2]);

    //check if month value and day value agree
    if(arrayLookup[arrayDate[1]] != null) {
      if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)
        return true; //found in lookup table, good date
    }

    //check for February (bugfix 20050322)
    var intMonth = parseInt(arrayDate[1]);
    if (intMonth == 2) {
       var intYear = parseInt(arrayDate[0]);
       if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
          return true; //Feb. had valid number of days
       }
  }
  return false; //any other values, bad date
}

// Validator function for RADIO and CHECKBOX elements
function chkForChecked (f,fld,msg) {
    var frm = f;
    var e;
    var j = 0;

    if(isDOM) {
        e = document.getElementsByTagName('INPUT'); // returns a Node List
        for (var i=0; i<=e.length-1; ++i){
            if(e[i].name == fld) {
                if(j==0)j=i;
                if ( e[i].checked ) return true;  // one is checked after all!
            }
        }
    }else{
        e = f.elements[fld] ; // returns an array of elements
        for( var i=0; i < e.length; ++i ) {
            if ( e[i].checked ) {
                return true;  // one is checked after all!
                break;
            }
        }
    }

    alert( msg );
    e[j].focus() ;
    return false;
}

// Validator function for TEXT and TEXTAREA elements
function chkForNonblank (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]

    if ( ! empty(trim(e.value))  ) return true;
    alert( msg );
    e.focus() ;
    return false;
}

// Validator function for SELECT elements
function chkForIsSelected (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]

    if ( ! e.selectedIndex == 0 ) return true;
    alert( msg );
    e.focus() ;
    return false;
}

// Validator function to check for numeric values.
function chkNumeric (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]

    if ( is_numeric(e.value) ) return true;
    alert( msg );
    e.focus() ;
    return false;
}

// Validator function to check for numeric values.
function chkGTZ (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]

	var x = new String (e.value);
	x = x.replace(/,/g,"");
   	if (x > 0) return true;
    return false;
}

// Validator function to check for valid email address.
function chkForValidEmail (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]

    if ( isValidEmail(trim(e.value))  ) return true;
    alert( msg );
    e.focus() ;
    return false;
}

// Validator function to check for valid date.
function chkForValidDate (f,fld,msg) {
    var frm = f ;
    var e = f.elements[fld]

    if ( validateDate(trim(e.value))  ) return true;
    alert( msg );
    e.focus() ;
    return false;
}

// Validator function to check for confirmed values.
function chkForTheSame (f,fld,msg) {
    var frm = f ;
    var e1 = f.elements[fld[0]];
    var e2 = f.elements[fld[1]];

    if ( e1.value == e2.value)  return true;
    alert( msg );
    e2.focus() ;
    return false;
}

function validate(f) {
    for( var i=0; i < fieldsToCheck.length; ++i )
    {
        if (! fieldsToCheck[i][1] (f,fieldsToCheck[i][0],fieldsToCheck[i][2]) ) {
            return false ;
        }
    }
    return true ;
}