function makeDaysOfMonth(){
    var i = 0;
    this[i++] = 0; // dummy
    this[i++] = 31;
    this[i++] = 29;
    this[i++] = 31;
    this[i++] = 30;
    this[i++] = 31;
    this[i++] = 30;
    this[i++] = 31;
    this[i++] = 31;
    this[i++] = 30;
    this[i++] = 31;
    this[i++] = 30;
    this[i  ] = 31;
    this.length = i;
}

function calcAge(dd, mm, yy, date){
    var t, mon, day, year, DD, MM, YY, age;
    var MTB = new makeDaysOfMonth();
    var frm = document.frmMain;

    YY = parseInt(yy); // year of birth (4 digits)
    MM = parseInt(mm); // month of birth (1-12)
    DD = parseInt(dd); // date of birth (1-31)

    if (MTB[MM] < DD || DD < 1) return -1;

    //t = new Date();	// get current date
    year = date.getFullYear();	// get year of current
    mon = date.getMonth();	// get month of current
    day = date.getDate();	// get date of current

    if (MM == 2 && DD == 29)
    {	// check leap year
        if (!(((YY % 4 == 0) && (YY % 100 != 0)) || (YY % 400 == 0)))
        {
            // clear all values
            frm.txtBirthDate1.value = '';
            frm.txtBirthDate2.value = '';
            frm.txtBirthDate3.value = '';
            
            // inform the user
            alert("The year " +YY+ " ends at 28th of "+MM+" month\nPlease check the date.");
            
            // set the focus
            frm.txtBirthDate1.focus();
        
            return -1;
        }
    }
    
    age = year - YY;
    
    if ((MM > mon) || (MM == mon && day < DD)) age--;

    return age;
}

function isLeader(isAdmin)
{
  var frm = document.frmMain;
    var d = frm.txtBirthDate1.value;
    var m = frm.txtBirthDate2.value;
    var y = frm.txtBirthDate3.value;
    var total;
    var MTB = new makeDaysOfMonth();
    var date1 = new Date();
    var date2 = new Date(2010,4,1);
    
    if (y.length < 4)
        return;
        
    d = parseInt(d, 10);
    m = parseInt(m, 10);
    
    // validate month & day
    if (m > 12 || d > MTB[m])
    {
        // clear all values
        frm.txtBirthDate1.value = '';
        frm.txtBirthDate2.value = '';
        frm.txtBirthDate3.value = '';
        
        // inform the user
        alert('You have entered an invalid birthdate.');
        
        // set the focus
        frm.txtBirthDate1.focus();        
    }
    
  
    if (calcAge(d, m, y, date2) > 20)
    {
        show(gE('leaderform'));
        hide(gE('leaderplaceholder'));
        if (calcAge(d, m, y, date2) > 24) {
            gE('glc_display').style.display = 'inline';
            gE('stm_display').style.display = 'inline';
        } else {
            gE('glc_display').style.display = 'none';
            gE('stm_display').style.display = 'none';
        }
        if (!isAdmin)
            generateLeaderValidations();
        frm.txtIs21.value = 'true';
        frm.txtAge.value = calcAge(d, m, y, date2);
    } 
    else if (calcAge(d, m, y, date2) >=18) 
    {
        show(gE('leaderform'));
        hide(gE('leaderplaceholder'));
        gE('glc_display').style.display = 'none';
        gE('stm_display').style.display = 'none';
        if (!isAdmin && gE('SGL').checked) {
            generateLeaderValidations();
            frm.txtIs21.value = 'true';
        } else if (!isAdmin) {
            resetValidations();
            frm.txtIs21.value = 'false';
        }
        frm.txtAge.value = calcAge(d, m, y, date2);
    }
    else
    {
        hide(gE('leaderform'));
        show(gE('leaderplaceholder'));
        if (!isAdmin)
            resetValidations();
        frm.txtIs21.value = 'false';
        frm.txtAge.value = '';
    }
}

// onLoad, set convention fee
function updatePricing()
{
    var frm = document.frmMain;
    var today = new Date();
    var firstDate = new Date();
    var secondDate = new Date();
    var fee;
    var merch;
    var total;
    var qty = 0;
    
    firstDate.setFullYear(2010,2,15)
    secondDate.setFullYear(2010,3,15)
    if (today < firstDate)
        fee = 229.00;
    else if (today < secondDate)
        fee = 259.00
    else
        fee = 299.00;
        
    // get the T-shirt quantities
    if (!frm.txtSmallQty.value == '')
        qty += parseInt(frm.txtSmallQty.value);
    if (!frm.txtMediumQty.value == '')
        qty += parseInt(frm.txtMediumQty.value);
    if (!frm.txtLargeQty.value == '')
        qty += parseInt(frm.txtLargeQty.value);
    if (!frm.txtXLargeQty.value == '')
        qty += parseInt(frm.txtXLargeQty.value);
    if (!frm.txtXXLargeQty.value == '')
        qty += parseInt(frm.txtXXLargeQty.value);
        
    merch = qty * 15;
    total = fee + merch;
    
    frm.txtConventionFee.value = fee.toFixed(2);
    frm.txtMerchandise.value = merch.toFixed(2);
    frm.txtTotalAmount.value = total.toFixed(2);
}

function disableSubmit() {
    window.document.getElementById('submit').disabled = true; 
    return true;
}

function generateMainValidations()
{
    var frmvalidator = new Validator("frmMain");
    
    frmvalidator.addValidation("firstname", "req", "Please enter your First Name.");
    frmvalidator.addValidation("firstname", "maxlen=50", "Max length for First Name is 50.");

    frmvalidator.addValidation("lastname", "req", "Please enter your Last Name.");
    frmvalidator.addValidation("lastname", "maxlen=50", "Max length for Last Name is 50.");

    frmvalidator.addValidation("address1", "req", "Please enter your Address.");
    frmvalidator.addValidation("address1", "maxlen=50", "Max length for Address is 50.");

    frmvalidator.addValidation("city", "req", "Please enter your City.");
    frmvalidator.addValidation("city", "maxlen=50", "Max length for City is 50.");

    frmvalidator.addValidation("province","dontselect=0");
    
    frmvalidator.addValidation("postalcode", "req", "Please enter your Postal Code.");
    frmvalidator.addValidation("postalcode", "maxlen=7", "Max length for Postal Code is 7.");
    frmvalidator.addValidation("postalcode", "regexp=[a-zA-Z][0-9][a-zA-Z]\-?\ ?[0-9][a-zA-Z][0-9]");
    
    frmvalidator.addValidation("homephone1", "req", "Please enter your Home Phone Area Code.");
    frmvalidator.addValidation("homephone1", "minlen=3", "Min length for Home Phone Area Code is 3.");
    frmvalidator.addValidation("homephone1", "maxlen=3", "Max length for Home Phone Area Code is 3.");
    frmvalidator.addValidation("homephone1", "num");
    
    frmvalidator.addValidation("homephone2", "req", "Please enter your Home Phone Exchange.");
    frmvalidator.addValidation("homephone2", "minlen=3", "Min length for Home Phone Exchange is 3.");
    frmvalidator.addValidation("homephone2", "maxlen=3", "Max length for Home Phone Exchange is 3.");
    frmvalidator.addValidation("homephone2", "num");

    frmvalidator.addValidation("homephone3", "req", "Please enter your Home Phone.");
    frmvalidator.addValidation("homephone3", "minlen=4", "Min length for Home Phone is 4.");
    frmvalidator.addValidation("homephone3", "maxlen=4", "Max length for Home Phone is 4.");
    frmvalidator.addValidation("homephone3", "num");

    frmvalidator.addValidation("txtBirthDate1", "req", "Please enter your Birth Day.");
    frmvalidator.addValidation("txtBirthDate1", "minlen=1", "Min length for Birth Day is 1.");
    frmvalidator.addValidation("txtBirthDate1", "maxlen=2", "Max length for Birth Day is 2.");
    frmvalidator.addValidation("txtBirthDate1", "num");
    
    frmvalidator.addValidation("txtBirthDate2", "req", "Please enter your Birth Month.");
    frmvalidator.addValidation("txtBirthDate2", "minlen=1", "Min length for Birth Month is 1.");
    frmvalidator.addValidation("txtBirthDate2", "maxlen=2", "Max length for Birth Month is 2.");
    frmvalidator.addValidation("txtBirthDate2", "num");

    frmvalidator.addValidation("txtBirthDate3", "req", "Please enter your Birth Year.");
    frmvalidator.addValidation("txtBirthDate3", "minlen=4", "Min length for Birth Year is 4.");
    frmvalidator.addValidation("txtBirthDate3", "maxlen=4", "Max length for Birth Year is 4.");
    frmvalidator.addValidation("txtBirthDate3", "num");

    frmvalidator.addValidation("churchname", "req", "Please enter your Church Name.");
    frmvalidator.addValidation("churchname", "maxlen=50", "Max length for Church Name is 50.");

    frmvalidator.addValidation("churchcity", "req", "Please enter your Church City.");
    frmvalidator.addValidation("churchcity", "maxlen=50", "Max length for Church City is 50.");

    frmvalidator.addValidation("churchcontact", "req", "Please enter your Church Contact.");
    frmvalidator.addValidation("churchcontact", "maxlen=50", "Max length for Church Contact is 50.");
    
    frmvalidator.addValidation("churchphone1", "req", "Please enter your Church Phone Area Code.");
    frmvalidator.addValidation("churchphone1", "minlen=3", "Min length for Church Phone Area Code is 3.");
    frmvalidator.addValidation("churchphone1", "maxlen=3", "Max length for Church Phone Area Code is 3.");
    frmvalidator.addValidation("churchphone1", "num");
    
    frmvalidator.addValidation("churchphone2", "req", "Please enter your Church Phone Exchange.");
    frmvalidator.addValidation("churchphone2", "minlen=3", "Min length for Church Phone Exchange is 3.");
    frmvalidator.addValidation("churchphone2", "maxlen=3", "Max length for Church Phone Exchange is 3.");
    frmvalidator.addValidation("churchphone2", "num");

    frmvalidator.addValidation("churchphone3", "req", "Please enter your Church Phone.");
    frmvalidator.addValidation("churchphone3", "minlen=4", "Min length for Church Phone is 4.");
    frmvalidator.addValidation("churchphone3", "maxlen=4", "Max length for Church Phone is 4.");
    frmvalidator.addValidation("churchphone3", "num");

    frmvalidator.addValidation("emailaddress", "req", "Please enter your Email Address.");
    frmvalidator.addValidation("emailaddress", "maxlen=50", "Max length for Email Address is 50.");
    frmvalidator.addValidation("emailaddress", "regexp=^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$");

    frmvalidator.addValidation("emergencyname", "req", "Please enter your Emergency Contact Name.");
    frmvalidator.addValidation("emergencyname", "maxlen=50", "Max length for Emergency Contact Name is 50.");

    frmvalidator.addValidation("emergencyrelationship", "req", "Please enter your Emergency Contact Relationship.");
    frmvalidator.addValidation("emergencyrelationship", "maxlen=50", "Max length for Emergency Contact Relationship is 50.");

    frmvalidator.addValidation("dayphone1", "req", "Please enter your Day Phone Area Code.");
    frmvalidator.addValidation("dayphone1", "minlen=3", "Min length for Day Phone Area Code is 3.");
    frmvalidator.addValidation("dayphone1", "maxlen=3", "Max length for Day Phone Area Code is 3.");
    frmvalidator.addValidation("dayphone1", "num");
    
    frmvalidator.addValidation("dayphone2", "req", "Please enter your Day Phone Exchange.");
    frmvalidator.addValidation("dayphone2", "minlen=3", "Min length for Day Phone Exchange is 3.");
    frmvalidator.addValidation("dayphone2", "maxlen=3", "Max length for Day Phone Exchange is 3.");
    frmvalidator.addValidation("dayphone2", "num");

    frmvalidator.addValidation("dayphone3", "req", "Please enter your Day Phone.");
    frmvalidator.addValidation("dayphone3", "minlen=4", "Min length for Day Phone is 4.");
    frmvalidator.addValidation("dayphone3", "maxlen=4", "Max length for Day Phone is 4.");
    frmvalidator.addValidation("dayphone3", "num");
    
    frmvalidator.addValidation("evephone1", "req", "Please enter your Eve. Phone Area Code.");
    frmvalidator.addValidation("evephone1", "minlen=3", "Min length for Eve. Phone Area Code is 3.");
    frmvalidator.addValidation("evephone1", "maxlen=3", "Max length for Eve. Phone Area Code is 3.");
    frmvalidator.addValidation("evephone1", "num");
    
    frmvalidator.addValidation("evephone2", "req", "Please enter your Eve. Phone Exchange.");
    frmvalidator.addValidation("evephone2", "minlen=3", "Min length for Eve. Phone Exchange is 3.");
    frmvalidator.addValidation("evephone2", "maxlen=3", "Max length for Eve. Phone Exchange is 3.");
    frmvalidator.addValidation("evephone2", "num");

    frmvalidator.addValidation("evephone3", "req", "Please enter your Eve. Phone.");
    frmvalidator.addValidation("evephone3", "minlen=4", "Min length for Eve. Phone is 4.");
    frmvalidator.addValidation("evephone3", "maxlen=4", "Max length for Eve. Phone is 4.");
    frmvalidator.addValidation("evephone3", "num");
    
    frmvalidator.addValidation("txtSmallQty", "num");
    frmvalidator.addValidation("txtMediumQty", "num");
    frmvalidator.addValidation("txtLargeQty", "num");
    frmvalidator.addValidation("txtXLargeQty", "num");
    frmvalidator.addValidation("txtXXLargeQty", "num");
    frmvalidator.setAddnlValidationFunction(disableSubmit);
}

function generateLeaderValidations()
{
    var frmvalidator = new Validator("frmMain");
    
    frmvalidator.addValidation("txtAge", "req", "Please enter your Age.");
    frmvalidator.addValidation("txtAge","regexp=[0-9]");

    frmvalidator.addValidation("reference", "req", "Please enter your Reference.");
    frmvalidator.addValidation("reference", "maxlen=50", "Max length for Reference is 50.");

    frmvalidator.addValidation("refphone1", "req", "Please enter your Ref. Phone Area Code.");
    frmvalidator.addValidation("refphone1", "minlen=3", "Min length for Ref. Phone Area Code is 3.");
    frmvalidator.addValidation("refphone1", "maxlen=3", "Max length for Ref. Phone Area Code is 3.");
    frmvalidator.addValidation("refphone1", "num");
    
    frmvalidator.addValidation("refphone2", "req", "Please enter your Ref. Phone Exchange.");
    frmvalidator.addValidation("refphone2", "minlen=3", "Min length for Ref. Phone Exchange is 3.");
    frmvalidator.addValidation("refphone2", "maxlen=3", "Max length for Ref. Phone Exchange is 3.");
    frmvalidator.addValidation("refphone2", "num");

    frmvalidator.addValidation("refphone3", "req", "Please enter your Ref. Phone.");
    frmvalidator.addValidation("refphone3", "minlen=4", "Min length for Ref. Phone is 4.");
    frmvalidator.addValidation("refphone3", "maxlen=4", "Max length for Ref. Phone is 4.");
    frmvalidator.addValidation("refphone3", "num");

    frmvalidator.addValidation("refrelationship", "req", "Please enter your Ref. Relationship.");
    frmvalidator.addValidation("refrelationship", "maxlen=50", "Max length for Ref. Relationship is 50.");
    frmvalidator.setAddnlValidationFunction(disableSubmit);
}

function resetValidations()
{
    var frmvalidator = new Validator("frmMain");
    
    frmvalidator.clearAllValidations();
    generateMainValidations();
    frmvalidator.setAddnlValidationFunction(disableSubmit);
}

/*
auto advance the cursor to
the next object if the required
length is achieved
*/
function setFocus(obj, len, el)
{
    if (obj.value.length == len)    
        document.frmMain[el].focus();
}

function valNum(e)
{
    var key = window.event ? e.keyCode : e.which;
	var keychar = String.fromCharCode(key);
	
	reg = /\d/;
	
	return reg.test(keychar);
}

/*
1) hide the print button
2) print the page
3) show the print button
*/
function printConfirmation()
{
    hide(gE('btnPrint'));
    hide(gE('divDisclaimer'));
    window.print();
}
