/*
	File Name	:	ErrorHandler
	Description	:

	Version		Date		Author	Description
	1.01		26/07/2005	PMG	SCR051
	1.02		04/08/2005	PMG	SCR048
	1.03		10/08/2005	PMG	Fixed online enquiry phone, fax, and mobile validation
	1.04		11/08/2005	PMG	ACS C485
	1.05		22/08/2005	PMG	ACS C525
	1.06		26/09/2005	PMG	ACS C562
	1.07		29/11/2005	PMG	SCR049
	1.08		20/01/2006	PMG	SCR059
	1.09		23/01/2006	PMG	SCR055A
	1.10		31/01/2006	PMG	SCR058
	1.11		03/02/2006	PMG	CC date validation - Must be greater then current year and month
	1.12		01/03/2006	PMG	ACS C657
	1.13		13/04/2006	PMG	SCR062
	1.14		21/04/2006	PMG	SCR062 - Check experience activity and details
	1.15		27/04/2006	PMG	SCR064
	1.16		28/04/2006	PMG	SCR065
	1.17		08/06/2006	PMG	SCR068
	1.18		14/06/2006	PMG	SCR067
	1.19		05/07/2006	PMG	SCR063
	1.20		27/07/2006	PMG	Removed referrers email address
	1.21		14/08/2006	PMG	SCR068 - Added referrer for graduate application
	1.22		21/08/2006	PMG	Renamed CPP Entry and Action elements to EntryCPP and ActionCPP respectively to be compatible with new website
	1.23		12/09/2006	PMG	SCR070
	1.24		13/11/2006	PMG	SCR076
	1.25		17/01/2007	PMG	Membersip application qualification changes
	1.26		22/02/2007	PMG	SCR078
	1.27		09/05/2007	PMG	Qualifications on the PPP Application not mandatory
	1.28		26/06/2007	PMG	Password validation - only alphanumerics allowed
	1.29		27/06/2007	PMG	Remarked - Password validation - only alphanumerics allowed
	1.30		08/03/2007	PMG	"Member Get Member Program" hidden
	1.31		07/01/2008	PMG	Suffix validation
	1.32		30/01/2008	PMG	SCR096
	1.33		24/07/2008	PMG	ACS C989
	1.34		18/08/2008	PMG	Organisaton for relevant experience is mandatory
	1.35		18/11/2008	PMG	SCR114
	1.36		10/06/2009	PMG	SCR127
	1.37		15/09/2009	PMG	SCR142
	1.38		18/09/2009	PMG	SCR143
	1.39		29/09/2009	PMG	SCR146
	1.40		26/10/2009	PMG	SCR148
	1.41		22/12/2009	PMG	SCR157
*/

/********************* PUBLIC FUNCTIONS ***************************/

var Salutation_Label_Value = 'If any uneditable fields require modification then please contact <a href="mailto:memberupdates@acs.org.au?subject=Member updates via website">memberupdates@acs.org.au</a> (note: documentary evidence is required for changes to Last Name etc).';
var PreEmaAddress_Label_Value = '';
var Addr1_Label_Value = 'The Society utilises the QAS Address Database to validate all Australian addresses.  You may be prompted to select from the QAS database when you submit your address change.  To override the address checking please contact <a href="mailto:memberupdates@acs.org.au?subject=Member updates via website">memberupdates@acs.org.au</a>.'
var State_Label_Value = 'Australia only';
var BusState_Label_Value = 'Australia only';
var Phone_Label_Value = 'Include country + area codes';
var Alias_Label_Value = 'To request a new alias please enter an email address in the format xxxxx@acsmail.net.au. If the alias is already in use then your request will be rejected.  To change/delete your alias please email <a href="mailto:memberservices@acs.org.au">memberservices@acs.org.au</a>'
var AliEmaAddress1_Label_Value = ''
var AliEmaAddress2_Label_Value = 'Mail to the above alias can be redirected to one or two email addresses'

// asusanto, 22/10/2004 - assumption - there is only one form in the document to submit .. 
function submitForm()
{
    //var formObject = document.forms[0];
    //if (!formObject)
    //    return;
    var formObject = null;
    for (i = 0; i < document.forms.length; i++)
    {
        var f = document.forms[i];
        var n = f.name;
        if (n == 'updPassword' || n == 'updMemPref' || n == 'updMemSurvey' || n == 'updMemDet' || n == 'updAlias' || n == 'payRenewal' || n == 'updPayMethodRef' || n == 'updMemApp' || n == 'updMemPCP' || n == 'updMemEnq' || n == 'updMemPayDet' || n == 'updMemPayOpt' || n == 'updMemSrch' || n == 'updMemFbck' || n == 'updMemCPP' || n == 'updMemRegrade' || n == 'updMemAppPPP' || n == 'updMemPPP' || n == 'updMemConApp' || n == 'updCPAct' || n == 'updCPComp' || n == 'updCPRegrade' || n == 'updPayments')
        {
            formObject = f;
            break;
        }
    }
    
    if (formObject && fnValidateSubmission(formObject))
    {
        return(formObject.submit());
    }
    else
    {
        //alert('no form object or submission fail');
        return(false);
    }
}

// main function
function fnValidateSubmission(formObject)
{
    var submitPlease = false;
    if (formObject)
    {
	if (formObject.name == 'updPassword')
        {
	    submitPlease = fnValidatePasswordForm(formObject);
        }
	else if (formObject.name == 'updMemPref')
	{
	    submitPlease = fnValidatePreferenceForm(formObject);
	}
	else if (formObject.name == 'updMemSurvey')
	{
	    submitPlease = true;
	}
	else if (formObject.name == 'updMemDet')
	{
	    submitPlease = fnValidateMemberDetailForm(formObject);
            if (submitPlease)
            {
                // enable stateObj and busStateObj first before submit
                var stateObj = document.getElementsByName('State')[0];
                if (stateObj && stateObj.disabled)
                {
                        stateObj.disabled = 0;
                }
                var busStateObj = document.getElementsByName('BusState')[0];
                if (busStateObj && busStateObj.disabled)
                {
                        busStateObj.disabled = 0;
                }
            }
	}
	else if (formObject.name == 'updAlias')
	{
	    submitPlease = fnValidateAlias(formObject);
	    if (submitPlease)
	    {
	    	enableAllFormInputs();
	    }
	}
        else if (formObject.name == 'payRenewal')
	{
	    //submitPlease = true;
            submitPlease = fnValidateRenewal(formObject);
            // TODO: 
            
        }
        else if (formObject.name == 'updPayMethodRef')
        {
            submitPlease = true;
        }
        else if (formObject.name == 'updMemApp')
	{
            submitPlease = fnValidateMemberApplicationForm(formObject);
        }
	else if (formObject.name == 'updMemPCP')
	{
            submitPlease = fnValidateMemberPCPStatusForm(formObject);
	}
	else if (formObject.name == 'updMemEnq')
	{
            submitPlease = fnValidateMemberEnquiryForm(formObject);
        }
	else if (formObject.name == 'updMemPayDet')
	{
            submitPlease = fnValidateRenewal(formObject);
        }
	else if (formObject.name == 'updMemPayOpt')
	{
            submitPlease = fnValidatePayOptions(formObject);
        }
        else if (formObject.name == 'updMemSrch')
        {
            submitPlease = true;
        }
	else if (formObject.name == 'updMemFbck')
	{
            submitPlease = fnValidateMemberFeedback(formObject);
        }
	else if (formObject.name == 'updMemCPP')
	{
            submitPlease = fnValidateMemberCPPDetailsForm(formObject);
	}
        else if (formObject.name == 'updMemRegrade')
	{
            submitPlease = fnValidateMemberRegradeForm(formObject);
        }
        else if (formObject.name == 'updCPRegrade')
	{
            submitPlease = fnValidateCPRegradeForm(formObject);
        }
        else if (formObject.name == 'updMemAppPPP')
	{
            submitPlease = fnValidateMemberAppPPPForm(formObject);
        }
        else if (formObject.name == 'updMemPPP')
	{
            submitPlease = fnValidateMembersPPPForm(formObject);
        }
        else if (formObject.name == 'updMemConApp')
	{
            submitPlease = fnValidateMemberConcessionAppForm(formObject);
        }
	else if (formObject.name == 'updCPAct')
	{
            submitPlease = fnValidateMemberCPActivityForm(formObject);
	}
	else if (formObject.name == 'updCPComp')
	{
            submitPlease = fnValidateMemberCPComplianceForm(formObject);
	}
	else if (formObject.name == 'updPayments')
	{
            submitPlease = fnValidateMemberPaymentsForm(formObject);
	}
    }
    return submitPlease;
}

function enableAllFormInputs()
{
	// get all INPUT and SELECT and add onchange property in it
	var inputObjects = document.getElementsByTagName('INPUT');
	for (i = 0; i < inputObjects.length; i++)
	{
		inputObjects[i].disabled = 0;
	}
	var selectObjects = document.getElementsByTagName('SELECT');
	for (i = 0; i < selectObjects.length; i++)
	{
		selectObjects[i].disabled = 0;
	}
}



function displayMsg(lblName, errorMsg, style)
{
    var lblObject = document.getElementsByName(lblName)[0];
    if (lblObject)
    {
        //alert('displaying: '+lblObject.name + ' style=' + style + ' errorMsg=' + errorMsg);
        if (style && style != '')
        {
            //alert('changing classname: '+lblObject.name);
            lblObject.className = style;
        }
        lblObject.innerHTML = errorMsg;
    }
}

function addMsg(lblNamesArray, errorMsgsArray, stylesArray, lblName, errorMsg, style)
{
    if (lblNamesArray == null)
    {
        lblNamesArray = new Array();
    }
    if (errorMsgsArray == null)
    {
        errorMsgsArray = new Array();
    }
    if (stylesArray == null)
    {
        stylesArray = new Array();
    }
    
    for (i = 0; i < lblNamesArray.length; i++)
    {
        if (lblNamesArray[i] == lblName && stylesArray[i] == 'ACS_Memb_Mngt_Form_Det_Msg_Error')
        {
            return;
        }
    }
    lblNamesArray[lblNamesArray.length] = lblName;
    errorMsgsArray[errorMsgsArray.length] = errorMsg;
    stylesArray[stylesArray.length] = style;
}


/********************** Alias Validation *************************************/

function fnValidateAlias(formObject)
{
    // change the label here - 
    // get the label object, change the class and display
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    var aliasObj = document.getElementById('Alias');
    var aliasEmailAddr1Obj = document.getElementById('AliEmaAddress1');
    var aliasEmailAddr2Obj = document.getElementById('AliEmaAddress2');
    // 1. Validate Email
    if (aliasObj.value != '' && !fnValEmail(aliasObj.value))
    {
            addMsg(lblNames, errorMsgs, styles, 'Alias_Msg', 'Invalid Email', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'Alias_Msg', Alias_Label_Value, 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    if (aliasEmailAddr1Obj.value != '' && !fnValEmail(aliasEmailAddr1Obj.value))
    {
            addMsg(lblNames, errorMsgs, styles, 'AliEmaAddress1_Msg', 'Invalid Email', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'AliEmaAddress1_Msg', AliEmaAddress1_Label_Value, 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    
    if (aliasEmailAddr2Obj.value != '' && !fnValEmail(aliasEmailAddr2Obj.value))
    {
            addMsg(lblNames, errorMsgs, styles, 'AliEmaAddress2_Msg', 'Invalid Email', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'AliEmaAddress2_Msg', AliEmaAddress2_Label_Value, 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    
    if ((aliasEmailAddr1Obj.value != '' && aliasEmailAddr2Obj.value != '') && (aliasEmailAddr1Obj.value == aliasEmailAddr2Obj.value))
    {
            addMsg(lblNames, errorMsgs, styles, 'AliEmaAddress2_Msg', 'Alias Email Addr 1 and 2 must be different', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'AliEmaAddress2_Msg', AliEmaAddress2_Label_Value, 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    
    // 2. If no alias is defined, there must be no forwarding address defined
    if (aliasObj.value == '' && (aliasEmailAddr1Obj.value != '' || aliasEmailAddr2Obj.value != ''))
    {
        addMsg(lblNames, errorMsgs, styles, 'Alias_Msg', 'Alias Email Addr 1 and 2 cannot be defined without an alias', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
        bSuccess = false;
    }
    else
    {
        addMsg(lblNames, errorMsgs, styles, 'Alias_Msg', Alias_Label_Value, 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    
    // 3. Alias must be @acslink.net.au or @acsmail.net.au
    if (aliasObj.value.indexOf('@acslink.net.au') == -1 && aliasObj.value.indexOf('@acsmail.net.au') == -1)
    {
        addMsg(lblNames, errorMsgs, styles, 'Alias_Msg', 'Alias must include the domain (acslink.net.au or acsmail.net.au)', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
        bSuccess = false;
    }
    else
    {
        addMsg(lblNames, errorMsgs, styles, 'Alias_Msg', Alias_Label_Value, 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    
    
    if (!bSuccess)
    {
            // ----- display messages -----
            for (i = 0; i < lblNames.length; i++)
            {
                displayMsg(lblNames[i], errorMsgs[i], styles[i]);
                //alert('lblNames[i]: '+lblNames[i]+', errorMsgs[i]: '+errorMsgs[i]+', styles[i]: '+styles[i]);
            }
            // go to top - here - 
            document.location.href = '#';
            displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    }
    return bSuccess;
}



/********************** Renewal Validation *************************************/

function fnValidateRenewal(formObject)
{
    // change the label here - 
    // get the label object, change the class and display
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    
    
    // 1. Validate Date
    var msg = fnValidateCCDate(document.getElementsByName('ExpiryDate_D')[0].value, document.getElementsByName('ExpiryDate_M')[0].value, document.getElementsByName('ExpiryDate_Y')[0].value);
    //lblNames[iIndex] = 'ExpiryDate_Msg';
    if (msg != '')
    {
        //alert('msg: '+msg);
        addMsg(lblNames, errorMsgs, styles, 'ExpiryDate_Msg', msg, 'ACS_Memb_Mngt_Form_Det_Msg_Error');
        //errorMsgs[iIndex] = msg;                        // set to error text
        //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
        bSuccess = false;
    }
    else
    {
        addMsg(lblNames, errorMsgs, styles, 'ExpiryDate_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
        //errorMsgs[iIndex] = '';   // set to original text
        //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    //iIndex = iIndex + 1;
    
   

    // 2. validate credit card no using Luhn algo: TODO
    //lblNames[iIndex] = 'CreditCardNumber_Msg';
    var cardNoTemp = document.getElementsByName('CreditCardNumber')[0].value;
    var cardNo = '';
    // remove white space from cardNo
    for (i = 0; i < cardNoTemp.length; i++)
    {
        if (cardNoTemp != ' ')
        {
            cardNo += cardNoTemp.charAt(i);
        }
    }
    
    var cardTypeCode = document.getElementsByName('PaymentMethod')[0].value;
    var cardType = '';
    switch(cardTypeCode)
    {
        case '1' : cardType = 'amex'; break;
        case '2' : cardType = 'bankcard'; break;
        case '5' : cardType = 'dinnersclub'; break;
        case '8' : cardType = 'mastercard'; break;
        case '11': cardType = 'visa'; break;
    }
    //alert('cardNo: '+cardNo);
    //alert('cardType: '+cardType);

    if (cardNo!='' && cardType!= '' && !LuhnChecksum(cardNo, cardType))
    {
            addMsg(lblNames, errorMsgs, styles, 'CreditCardNumber_Msg', 'Credit Card Type Check: This is not a valid '+cardType+' number', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            //errorMsgs[iIndex] = 'Credit Card Type Check: This is not a valid '+cardType+' number';
            //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'CreditCardNumber_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
            //errorMsgs[iIndex] = '';
            //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    //iIndex = iIndex + 1;
    // 3.validate compulsory
    fnGetRenewalMandatoryFields(formObject);
    for (j = 0; j < mandatoryFields.length; j++)
    {
        //alert('i: '+i);
        // go through all mandatory fields and get the mapped labels: TODO
        var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[j]);
        if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
        {
            var mandatoryObj = mandatoryFieldObjects[0];
            //lblNames[iIndex] = mandatoryLabels[i];
            //alert('j: '+j);
            
            if (mandatoryObj.value == '' || mandatoryObj.value == '-')
            {
                //alert('add error to: '+mandatoryObj.name);
                
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryErrorMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg_Error');
                bSuccess = false;
                //errorMsgs[iIndex] = mandatoryErrorMsgs[i];
                //alert(mandatoryErrorMsgs[i]);
                //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            }
            else
            {
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryOriginalMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg');
                //errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
                //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
            }
            //iIndex = iIndex + 1;
        }
    }
    
    
    if (!bSuccess)
    {
            // ----- display messages -----
            for (i = 0; i < lblNames.length; i++)
            {
                displayMsg(lblNames[i], errorMsgs[i], styles[i]);
                //alert('lblNames[i]: '+lblNames[i]+', errorMsgs[i]: '+errorMsgs[i]+', styles[i]: '+styles[i]);
            }
            // go to top - here - 
            document.location.href = '#';
            displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    }
    return bSuccess;
}

function fnGetRenewalMandatoryFields(formObject)
{
    // restore original message first
    if (mandatoryFields != null)
    {
        restoreOriginalMsgs();
    }
    // initialize here always
    mandatoryFields = new Array();
    mandatoryLabels = new Array();
    mandatoryErrorMsgs = new Array();
    mandatoryOriginalMsgs = new Array();
    
    var i = 0;
    mandatoryFields[i] = 'PaymentMethod';
    mandatoryLabels[i] = 'PaymentMethod_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Card Type is mandatory';
    
    
    mandatoryFields[i] = 'CreditCardNumber';
    mandatoryLabels[i] = 'CreditCardNumber_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Number is mandatory';
    
    mandatoryFields[i] = 'ExpiryDate_D';
    mandatoryLabels[i] = 'ExpiryDate_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
    
    mandatoryFields[i] = 'ExpiryDate_M';
    mandatoryLabels[i] = 'ExpiryDate_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
    
    mandatoryFields[i] = 'ExpiryDate_Y';
    mandatoryLabels[i] = 'ExpiryDate_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
    
    mandatoryFields[i] = 'CardHolder';
    mandatoryLabels[i] = 'CardHolder_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Holder is mandatory';
}



function fnValidateCCDate(dayVal, monVal, yeaVal)
{
    var dayVal, monVal, yeaVal, strMsg, leapYea;
    strMsg = '';
    args = fnValSelDate.arguments;
    //alert(dayVal+'/'+monVal+'/'+yeaVal);
    var todaysDate = new Date();
    var d = todaysDate.getDate();
    var m = todaysDate.getMonth()+1;
    var y = todaysDate.getFullYear();
    
    if (dayVal.toUpperCase() != '-' && monVal.toUpperCase() != '-' && yeaVal.toUpperCase() != '-') 
    {
        // month ending date test
        if (monVal == '02' || monVal == '06' || monVal == '09' || monVal == '11') 
        {
            if (dayVal == '31') 
            {
                strMsg = 'Invalid Date: Date does not exist';  // month ending 31
            }
        }
        // February -- leap year test
        if (monVal == '02') 
        {
            leapYea = yeaVal % 4;
            if (leapYea == 0) 
            {
                if (dayVal == '30' || dayVal == '31') 
                {
                    strMsg = 'Invalid Date: Date does not exist';   // leap year February, date <= 29
                }
            }
            else 
            {
                if (dayVal == '29' || dayVal == '30' || dayVal == '31') 
                {
                    strMsg = 'Invalid Date: Date does not exist'; // non leap year February date <= 28
                }
            }
        }
        
        // Expiry Date Must be in the future

	// v1.11
        //if ((yeaVal < y) || (yeaVal == y && monVal < m) || (yeaVal == y && monVal == m && dayVal <= d))
        //if ((yeaVal < y) || (yeaVal == y && monVal < m) || (yeaVal == y && monVal == m))
        if ((yeaVal < y) || (yeaVal == y && monVal < m))
        {
            strMsg = 'Invalid Date: Expiry Date must be in the future';
        }
        
    }
    else 
    {
        strMsg = 'Invalid Date: Incomplete entry';
    }
    //alert('strMsg: '+strMsg);
    return strMsg;
}

function LuhnChecksum(cardNumber, cardType)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;
        
      case "bankcard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^56/;
        break;
      case "dinnersclub":
        lengthIsValid = (cardNumberLength == 14);
        prefixRegExp = /^3(0[0-5]|6[0-9]|8[0-9])/;
        break;
      default:
        prefixRegExp = /^$/;
        //alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }
    //alert('checkSumTotal: '+checkSumTotal);
    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}


/************************* PASSWORD VALIDATION *********************************/

function fnContainsAtLeastOneNumeric(s)
{
	for (var i = 0; i < s.length; i++)
	{
		switch (s.substr(i, 1))
		{
			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				return true;
				break;
		}
	}
	return false;
}

function fnContainsOnlyAlphaNumerics(s)
{
	if (s && s.length > 0)
	{
		var regex = /^[0-9A-Za-z]+$/; //^[a-zA-z]+$/
		if (!regex.test(s))
			return false;
	}
	return true;
}

// --- validate password ---
function fnValidatePasswordForm(formObject)
{
    // change the label here - 
    // get the label object, change the class and display
    var lblName = 'NewPasswordReEnter_Label';
    var errorMsg = 'Two entries do not match!';
    var style = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
    
    if (formObject.NewPassword.value == '' || formObject.NewPasswordReEnter.value=='')
    {
        errorMsg = 'Password must not be empty';
    }
    // check new password and repeated password are the same
    else if (formObject.NewPassword.value == formObject.NewPasswordReEnter.value)
    {
        if (formObject.NewPassword.value.length < 6 || formObject.NewPassword.value.length > 18)
        {
            errorMsg = 'Password must be at least 6 characters and no more than 18 characters';
        }
        else if (formObject.MemberID && formObject.MemberID.value != '' && formObject.NewPassword.value.indexOf(formObject.MemberID.value) > -1)
        {
            errorMsg = 'The membership no cannot be part of the password';
        }
        //else if (!fnContainsOnlyAlphaNumerics(formObject.NewPassword.value))
        //{
        //    errorMsg = 'Password can only be alphanumerc';
        //}
        else if (!fnContainsAtLeastOneNumeric(formObject.NewPassword.value))
        {
            errorMsg = 'Password must contain at least one numeric';
        }
        else
        {
            return true;
        }
    }
    
    displayMsg(lblName, errorMsg, style);
    
    // go to top
    document.location.href = '#';
    displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    return false;
}


/************************* PREFERENCE VALIDATION *********************************/

// --- validate preference ---
function fnValidatePreferenceForm(formObject)
{
    var bSuccess = true;
    //var nMailControlCounter = formObject.nMailControlCounter.value;
    //var checkboxNames = new Array();
    //var dropdownNames = new Array();
    /*var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    for (i = 1; i <= nMailControlCounter; i++)
    {
        var checkboxName = "ComTypeSelected"+i;
        var dropdownName = "ComMethod"+i;
        // check if the checkbox is not disabled and selected, the commethod must not be null
        var checkBoxObj = document.getElementsByName(checkBoxName)[0];
        var dropdownObj = document.getElementsByName(dropdownName)[0];
        if (checkBoxObj && dropdownObj)
        {
            if (!checkBoxObj.disabled && checkBoxObj.value == 1 && dropdownObj.value == '')
            {
                bSuccess = false;
                lblNames[iIndex] = dropdownName_Label;
                errorMsgs[iIndex] = 'The communication method must have an entry';
                styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
                iIndex = iIndex + 1;
            }
        }
    }
    for (i = 0; i < lblNames.length; i++)
    {
        displayMsg(lblNames[i], errorMsgs[i], styles[i]);
    }
    if (!bSuccess)
    {
            // go to top - here - 
            document.location.href = '#';
    }*/
    return bSuccess;
}


/************************* MEMBER DETAIL VALIDATION *********************************/

// --- validate member details ---
function fnValidateMemberDetailForm(formObject)
{
    // change the label here - 
    // get the label object, change the class and display
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    // 1. Validate DOB
    var msg = fnValidateMemberDOB(formObject);
    lblNames[iIndex] = 'DOB_Label';
    if (msg != '')
    {
        errorMsgs[iIndex] = msg;                        // set to error text
        styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
        bSuccess = false;
    }
    else
    {
        errorMsgs[iIndex] = '';   // set to original text
        styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    iIndex = iIndex + 1;


    // 2. Validate email formatting
    lblNames[iIndex] = 'PreEmaAddress_Label';
    if (!fnValidateMemberEmail(formObject))
    {
            errorMsgs[iIndex] = 'Invalid email format';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
    }
    else
    {
            errorMsgs[iIndex] = PreEmaAddress_Label_Value;
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    iIndex = iIndex + 1;
    
    
    // 3. Validate Mandatory fields
    fnGetMemberMandatoryFields(formObject);
    for (i = 0; i < mandatoryFields.length; i++)
    {
        // go through all mandatory fields and get the mapped labels: TODO
        var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
        if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
        {
            var mandatoryObj = mandatoryFieldObjects[0];
            lblNames[iIndex] = mandatoryLabels[i];
            if (mandatoryFieldObjects[0].type == 'radio')
            {
                    var found = false;
                    for (j = 0; j < mandatoryFieldObjects.length; j++)
                    {
                            if (mandatoryFieldObjects[j].checked)
                            {
                                    found = true;
                            }
                    }
                    if (!found)
                    {
                            bSuccess = false;
                            errorMsgs[iIndex] = mandatoryErrorMsgs[i];
                            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
                    }
                    else
                    {
                        errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
                        styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
                    }
            }
            else
            {
                    
                  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
                  {
                      bSuccess = false;
                      errorMsgs[iIndex] = mandatoryErrorMsgs[i];
                      styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
                  }
                  else
                  {
                      errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
                      styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
                  }
            }
            iIndex = iIndex + 1;
        }
    }
    
    // 4. validate phone fields
    // ---- Home phone ----
    lblNames[iIndex] = 'HomePhone_Label';
    var phoneError = false;
    if (!fnValidatePhone('HomePhone'))
    {
            errorMsgs[iIndex] = 'Invalid Home Phone';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
            phoneError = true;
    }
    else
    {
            errorMsgs[iIndex] = Phone_Label_Value;
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    iIndex = iIndex + 1;
    
    // ---- Home fax ----
    
    if (!fnValidatePhone('HomeFax'))
    {
            lblNames[iIndex] = 'HomePhone_Label';
            errorMsgs[iIndex] = 'Invalid Home Fax';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
            iIndex = iIndex + 1;
    }
    else
    {
        if (!phoneError)
        {
            lblNames[iIndex] = 'HomePhone_Label';
            errorMsgs[iIndex] = Phone_Label_Value;
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
            iIndex = iIndex + 1;
        }
    }
    

    // --- Business Phone ----
    phoneError = false;
    lblNames[iIndex] = 'BusPhone_Label';
    if (!fnValidatePhone('BusPhone'))
    {
            errorMsgs[iIndex] = 'Invalid Business Phone';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
            phoneError = true;
    }
    else
    {
            errorMsgs[iIndex] = Phone_Label_Value;
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    iIndex = iIndex + 1;
    
    // --- Business Fax ----
    
    if (!fnValidatePhone('BusFax'))
    {
            lblNames[iIndex] = 'BusPhone_Label';
            errorMsgs[iIndex] = 'Invalid Business Fax';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
            iIndex = iIndex + 1;
    }
    else
    {
        if (!phoneError)
        {
            lblNames[iIndex] = 'BusPhone_Label';
            errorMsgs[iIndex] = Phone_Label_Value;
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
            iIndex = iIndex + 1;
        }
    }
    
    
    // --- Mobile Phone ----
    lblNames[iIndex] = 'Mobile_Label';
    if (!fnValidatePhone('Mobile'))
    {
            errorMsgs[iIndex] = 'Invalid Mobile';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
    }
    else
    {
            errorMsgs[iIndex] = '';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    iIndex = iIndex + 1;
    
    
    // --- Branch ----
    lblNames[iIndex] = 'Branch_Label';
    if ((document.getElementsByName('Branch')[0].value != document.getElementsByName('OldBranch')[0].value) && (document.getElementsByName('Branch')[0].value == '9008'))
    {
            errorMsgs[iIndex] = 'Overseas transfer not valid - contact <a href="mailto:memberservices@acs.org.au">memberservices@acs.org.au</a>';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
    }
    else
    {
            errorMsgs[iIndex] = '';
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    iIndex = iIndex + 1;
    
    
    // --- Suffix ----
    if (document.getElementsByName('Suffix')[0].value != '')
    {
	    lblNames[iIndex] = 'Suffix_Label';
	    var regex = /(AACS|FACS|MACS|PCP)/
	    if (regex.test(document.getElementsByName('Suffix')[0].value.toUpperCase()))
	    {
		    errorMsgs[iIndex] = 'Invalid Suffix';
		    styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		    bSuccess = false;
	    }
	    else
	    {
		    errorMsgs[iIndex] = '';
		    styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	    }
	    iIndex = iIndex + 1;
    }
    
    
    if (!bSuccess)
    {
            // ----- display messages -----
            for (i = 0; i < lblNames.length; i++)
            {
                displayMsg(lblNames[i], errorMsgs[i], styles[i]);
            }
            // go to top - here - 
            document.location.href = '#';
            displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    }
    
    return bSuccess;
}

function fnValidatePhone(phoneType)
{
    var phoneNo = '';
    var phoneNoObj = null;
    var bSuccess = false;
    if (phoneType == 'HomePhone')
    {
        phoneNoObj = document.getElementsByName('Phone')[0];
    }
    if (phoneType == 'HomeFax')
    {
        phoneNoObj = document.getElementsByName('Fax')[0];
    }
    else if (phoneType == 'BusPhone')
    {
        phoneNoObj = document.getElementsByName('BusPhone')[0];
    }
    else if (phoneType == 'BusFax')
    {
        phoneNoObj = document.getElementsByName('BusFax')[0];
    }
    else if (phoneType == 'Mobile')
    {
        phoneNoObj = document.getElementsByName('Mobile')[0];
    }
    else
    {
        bSuccess = true;
    }
    
    if (phoneNoObj)
    {
        phoneNo = phoneNoObj.value;
        //alert(phoneNo);
        // validate phone no here
        // use regular expression later
        /*if (/(\d+|([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(phoneNo))
        {
            bSuccess = true;
        }*/
        if (phoneNo != '')
        {
            if (phoneNo.length <= 16)
            {
                for (i = 0; i < phoneNo.length; i++)
                {
                    var c = phoneNo.charAt(i);
                    switch(c)
                    {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                        case '8':
                        case '9':
                        case ')':
                        case '(':
                        case '+':
                        case '-':
                        case ' ':   bSuccess = true;
                                    break;
                        default:    bSuccess = false;
                    }
                    if (!bSuccess)
                        break;
                }
            }
            else
            {
                bSuccess = false;  // phone has more than 16 characters
            }
        }
        else
        {
            bSuccess = true; // empty phone no, don't validate
        }
    }
    //alert('bSuccess: '+bSuccess);
    return bSuccess;
}

function fnValidateMemberDOB(formObject)
{
    var dayVal = formObject.DOBDay.value;
    var monVal = formObject.DOBMon.value;
    var yeaVal = formObject.DOBYea.value;
    return fnValSelDate(dayVal, monVal, yeaVal);
}

function fnValSelDate() {
    var dayVal, monVal, yeaVal, strMsg, leapYea;
    strMsg = '';
    args = fnValSelDate.arguments;
    dayVal = args[0];
    monVal = args[1];
    yeaVal = args[2];
    var todaysDate = new Date();
    var d = todaysDate.getDate();
    var m = todaysDate.getMonth()+1;
    var y = todaysDate.getFullYear();
    
    //alert('dayVal: '+dayVal);
    //alert('monVal: '+monVal);
    //alert('yeaVal: '+yeaVal);
    if (dayVal.toUpperCase() != '-' && monVal.toUpperCase() != '-' && yeaVal.toUpperCase() != '-') 
    {
        // month ending date test
        if (monVal == '02' || monVal == '06' || monVal == '09' || monVal == '11') 
        {
            if (dayVal == '31') 
            {
                strMsg = 'Invalid Date of Birth: Date does not exist';  // month ending 31
            }
        }
        // February -- leap year test
        if (monVal == '02') 
        {
            leapYea = yeaVal % 4;
            if (leapYea == 0) 
            {
                if (dayVal == '30' || dayVal == '31') 
                {
                    strMsg = 'Invalid Date of Birth: Date does not exist';   // leap year February, date <= 29
                }
            }
            else 
            {
                if (dayVal == '29' || dayVal == '30' || dayVal == '31') 
                {
                    strMsg = 'Invalid Date of Birth: Date does not exist'; // non leap year February date <= 28
                }
            }
        }
        
        // DOB Must be between 01/01/1900 - today's date

        if ((yeaVal < 1900) || (yeaVal > y) || (yeaVal == y && monVal > m) || (yeaVal == y && monVal == m && dayVal > d))
        {
            strMsg = 'Invalid Date of Birth: Date must lie between 01/01/1900 - '+d+'/'+m+'/'+y;
        }
        
    }
    else 
    {
        if (dayVal == '-' && monVal == '-' && yeaVal == '-') 
        {
            // day/month/year don't have values ... it's ok
        }
        else 
        {
            strMsg = 'Invalid Date of Birth: Incomplete entry';
        }
    }
    
    // check member is at least older than 16 years old
    if (strMsg == '')
    {
        if ( yeaVal > (y - 16) )
        {
            strMsg = 'Member has to be older than 16 years';
        }
    }
    return strMsg;
}

// ---- Email ----
function fnValidateMemberEmail(formObject)
{
    var emailVal = formObject.PreEmaAddress.value;
    // don't validate if email is empty
    if (emailVal == '')
    {
        return true;
    }
    return fnValEmail(emailVal);
}

// validate email address
function fnValEmail() 
{
    var emailaddress, strMsg;
    args = fnValEmail.arguments;
    emailaddress = args[0];
    if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(emailaddress))
    {
        strMsg = '';
    }
    else 
    {
        strMsg = 'Your email address has to be a valid one';
    }
    return (strMsg == '')
}

// --- Mandatory fields -----
var mandatoryFields,mandatoryLabels,mandatoryErrorMsgs,mandatoryOriginalMsgs;

function restoreOriginalMsgs()
{
    var iIndex = 0;
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    
    for (i = 0; i < mandatoryFields.length; i++)
    {
        var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
        if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
        {
            lblNames[iIndex] = mandatoryLabels[i];
            errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
            styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
            iIndex = iIndex + 1;
        }
    }
    for (i = 0; i < lblNames.length; i++)
    {
        displayMsg(lblNames[i], errorMsgs[i], styles[i]);
    }
}

function fnGetMemberMandatoryFields(formObject)
{
    // restore original message first
    if (mandatoryFields != null)
    {
        restoreOriginalMsgs();
    }
    // initialize here always
    mandatoryFields = new Array();
    mandatoryLabels = new Array();
    mandatoryErrorMsgs = new Array();
    mandatoryOriginalMsgs = new Array();
    
    var i = 0;
    mandatoryFields[i] = 'Salutation';
    mandatoryLabels[i] = 'Salutation_Label';
    mandatoryOriginalMsgs[i] = Salutation_Label_Value;
    mandatoryErrorMsgs[i++] = 'Salutation is mandatory';
    
    
    mandatoryFields[i] = 'PreName';
    mandatoryLabels[i] = 'Salutation_Label';
    mandatoryOriginalMsgs[i] = Salutation_Label_Value;
    mandatoryErrorMsgs[i++] = 'Preferred First Name is mandatory';
    
    mandatoryFields[i] = 'PreMaiAddress';
    mandatoryLabels[i] = 'PreMaiAddress_Label';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Default Mail is mandatory';
    
    var elems = document.getElementsByName('PreMaiAddress');
    if (elems.length >= 2)
    {
        if (elems[0].value=='Home' && elems[0].checked)
        {
            mandatoryFields[i] = 'Addr1';
            mandatoryLabels[i] = 'Addr1_Label';
            mandatoryOriginalMsgs[i] = Addr1_Label_Value;
            mandatoryErrorMsgs[i++] = 'Address line 1 must have a value when default mail is set to Home';
        }
        else if (elems[1].checked)
        {
            mandatoryFields[i] = 'BusAddr1';
            mandatoryLabels[i] = 'EmpName_Label';
            mandatoryOriginalMsgs[i] = '';
            mandatoryErrorMsgs[i++] = 'Business Address line 1 must have a value when default mail is set to Employer';
        }
    }
    
    var addrLine1Obj = document.getElementsByName('Addr1')[0];
    if (addrLine1Obj)
    {
        // country is expected if Addr1 has a value
        var couCodeObj = document.getElementsByName('CouCode')[0];
        if (addrLine1Obj.value != '' && couCodeObj && couCodeObj.value == '')
        {
            mandatoryFields[i] = 'CouCode';
            mandatoryLabels[i] = 'CouCode_Label';
            mandatoryOriginalMsgs[i] = '';
            mandatoryErrorMsgs[i++] = 'Country is expected';
        }
    }
    
    
    var busAddrLine1Obj = document.getElementsByName('BusAddr1')[0];
    if (busAddrLine1Obj)
    {
        // country is expected if Addr1 has a value
        var busCouCodeObj = document.getElementsByName('BusCouCode')[0];
        if (busAddrLine1Obj.value != '' && busCouCodeObj && busCouCodeObj.value == '')
        {
            mandatoryFields[i] = 'BusCouCode';
            mandatoryLabels[i] = 'BusCouCode_Label';
            mandatoryOriginalMsgs[i] = '';
            mandatoryErrorMsgs[i++] = 'Country is expected';
        }
    }
    
    if (formObject.CouCode.value == '61')
    {
        mandatoryFields[i] = 'Suburb';
        mandatoryLabels[i] = 'Suburb_Label';
        mandatoryOriginalMsgs[i] = '';
        mandatoryErrorMsgs[i++] = 'Suburb is expected for AUSTRALIAN address';
        
        mandatoryFields[i] = 'PosCode';
        mandatoryLabels[i] = 'PosCode_Label';
        mandatoryOriginalMsgs[i] = '';
        mandatoryErrorMsgs[i++] = 'Postcode is expected for AUSTRALIAN address';
        
        mandatoryFields[i] = 'State';
        mandatoryLabels[i] = 'State_Label';
        mandatoryOriginalMsgs[i] = State_Label_Value;
        mandatoryErrorMsgs[i++] = 'State is expected for AUSTRALIAN address';
    }
    if (formObject.BusCouCode.value == '61')
    {
        mandatoryFields[i] = 'BusSuburb';
        mandatoryLabels[i] = 'BusSuburb_Label';
        mandatoryOriginalMsgs[i] = '';
        mandatoryErrorMsgs[i++] = 'Suburb is expected for AUSTRALIAN address';
        
        mandatoryFields[i] = 'BusPosCode';
        mandatoryLabels[i] = 'BusPosCode_Label';
        mandatoryOriginalMsgs[i] = '';
        mandatoryErrorMsgs[i++] = 'Postcode is expected for AUSTRALIAN address';
        
        mandatoryFields[i] = 'BusState';
        mandatoryLabels[i] = 'BusState_Label';
        mandatoryOriginalMsgs[i] = BusState_Label_Value;
        mandatoryErrorMsgs[i++] = 'State is expected for AUSTRALIAN address';
    }
    
    //alert(mandatoryFields);
    //alert(mandatoryLabels);
    //alert(mandatoryOriginalMsgs);
    //alert(mandatoryErrorMsgs);
}

// --- validate member application ---

function fnGetMemberAppPersonalMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'Salutation';
	mandatoryLabels[i] = 'Salutation_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Salutation is mandatory';
	
	mandatoryFields[i] = 'FirstName';
	mandatoryLabels[i] = 'FirstName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'First Name is mandatory';
	
	mandatoryFields[i] = 'LastName';
	mandatoryLabels[i] = 'LastName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Last Name is mandatory';
	
	mandatoryFields[i] = 'PreName';
	mandatoryLabels[i] = 'PreName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Preferred First Name is mandatory';
	
	mandatoryFields[i] = 'Gender';
	mandatoryLabels[i] = 'Gender_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Gender is mandatory';
	
	mandatoryFields[i] = 'DOBDay';
	mandatoryLabels[i] = 'DOB_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Date of Birth is mandatory';
	
	mandatoryFields[i] = 'DOBMon';
	mandatoryLabels[i] = 'DOB_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Date of Birth is mandatory';
	
	mandatoryFields[i] = 'DOBYea';
	mandatoryLabels[i] = 'DOB_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Date of Birth is mandatory';
	
	mandatoryFields[i] = 'PreEmaAddress';
	mandatoryLabels[i] = 'PreEmaAddress_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Email Address is mandatory';
	
	mandatoryFields[i] = 'Addr1';
	mandatoryLabels[i] = 'Addr1_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Address line 1 is mandatory';
	
	var addrLine1Obj = document.getElementsByName('Addr1')[0];
	if (addrLine1Obj)
	{
		// country is expected if Addr1 has a value
		var couCodeObj = document.getElementsByName('CouCode')[0];
		if (addrLine1Obj.value != '' && couCodeObj && couCodeObj.value == '')
		{
			mandatoryFields[i] = 'CouCode';
			mandatoryLabels[i] = 'CouCode_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Country is expected';
		}
	}
	
	mandatoryFields[i] = 'CouCode';
	mandatoryLabels[i] = 'CouCode_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Country is mandatory';
	
	if (formObject.CouCode.value == '61')
	{
		mandatoryFields[i] = 'Suburb';
		mandatoryLabels[i] = 'Suburb_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Suburb is expected for AUSTRALIAN address';
		
		mandatoryFields[i] = 'PosCode';
		mandatoryLabels[i] = 'PosCode_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Postcode is expected for AUSTRALIAN address';
		
		mandatoryFields[i] = 'State';
		mandatoryLabels[i] = 'State_Label';
		mandatoryOriginalMsgs[i] = State_Label_Value;
		mandatoryErrorMsgs[i++] = 'State is expected for AUSTRALIAN address';
	}
	
	mandatoryFields[i] = 'Citizen';
	mandatoryLabels[i] = 'Citizen_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Citizen is mandatory';
	
	return(i);
}

function fnGetMemberAppQualificationMandatoryFields(formObject, i)
{
	for (var j = 1; j <= formObject.MaxQualifications.value; j++)
	{
		var bUni = false;
		var bQual = false;
		var bDate = false;
		var bAcc = false;
		if (document.getElementsByName("University" + j)[0].value != '' || document.getElementsByName("Institute" + j)[0].value != '')
		{
			bUni = true;
		}
		if (document.getElementsByName("Qualification" + j)[0].value != '' || document.getElementsByName("OtherQualification" + j)[0].value != '')
		{
			bQual = true;
		}
		if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
		{
			bDate = true;
		}
		if (document.getElementsByName("Accredit" + j)[0].value != '')
		{
			bAcc = true;
		}
		if (bUni == true || bQual == true || bDate == true || bAcc == true || j == 1)
		{
			if (bUni == false)
			{
 				mandatoryFields[i] = 'University' + j;
				mandatoryLabels[i] = 'University' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'University or institute is mandatory';
	   		}
			if (bQual == false)
			{
 				mandatoryFields[i] = 'Qualification' + j;
				mandatoryLabels[i] = 'Qualification' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Qualification is mandatory';
	   		}
			if (document.getElementsByName("TimeTaken" + j)[0].value != '8999' && bDate == false)
			{
				mandatoryFields[i] = 'DateCompletedMon' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedYea' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
			}
		}
	}

	return(i);
}

function fnGetMemberAppExperienceMandatoryFields(formObject, i)
{
	if (formObject.AppType.value == '1')
	{
		for (var j = 1; j <= formObject.MaxExperience.value; j++)
		{
			var bPos = false;
			var bFromDate = false;
			var bToDate = false;
			var bOrg = false;
			var bAct = false;
			var bRole = false;
			var bAttachment = false;
			if (document.getElementsByName("Position" + j)[0].value != '')
			{
				bPos = true;
			}
			if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-')
			{
				bFromDate = true;
			}
			if (document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
			{
				bToDate = true;
			}
			if (document.getElementsByName("Organisation" + j)[0].value != '')
			{
				bOrg = true;
			}
			if (document.getElementsByName("Activity" + j)[0].value != '')
			{
				bAct = true;
			}
			if (document.getElementsByName("Role" + j)[0].value != '')
			{
				bRole = true;
			}
			if (document.getElementsByName("ExpAttachmentUrl" + j)[0].value != '')
			{
				bAttachment = true;
			}
			if (bPos == true || bFromDate == true || bToDate == true || bOrg == true || bAct == true || bRole == true || bAttachment == true || j == 1)
			{
				if (bPos == false)
				{
					mandatoryFields[i] = 'Position' + j;
					mandatoryLabels[i] = 'Position' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'Position is mandatory';
				}
				if (bOrg == false)
				{
					mandatoryFields[i] = 'Organisation' + j;
					mandatoryLabels[i] = 'Organisation' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'Organisation is mandatory';
				}
				if (bFromDate == false)
				{
					mandatoryFields[i] = 'FromDateMon' + j;
					mandatoryLabels[i] = 'FromDate' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'From Date is mandatory';
					mandatoryFields[i] = 'FromDateYea' + j;
					mandatoryLabels[i] = 'FromDate' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'From Date is mandatory';
				}
				if (bToDate == false)
				{
					mandatoryFields[i] = 'ToDateMon' + j;
					mandatoryLabels[i] = 'ToDate' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'To Date is mandatory';
					mandatoryFields[i] = 'ToDateYea' + j;
					mandatoryLabels[i] = 'ToDate' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'To Date is mandatory';
				}
				if (bAct == false && bRole == false && bAttachment == false)
				{
					mandatoryFields[i] = 'Activity' + j;
					mandatoryLabels[i] = 'Activity' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'Activity or Details or Attachment is mandatory';
				}
			}
		}
 	}
	else if (formObject.AppType.value == '2')
	{
		mandatoryFields[i] = 'CurrentlyEmployed';
		mandatoryLabels[i] = 'CurrentlyEmployed_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Currently Employed is mandatory';
	}
  
	return(i);
}

function fnGetMemberAppRefereeMandatoryFields(formObject, i)
{
	if (formObject.AppType.value == '1')
	{
		for (var j = 1; j <= formObject.MaxReferees.value; j++)
		{
			var bMemberYn = false;
			var bName = false;
			var bEmail = false;
			var bAddr = false;
			var bPhone = false;
			if (document.getElementsByName("RefereeMemberYn" + j)[0].checked || document.getElementsByName("RefereeMemberYn" + j)[1].checked)
			{
				bMemberYn = true;
			}
			if (document.getElementsByName("RefereeName" + j)[0].value != '')
			{
				bName = true;
			}
			if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
			{
				bEmail = true;
			}
			if (document.getElementsByName("RefereeAddress" + j)[0].value != '')
			{
				bAddr = true;
			}
			if (document.getElementsByName("RefereePhone" + j)[0].value != '')
			{
				bPhone = true;
			}
			if (bMemberYn == true || bName == true || bEmail == true || bAddr == true || bPhone == true)
			{
				if (bMemberYn == false)
				{
					mandatoryFields[i] = 'RefereeMemberYn' + j;
					mandatoryLabels[i] = 'RefereeMemberYn' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'ACS Member Y/N is mandatory';
				}
				if (bName == false)
				{
					mandatoryFields[i] = 'RefereeName' + j;
					mandatoryLabels[i] = 'RefereeName' + j + '_Label';
					mandatoryOriginalMsgs[i] = 'Full name including title and initials';
					mandatoryErrorMsgs[i++] = 'Referee Name is mandatory';
				}
				if (bEmail == false)
				{
					mandatoryFields[i] = 'RefereeEmail' + j;
					mandatoryLabels[i] = 'RefereeEmail' + j + '_Label';
					mandatoryOriginalMsgs[i] = '';
					mandatoryErrorMsgs[i++] = 'Referee Email is mandatory';
				}
			}
		}
	}
		
	return(i);
}

function fnGetMemberAppPaymentMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'PaymentMethod';
	mandatoryLabels[i] = 'PaymentMethod_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Payment Method is mandatory';

	mandatoryFields[i] = 'PaymentPeriod';
	mandatoryLabels[i] = 'PaymentPeriod_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Payment Period is mandatory';

	if (formObject.PaymentMethod[0].checked)
	{
		mandatoryFields[i] = 'CCType';
		mandatoryLabels[i] = 'CCType_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card Type is mandatory';
		mandatoryFields[i] = 'CCNo';
		mandatoryLabels[i] = 'CCNo_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card number is mandatory';
		mandatoryFields[i] = 'CCExpiryDateMon';
		mandatoryLabels[i] = 'CCExpiryDate_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
		mandatoryFields[i] = 'CCExpiryDateYea';
		mandatoryLabels[i] = 'CCExpiryDate_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
		mandatoryFields[i] = 'CCName';
		mandatoryLabels[i] = 'CCName_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Name on Credit Card is mandatory';
	}
	
	mandatoryFields[i] = 'FutureRenewals';
	mandatoryLabels[i] = 'FutureRenewals_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Future Renewals is mandatory';

	return(i);
}

function fnGetMemberApplicationMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;
	
	i = fnGetMemberAppPersonalMandatoryFields(formObject, i);
	i = fnGetMemberAppQualificationMandatoryFields(formObject, i);
	i = fnGetMemberAppExperienceMandatoryFields(formObject, i);
	i = fnGetMemberAppRefereeMandatoryFields(formObject, i);
	i = fnGetMemberAppPaymentMandatoryFields(formObject, i);
	
	//alert(mandatoryFields);
	//alert(mandatoryLabels);
	//alert(mandatoryOriginalMsgs);
	//alert(mandatoryErrorMsgs);
}

function fnValidateMemberApplicationForm(formObject)
{
	// change the label here - 
	// get the label object, change the class and display
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberApplicationMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
					var found = false;
					for (j = 0; j < mandatoryFieldObjects.length; j++)
					{
							if (mandatoryFieldObjects[j].checked)
							{
									found = true;
							}
					}
					if (!found)
					{
							bSuccess = false;
							errorMsgs[iIndex] = mandatoryErrorMsgs[i];
							styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					}
					else
					{
						errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
						styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
					}
			}
			else
			{
					
				  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				  {
					  bSuccess = false;
					  errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				  }
				  else
				  {
					  errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				  }
			}
			iIndex = iIndex + 1;
		}
	}
	
	// Validate DOB
	if (document.getElementsByName("DOBDay")[0].value != '-' && document.getElementsByName("DOBMon")[0].value != '-' && document.getElementsByName("DOBYea")[0].value != '-')
	{
		var msg = fnValidateMemberDOB(formObject);
		lblNames[iIndex] = 'DOB_Label';
		if (msg != '')
		{
			errorMsgs[iIndex] = msg;						// set to error text
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
		}
		else
		{
			errorMsgs[iIndex] = '';   // set to original text
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;
	}

	if (formObject.AppType.value == '2' || formObject.AppType.value == '3')
	{
		if (formObject.CouCode.value != 61)
		{
			lblNames[iIndex] = 'CouCode_Label';
			errorMsgs[iIndex] = 'Country must be Australia';						// set to error text
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			iIndex = iIndex + 1;
			bSuccess = false;
		}
	}

	// Validate phone fields
	// ---- Home phone ----
	lblNames[iIndex] = 'HomePhone_Label';
	var phoneError = false;
	if (!fnValidatePhone('HomePhone'))
	{
			errorMsgs[iIndex] = 'Invalid Home Phone';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
			phoneError = true;
	}
	else
	{
			errorMsgs[iIndex] = Phone_Label_Value;
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	}
	iIndex = iIndex + 1;
	
	// ---- Home fax ----
	if (!fnValidatePhone('HomeFax'))
	{
			lblNames[iIndex] = 'HomePhone_Label';
			errorMsgs[iIndex] = 'Invalid Home Fax';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
			iIndex = iIndex + 1;
	}
	else
	{
		if (!phoneError)
		{
			lblNames[iIndex] = 'HomePhone_Label';
			errorMsgs[iIndex] = '';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			iIndex = iIndex + 1;
		}
	}
	   
	// --- Mobile Phone ----
	lblNames[iIndex] = 'Mobile_Label';
	if (!fnValidatePhone('Mobile'))
	{
			errorMsgs[iIndex] = 'Invalid Mobile';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
	}
	else
	{
			errorMsgs[iIndex] = '';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	}
	iIndex = iIndex + 1;

	// Validate email formatting
	if (document.getElementsByName("PreEmaAddress")[0].value != '')
	{
		lblNames[iIndex] = 'PreEmaAddress_Label';
		if (!fnValEmail(document.getElementsByName("PreEmaAddress")[0].value))
		{
				errorMsgs[iIndex] = 'Invalid email format';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
		}
		else
		{
				errorMsgs[iIndex] = PreEmaAddress_Label_Value;
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;
	}
	
	if (formObject.PaymentMethod[0].checked)
	{
		// Validate Expiry Date
		if (formObject.CCExpiryDateMon.value != '-' && formObject.CCExpiryDateYea.value != '-')
		{
			var dayVal = '31';
			switch (formObject.CCExpiryDateMon.value)
			{
				case '02':
					if (formObject.CCExpiryDateYea.value % 4 == 0)
					{
						dayVal = '29';
					}
					else
					{
						dayVal = '28';
					}
					break;
				case '04': case '06': case '09': case '11':
					dayVal = '30';
					break;
			}
			lblNames[iIndex] = 'CCExpiryDate_Label';
			var msg = fnValidateCCDate(dayVal, formObject.CCExpiryDateMon.value, formObject.CCExpiryDateYea.value);
			if (msg != '')
			{
				errorMsgs[iIndex] = 'Invalid expiry date';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}

		if (formObject.CCNo.value != '')
		{
			// Validate credit card no using Luhn algo:
			var cardNoTemp = formObject.CCNo.value;
			var cardNo = '';
			// remove white space from cardNo
			for (i = 0; i < cardNoTemp.length; i++)
			{
				if (cardNoTemp != ' ')
				{
					cardNo += cardNoTemp.charAt(i);
				}
			}

			var cardTypeCode = formObject.CCType.value;
			var cardType = '';
			switch(cardTypeCode)
			{
				case '1' : cardType = 'amex'; break;
				case '2' : cardType = 'bankcard'; break;
				case '5' : cardType = 'dinnersclub'; break;
				case '8' : cardType = 'mastercard'; break;
				case '11': cardType = 'visa'; break;
			}

			lblNames[iIndex] = 'CCNo_Label';
			if (cardNo!='' && cardType!= '' && !LuhnChecksum(cardNo, cardType))
			{
				errorMsgs[iIndex] = 'Invalid credit card number';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}
	}
	
	// --- Qualification dates ----
	if (formObject.AppType.value == '1')
	{
		for (var j = 1; j <= formObject.MaxQualifications.value; j++)
		{
			if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'DateCompleted' + j + '_Label';
				var dtNow = new Date();
				var iDateCompleted = document.getElementsByName("DateCompletedYea" + j)[0].value + document.getElementsByName("DateCompletedMon" + j)[0].value;	
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				if (iDateCompleted > iDateNow)
				{
					errorMsgs[iIndex] = 'Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}
	else if (formObject.AppType.value == '2')
	{
		for (var j = 1; j <= formObject.MaxQualifications.value; j++)
		{
			if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'DateCompleted' + j + '_Label';
				var dtNow = new Date();
				var iDateCompleted = document.getElementsByName("DateCompletedYea" + j)[0].value + document.getElementsByName("DateCompletedMon" + j)[0].value;	
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				if (iDateCompleted < iDateNow)
				{
					errorMsgs[iIndex] = 'Date must be in the future';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}
	
	// --- Experience dates ----
	if (formObject.AppType.value == '1')
	{
		for (var j = 1; j <= formObject.MaxExperience.value; j++)
		{
			if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-' && document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'FromDate' + j + '_Label';
				var dtNow = new Date();
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				var iFromDate = document.getElementsByName("FromDateYea" + j)[0].value + document.getElementsByName("FromDateMon" + j)[0].value;
				var iToDate = document.getElementsByName("ToDateYea" + j)[0].value + document.getElementsByName("ToDateMon" + j)[0].value;
				if (iFromDate > iToDate)
				{
					errorMsgs[iIndex] = 'Date range is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iFromDate > iDateNow)
				{
					errorMsgs[iIndex] = 'From Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iToDate > iDateNow)
				{
					errorMsgs[iIndex] = 'To Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}
	
	// --- Referees ----
	if (formObject.AppType.value == '1')
	{
		for (var j = 1; j <= formObject.MaxReferees.value; j++)
		{
			lblNames[iIndex] = 'RefereeEmail' + j + '_Label';
			if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
			{
				if (!fnValEmail(document.getElementsByName("RefereeEmail" + j)[0].value))
				{
					errorMsgs[iIndex] = 'Invalid email format';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}
	
	// Validate referrer
	/*if (formObject.AppType.value == '1' || formObject.AppType.value == '3')
	{
		if (document.getElementsByName("ReferrersId")[0].value != '')
		{
			// id
			lblNames[iIndex] = 'ReferrersId_Label';
			if (document.getElementsByName("ReferrersId")[0].value.length != 7)
			{
					errorMsgs[iIndex] = 'Invalid membership number';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
			}
			else
			{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}
	}*/

	if (!bSuccess)
	{
			// ----- display messages -----
			for (i = 0; i < lblNames.length; i++)
			{
				displayMsg(lblNames[i], errorMsgs[i], styles[i]);
			}
			// go to top - here - 
			document.location.href = '#';
			displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return bSuccess;
}

function fnGetMemberPCPStatusMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0, k = 0;

	for (var j = 1; j <= document.getElementsByName("Entries")[0].value; j++)
	{
		var bDate = false;
		var bTitle = false;
		var bObjective = false;
		var bProvider = false;
		var bHours = false;

		if (document.getElementsByName("DateCompletedDay" + j)[0].value != '-' && document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
		{
			bDate = true;
		}
		if (document.getElementsByName("Title" + j)[0].value != '')
		{
			bTitle = true;
		}
		if (document.getElementsByName("Objective" + j)[0].value != '')
		{
			bObjective = true;
		}
		if (document.getElementsByName("Provider" + j)[0].value != '')
		{
			bProvider = true;
		}
		if (document.getElementsByName("Hours" + j)[0].value != '-')
		{
			bHours = true;
		}
		if (document.getElementsByName("DateCompletedDay" + j)[0].value != '-' || document.getElementsByName("DateCompletedMon" + j)[0].value != '-' || document.getElementsByName("DateCompletedYea" + j)[0].value != '-' || bTitle == true || bObjective == true || bProvider == true || bHours == true)
		{
			if (bDate == false)
			{
				mandatoryFields[i] = 'DateCompletedDay' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedMon' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedYea' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
			}
			if (bTitle == false)
			{
				mandatoryFields[i] = 'Title' + j;
				mandatoryLabels[i] = 'Title' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Title is mandatory';
			}
			if (bObjective == false)
			{
				mandatoryFields[i] = 'Objective' + j;
				mandatoryLabels[i] = 'Objective' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Objective is mandatory';
			}
			if (bProvider == false)
			{
				mandatoryFields[i] = 'Provider' + j;
				mandatoryLabels[i] = 'Provider' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Provider is mandatory';
			}
			if (bHours == false)
			{
				mandatoryFields[i] = 'Hours' + j;
				mandatoryLabels[i] = 'Hours' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Hours is mandatory';
			}
			k += 1;
		}
	}

	for (var j = 1; j <= document.getElementsByName("MaxReferees")[0].value; j++)
	{
		var bName = false;
		var bPhone = false;
		var bEmail = false;

		if (document.getElementsByName("RefereeName" + j)[0].value != '')
		{
			bName = true;
		}
		if (document.getElementsByName("RefereePhone" + j)[0].value != '')
		{
			bPhone = true;
		}
		if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
		{
			bEmail = true;
		}
		if (bName == false)
		{
			mandatoryFields[i] = 'RefereeName' + j;
			mandatoryLabels[i] = 'RefereeName' + j + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Name is mandatory';
		}
		if (bPhone == false && bEmail == false)
		{
			mandatoryFields[i] = 'RefereePhone' + j;
			mandatoryLabels[i] = 'RefereePhone' + j + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Phone or email address is mandatory';
		}
		k += 1;
	}
	
	return(k);
}

function fnValidateTotalHours(formObject)
{
	var nTotalHours = 0;
	
	for (var j = 1; j <= document.getElementsByName("Entries")[0].value; j++)
	{
		var bDate = false;
		var bTitle = false;
		var bObjective = false;
		var bProvider = false;
		var bHours = false;

		if (document.getElementsByName("DateCompletedDay" + j)[0].value != '-' && document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
		{
			bDate = true;
		}
		if (document.getElementsByName("Title" + j)[0].value != '')
		{
			bTitle = true;
		}
		if (document.getElementsByName("Objective" + j)[0].value != '')
		{
			bObjective = true;
		}
		if (document.getElementsByName("Provider" + j)[0].value != '')
		{
			bProvider = true;
		}
		if (document.getElementsByName("Hours" + j)[0].value != '-')
		{
			bHours = true;
		}
		if (bDate == true && bTitle == true && bObjective == true && bProvider == true && bHours == true)
		{
			nTotalHours += parseInt(document.getElementsByName("Hours" + j)[0].value);
		}
	}

	return(nTotalHours > 29);
}

function fnValidateMemberPCPStatusForm(formObject)
{
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	var k = fnGetMemberPCPStatusMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
				var found = false;
				for (j = 0; j < mandatoryFieldObjects.length; j++)
				{
					if (mandatoryFieldObjects[j].checked)
					{
						found = true;
					}
				}
				if (!found)
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			else
			{			
				if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			iIndex = iIndex + 1;
		}
	}

	// --- Referees ----
	for (var j = 1; j <= formObject.MaxReferees.value; j++)
	{
		lblNames[iIndex] = 'RefereeEmail' + j + '_Label';
		if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
		{
			if (!fnValEmail(document.getElementsByName("RefereeEmail" + j)[0].value))
			{
				errorMsgs[iIndex] = 'Invalid email format';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}
	}
	
	lblNames[iIndex] = 'PCPRequirements_Label';
	if (document.getElementsByName("Yea")[0].value == '-')
	{
		errorMsgs[iIndex] = 'Year is mandatory';
		styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		bSuccess = false;
	}
	else if (document.getElementsByName("PCPRequirements")[0].checked == false)
	{
		errorMsgs[iIndex] = 'Please tick in order to submit the claim';
		styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		bSuccess = false;
	}
	else
	{
		errorMsgs[iIndex] = '';
		styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	}
	iIndex = iIndex + 1;

	lblNames[iIndex] = 'TotalHours_Label';
	if (fnValidateTotalHours(formObject) == false)
	{
		errorMsgs[iIndex] = 'Claim does not meet minimum 30 hours';
		styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		bSuccess = false;
	}
	else
	{
		errorMsgs[iIndex] = '';
		styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	}
	iIndex = iIndex + 1;

	if (!bSuccess)
	{
		// ----- display messages -----
		for (i = 0; i < lblNames.length; i++)
		{
			displayMsg(lblNames[i], errorMsgs[i], styles[i]);
		}
		// go to top - here - 
		document.location.href = '#';
		displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return(bSuccess);
}

// --- validate member application ---

function fnGetMemberEnquiryMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	mandatoryFields[i] = 'Salutation';
	mandatoryLabels[i] = 'Salutation_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Salutation is mandatory';
	
	mandatoryFields[i] = 'FirstName';
	mandatoryLabels[i] = 'FirstName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'First Name is mandatory';
	
	mandatoryFields[i] = 'LastName';
	mandatoryLabels[i] = 'LastName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Last Name is mandatory';
	
	mandatoryFields[i] = 'PreEmaAddress';
	mandatoryLabels[i] = 'PreEmaAddress_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Email Address is mandatory';
	
	mandatoryFields[i] = 'Phone';
	mandatoryLabels[i] = 'HomePhone_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Home Phone is mandatory';
	
	mandatoryFields[i] = 'Category';
	mandatoryLabels[i] = 'Category_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Category is mandatory';
	
	//alert(mandatoryFields);
	//alert(mandatoryLabels);
	//alert(mandatoryOriginalMsgs);
	//alert(mandatoryErrorMsgs);
}

function fnValidateMemberEnquiryForm(formObject)
{
	// change the label here - 
	// get the label object, change the class and display
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberEnquiryMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
					var found = false;
					for (j = 0; j < mandatoryFieldObjects.length; j++)
					{
							if (mandatoryFieldObjects[j].checked)
							{
									found = true;
							}
					}
					if (!found)
					{
							bSuccess = false;
							errorMsgs[iIndex] = mandatoryErrorMsgs[i];
							styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					}
					else
					{
						errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
						styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
					}
			}
			else
			{
					
				  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				  {
					  bSuccess = false;
					  errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				  }
				  else
				  {
					  errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				  }
			}
			iIndex = iIndex + 1;
		}
	}
	
	// Validate phone fields
	// ---- Home phone ----
	var phoneError = false;
	if (!fnValidatePhone('HomePhone'))
	{
			lblNames[iIndex] = 'HomePhone_Label';
			errorMsgs[iIndex] = 'Invalid Home Phone';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
			phoneError = true;
			iIndex = iIndex + 1;
	}
	
	// ---- Home fax ----
	lblNames[iIndex] = 'HomeFax_Label';
	if (!fnValidatePhone('HomeFax'))
	{
			errorMsgs[iIndex] = 'Invalid Home Fax';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
	}
	else
	{
			errorMsgs[iIndex] = '';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	}
	iIndex = iIndex + 1;
	   
	// --- Mobile Phone ----
	lblNames[iIndex] = 'Mobile_Label';
	if (!fnValidatePhone('Mobile'))
	{
			errorMsgs[iIndex] = 'Invalid Mobile';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
	}
	else
	{
			errorMsgs[iIndex] = '';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	}
	iIndex = iIndex + 1;

	// Validate email formatting
	if (document.getElementsByName("PreEmaAddress")[0].value != '')
	{
		lblNames[iIndex] = 'PreEmaAddress_Label';
		if (!fnValEmail(document.getElementsByName("PreEmaAddress")[0].value))
		{
				errorMsgs[iIndex] = 'Invalid email format';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
		}
		else
		{
				errorMsgs[iIndex] = PreEmaAddress_Label_Value;
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;
	}
	
	if (!bSuccess)
	{
			// ----- display messages -----
			for (i = 0; i < lblNames.length; i++)
			{
				displayMsg(lblNames[i], errorMsgs[i], styles[i]);
			}
			// go to top - here - 
			document.location.href = '#';
			displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return bSuccess;
}

function fnGetPayOptionsMandatoryFields(formObject)
{
    // restore original message first
    if (mandatoryFields != null)
    {
        restoreOriginalMsgs();
    }
    // initialize here always
    mandatoryFields = new Array();
    mandatoryLabels = new Array();
    mandatoryErrorMsgs = new Array();
    mandatoryOriginalMsgs = new Array();
    
    var i = 0;
    if (document.getElementsByName('AutoPayment')[0].value == "true")
    {
	    if (document.getElementsByName('PaymentMethod')[0].value != "-" || document.getElementsByName('CreditCardNumber')[0].value != "" || document.getElementsByName('ExpiryDate_M')[0].value != "-" || document.getElementsByName('ExpiryDate_Y')[0].value != "-" || document.getElementsByName('CardHolder')[0].value != "")
	    {
		    mandatoryFields[i] = 'PaymentMethod';
		    mandatoryLabels[i] = 'PaymentMethod_Msg';
		    mandatoryOriginalMsgs[i] = '';
		    mandatoryErrorMsgs[i++] = 'Card Type is mandatory';

		    mandatoryFields[i] = 'CreditCardNumber';
		    mandatoryLabels[i] = 'CreditCardNumber_Msg';
		    mandatoryOriginalMsgs[i] = '';
		    mandatoryErrorMsgs[i++] = 'Credit Card Number is mandatory';

		    mandatoryFields[i] = 'ExpiryDate_D';
		    mandatoryLabels[i] = 'ExpiryDate_Msg';
		    mandatoryOriginalMsgs[i] = '';
		    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';

		    mandatoryFields[i] = 'ExpiryDate_M';
		    mandatoryLabels[i] = 'ExpiryDate_Msg';
		    mandatoryOriginalMsgs[i] = '';
		    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';

		    mandatoryFields[i] = 'ExpiryDate_Y';
		    mandatoryLabels[i] = 'ExpiryDate_Msg';
		    mandatoryOriginalMsgs[i] = '';
		    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';

		    mandatoryFields[i] = 'CardHolder';
		    mandatoryLabels[i] = 'CardHolder_Msg';
		    mandatoryOriginalMsgs[i] = '';
		    mandatoryErrorMsgs[i++] = 'Credit Card Holder is mandatory';
	    }
    }
    else
    {
	    mandatoryFields[i] = 'PaymentMethod';
	    mandatoryLabels[i] = 'PaymentMethod_Msg';
	    mandatoryOriginalMsgs[i] = '';
	    mandatoryErrorMsgs[i++] = 'Card Type is mandatory';


	    mandatoryFields[i] = 'CreditCardNumber';
	    mandatoryLabels[i] = 'CreditCardNumber_Msg';
	    mandatoryOriginalMsgs[i] = '';
	    mandatoryErrorMsgs[i++] = 'Credit Card Number is mandatory';

	    mandatoryFields[i] = 'ExpiryDate_D';
	    mandatoryLabels[i] = 'ExpiryDate_Msg';
	    mandatoryOriginalMsgs[i] = '';
	    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';

	    mandatoryFields[i] = 'ExpiryDate_M';
	    mandatoryLabels[i] = 'ExpiryDate_Msg';
	    mandatoryOriginalMsgs[i] = '';
	    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';

	    mandatoryFields[i] = 'ExpiryDate_Y';
	    mandatoryLabels[i] = 'ExpiryDate_Msg';
	    mandatoryOriginalMsgs[i] = '';
	    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';

	    mandatoryFields[i] = 'CardHolder';
	    mandatoryLabels[i] = 'CardHolder_Msg';
	    mandatoryOriginalMsgs[i] = '';
	    mandatoryErrorMsgs[i++] = 'Credit Card Holder is mandatory';
    }
    
    mandatoryFields[i] = 'PaymentPeriod';
    mandatoryLabels[i] = 'PaymentPeriod_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Payment Period is mandatory';
}

function fnValidatePayOptions(formObject)
{
    // change the label here - 
    // get the label object, change the class and display
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    
    
    // 1. Validate Date
    if (document.getElementsByName('ExpiryDate_D')[0].value != "-" && document.getElementsByName('ExpiryDate_M')[0].value != "-" && document.getElementsByName('ExpiryDate_Y')[0].value != "-")
    {
	    var msg = fnValidateCCDate(document.getElementsByName('ExpiryDate_D')[0].value, document.getElementsByName('ExpiryDate_M')[0].value, document.getElementsByName('ExpiryDate_Y')[0].value);
	    //lblNames[iIndex] = 'ExpiryDate_Msg';
	    if (msg != '')
	    {
		//alert('msg: '+msg);
		addMsg(lblNames, errorMsgs, styles, 'ExpiryDate_Msg', msg, 'ACS_Memb_Mngt_Form_Det_Msg_Error');
		//errorMsgs[iIndex] = msg;                        // set to error text
		//styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		bSuccess = false;
	    }
	    else
	    {
		addMsg(lblNames, errorMsgs, styles, 'ExpiryDate_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
		//errorMsgs[iIndex] = '';   // set to original text
		//styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
	    }
	    //iIndex = iIndex + 1;
    }

    // 2. validate credit card no using Luhn algo: TODO
    //lblNames[iIndex] = 'CreditCardNumber_Msg';
    var cardNoTemp = document.getElementsByName('CreditCardNumber')[0].value;
    var cardNo = '';
    // remove white space from cardNo
    for (i = 0; i < cardNoTemp.length; i++)
    {
        if (cardNoTemp != ' ')
        {
            cardNo += cardNoTemp.charAt(i);
        }
    }
    
    var cardTypeCode = document.getElementsByName('PaymentMethod')[0].value;
    var cardType = '';
    switch(cardTypeCode)
    {
        case '1' : cardType = 'amex'; break;
        case '2' : cardType = 'bankcard'; break;
        case '5' : cardType = 'dinnersclub'; break;
        case '8' : cardType = 'mastercard'; break;
        case '11': cardType = 'visa'; break;
    }
    //alert('cardNo: '+cardNo);
    //alert('cardType: '+cardType);

    if (cardNo!='' && cardType!= '' && !LuhnChecksum(cardNo, cardType))
    {
            addMsg(lblNames, errorMsgs, styles, 'CreditCardNumber_Msg', 'Credit Card Type Check: This is not a valid '+cardType+' number', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            //errorMsgs[iIndex] = 'Credit Card Type Check: This is not a valid '+cardType+' number';
            //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'CreditCardNumber_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
            //errorMsgs[iIndex] = '';
            //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    //iIndex = iIndex + 1;
    
    // 3.validate compulsory
    fnGetPayOptionsMandatoryFields(formObject);
    for (j = 0; j < mandatoryFields.length; j++)
    {
        //alert('i: '+i);
        // go through all mandatory fields and get the mapped labels: TODO
        var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[j]);
        if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
        {
            var mandatoryObj = mandatoryFieldObjects[0];
            //lblNames[iIndex] = mandatoryLabels[i];
            //alert('j: '+j);
            
            if (mandatoryObj.value == '' || mandatoryObj.value == '-')
            {
                //alert('add error to: '+mandatoryObj.name);
                
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryErrorMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg_Error');
                bSuccess = false;
                //errorMsgs[iIndex] = mandatoryErrorMsgs[i];
                //alert(mandatoryErrorMsgs[i]);
                //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            }
            else
            {
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryOriginalMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg');
                //errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
                //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
            }
            //iIndex = iIndex + 1;
        }
    }
    
    
    if (!bSuccess)
    {
            // ----- display messages -----
            for (i = 0; i < lblNames.length; i++)
            {
                displayMsg(lblNames[i], errorMsgs[i], styles[i]);
                //alert('lblNames[i]: '+lblNames[i]+', errorMsgs[i]: '+errorMsgs[i]+', styles[i]: '+styles[i]);
            }
            // go to top - here - 
            document.location.href = '#';
            displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    }
    return bSuccess;
}

function fnGetMemberFeedbackMandatoryFields(formObject)
{
    // restore original message first
    if (mandatoryFields != null)
    {
        restoreOriginalMsgs();
    }
    mandatoryFields = new Array();
    mandatoryLabels = new Array();
    mandatoryErrorMsgs = new Array();
    mandatoryOriginalMsgs = new Array();
    
    var i = 0;
    mandatoryFields[i] = 'Category';
    mandatoryLabels[i] = 'Category_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Category is mandatory';

    mandatoryFields[i] = 'Note';
    mandatoryLabels[i] = 'Note_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Comment is mandatory';
}

function fnValidateMemberFeedback(formObject)
{
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    fnGetMemberFeedbackMandatoryFields(formObject);
    for (j = 0; j < mandatoryFields.length; j++)
    {
        var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[j]);
        if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
        {
            var mandatoryObj = mandatoryFieldObjects[0];          
            if (mandatoryObj.value == '' || mandatoryObj.value == '-')
            {
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryErrorMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg_Error');
                bSuccess = false;
            }
            else
            {
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryOriginalMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg');
            }
        }
    }
       
    if (!bSuccess)
    {
            for (i = 0; i < lblNames.length; i++)
            {
                displayMsg(lblNames[i], errorMsgs[i], styles[i]);
            }
            document.location.href = '#';
            displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    }
    return bSuccess;
}

function fnGetMemberCPPDetailsMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;

	if (document.getElementsByName("EntryCPP")[0].value == 'course')
	{
		if (document.getElementsByName("ActionCPP")[0].value == 'update')
		{
			var bDate = (document.getElementsByName("DateCompletedDay")[0].value != '-' && document.getElementsByName("DateCompletedMon")[0].value != '-' && document.getElementsByName("DateCompletedYea")[0].value != '-');
			var bTitle = (document.getElementsByName("Title")[0].value != '');
			var bObjective = (document.getElementsByName("Objective")[0].value != '');
			var bProvider = (document.getElementsByName("Provider")[0].value != '')
			var bHours =  (document.getElementsByName("Hours")[0].value != '-');
			if (bDate == false)
			{
				mandatoryFields[i] = 'DateCompletedDay';
				mandatoryLabels[i] = 'DateCompleted' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedMon';
				mandatoryLabels[i] = 'DateCompleted' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedYea';
				mandatoryLabels[i] = 'DateCompleted' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
			}
			if (bTitle == false)
			{
				mandatoryFields[i] = 'Title';
				mandatoryLabels[i] = 'Title' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Title is mandatory';
			}
			if (bObjective == false)
			{
				mandatoryFields[i] = 'Objective';
				mandatoryLabels[i] = 'Objective' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Objective is mandatory';
			}
			if (bProvider == false)
			{
				mandatoryFields[i] = 'Provider';
				mandatoryLabels[i] = 'Provider' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Provider is mandatory';
			}
			if (bHours == false)
			{
				mandatoryFields[i] = 'Hours';
				mandatoryLabels[i] = 'Hours' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Hours is mandatory';
			}
		}
		else if (document.getElementsByName("ActionCPP")[0].value == 'delete')
		{
			var bCourseTrn = (document.getElementsByName("CourseTrn")[0].value != '' && document.getElementsByName("CourseTrn")[0].value != '');
			if (bCourseTrn == false)
			{
				mandatoryFields[i] = 'DateCompletedDay';
				mandatoryLabels[i] = 'DateCompleted' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Invalid course';
			}
		}
	}
	if (document.getElementsByName("EntryCPP")[0].value == 'referee')
	{
		if (document.getElementsByName("ActionCPP")[0].value == 'update')
		{
			var bName = (document.getElementsByName("RefereeName")[0].value != '');
			var bPhone = (document.getElementsByName("RefereePhone")[0].value != '');
			var bEmail = (document.getElementsByName("RefereeEmail")[0].value != '');
			if (bName == false)
			{
				mandatoryFields[i] = 'RefereeName';
				mandatoryLabels[i] = 'RefereeName' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Name is mandatory';
			}
			if (bPhone == false && bEmail == false)
			{
				mandatoryFields[i] = 'RefereePhone';
				mandatoryLabels[i] = 'RefereePhone' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Phone or email address is mandatory';
			}
		}
		else if (document.getElementsByName("ActionCPP")[0].value == 'delete')
		{
			var bRefereeTrn = (document.getElementsByName("RefereeTrn")[0].value != '' && document.getElementsByName("RefereeTrn")[0].value != '');
			if (bRefereeTrn == false)
			{
				mandatoryFields[i] = 'RefereeName';
				mandatoryLabels[i] = 'RefereeName' + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Invalid referee';
			}
		}
	}
}

function fnValidateMemberCPPDetailsForm(formObject)
{
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberCPPDetailsMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
				var found = false;
				for (j = 0; j < mandatoryFieldObjects.length; j++)
				{
					if (mandatoryFieldObjects[j].checked)
					{
						found = true;
					}
				}
				if (!found)
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			else
			{			
				if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			iIndex = iIndex + 1;
		}
	}

	// --- Course ----
	if (document.getElementsByName("EntryCPP")[0].value == 'course')
	{
		if (document.getElementsByName("ActionCPP")[0].value == 'update')
		{
			lblNames[iIndex] = 'RefereeName' + '_Label';
			if (document.getElementsByName("Referees")[0].value < 2)
			{
				errorMsgs[iIndex] = 'Must have at least two referees';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
		}
	}
	
	// --- Referee ----
	if (document.getElementsByName("EntryCPP")[0].value == 'referee')
	{
		if (document.getElementsByName("ActionCPP")[0].value == 'update')
		{
			lblNames[iIndex] = 'RefereeEmail' + '_Label';
			if (document.getElementsByName("RefereeEmail")[0].value != '')
			{
				if (!fnValEmail(document.getElementsByName("RefereeEmail")[0].value))
				{
					errorMsgs[iIndex] = 'Invalid email format';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}
	
	if (!bSuccess)
	{
		// ----- display messages -----
		for (i = 0; i < lblNames.length; i++)
		{
			displayMsg(lblNames[i], errorMsgs[i], styles[i]);
		}
		// go to top - here - 
		document.location.href = '#';
		displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return(bSuccess);
}

function fnGetMemberCPActivityMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;

	if (document.getElementsByName("ActionCP")[0].value == 'update')
	{
		var bDate = (document.getElementsByName("DateCompletedDay")[0].value != '-' && document.getElementsByName("DateCompletedMon")[0].value != '-' && document.getElementsByName("DateCompletedYea")[0].value != '-');
		var bTitle = (document.getElementsByName("Title")[0].value != '');
		var bObjective = (document.getElementsByName("Objective")[0].value != '');
		var bProvider = (document.getElementsByName("Provider")[0].value != '')
		var bHours =  (document.getElementsByName("Hours")[0].value != '-');
		if (bDate == false)
		{
			mandatoryFields[i] = 'DateCompletedDay';
			mandatoryLabels[i] = 'DateCompleted' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Date is mandatory';
			mandatoryFields[i] = 'DateCompletedMon';
			mandatoryLabels[i] = 'DateCompleted' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Date is mandatory';
			mandatoryFields[i] = 'DateCompletedYea';
			mandatoryLabels[i] = 'DateCompleted' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Date is mandatory';
		}
		if (bTitle == false)
		{
			mandatoryFields[i] = 'Title';
			mandatoryLabels[i] = 'Title' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Title is mandatory';
		}
		if (bObjective == false)
		{
			mandatoryFields[i] = 'Objective';
			mandatoryLabels[i] = 'Objective' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Objective is mandatory';
		}
		if (bProvider == false)
		{
			mandatoryFields[i] = 'Provider';
			mandatoryLabels[i] = 'Provider' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Provider is mandatory';
		}
		if (bHours == false)
		{
			mandatoryFields[i] = 'Hours';
			mandatoryLabels[i] = 'Hours' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Hours is mandatory';
		}
	}
	else if (document.getElementsByName("ActionCP")[0].value == 'delete')
	{
		var bCourseTrn = (document.getElementsByName("CourseTrn")[0].value != '' && document.getElementsByName("CourseTrn")[0].value != '');
		if (bCourseTrn == false)
		{
			mandatoryFields[i] = 'DateCompletedDay';
			mandatoryLabels[i] = 'DateCompleted' + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Invalid course';
		}
	}
}

function fnValidateMemberCPActivityForm(formObject)
{
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberCPActivityMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
				var found = false;
				for (j = 0; j < mandatoryFieldObjects.length; j++)
				{
					if (mandatoryFieldObjects[j].checked)
					{
						found = true;
					}
				}
				if (!found)
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			else
			{			
				if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			iIndex = iIndex + 1;
		}
	}

	if (!bSuccess)
	{
		// ----- display messages -----
		for (i = 0; i < lblNames.length; i++)
		{
			displayMsg(lblNames[i], errorMsgs[i], styles[i]);
		}
		// go to top - here - 
		document.location.href = '#';
		displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return(bSuccess);
}

function fnGetMemberCPComplianceMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;

	// Referees
	for (var j = 1; j <= 2; j++)
	{
		var bName = (document.getElementsByName("RefereeName" + j)[0].value != '');
		var bPhone = (document.getElementsByName("RefereePhone" + j)[0].value != '');
		var bEmail = (document.getElementsByName("RefereeEmail" + j)[0].value != '');
		if (bName == false)
		{
			mandatoryFields[i] = 'RefereeName' + j;
			mandatoryLabels[i] = 'RefereeName' + j + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Name is mandatory';
		}
		if (bPhone == false && bEmail == false)
		{
			mandatoryFields[i] = 'RefereePhone' + j;
			mandatoryLabels[i] = 'RefereePhone' + j + '_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Phone or email address is mandatory';
		}
	}

	// Declarations
	/*
	for (var j = 1; j <= document.getElementsByName("NoOfDeclarations")[0].value; j++)
	{
		if (!document.getElementsByName("Declaration" + j)[0].checked)
		{
			mandatoryFields[i] = 'Declaration' + j;
			mandatoryLabels[i] = 'Declaration_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'All entries in the Declaration must be confirmed';
			break;
		}
	}
	*/
}

function fnValidateMemberCPComplianceForm(formObject)
{
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberCPComplianceMandatoryFields(formObject);
	
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
				var found = false;
				for (j = 0; j < mandatoryFieldObjects.length; j++)
				{
					if (mandatoryFieldObjects[j].checked)
					{
						found = true;
					}
				}
				if (!found)
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			else if (mandatoryFieldObjects[0].type == 'checkbox')
			{
				if (!mandatoryObj.checked)
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
			}
			else
			{			
				if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				{
					bSuccess = false;
					errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				}
				else
				{
					errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
			}
			iIndex = iIndex + 1;
		}
	}

	
	for (var j = 1; j <= 2; j++)
	{
		lblNames[iIndex] = 'RefereeEmail' + j + '_Label';
		if (document.getElementsByName("RefereeEmail" + j)[0].value != '' && !fnValEmail(document.getElementsByName("RefereeEmail" + j)[0].value))
		{
			errorMsgs[iIndex] = 'Invalid email format';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
		}
		else
		{
			errorMsgs[iIndex] = '';
			styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;
	}
	
	if (!bSuccess)
	{
		// ----- display messages -----
		for (i = 0; i < lblNames.length; i++)
		{
			displayMsg(lblNames[i], errorMsgs[i], styles[i]);
		}
		// go to top - here - 
		document.location.href = '#';
		displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return(bSuccess);
}

// --- validate member regrade ---

function fnGetMemberRegradePersonalMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'PreEmaAddress';
	mandatoryLabels[i] = 'PreEmaAddress_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Email Address is mandatory';
	
	mandatoryFields[i] = 'Citizen';
	mandatoryLabels[i] = 'Citizen_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Citizen is mandatory';
	
	return(i);
}

function fnGetMemberRegradeQualificationMandatoryFields(formObject, i)
{
	for (var j = 1; j <= formObject.MaxQualifications.value; j++)
	{
		var bUni = false;
		var bQual = false;
		var bDate = false;
		var bAcc = false;
		if (document.getElementsByName("University" + j)[0].value != '' || document.getElementsByName("Institute" + j)[0].value != '')
		{
			bUni = true;
		}
		if (document.getElementsByName("Qualification" + j)[0].value != '' || document.getElementsByName("OtherQualification" + j)[0].value != '')
		{
			bQual = true;
		}
		if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
		{
			bDate = true;
		}
		if (document.getElementsByName("Accredit" + j)[0].value != '-')
		{
			bAcc = true;
		}
		if (bUni == true || bQual == true || bDate == true || bAcc == true || j == 1)
		{
			if (bUni == false)
			{
 				mandatoryFields[i] = 'University' + j;
				mandatoryLabels[i] = 'University' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'University or institute is mandatory';
	   		}
			if (bQual == false)
			{
 				mandatoryFields[i] = 'Qualification' + j;
				mandatoryLabels[i] = 'Qualification' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Qualification is mandatory';
	   		}
			if (document.getElementsByName("TimeTaken" + j)[0].value != '8999' && bDate == false)
			{
				mandatoryFields[i] = 'DateCompletedMon' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedYea' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
			}
		}
	}

	return(i);
}

function fnGetMemberRegradeExperienceMandatoryFields(formObject, i)
{
	for (var j = 1; j <= formObject.MaxExperience.value; j++)
	{
		var bPos = false;
		var bFromDate = false;
		var bToDate = false;
		var bOrg = false;
		var bAct = false;
		var bRole = false;
		var bAttachment = false;
		if (document.getElementsByName("Position" + j)[0].value != '')
		{
			bPos = true;
		}
		if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-')
		{
			bFromDate = true;
		}
		if (document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
		{
			bToDate = true;
		}
		if (document.getElementsByName("Organisation" + j)[0].value != '')
		{
			bOrg = true;
		}
		if (document.getElementsByName("Activity" + j)[0].value != '')
		{
			bAct = true;
		}
		if (document.getElementsByName("Role" + j)[0].value != '')
		{
			bRole = true;
		}
		if (document.getElementsByName("ExpAttachmentUrl" + j)[0].value != '')
		{
			bAttachment = true;
		}
		if (bPos == true || bFromDate == true || bToDate == true || bOrg == true || bAct == true || bRole == true || bAttachment == true || j == 1)
		{
			if (bPos == false)
			{
				mandatoryFields[i] = 'Position' + j;
				mandatoryLabels[i] = 'Position' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Position is mandatory';
			}
			if (bOrg == false)
			{
				mandatoryFields[i] = 'Organisation' + j;
				mandatoryLabels[i] = 'Organisation' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Organisation is mandatory';
			}
			if (bFromDate == false)
			{
				mandatoryFields[i] = 'FromDateMon' + j;
				mandatoryLabels[i] = 'FromDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'From Date is mandatory';
				mandatoryFields[i] = 'FromDateYea' + j;
				mandatoryLabels[i] = 'FromDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'From Date is mandatory';
			}
			if (bToDate == false)
			{
				mandatoryFields[i] = 'ToDateMon' + j;
				mandatoryLabels[i] = 'ToDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'To Date is mandatory';
				mandatoryFields[i] = 'ToDateYea' + j;
				mandatoryLabels[i] = 'ToDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'To Date is mandatory';
			}
			if (bAct == false && bRole == false && bAttachment == false)
			{
				mandatoryFields[i] = 'Activity' + j;
				mandatoryLabels[i] = 'Activity' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Activity or Details or Attachment is mandatory';
			}
		}
	}
  
	return(i);
}

function fnGetMemberRegradeRefereeMandatoryFields(formObject, i)
{
	for (var j = 1; j <= formObject.MaxReferees.value; j++)
	{
		var bMemberYn = false;
		var bName = false;
		var bEmail = false;
		var bAddr = false;
		var bPhone = false;
		if (document.getElementsByName("RefereeMemberYn" + j)[0].checked || document.getElementsByName("RefereeMemberYn" + j)[1].checked)
		{
			bMemberYn = true;
		}
		if (document.getElementsByName("RefereeName" + j)[0].value != '')
		{
			bName = true;
		}
		if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
		{
			bEmail = true;
		}
		if (document.getElementsByName("RefereeAddress" + j)[0].value != '')
		{
			bAddr = true;
		}
		if (document.getElementsByName("RefereePhone" + j)[0].value != '')
		{
			bPhone = true;
		}
		if (bMemberYn == true || bName == true || bEmail == true || bAddr == true || bPhone == true)
		{
			if (bMemberYn == false)
			{
				mandatoryFields[i] = 'RefereeMemberYn' + j;
				mandatoryLabels[i] = 'RefereeMemberYn' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'ACS Member Y/N is mandatory';
			}
			if (bName == false)
			{
				mandatoryFields[i] = 'RefereeName' + j;
				mandatoryLabels[i] = 'RefereeName' + j + '_Label';
				mandatoryOriginalMsgs[i] = 'Full name including title and initials';
				mandatoryErrorMsgs[i++] = 'Referee Name is mandatory';
			}
			if (bEmail == false)
			{
				mandatoryFields[i] = 'RefereeEmail' + j;
				mandatoryLabels[i] = 'RefereeEmail' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Referee Email is mandatory';
			}
		}
	}
		
	return(i);
}

function fnGetMemberRegradeMandatoryFields(formObject, bValidateQualifications, bValidateExperience, bValidateReferees)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;
	
	i = fnGetMemberRegradePersonalMandatoryFields(formObject, i);
	if (bValidateQualifications)
		i = fnGetMemberRegradeQualificationMandatoryFields(formObject, i);
	if (bValidateExperience)
		i = fnGetMemberRegradeExperienceMandatoryFields(formObject, i);
	if (bValidateReferees)
		i = fnGetMemberRegradeRefereeMandatoryFields(formObject, i);
	
	//alert(mandatoryFields);
	//alert(mandatoryLabels);
	//alert(mandatoryOriginalMsgs);
	//alert(mandatoryErrorMsgs);
}

function fnValidateMemberRegradeForm(formObject)
{
	// change the label here - 
	// get the label object, change the class and display
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	var bValidateQualifications = false;
	var bValidateExperience = false;
	var bValidateReferees = false;
	
	switch (document.getElementsByName("NewGrade")[0].value)
	{
		case "5":					/* To Provisional Associate */
			bValidateQualifications = true;
			break;
		case "10":					/* To Provisional Member */
			bValidateQualifications = true;
			break;
		case "3":					/* To Associate */
			bValidateExperience = true;
			bValidateReferees = true;
			break;
		case "2":					/* To Member */
			bValidateQualifications = true;
			bValidateExperience = true;
			bValidateReferees = true;
			break;
		case "8":					/* To Senior Member */
			bValidateExperience = true;
			bValidateReferees = true;
			break;
	}
		
	if (bValidateReferees)
	{
		// --- Referees ----
		var nMember = 0;
		var nNotMember = 0;
		for (var j = 1; j <= formObject.MaxReferees.value; j++)
		{
			if (document.getElementsByName("RefereeMemberYn" + j)[0].checked)
				nMember++;
			else if (document.getElementsByName("RefereeMemberYn" + j)[1].checked)
				nNotMember++;
		}
		if (nMember < 1 && nNotMember < 2)
		{
			lblNames[iIndex] = 'RefereeMemberYn1_Label';
			errorMsgs[iIndex] = 'One ACS Member or two non members';
			styles[iIndex++] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
		}
		else
		{
			lblNames[iIndex] = 'RefereeMemberYn1_Label';
			errorMsgs[iIndex] = '';
			styles[iIndex++] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		}
	}

	// Validate Mandatory fields
	fnGetMemberRegradeMandatoryFields(formObject, bValidateQualifications, bValidateExperience, bValidateReferees);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
					var found = false;
					for (j = 0; j < mandatoryFieldObjects.length; j++)
					{
							if (mandatoryFieldObjects[j].checked)
							{
									found = true;
							}
					}
					if (!found)
					{
							bSuccess = false;
							errorMsgs[iIndex] = mandatoryErrorMsgs[i];
							styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					}
					else
					{
						errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
						styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
					}
			}
			else
			{
					
				  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				  {
					  bSuccess = false;
					  errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				  }
				  else
				  {
					  errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				  }
			}
			iIndex = iIndex + 1;
		}
	}
	
	if (bValidateQualifications)
	{
		// --- Qualification dates ----
		for (var j = 1; j <= formObject.MaxQualifications.value; j++)
		{
			if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'DateCompleted' + j + '_Label';
				var dtNow = new Date();
				var iDateCompleted = document.getElementsByName("DateCompletedYea" + j)[0].value + document.getElementsByName("DateCompletedMon" + j)[0].value;	
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				if (iDateCompleted > iDateNow)
				{
					errorMsgs[iIndex] = 'Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}

	if (bValidateExperience)
	{
		// --- Experience dates ----
		for (var j = 1; j <= formObject.MaxExperience.value; j++)
		{
			if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-' && document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'FromDate' + j + '_Label';
				var dtNow = new Date();
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				var iFromDate = document.getElementsByName("FromDateYea" + j)[0].value + document.getElementsByName("FromDateMon" + j)[0].value;
				var iToDate = document.getElementsByName("ToDateYea" + j)[0].value + document.getElementsByName("ToDateMon" + j)[0].value;
				if (iFromDate > iToDate)
				{
					errorMsgs[iIndex] = 'Date range is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iFromDate > iDateNow)
				{
					errorMsgs[iIndex] = 'From Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iToDate > iDateNow)
				{
					errorMsgs[iIndex] = 'To Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}

	if (bValidateReferees)
	{
		// --- Referees ----
		for (var j = 1; j <= formObject.MaxReferees.value; j++)
		{
			if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
			{
				lblNames[iIndex] = 'RefereeEmail' + j + '_Label';
				if (!fnValEmail(document.getElementsByName("RefereeEmail" + j)[0].value))
				{
					errorMsgs[iIndex] = 'Invalid email format';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}

	if (!bSuccess)
	{
			// ----- display messages -----
			for (i = 0; i < lblNames.length; i++)
			{
				displayMsg(lblNames[i], errorMsgs[i], styles[i]);
			}
			// go to top - here - 
			document.location.href = '#';
			displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return bSuccess;
}

function fnGetCPRegradePersonalMandatoryFields(formObject, i, bSubmit)
{
	mandatoryFields[i] = 'PreEmaAddress';
	mandatoryLabels[i] = 'PreEmaAddress_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Email Address is mandatory';
	
	mandatoryFields[i] = 'Citizen';
	mandatoryLabels[i] = 'Citizen_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Citizen is mandatory';
	
	return(i);
}

function fnGetCPRegradeQualificationMandatoryFields(formObject, i, bSubmit)
{
	for (var j = 1; j <= formObject.MaxQualifications.value; j++)
	{
		var bUni = false;
		var bQual = false;
		var bDateCompleted = false;
		var bDateAwarded = false;
		var bAcc = false;
		var bStudy = false;
		if (document.getElementsByName("University" + j)[0].value != '' || document.getElementsByName("Institute" + j)[0].value != '')
		{
			bUni = true;
		}
		if (document.getElementsByName("Qualification" + j)[0].value != '' || document.getElementsByName("OtherQualification" + j)[0].value != '')
		{
			bQual = true;
		}
		if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
		{
			bDateCompleted = true;
		}
		if (document.getElementsByName("DateAwardedMon" + j)[0].value != '-' && document.getElementsByName("DateAwardedYea" + j)[0].value != '-')
		{
			bDateAwarded = true;
		}
		if (document.getElementsByName("Accredit" + j)[0].value != '-')
		{
			bAcc = true;
		}
		if (document.getElementsByName("Study" + j)[0].value != '-')
		{
			bStudy = true;
		}
		if (document.getElementsByName("QualAttachmentUrl" + j)[0].value != '')
		{
			bAttachment = true;
		}
		if (bUni == true || bQual == true || bDateCompleted == true || bDateAwarded == true || bAcc == true || bStudy == true || bAttachment == true || (j == 1 && bSubmit))
		{
			if (bUni == false)
			{
 				mandatoryFields[i] = 'University' + j;
				mandatoryLabels[i] = 'University' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'University or institute is mandatory';
	   		}
			if (bQual == false)
			{
 				mandatoryFields[i] = 'Qualification' + j;
				mandatoryLabels[i] = 'Qualification' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Qualification is mandatory';
	   		}
			if (document.getElementsByName("TimeTaken" + j)[0].value != '8999' && bDateCompleted == false)
			{
				mandatoryFields[i] = 'DateCompletedMon' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedYea' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
			}
		}
	}

	return(i);
}

function fnGetCPRegradeExperienceMandatoryFields(formObject, i, bSubmit)
{
	for (var j = 1; j <= formObject.MaxExperience.value; j++)
	{
		var bPos = false;
		var bFromDate = false;
		var bToDate = false;
		var bOrg = false;
		var bAct = false;
		var bRole = false;
		var bAttachment = false;
		if (document.getElementsByName("Position" + j)[0].value != '')
		{
			bPos = true;
		}
		if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-')
		{
			bFromDate = true;
		}
		if (document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
		{
			bToDate = true;
		}
		if (document.getElementsByName("Organisation" + j)[0].value != '')
		{
			bOrg = true;
		}
		if (document.getElementsByName("Activity" + j)[0].value != '')
		{
			bAct = true;
		}
		if (document.getElementsByName("Role" + j)[0].value != '')
		{
			bRole = true;
		}
		if (document.getElementsByName("ExpAttachmentUrl" + j)[0].value != '')
		{
			bAttachment = true;
		}
		if (bPos == true || bFromDate == true || bToDate == true || bOrg == true || bAct == true || bRole == true || bAttachment == true || (j == 1 && bSubmit))
		{
			if (bPos == false)
			{
				mandatoryFields[i] = 'Position' + j;
				mandatoryLabels[i] = 'Position' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Position is mandatory';
			}
			if (bOrg == false)
			{
				mandatoryFields[i] = 'Organisation' + j;
				mandatoryLabels[i] = 'Organisation' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Organisation is mandatory';
			}
			if (bFromDate == false)
			{
				mandatoryFields[i] = 'FromDateMon' + j;
				mandatoryLabels[i] = 'FromDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'From Date is mandatory';
				mandatoryFields[i] = 'FromDateYea' + j;
				mandatoryLabels[i] = 'FromDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'From Date is mandatory';
			}
			if (bToDate == false)
			{
				mandatoryFields[i] = 'ToDateMon' + j;
				mandatoryLabels[i] = 'ToDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'To Date is mandatory';
				mandatoryFields[i] = 'ToDateYea' + j;
				mandatoryLabels[i] = 'ToDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'To Date is mandatory';
			}
			if (bAct == false && bRole == false && bAttachment == false)
			{
				mandatoryFields[i] = 'Activity' + j;
				mandatoryLabels[i] = 'Activity' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Activity or Details or Attachment is mandatory';
			}
		}
	}
  
	return(i);
}

function fnGetCPRegradeRefereeMandatoryFields(formObject, i, bSubmit)
{
	for (var j = 1; j <= formObject.MaxReferees.value; j++)
	{
		var bMemberYn = false;
		var bName = false;
		var bEmail = false;
		var bAddr = false;
		var bPhone = false;
		if (document.getElementsByName("RefereeMemberYn" + j)[0].checked || document.getElementsByName("RefereeMemberYn" + j)[1].checked)
		{
			bMemberYn = true;
		}
		if (document.getElementsByName("RefereeName" + j)[0].value != '')
		{
			bName = true;
		}
		if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
		{
			bEmail = true;
		}
		if (document.getElementsByName("RefereeAddress" + j)[0].value != '')
		{
			bAddr = true;
		}
		if (document.getElementsByName("RefereePhone" + j)[0].value != '')
		{
			bPhone = true;
		}
		if (bMemberYn == true || bName == true || bEmail == true || bAddr == true || bPhone == true || bSubmit)
		{
			if (bMemberYn == false)
			{
				mandatoryFields[i] = 'RefereeMemberYn' + j;
				mandatoryLabels[i] = 'RefereeMemberYn' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'ACS Member Y/N is mandatory';
			}
			if (bName == false)
			{
				mandatoryFields[i] = 'RefereeName' + j;
				mandatoryLabels[i] = 'RefereeName' + j + '_Label';
				mandatoryOriginalMsgs[i] = 'Full name including title and initials';
				mandatoryErrorMsgs[i++] = 'Referee Name is mandatory';
			}
			if (bEmail == false)
			{
				mandatoryFields[i] = 'RefereeEmail' + j;
				mandatoryLabels[i] = 'RefereeEmail' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Referee Email is mandatory';
			}
		}
	}
		
	return(i);
}

function fnGetCPRegradeOtherDetailsMandatoryFields(formObject, i, bSubmit)
{
	if (bSubmit)
	{
		for (var j = 1; j <= formObject.MaxOtherDetails.value; j++)
		{
			if (document.getElementsByName("OtherDetailsAttachmentUrl" + j)[0].value == '')
			{
				mandatoryFields[i] = 'OtherDetailsAttachmentUrl' + j;
				mandatoryLabels[i] = 'OtherDetails' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Attachment is mandatory';
			}
		}
	}
		
	return(i);
}

function fnGetCPRegradePaymentMandatoryFields(formObject, i, bSubmit)
{
	if (bSubmit)
	{
		mandatoryFields[i] = 'CCType';
		mandatoryLabels[i] = 'CCType_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card Type is mandatory';
		mandatoryFields[i] = 'CCNo';
		mandatoryLabels[i] = 'CCNo_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card number is mandatory';
		mandatoryFields[i] = 'CCExpiryDateMon';
		mandatoryLabels[i] = 'CCExpiryDate_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
		mandatoryFields[i] = 'CCExpiryDateYea';
		mandatoryLabels[i] = 'CCExpiryDate_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
		mandatoryFields[i] = 'CCName';
		mandatoryLabels[i] = 'CCName_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Name on Credit Card is mandatory';
	}
	
	return(i);
}

function fnGetCPRegradeMandatoryFields(formObject, bValidateQualifications, bValidateExperience, bValidateReferees, bValidateOtherDetails, bValidatePaymentDetails, bSubmit)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;
	
	i = fnGetCPRegradePersonalMandatoryFields(formObject, i, bSubmit);
	if (bValidateQualifications)
		i = fnGetCPRegradeQualificationMandatoryFields(formObject, i, bSubmit);
	if (bValidateExperience)
		i = fnGetMemberRegradeExperienceMandatoryFields(formObject, i, bSubmit);
	if (bValidateReferees)
		i = fnGetCPRegradeRefereeMandatoryFields(formObject, i, bSubmit);
	if (bValidateOtherDetails)
		i = fnGetCPRegradeOtherDetailsMandatoryFields(formObject, i, bSubmit);
	if (bValidatePaymentDetails)
		fnGetCPRegradePaymentMandatoryFields(formObject, i, bSubmit);
	
	//alert(mandatoryFields);
	//alert(mandatoryLabels);
	//alert(mandatoryOriginalMsgs);
	//alert(mandatoryErrorMsgs);
}

function fnValidateCPRegradeForm(formObject)
{
	// change the label here - 
	// get the label object, change the class and display
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	var bValidateQualifications = true;
	var bValidateExperience = true;
	var bValidateReferees = true;
	//var bValidateOtherDetails = true;
	var bValidateOtherDetails = false;
	//var bValidatePaymentDetails = true;
	var bValidatePaymentDetails = false;
	var bSubmit = true;
	
	if (formObject.Save && formObject.Save.value)
	{
		bSubmit = formObject.Save.value != "1";
	}
	
	if (bValidateReferees && bSubmit)
	{
		// --- Referees ----
		var nMember = 0;
		var nNotMember = 0;
		for (var j = 1; j <= formObject.MaxReferees.value; j++)
		{
			if (document.getElementsByName("RefereeMemberYn" + j)[0].checked)
				nMember++;
			else if (document.getElementsByName("RefereeMemberYn" + j)[1].checked)
				nNotMember++;
		}
		if (nMember < 1 && nNotMember < 2)
		{
			lblNames[iIndex] = 'RefereeMemberYn1_Label';
			errorMsgs[iIndex] = 'One ACS Member or two non members';
			styles[iIndex++] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
			bSuccess = false;
		}
		else
		{
			lblNames[iIndex] = 'RefereeMemberYn1_Label';
			errorMsgs[iIndex] = '';
			styles[iIndex++] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
		}
	}

	// Validate Mandatory fields
	fnGetCPRegradeMandatoryFields(formObject, bValidateQualifications, bValidateExperience, bValidateReferees, bValidateOtherDetails, bValidatePaymentDetails, bSubmit);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
					var found = false;
					for (j = 0; j < mandatoryFieldObjects.length; j++)
					{
							if (mandatoryFieldObjects[j].checked)
							{
									found = true;
							}
					}
					if (!found)
					{
							bSuccess = false;
							errorMsgs[iIndex] = mandatoryErrorMsgs[i];
							styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					}
					else
					{
						errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
						styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
					}
			}
			else
			{
					
				  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				  {
					  bSuccess = false;
					  errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				  }
				  else
				  {
					  errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				  }
			}
			iIndex = iIndex + 1;
		}
	}
	
	if (bValidateQualifications)
	{
		// --- Qualification dates ----
		for (var j = 1; j <= formObject.MaxQualifications.value; j++)
		{
			if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'DateCompleted' + j + '_Label';
				var dtNow = new Date();
				var iDateCompleted = document.getElementsByName("DateCompletedYea" + j)[0].value + document.getElementsByName("DateCompletedMon" + j)[0].value;	
				var iDateAwarded = document.getElementsByName("DateAwardedYea" + j)[0].value + document.getElementsByName("DateAwardedMon" + j)[0].value;	
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				if (iDateCompleted > iDateNow)
				{
					errorMsgs[iIndex] = 'Award date can not be prior to completion date';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}

	if (bValidateExperience)
	{
		// --- Experience dates ----
		for (var j = 1; j <= formObject.MaxExperience.value; j++)
		{
			if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-' && document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'FromDate' + j + '_Label';
				var dtNow = new Date();
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				var iFromDate = document.getElementsByName("FromDateYea" + j)[0].value + document.getElementsByName("FromDateMon" + j)[0].value;
				var iToDate = document.getElementsByName("ToDateYea" + j)[0].value + document.getElementsByName("ToDateMon" + j)[0].value;
				if (iFromDate > iToDate)
				{
					errorMsgs[iIndex] = 'Date range is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iFromDate > iDateNow)
				{
					errorMsgs[iIndex] = 'From Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iToDate > iDateNow)
				{
					errorMsgs[iIndex] = 'To Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}

	if (bValidateReferees)
	{
		// --- Referees ----
		for (var j = 1; j <= formObject.MaxReferees.value; j++)
		{
			if (document.getElementsByName("RefereeEmail" + j)[0].value != '')
			{
				lblNames[iIndex] = 'RefereeEmail' + j + '_Label';
				if (!fnValEmail(document.getElementsByName("RefereeEmail" + j)[0].value))
				{
					errorMsgs[iIndex] = 'Invalid email format';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}

	
	if (bValidatePaymentDetails && bSubmit)
	{
		// Validate Expiry Date
		if (formObject.CCExpiryDateMon.value != '-' && formObject.CCExpiryDateYea.value != '-')
		{
			var dayVal = '31';
			switch (formObject.CCExpiryDateMon.value)
			{
				case '02':
					if (formObject.CCExpiryDateYea.value % 4 == 0)
					{
						dayVal = '29';
					}
					else
					{
						dayVal = '28';
					}
					break;
				case '04': case '06': case '09': case '11':
					dayVal = '30';
					break;
			}
			lblNames[iIndex] = 'CCExpiryDate_Label';
			var msg = fnValidateCCDate(dayVal, formObject.CCExpiryDateMon.value, formObject.CCExpiryDateYea.value);
			if (msg != '')
			{
				errorMsgs[iIndex] = 'Invalid expiry date';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}

		if (formObject.CCNo.value != '')
		{
			// Validate credit card no using Luhn algo:
			var cardNoTemp = formObject.CCNo.value;
			var cardNo = '';
			// remove white space from cardNo
			for (i = 0; i < cardNoTemp.length; i++)
			{
				if (cardNoTemp != ' ')
				{
					cardNo += cardNoTemp.charAt(i);
				}
			}

			var cardTypeCode = formObject.CCType.value;
			var cardType = '';
			switch(cardTypeCode)
			{
				case '1' : cardType = 'amex'; break;
				case '2' : cardType = 'bankcard'; break;
				case '5' : cardType = 'dinnersclub'; break;
				case '8' : cardType = 'mastercard'; break;
				case '11': cardType = 'visa'; break;
			}

			lblNames[iIndex] = 'CCNo_Label';
			if (cardNo!='' && cardType!= '' && !LuhnChecksum(cardNo, cardType))
			{
				errorMsgs[iIndex] = 'Invalid credit card number';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}
	}
	
	if (!bSuccess)
	{
			// ----- display messages -----
			for (i = 0; i < lblNames.length; i++)
			{
				displayMsg(lblNames[i], errorMsgs[i], styles[i]);
			}
			// go to top - here - 
			document.location.href = '#';
			displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return bSuccess;
}

// --- validate member application (PPP) ---

function fnGetMemberAppPPPPartnerMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'PartnerName';
	mandatoryLabels[i] = 'PartnerName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Partner Name is mandatory';
	
	/*
	mandatoryFields[i] = 'ContactName';
	mandatoryLabels[i] = 'ContactName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Contact Name is mandatory';
	*/
	
	return(i);
}

function fnGetMemberAppPPPPersonalMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'Salutation';
	mandatoryLabels[i] = 'Salutation_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Salutation is mandatory';
	
	mandatoryFields[i] = 'FirstName';
	mandatoryLabels[i] = 'FirstName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'First Name is mandatory';
	
	mandatoryFields[i] = 'LastName';
	mandatoryLabels[i] = 'LastName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Last Name is mandatory';
	
	mandatoryFields[i] = 'PreName';
	mandatoryLabels[i] = 'PreName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Preferred First Name is mandatory';
	
	mandatoryFields[i] = 'Gender';
	mandatoryLabels[i] = 'Gender_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Gender is mandatory';
	
	mandatoryFields[i] = 'DOBDay';
	mandatoryLabels[i] = 'DOB_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Date of Birth is mandatory';
	
	mandatoryFields[i] = 'DOBMon';
	mandatoryLabels[i] = 'DOB_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Date of Birth is mandatory';
	
	mandatoryFields[i] = 'DOBYea';
	mandatoryLabels[i] = 'DOB_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Date of Birth is mandatory';
	
	mandatoryFields[i] = 'ResCouCode';
	mandatoryLabels[i] = 'ResCouCode_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Country of Residence is mandatory';
	
	mandatoryFields[i] = 'Citizen';
	mandatoryLabels[i] = 'Citizen_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Citizen is mandatory';
	
	return(i);
}

function fnGetMemberAppPPPHomeAddressMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'Addr1';
	mandatoryLabels[i] = 'Addr1_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Address line 1 is mandatory';
	
	var addrLine1Obj = document.getElementsByName('Addr1')[0];
	if (addrLine1Obj)
	{
		// country is expected if Addr1 has a value
		var couCodeObj = document.getElementsByName('CouCode')[0];
		if (addrLine1Obj.value != '' && couCodeObj && couCodeObj.value == '')
		{
			mandatoryFields[i] = 'CouCode';
			mandatoryLabels[i] = 'CouCode_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Country is expected';
		}
	}
	
	mandatoryFields[i] = 'CouCode';
	mandatoryLabels[i] = 'CouCode_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Country is mandatory';
	
	mandatoryFields[i] = 'Suburb';
	mandatoryLabels[i] = 'Suburb_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Suburb is expected';

	mandatoryFields[i] = 'PosCode';
	mandatoryLabels[i] = 'PosCode_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Postcode is expected';
		
	if (formObject.CouCode.value == '61')
	{
		//mandatoryFields[i] = 'Suburb';
		//mandatoryLabels[i] = 'Suburb_Label';
		//mandatoryOriginalMsgs[i] = '';
		//mandatoryErrorMsgs[i++] = 'Suburb is expected for AUSTRALIAN address';
		
		//mandatoryFields[i] = 'PosCode';
		//mandatoryLabels[i] = 'PosCode_Label';
		//mandatoryOriginalMsgs[i] = '';
		//mandatoryErrorMsgs[i++] = 'Postcode is expected for AUSTRALIAN address';
		
		mandatoryFields[i] = 'State';
		mandatoryLabels[i] = 'State_Label';
		mandatoryOriginalMsgs[i] = State_Label_Value;
		mandatoryErrorMsgs[i++] = 'State is expected for AUSTRALIAN address';
	}
	
	return(i);
}

function fnGetMemberAppPPPBusinessAddressMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'EmpName';
	mandatoryLabels[i] = 'EmpName_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Employer Name is mandatory';
	
	var addrLine1Obj = document.getElementsByName('BusAddr1')[0];
	if (addrLine1Obj)
	{
		// country is expected if BusAddr1 has a value
		var couCodeObj = document.getElementsByName('BusCouCode')[0];
		if (addrLine1Obj.value != '' && couCodeObj && couCodeObj.value == '')
		{
			mandatoryFields[i] = 'BusCouCode';
			mandatoryLabels[i] = 'BusCouCode_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Country is expected';
		}
	}
	
	mandatoryFields[i] = 'BusCouCode';
	mandatoryLabels[i] = 'BusCouCode_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Country is mandatory';
	
	if (formObject.CouCode.value == '61')
	{
		mandatoryFields[i] = 'BusSuburb';
		mandatoryLabels[i] = 'BusSuburb_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Suburb is expected for AUSTRALIAN address';
		
		mandatoryFields[i] = 'BusPosCode';
		mandatoryLabels[i] = 'BusPosCode_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Postcode is expected for AUSTRALIAN address';
		
		mandatoryFields[i] = 'BusState';
		mandatoryLabels[i] = 'BusState_Label';
		mandatoryOriginalMsgs[i] = State_Label_Value;
		mandatoryErrorMsgs[i++] = 'State is expected for AUSTRALIAN address';
	}
	
	return(i);
}

function fnGetMemberAppPPPContactMandatoryFields(formObject, i)
{
	i = fnGetMemberAppPPPHomeAddressMandatoryFields(formObject, i);
	
	mandatoryFields[i] = 'PreEmaAddress';
	mandatoryLabels[i] = 'PreEmaAddress_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Email Address is mandatory';
	
	mandatoryFields[i] = 'PreMaiAddress';
	mandatoryLabels[i] = 'PreMaiAddress_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Default Mail is mandatory';

	var elems = document.getElementsByName('PreMaiAddress');
	if (elems.length >= 2)
	{
		if (elems[0].value=='Home' && elems[0].checked)
		{
			//i = fnGetMemberAppPPPHomeAddressMandatoryFields(formObject, i);
			//mandatoryFields[i] = 'Addr1';
			//mandatoryLabels[i] = 'Addr1_Label';
			//mandatoryOriginalMsgs[i] = Addr1_Label_Value;
			//mandatoryErrorMsgs[i++] = 'Address line 1 must have a value when default mail is set to Home';
		}
		else if (elems[1].checked)
		{
			i = fnGetMemberAppPPPBusinessAddressMandatoryFields(formObject, i);
			mandatoryFields[i] = 'BusAddr1';
			mandatoryLabels[i] = 'EmpName_Label';
			mandatoryOriginalMsgs[i] = '';
			mandatoryErrorMsgs[i++] = 'Business Address line 1 must have a value when default mail is set to Employer';
		}
	}
    
	return(i);
}

function fnGetMemberAppPPPQualificationMandatoryFields(formObject, i)
{
	for (var j = 1; j <= formObject.MaxQualifications.value; j++)
	{
		var bUni = false;
		var bQual = false;
		var bDate = false;
		var bAcc = false;
		if ((document.getElementsByName("University" + j)[0].value != '' && document.getElementsByName("University" + j)[0].value != '-') || document.getElementsByName("Institute" + j)[0].value != '')
		{
			bUni = true;
		}
		if ((document.getElementsByName("Qualification" + j)[0].value != '' && document.getElementsByName("Qualification" + j)[0].value != '-') || document.getElementsByName("OtherQualification" + j)[0].value != '')
		{
			bQual = true;
		}
		if ((document.getElementsByName("DateCompletedMon" + j)[0].value != '' && document.getElementsByName("DateCompletedMon" + j)[0].value != '-') && (document.getElementsByName("DateCompletedYea" + j)[0].value != '' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-'))
		{
			bDate = true;
		}
		//if (document.getElementsByName("Accredit" + j)[0].value != '')
		//{
		//	bAcc = true;
		//}
		if (bUni == true || bQual == true || bDate == true /*|| bAcc == true*/ /*|| j == 1*/)
		{
			if (bUni == false)
			{
 				mandatoryFields[i] = 'University' + j;
				mandatoryLabels[i] = 'University' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'University or institute is mandatory';
	   		}
			if (bQual == false)
			{
 				mandatoryFields[i] = 'Qualification' + j;
				mandatoryLabels[i] = 'Qualification' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Qualification is mandatory';
	   		}
			if (document.getElementsByName("TimeTaken" + j)[0].value != '8999' && bDate == false)
			{
				mandatoryFields[i] = 'DateCompletedMon' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
				mandatoryFields[i] = 'DateCompletedYea' + j;
				mandatoryLabels[i] = 'DateCompleted' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Date is mandatory';
			}
		}
	}

	return(i);
}

function fnGetMemberAppPPPExperienceMandatoryFields(formObject, i)
{
	for (var j = 1; j <= formObject.MaxExperience.value; j++)
	{
		var bPos = false;
		var bFromDate = false;
		var bToDate = false;
		var bOrg = false;
		var bAct = false;
		var bRole = false;
		var bAttachment = false;
		if (document.getElementsByName("Position" + j)[0].value != '')
		{
			bPos = true;
		}
		if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-')
		{
			bFromDate = true;
		}
		if (document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
		{
			bToDate = true;
		}
		if (document.getElementsByName("Organisation" + j)[0].value != '')
		{
			bOrg = true;
		}
		if (document.getElementsByName("Activity" + j)[0].value != '')
		{
			bAct = true;
		}
		if (document.getElementsByName("Role" + j)[0].value != '')
		{
			bRole = true;
		}
		if (document.getElementsByName("ExpAttachmentUrl" + j)[0].value != '')
		{
			bAttachment = true;
		}
		if (bPos == true || bFromDate == true || bToDate == true || bOrg == true || bAct == true || bRole == true || bAttachment == true || j == 1)
		{
			if (bPos == false)
			{
				mandatoryFields[i] = 'Position' + j;
				mandatoryLabels[i] = 'Position' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Position is mandatory';
			}
			if (bOrg == false)
			{
				mandatoryFields[i] = 'Organisation' + j;
				mandatoryLabels[i] = 'Organisation' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Organisation is mandatory';
			}
			if (bFromDate == false)
			{
				mandatoryFields[i] = 'FromDateMon' + j;
				mandatoryLabels[i] = 'FromDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'From Date is mandatory';
				mandatoryFields[i] = 'FromDateYea' + j;
				mandatoryLabels[i] = 'FromDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'From Date is mandatory';
			}
			if (bToDate == false)
			{
				mandatoryFields[i] = 'ToDateMon' + j;
				mandatoryLabels[i] = 'ToDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'To Date is mandatory';
				mandatoryFields[i] = 'ToDateYea' + j;
				mandatoryLabels[i] = 'ToDate' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'To Date is mandatory';
			}
			if (bAct == false && bRole == false && bAttachment == false)
			{
				mandatoryFields[i] = 'Activity' + j;
				mandatoryLabels[i] = 'Activity' + j + '_Label';
				mandatoryOriginalMsgs[i] = '';
				mandatoryErrorMsgs[i++] = 'Activity or Details or Attachment is mandatory';
			}
		}
	}
  
	return(i);
}

function fnGetMemberAppPPPEndorseMandatoryFields(formObject, i)
{
	mandatoryFields[i] = 'Declaration';
	mandatoryLabels[i] = 'Declaration_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Declaration is mandatory';
	   
	return(i);
}

function fnGetMemberAppPPPMandatoryFields(formObject)
{
	// restore original message first
	if (mandatoryFields != null)
	{
		restoreOriginalMsgs();
	}
	// initialize here always
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;
	
	if (document.getElementsByName("Endorse")[0].value == "1")
	{
		i = fnGetMemberAppPPPEndorseMandatoryFields(formObject, i);
	}
	else
	{
		i = fnGetMemberAppPPPPartnerMandatoryFields(formObject, i);
		i = fnGetMemberAppPPPPersonalMandatoryFields(formObject, i);
		i = fnGetMemberAppPPPContactMandatoryFields(formObject, i);
		i = fnGetMemberAppPPPQualificationMandatoryFields(formObject, i);
		i = fnGetMemberAppPPPExperienceMandatoryFields(formObject, i);
	}
	
	//alert(mandatoryFields);
	//alert(mandatoryLabels);
	//alert(mandatoryOriginalMsgs);
	//alert(mandatoryErrorMsgs);
}

function fnValidateMemberAppPPPForm(formObject)
{
	// change the label here - 
	// get the label object, change the class and display
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberAppPPPMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
					var found = false;
					for (j = 0; j < mandatoryFieldObjects.length; j++)
					{
							if (mandatoryFieldObjects[j].checked)
							{
									found = true;
							}
					}
					if (!found)
					{
							bSuccess = false;
							errorMsgs[iIndex] = mandatoryErrorMsgs[i];
							styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					}
					else
					{
						errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
						styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
					}
			}
			else
			{
					
				  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				  {
					  bSuccess = false;
					  errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				  }
				  else
				  {
					  errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				  }
			}
			iIndex = iIndex + 1;
		}
	}
	
	if (document.getElementsByName("Endorse")[0].value == "0")
	{
		// Validate DOB
		if (document.getElementsByName("DOBDay")[0].value != '-' && document.getElementsByName("DOBMon")[0].value != '-' && document.getElementsByName("DOBYea")[0].value != '-')
		{
			var msg = fnValidateMemberDOB(formObject);
			lblNames[iIndex] = 'DOB_Label';
			if (msg != '')
			{
				errorMsgs[iIndex] = msg;						// set to error text
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
			}
			else
			{
				errorMsgs[iIndex] = '';   // set to original text
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}

		// Validate phone fields
		// ---- Home phone ----
		lblNames[iIndex] = 'HomePhone_Label';
		var phoneError = false;
		if (!fnValidatePhone('HomePhone'))
		{
				errorMsgs[iIndex] = 'Invalid Home Phone';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
				phoneError = true;
		}
		else
		{
				errorMsgs[iIndex] = Phone_Label_Value;
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;

		// ---- Home fax ----
		if (!fnValidatePhone('HomeFax'))
		{
				lblNames[iIndex] = 'HomePhone_Label';
				errorMsgs[iIndex] = 'Invalid Home Fax';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
				iIndex = iIndex + 1;
		}
		else
		{
			if (!phoneError)
			{
				lblNames[iIndex] = 'HomePhone_Label';
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				iIndex = iIndex + 1;
			}
		}

		// --- Mobile Phone ----
		lblNames[iIndex] = 'Mobile_Label';
		if (!fnValidatePhone('Mobile'))
		{
				errorMsgs[iIndex] = 'Invalid Mobile';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
		}
		else
		{
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;

		// ---- Business phone ----
		lblNames[iIndex] = 'BusPhone_Label';
		var phoneError = false;
		if (!fnValidatePhone('BusPhone'))
		{
				errorMsgs[iIndex] = 'Invalid Business Phone';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
				phoneError = true;
		}
		else
		{
				errorMsgs[iIndex] = Phone_Label_Value;
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
		}
		iIndex = iIndex + 1;

		// ---- Business fax ----
		if (!fnValidatePhone('BusFax'))
		{
				lblNames[iIndex] = 'BusPhone_Label';
				errorMsgs[iIndex] = 'Invalid Business Fax';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				bSuccess = false;
				iIndex = iIndex + 1;
		}
		else
		{
			if (!phoneError)
			{
				lblNames[iIndex] = 'BusPhone_Label';
				errorMsgs[iIndex] = '';
				styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				iIndex = iIndex + 1;
			}
		}

		// Validate email formatting
		if (document.getElementsByName("PreEmaAddress")[0].value != '')
		{
			lblNames[iIndex] = 'PreEmaAddress_Label';
			if (!fnValEmail(document.getElementsByName("PreEmaAddress")[0].value))
			{
					errorMsgs[iIndex] = 'Invalid email format';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
			}
			else
			{
					errorMsgs[iIndex] = PreEmaAddress_Label_Value;
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
			}
			iIndex = iIndex + 1;
		}

		// --- Qualification dates ----
		for (var j = 1; j <= formObject.MaxQualifications.value; j++)
		{
			if (document.getElementsByName("DateCompletedMon" + j)[0].value != '-' && document.getElementsByName("DateCompletedYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'DateCompleted' + j + '_Label';
				var dtNow = new Date();
				var iDateCompleted = document.getElementsByName("DateCompletedYea" + j)[0].value + document.getElementsByName("DateCompletedMon" + j)[0].value;	
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				if (iDateCompleted > iDateNow)
				{
					errorMsgs[iIndex] = 'Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}

		// --- Experience dates ----
		for (var j = 1; j <= formObject.MaxExperience.value; j++)
		{
			if (document.getElementsByName("FromDateMon" + j)[0].value != '-' && document.getElementsByName("FromDateYea" + j)[0].value != '-' && document.getElementsByName("ToDateMon" + j)[0].value != '-' && document.getElementsByName("ToDateYea" + j)[0].value != '-')
			{
				lblNames[iIndex] = 'FromDate' + j + '_Label';
				var dtNow = new Date();
				var iDateNow = dtNow.getFullYear() * 100 + dtNow.getMonth()+1;
				var iFromDate = document.getElementsByName("FromDateYea" + j)[0].value + document.getElementsByName("FromDateMon" + j)[0].value;
				var iToDate = document.getElementsByName("ToDateYea" + j)[0].value + document.getElementsByName("ToDateMon" + j)[0].value;
				if (iFromDate > iToDate)
				{
					errorMsgs[iIndex] = 'Date range is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iFromDate > iDateNow)
				{
					errorMsgs[iIndex] = 'From Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else if (iToDate > iDateNow)
				{
					errorMsgs[iIndex] = 'To Date is invalid';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					bSuccess = false;
				}
				else
				{
					errorMsgs[iIndex] = '';
					styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				}
				iIndex = iIndex + 1;
			}
		}
	}
	
	if (!bSuccess)
	{
			// ----- display messages -----
			for (i = 0; i < lblNames.length; i++)
			{
				displayMsg(lblNames[i], errorMsgs[i], styles[i]);
			}
			// go to top - here - 
			document.location.href = '#';
			displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return bSuccess;
}

function fnValidateMembersPPPForm(formObject)
{
	return true;
}


function fnGetMemberConcessionAppMandatoryFields(formObject)
{
	mandatoryFields = new Array();
	mandatoryLabels = new Array();
	mandatoryErrorMsgs = new Array();
	mandatoryOriginalMsgs = new Array();
	
	var i = 0;
	
	mandatoryFields[i] = 'Concession';
	mandatoryLabels[i] = 'Concession_Label';
	mandatoryOriginalMsgs[i] = '';
	mandatoryErrorMsgs[i++] = 'Concession is mandatory';
	
	if (document.getElementById("AttachmentMandatory").value == "true")
	{
		mandatoryFields[i] = 'AttachmentUrl';
		mandatoryLabels[i] = 'Attachment_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Attachment is mandatory';	
	}
	if (document.getElementById("OSAffiliationMandatory").value == "true")
	{
		mandatoryFields[i] = 'OSAffiliation';
		mandatoryLabels[i] = 'OSAffiliation_Label';
		mandatoryOriginalMsgs[i] = '';
		mandatoryErrorMsgs[i++] = 'Overseas Affiliation is mandatory';	
	}
}

function fnValidateMemberConcessionAppForm(formObject)
{
	var lblNames = new Array();
	var errorMsgs = new Array();
	var styles = new Array();
	var iIndex = 0;
	var bSuccess = true;
	
	// Validate Mandatory fields
	fnGetMemberConcessionAppMandatoryFields(formObject);
	for (i = 0; i < mandatoryFields.length; i++)
	{
		// go through all mandatory fields and get the mapped labels: TODO
		var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[i]);
		if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
		{
			var mandatoryObj = mandatoryFieldObjects[0];
			lblNames[iIndex] = mandatoryLabels[i];
			if (mandatoryFieldObjects[0].type == 'radio')
			{
					var found = false;
					for (j = 0; j < mandatoryFieldObjects.length; j++)
					{
							if (mandatoryFieldObjects[j].checked)
							{
									found = true;
							}
					}
					if (!found)
					{
							bSuccess = false;
							errorMsgs[iIndex] = mandatoryErrorMsgs[i];
							styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
					}
					else
					{
						errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
						styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
					}
			}
			else
			{
					
				  if (mandatoryObj.value == '' || mandatoryObj.value == '-')
				  {
					  bSuccess = false;
					  errorMsgs[iIndex] = mandatoryErrorMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
				  }
				  else
				  {
					  errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
					  styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
				  }
			}
			iIndex = iIndex + 1;
		}

	}
	
	if (!bSuccess)
	{
			// ----- display messages -----
			for (i = 0; i < lblNames.length; i++)
			{
				displayMsg(lblNames[i], errorMsgs[i], styles[i]);
			}
			// go to top - here - 
			document.location.href = '#';
			displayMsg('Header_Label','Please correct highlighted errors on the page below','');
	}
	
	return bSuccess;
}

/********************** Member Payments Validation *************************************/

function fnValidateMemberPaymentsForm(formObject)
{
    // change the label here - 
    // get the label object, change the class and display
    var lblNames = new Array();
    var errorMsgs = new Array();
    var styles = new Array();
    var iIndex = 0;
    var bSuccess = true;
    
    // 1. Validate Date
    var msg = fnValidateCCDate(document.getElementsByName('ExpiryDate_D')[0].value, document.getElementsByName('ExpiryDate_M')[0].value, document.getElementsByName('ExpiryDate_Y')[0].value);
    //lblNames[iIndex] = 'ExpiryDate_Msg';
    if (msg != '')
    {
        //alert('msg: '+msg);
        addMsg(lblNames, errorMsgs, styles, 'ExpiryDate_Msg', msg, 'ACS_Memb_Mngt_Form_Det_Msg_Error');
        //errorMsgs[iIndex] = msg;                        // set to error text
        //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
        bSuccess = false;
    }
    else
    {
        addMsg(lblNames, errorMsgs, styles, 'ExpiryDate_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
        //errorMsgs[iIndex] = '';   // set to original text
        //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    //iIndex = iIndex + 1;

    // 2. validate credit card no using Luhn algo: TODO
    //lblNames[iIndex] = 'CreditCardNumber_Msg';
    var cardNoTemp = document.getElementsByName('CreditCardNumber')[0].value;
    var cardNo = '';
    // remove white space from cardNo
    for (i = 0; i < cardNoTemp.length; i++)
    {
        if (cardNoTemp != ' ')
        {
            cardNo += cardNoTemp.charAt(i);
        }
    }
    
    var cardTypeCode = document.getElementsByName('PaymentMethod')[0].value;
    var cardType = '';
    switch(cardTypeCode)
    {
        case '1' : cardType = 'amex'; break;
        case '2' : cardType = 'bankcard'; break;
        case '5' : cardType = 'dinnersclub'; break;
        case '8' : cardType = 'mastercard'; break;
        case '11': cardType = 'visa'; break;
    }
    //alert('cardNo: '+cardNo);
    //alert('cardType: '+cardType);

    if (cardNo!='' && cardType!= '' && !LuhnChecksum(cardNo, cardType))
    {
            addMsg(lblNames, errorMsgs, styles, 'CreditCardNumber_Msg', 'Credit Card Type Check: This is not a valid '+cardType+' number', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            //errorMsgs[iIndex] = 'Credit Card Type Check: This is not a valid '+cardType+' number';
            //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            bSuccess = false;
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'CreditCardNumber_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
            //errorMsgs[iIndex] = '';
            //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
    }
    
    var selectedPayments = 0;
    var noAmountsEntered = 0;
    var maxPayments = document.getElementsByName("MaxPayments")[0];
    if (maxPayments && maxPayments.value != "")
    {
    	for (var j = 1; j <= maxPayments.value; j++)
    	{
    		var pay = document.getElementsByName("Pay" + j)[0];
    		if (pay && pay.checked)
    		{
    			selectedPayments++;
                        if (document.getElementsByName("PayAmount" + j)[0] && document.getElementsByName("PayAmount" + j)[0].value == '')
                        {
			    noAmountsEntered++;
                        }
    		}
    	}
    }
    if (selectedPayments == 0)
    {
            addMsg(lblNames, errorMsgs, styles, 'Payment_Msg', 'Please select an invoice to pay', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
            bSuccess = false;
    }
    else if (noAmountsEntered > 0)
    {
	    addMsg(lblNames, errorMsgs, styles, 'Payment_Msg', 'Please enter an amount to be paid', 'ACS_Memb_Mngt_Form_Det_Msg_Error');
    }
    else
    {
            addMsg(lblNames, errorMsgs, styles, 'Payment_Msg', '', 'ACS_Memb_Mngt_Form_Det_Msg');
    }
    
    //iIndex = iIndex + 1;
    // 3.validate compulsory
    fnGetMemberPaymentsMandatoryFields(formObject);
    for (j = 0; j < mandatoryFields.length; j++)
    {
        //alert('i: '+i);
        // go through all mandatory fields and get the mapped labels: TODO
        var mandatoryFieldObjects = document.getElementsByName(mandatoryFields[j]);
        if (mandatoryFieldObjects.length > 0 && mandatoryFieldObjects[0])
        {
            var mandatoryObj = mandatoryFieldObjects[0];
            //lblNames[iIndex] = mandatoryLabels[i];
            //alert('j: '+j);
            
            if (mandatoryObj.value == '' || mandatoryObj.value == '-')
            {
                //alert('add error to: '+mandatoryObj.name);
                
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryErrorMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg_Error');
                bSuccess = false;
                //errorMsgs[iIndex] = mandatoryErrorMsgs[i];
                //alert(mandatoryErrorMsgs[i]);
                //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg_Error';
            }
            else
            {
                addMsg(lblNames, errorMsgs, styles, mandatoryLabels[j], mandatoryOriginalMsgs[j], 'ACS_Memb_Mngt_Form_Det_Msg');
                //errorMsgs[iIndex] = mandatoryOriginalMsgs[i];
                //styles[iIndex] = 'ACS_Memb_Mngt_Form_Det_Msg';
            }
            //iIndex = iIndex + 1;
        }
    }
    
    if (!bSuccess)
    {
            // ----- display messages -----
            for (i = 0; i < lblNames.length; i++)
            {
                displayMsg(lblNames[i], errorMsgs[i], styles[i]);
                //alert('lblNames[i]: '+lblNames[i]+', errorMsgs[i]: '+errorMsgs[i]+', styles[i]: '+styles[i]);
            }
            // go to top - here - 
            document.location.href = '#';
            displayMsg('Header_Label','Please correct highlighted errors on the page below','');
    }
    return bSuccess;
}

function fnGetMemberPaymentsMandatoryFields(formObject)
{
    // restore original message first
    if (mandatoryFields != null)
    {
        restoreOriginalMsgs();
    }
    // initialize here always
    mandatoryFields = new Array();
    mandatoryLabels = new Array();
    mandatoryErrorMsgs = new Array();
    mandatoryOriginalMsgs = new Array();
    
    var i = 0;
    
    mandatoryFields[i] = 'PaymentMethod';
    mandatoryLabels[i] = 'PaymentMethod_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Card Type is mandatory';
    
    mandatoryFields[i] = 'CreditCardNumber';
    mandatoryLabels[i] = 'CreditCardNumber_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Number is mandatory';
    
    mandatoryFields[i] = 'ExpiryDate_D';
    mandatoryLabels[i] = 'ExpiryDate_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
    
    mandatoryFields[i] = 'ExpiryDate_M';
    mandatoryLabels[i] = 'ExpiryDate_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
    
    mandatoryFields[i] = 'ExpiryDate_Y';
    mandatoryLabels[i] = 'ExpiryDate_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Expiry Date is mandatory';
    
    mandatoryFields[i] = 'CardHolder';
    mandatoryLabels[i] = 'CardHolder_Msg';
    mandatoryOriginalMsgs[i] = '';
    mandatoryErrorMsgs[i++] = 'Credit Card Holder is mandatory';
}



