/*  This code copyright iWeb Solutions Pty Ltd 
	
	iStore Version 1.0
	Modified: 04th March 2002
	By: r.breuer@iwebsolutions.com.au
	Date Validation
*/
function valid_date(oDate) {

var strDatestyle = "EU";  //European date style - US for United States
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var datefield = oDate;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
var err = 0;
var strMonthArray = new Array(12);

strMonthArray[0] = "Jan";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Apr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Aug";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dec";
strDate = datefield.value;

if (strDate.length < 1) {
  return true;
}

for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
  if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
    strDateArray = strDate.split(strSeparatorArray[intElementNr]);
    if (strDateArray.length != 3) {
      err = 1;
      return false;
    } else {
      strDay = strDateArray[0];
      strMonth = strDateArray[1];
      strYear = strDateArray[2];
    }
    booFound = true;
  }
}

if (booFound == false) {
  if (strDate.length>5) {
    strDay = strDate.substr(0, 2);
    strMonth = strDate.substr(2, 2);
    strYear = strDate.substr(4);
  }
}

if (strYear.length == 2) { // Modified by Mark to fix a y2k problem 13/6/01
  	if (strYear < "50") {
		strYear = "20" + strYear;
	}else{
		strYear = "19" + strYear;
	}
}

// US style
if (strDatestyle == "US") {
  strTemp = strDay;
  strDay = strMonth;
  strMonth = strTemp;
}

intday = parseInt(strDay, 10);
if (isNaN(intday)) {
  err = 2;
  return false;
}

intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
  for (i = 0;i<12;i++) {
    if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
      intMonth = i+1;
      strMonth = strMonthArray[i];
      i = 12;
   }
  }
  if (isNaN(intMonth)) {
    err = 3;
    return false;
  }
}

intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
  err = 4;
  return false;
}

if (intMonth>12 || intMonth<1) {
  err = 5;
  return false;
}

if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
  err = 6;
  return false;
}

if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
  err = 7;
  return false;
}

if (intMonth == 2) {
  if (intday < 1) {
    err = 8;
    return false;
  }
  if (LeapYear(intYear) == true) {
    if (intday > 29) {
      err = 9;
      return false;
    }
  } else {
    if (intday > 28) {
      err = 10;
      return false;
    }
  }
}

// Set the hidden form element to an American date format for use in an SQL statement.
// datefield.value = intday + " " + strMonthArray[intMonth-1] + " " + strYear;
// datefield.value = intMonth + "/" + intday + "/" + strYear;
// datefield.value = intday + "-" + strMonthArray[intMonth-1] + "-" + strYear;
return true;
}

function LeapYear(intYear) {
  if (intYear % 100 == 0) {
    if (intYear % 400 == 0) { return true; }
  } else {
    if ((intYear % 4) == 0) { return true; }
  }
  return false;
}

/* Validate length of Text Area 
	Usage: onKeyUp="fnLength(this, 255);" */
function fnLength(oTextArea, len){ if (oTextArea.value.length > len) oTextArea.value = oTextArea.value.slice(0,len); }

/* Validate numbers */
function fnValidNum(oCtrl, strField){
	if ((isNaN(oCtrl.value)) || (oCtrl.value == "")){ 
		alert(strField + " must contain a valid number"); 
		fnCtrlActivate(oCtrl);
		return false;}
	return true;			
}

/* Email Validation */
function valid_email(emailStr) { // Complex eMail Address Validation
	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) {	// Email address invalid - @ and .'s)
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	if (user.match(userPat)==null) { // The username is invalid.
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) { // Destination IP address is invalid
				return false; }
		}
		return true;
	}
	var domainArray=domain.match(domainPat);
	if (domainArray==null) { // The domain name is invalid.
		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>3) { // The domain must be three-letters
		return false;
	}
	if (len<2) { // This address is missing a hostname!
		return false; }
	// The Address is Valid	
	return true;
}
