

function FormatFormCheckBoxes(pform)
{
	
	var
		fieldname,fieldvalue,fieldhtml;



	for(i=0;i<pform.elements.length;i++)
		{
			if (pform.elements[i].type == "checkbox" ){
				if (pform.elements[i].checked)
					pform.elements[i].value =1;
				else
					{ 
						//In the case of a checkbox when using get and post methods. it is necessary to build a new field on
						//the fly as a non checked checkbox is not sent back from the browser
						
						pform.elements[i].value =0;
						fieldname = pform.elements[i].name;
						fieldvalue = pform.elements[i].value;
						fieldhtml='<input type=hidden name="' + fieldname + '" value="' + fieldvalue + '">';
						//alert( 'current checkbox html= ' + pform.elements[i].outerHTML + 'new field would be ' + fieldhtml );
						pform.elements[i].outerHTML = fieldhtml;
					}
			}
		}
}


var defaultEmptyOK = false

function FormValidate(pform)
{	
var ErrorMessage
var ErrorType
	ErrorMessage=""
	
	//We're moving this further down the function
	//FormatFormCheckBoxes( pform );
	
	
	for(i=0;i<pform.elements.length;i++)
	{
		CurrentElement=pform.elements[i];
		CurrentType=CurrentElement.type.toUpperCase();

//		if (CurrentElement.readonly==true)
//			CurrentReadOnly=true
//		else
//			CurrentReadOnly=false;
		
//(CurrentReadOnly=true) &&
		
		//Only validate these types
		if (  (CurrentType == "TEXT") || (CurrentType == "CHECKBOX")|| (CurrentType == "SELECT-ONE") || (CurrentType == "PASSWORD"))
		{
			//alert( "Current Element Type="+CurrentElement.type+ " Name= "+CurrentElement.name );
			vFieldName=CurrentElement.FieldName;
			vFieldType=CurrentElement.FieldType;
			vFieldValue=CurrentElement.value;
			
			
			vFieldMaxLength=CurrentElement.MaxLength;
			//Check to make sure we have not over flowed length of field

			if (vFieldMaxLength != 'undefined'){
				//alert( 'MaxLength of ' + vFieldName + ' = ' + vFieldMaxLength ); 
				if (vFieldValue.length > vFieldMaxLength) {
				
					ErrorMessage="Field "+vFieldName+ " is too long";
					ErrorField=CurrentElement;		
					break;
				
				}	
			
			
			}
			
			
			//determine required status			
			if (CurrentElement.Required==null )
				vFieldRequired=false;
			else
				vFieldRequired = (CurrentElement.Required.toUpperCase()== "TRUE");

			if (vFieldType==null)
			{
				vFieldType="TEXT";
			}else
				vFieldType=vFieldType.toUpperCase();

			if (vFieldName==null)
			{
				//Try and build a field name from type etc
				vFieldName="";
			}
			//check for field required
			if (vFieldRequired)
			{
				switch (CurrentType)
				{
				case "TEXT" :
								if ( vFieldValue.length	== 0 )
								{				
									ErrorMessage="Field "+vFieldName+ " requires a value";
									ErrorField=CurrentElement;
								}
								break;

				case "PASSWORD" :
								if ( vFieldValue.length	== 0 )
								{				
									ErrorMessage="Field "+vFieldName+ " requires a value";
									ErrorField=CurrentElement;
								}
								break;

				case "SELECT-ONE" :
								if ( vFieldValue < 2 )
								{				
									ErrorMessage="Please select a value from "+vFieldName;
									ErrorField=CurrentElement;
								}
								break;
				}
			}

			//if we have an error then bail out
			if (ErrorMessage!="")
				break;

			//Quote removal --------------------------------------------------------------------
			//We now use this function to remove " and ' chars
			
			//replaceQuotes ( CurrentElement )
			
			//make sure our informed users do not enter any quote characters into the fields
			//var str = vFieldValue
			//if(str != "") {//don't check the field if there's nothing in it
			//	if(str.indexOf('"')>=0 || str.indexOf("'")>=0) {
			//		ErrorMessage="Field "+vFieldName+ " contains a quote character";
			//		ErrorField=CurrentElement;
			//		break;
			//	}
			//}
			
			

			//Type checking
			if (vFieldValue.length > 0)
				switch (vFieldType)
				{
				case "TEXT" :
								if ( vFieldValue.length	== 0 )
								{				
									ErrorMessage="Field "+vFieldName+ " requires a value";
									ErrorField=CurrentElement;
								}
								break;
				case "NUMBER" :
								if ( isNaN( vFieldValue) )
								{				
									ErrorMessage="Field "+vFieldName+ " does not appear to be a number";
									ErrorField=CurrentElement;
								}
								break;
				case "EMAIL" :
								if ( IsValidEmailAddress(vFieldValue) ==false )
								{				
									ErrorMessage=vFieldName+ " does not appear to be a valid email address";
									ErrorField=CurrentElement;
								}
								break;
				case "DATE" :
								DateError=CheckDate( vFieldValue );
								if ( DateError.ValidDate ==false )
								{				
									ErrorMessage="The field "+vFieldName+ " is not a valid date :"+DateError.alertStr;
									ErrorField=CurrentElement;

								}else
									CurrentElement.value=DateError.FixedDate;								
								break;
				case "TIME" :
								TimeError=CheckTime( vFieldValue );
								if (TimeError.ValidTime == false)
								{				
									ErrorMessage="The field "+vFieldName+ " is not a valid time :"+TimeError.alertStr;
									ErrorField=CurrentElement;
								}else
									CurrentElement.value =TimeError.FixedTime; 
								break;
				}
		}//if ( (CurrentType == "TEXT") || (CurrentType == "CHECKBOX")|| (CurrentType == "SELECT-ONE") )
	}//for(i=0;i<pform.elements.length;i++)


	if (ErrorMessage!="")
	{	alert( ErrorMessage );
		ErrorField.focus();
		return false;
	}else{
		FormatFormCheckBoxes( pform );
		return true;
	}
	
}

function replaceQuotes ( f ) {
	str = f.value
	re = '"'
	while ( str.search(re) != -1) {
		str = str.replace(re,"&quot;")
	}

	re = "'"
	while ( str.search(re) != -1) {
		str = str.replace(re,"&#039;")
	}
	f.value = str
}


function FlashField( pFormField )
{




}



function IsValidEmailAddress (pAddress)
{
	var str = pAddress;
	result = true;
	if(str != "") {//don't check the field if there's nothing in it
		if ( str.indexOf("@")==-1 || str.indexOf(".")==-1 ){
		result = false;
		}
	}
	return result	
}


function CheckTime (pTimeStr) {	
	var r = new Object()
	r.alertStr = ""
	r.ValidTime = true
	r.FixedTime = ""
	var h = ""
	var m = ""
	var s = pTimeStr;
	var colon = s.indexOf(":");
	if (colon < 0 || colon > 2) { // not there or incorrectly placed
		r.alertStr += " The time is not valid."
		r.ValidTime = false
	} else { // could be valid, check for leading zero later
		var h = stripHour(s, colon)
		//these checks assume the substring is a true number
		if (h.length ==1) { //no leading zero
			h = "0" + h
		} else if (Number(h) ==0 || Number(h) > 24) { //invalid hour
			r.alertStr += " The hour is not valid."
			r.ValidTime = false
		}		
		var m = stripMinute(s, colon)
		if (m.length ==1) { //no leading zero
			r.alertStr += " The minute is not complete."
			r.ValidTime = false
		}else	
		if (Number(m) > 59) { //invalid minute
			r.alertStr += " The minute is not valid."
			r.ValidTime = false
		}		
	}
	 
	if (h!="" && m!="") {
		pTimeStr = h + ":" + m
		r.FixedTime = pTimeStr;
	}
	return r
}


function Check24HrTime (pTimeStr)
{	
	var r = new Object()
	r.alertStr = ""
	r.ValidTime = true
	r.FixedTime = ""
	var h = ""
	var m = ""
	var i = 0
	var s = pTimeStr;
	
	if (s.length != 4)
	{
		s = "0" + s;
	}
	if (s.length != 4)
	{
		r.alertStr += " The time is not in a valid 24 hr format.";
		r.ValidTime = false
	}
	else
	{
		if (isNaN(Number(s)) == true)  //not a number
		{
			r.alertStr += " Not a valid time.";
			r.ValidTime = false
		}
		else
		{	
			h = stripHour(s, 2);
			if (Number(h) > 24 || Number(h) < 0)  //invalid hour
			{
				r.alertStr += " The hours are not valid.";
				r.ValidTime = false
			}
					
			m = stripMinute(s, 1);
			if (Number(m) > 59 || Number(m) < 0)  //invalid minute
			{
				r.alertStr += " The minutes are not valid.";
				r.ValidTime = false
			}
		}		
	}
	 
	if (h!="" && m!="")
	{
		pTimeStr = h + m;
		r.FixedTime = pTimeStr;
	}
	return r
}

function stripHour(s, i) {
	 return s.substring(0,i)
}

function stripMinute(s, i) {
	return s.substring(i+1, i+3)
}

function CheckDate (pDateStr) {	
	var Datestr = pDateStr;	
	var r = new Object();
	r.alertStr = "";
	r.ValidDate = false;
	r.FixedDate = "";
	
	FirstSlashPos = Datestr.indexOf("/"); //get the position of the first slash
	var d = Datestr.substring(0,FirstSlashPos);
	SecondSlashPos = Datestr.indexOf("/",FirstSlashPos+1); //get the position of the second slash	 
	var m = Datestr.substring(FirstSlashPos+1,SecondSlashPos );
	var y = Datestr.substring(SecondSlashPos+1,SecondSlashPos+1+4 );

	if (m.length ==1)
		m="0"+m;
	if (d.length ==1)
		d="0"+d;

	if ( (isDate(y,m,d) ==true) && (y.length ==4) && (m.length ==2) && (d.length ==2) )
	{
		//get full 4 digit year
		//var entereddate=new Date(parseInt(y),parseInt(m)-1,parseInt(d));
		//y = entereddate.getUTCFullYear();		
		
		r.ValidDate = true
		r.FixedDate = d+"/"+m+"/"+y;
		
	}
	return r;
}


function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

var daysInMonth = makeArray(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;


function isYear (s)
{   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}


function isDay (s)
{   if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}

function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];

    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}


function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isMonth (s)
{   if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}

function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);

    if (!isInteger(s, false)) return false;

    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}


function isInteger (s)

{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    return true;
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isSignedInteger (s)

{   if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);

    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];

        // skip leading + or -
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}



function daysInFebruary (year)
{
   return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}


function isDate (year, month, day)
{

	if (day.charAt(0)=='0')	day = day.substring(1, day.length);
	if (month.charAt(0)=='0')	month = month.substring(1, month.length);
       
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}


function isDateGreaterThenToday( pAusDate )
{
//alert( pAusDate )
pday=pAusDate.substring(0, 2);
pmonth=pAusDate.substring(3, 5);
pyear=pAusDate.substring(6, 10);

pmonth=pmonth-1;

//alert('day='+parseInt(pday))
//alert('month='+parseInt(pmonth))
//alert('year='+parseInt(pyear))


var todaysdate = new Date();
todaysdate.setHours(0,0,0,0);
var entereddate=new Date(parseInt(pyear),parseInt(pmonth),parseInt(pday),0,0,0);


if (entereddate  >= todaysdate ){
	return true
	}
else {
	return false
	}
}



//is date 1 greater then date 2
function isDateGreaterThenOrEqualTo( pAusDate1,pAusDate2 )
{

pday1=pAusDate1.substring(0, 2);
pmonth1=pAusDate1.substring(3, 5);
pyear1=pAusDate1.substring(6, 10);

pday2=pAusDate2.substring(0, 2);
pmonth2=pAusDate2.substring(3, 5);
pyear2=pAusDate2.substring(6, 10);


var entereddate1=new Date(pyear1,pmonth1-1,pday1)
var entereddate2=new Date(pyear2,pmonth2-1,pday2)

entereddate1.setHours(0,0,0,0);
entereddate2.setHours(0,0,0,0);

//alert('date1= '+entereddate1+' date2= '+entereddate2)

if (entereddate2 >= entereddate1)
	 return true
else
	return false
	
}



function isDateMoreThenOneYearFromToday( pAusDate,pFieldName )
{
	var todaysdatePlusOneYear = new Date();
	todaysdatePlusOneYear.setHours(0,0,0,0);
	
	FullYear = todaysdatePlusOneYear.getUTCFullYear();
	FullYear = FullYear + 1;
	todaysdatePlusOneYear.setUTCFullYear(FullYear);
	
	
	pday=pAusDate.substring(0, 2);
	pmonth=pAusDate.substring(3, 5);
	pyear=pAusDate.substring(6, 10);	
	
	var entereddate=new Date(parseInt(pyear),parseInt(pmonth)-1,parseInt(pday));
	entereddate.setHours(0,0,0,0);
	
	if ( entereddate > todaysdatePlusOneYear )
	{
		xx = confirm('Please confirm the date '+pFieldName+' is correct, as it is more then one year from today. Press Ok to Contine or press Cancel to change the date');
		return xx
	}
	return true
}


function GetTodaysDate( )
{
	var todaysdate = new Date();
	todaysdate.setHours(0,0,0,0);

	m = todaysdate.getUTCMonth()+1
	if (m<10) m='0'+m
	d = todaysdate.getDate()
	if (d<10) d='0'+d
	y = todaysdate.getUTCFullYear()
	return(d+'/'+m+'/'+y)
}

function FilterDoubleQuotes (str) {
	var regex=/"/gi; 
	var r = str.replace(regex,"&QUOT;");
	//alert(r)
	return r
}


