/* -------------------------------------------------------------------------------------------
   Function : checkString
   Purpose  : Check the entered string is approximately correct
   Entry    : field     - Text Name of the field for the error response
	      data      - The actual entered field
	      type      - Type of field (A)lpha, (9)Numeric or (X)Alpha Numeric, (B)ooking
			  or (E)mail
	      maxlen    - The maximum string length
	      mandatory - "Y" or "N"
   ------------------------------------------------------------------------------------------- */

function checkString( field, data, type, maxlen, mandatory )
{
        var legal = "";
        
	if (data == "")
		if ( mandatory == "Y" )
	                return  "- " + field + " is mandatory\n";
		else
			return "";

	if (data.length > maxlen)
		return  "- " + field + " should be no longer than " + maxlen + " characters\n";

	switch( type )
	{
		case "A" : 	legal = /^[a-zA-Z\s\-']+$/;		
				break;
		case "X" : 	legal = /^[a-zA-Z0-9\s\/\.\-\(\)\[\]',]*$/;	
				break;
		case "9" : 	legal = /^[0-9\s\-]*$/;		
				break;
		case "E" : 	legal = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;
				break;
		case "B" : 	legal = /^[A-Z0-9][0-9]{5}$/;	
				break;
	}	

        if (!legal.test( data ) )
                return "- Invalid characters in " + field + "\n";

	return "";
}

/* -------------------------------------------------------------------------------------------
   Function : checkDate
   Purpose  : Checks entered date to be in the format DD/MM/YYYY
   Entry    : field - Text description of the field
	      date  - Actual date entered
   Exit	    : error - Error message (if errored)
	      ffDate - Date object for the date entered
   ------------------------------------------------------------------------------------------ */

function checkDate( field, date )
{
	var error    = "";
	var vdate    = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/((19|20)\d\d)$/;
	var monthLen = new Array( 0,31,28,31,30,31,30,31,31,30,31,30,31);
	var ffDate  = new Date();

	var dep = date.match( vdate ) ;

// ---- Check for formatting and month, year and day (approx) are OK  -----
	
	var dep = date.match( vdate ) ;
	if (dep == null)
		error +=  "- " + field + " is invalid\n";
	else
	{
// ----- Now break up the date -----

		var day   = parseInt(dep[1],10);
		var month = parseInt(dep[2],10);
		var year  = parseInt(dep[3],10);

// ----- We need to check the number of days for a leap year -----

		monthLen[2] = (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );

		if (day > monthLen[month])
			error += "- " + field + " is invalid\n";
		else
			ffDate.setFullYear( year, month-1, day );
	}

	return {error:error, ffDate:ffDate};
}

