//FUNCTIONS

function init(e) {

    // because other applications cannot use cdsInit it must be called
    // from internal init

    cdsInit(e);

    adjustWings(e);

}

function getPreviousRegistrant(e) {

    var plast_name  = document.getElementById('plast_name_optional');
    var pfirst_name = document.getElementById('pfirst_name_optional');
    var pemail      = document.getElementById('pemail_optional');

    var url = '/workshops/ajax.pl?ajax_action=get_previous_registrant';

    url += '&last_name='  + plast_name.value;
    url += '&first_name=' + pfirst_name.value;
    url += '&email='      + pemail.value;

    //alert(url);

    var xmlhttp = new XMLHttpRequest();

    // last value set to false -- do not want async.
    xmlhttp.open('GET', url, false);

    xmlhttp.send(null);

    //alert(xmlhttp.responseText);

    var response = xmlhttp.responseXML;

    if ( ! response ) {

        alert( 'ERROR:' + xmlhttp.responseText );
        return false;

    }

    var rlast_name    = response.getElementsByTagName('last_name').item(0).firstChild;
    if (rlast_name)   rlast_name = rlast_name.nodeValue;

    var rfirst_name   = response.getElementsByTagName('first_name').item(0).firstChild;
    if (rfirst_name)  rfirst_name = rfirst_name.nodeValue;

    var remail        = response.getElementsByTagName('email').item(0).firstChild;
    if (remail)       remail = remail.nodeValue;

    var rcounty       = response.getElementsByTagName('county').item(0).firstChild;
    if (rcounty)      rcounty = rcounty.nodeValue;

    var rposition     = response.getElementsByTagName('position').item(0).firstChild;
    if (rposition)    rposition = rposition.nodeValue;

    var rdistrict_id  = response.getElementsByTagName('district_id').item(0).firstChild;
    if (rdistrict_id) rdistrict_id = rdistrict_id.nodeValue;

    var rrange        = response.getElementsByTagName('range').item(0).firstChild;
    if (rrange)       rrange = rrange.nodeValue;

    var rschool_id    = response.getElementsByTagName('school_id').item(0).firstChild;
    if (rschool_id)   rschool_id = rschool_id.nodeValue;

    var rschool_type  = response.getElementsByTagName('school_type').item(0).firstChild;
    if (rschool_type) rschool_type = rschool_type.nodeValue;

    var rphone_area   = response.getElementsByTagName('phone_area').item(0).firstChild;
    if (rphone_area)  rphone_area = rphone_area.nodeValue;

    var rphone_pre    = response.getElementsByTagName('phone_pre').item(0).firstChild;
    if (rphone_pre)   rphone_pre = rphone_pre.nodeValue;

    var rphone_suffix = response.getElementsByTagName('phone_suffix').item(0).firstChild;
    if (rphone_suffix) rphone_suffix = rphone_suffix.nodeValue;

    var rphone_ext    = response.getElementsByTagName('phone_ext').item(0).firstChild;
    if (rphone_ext)   rphone_ext = rphone_ext.nodeValue;

    var rsubscribe    = response.getElementsByTagName('subscribe').item(0).firstChild;
    if (rsubscribe)   rsubscribe = rsubscribe.nodeValue;

    var rcf_name      = response.getElementsByTagName('cf_name').item(0).firstChild;
    if (rcf_name)     rcf_name = rcf_name.nodeValue;

    var last_name    = document.getElementById('last_name');
    var first_name   = document.getElementById('first_name');
    var email        = document.getElementById('email');
    var vemail       = document.getElementById('check_email');
    var phone_area   = document.getElementById('phone_area');
    var phone_pre    = document.getElementById('phone_pre');
    var phone_suffix = document.getElementById('phone_suffix');
    var phone_ext    = document.getElementById('phone_ext_optional');
    var subscribe    = document.getElementById('subscribe_optional');
    var cf_name      = document.getElementById('cf_name_optional');

    // If we got something back it must have a last_name

    if ( rlast_name ) {

        // take care of the easy ones

        last_name.value = rlast_name;
        first_name.value = rfirst_name;
        email.value = remail;
        vemail.value = remail;
        phone_area.value = rphone_area;
        phone_pre.value = rphone_pre;
        phone_suffix.value = rphone_suffix;

        // this might not have values
        phone_ext.value = rphone_ext;

        // do the checkbox

        switch (rsubscribe) {

                case 'No' :
                    subscribe.checked = false;
                    break;

                default :
                    subscribe.checked = true;
                    break;

        }

        cdsSet(rposition, '', rcf_name, rcounty, rrange, rdistrict_id, rschool_id, rschool_type);

    }
    else {

       // just put in the first, last and email information

       last_name.value  = plast_name.value;
       first_name.value = pfirst_name.value;
       email.value      = pemail.value;
       vemail.value     = pemail.value;

       alert('Sorry, We could not find a previous registration.');

    }

    plast_name.value  = '';
    pfirst_name.value = '';
    pemail.value      = '';

    first_name.focus();

    return false;

}

function checkForm(e) {

    var form = document.getElementById('form_submit');

    var session_flag = 0;

    var elements = form.elements;

    for (var i = 0; i < elements.length; i++) {

        if (checkRequiredFormField(elements[i])) {

            alert('You must enter a value in all required fields');
            return false;

        } else if ( ! ( elements[i].id.match(/optional/) || elements[i].type.match(/hidden/) ) ) {

            // additional field specific validations

            if ( elements[i].id.match(/phone/) && ! elements[i].value.match(/^\d+$/) ) {

                alert('You have entered invalid data for a phone number.');
                elements[i].focus();
                return false;

            }
            else if ( elements[i].id.match(/session/) && elements[i].type == 'radio' && elements[i].checked ) {

                session_flag++;
    
            }

        }

    }

    if (! session_flag ) {

        alert('You must pick a session.');
        return false;

    }

    var email       = document.getElementById('email');
    var check_email = document.getElementById('check_email');

    var email_filter  = /^[A-Z0-9_.\-]+\@([A-Z0-9\-]+\.)+([A-Z]{2,4}|museum|travel)$/i;
    if ( ! email_filter.test(email.value) ) {

        alert('Please re-enter your e-mail address.');
        email.focus();
        return false;

    }
    else if ( email.value != check_email.value ) {

        alert('The e-mail values did not match. Please re-enter your e-mail address.');

        email.value       = '';
        check_email.value = '';

        email.focus();

        return false;

    }

    // supplemental questions

    var textarea = document.getElementsByTagName('textarea');

    if ( textarea.length ) {

        for ( i = 0; i < textarea.length; i++ ) {

            var response = textarea[i].value;

            response = response.replace(/^\s+/, "").replace(/\s+$/, "");

            if ( response == '' ) {

                alert('You must answer all supplemental questions');
                textarea[i].focus();
                return false;
            }

            var question_id = textarea[i].id;

            var question_type = validations[question_id].type;
            var question_data = validations[question_id].data;

            var error = '';

            switch(question_type) {

                case "Number":

                   var filter = /^-?\d+$/;

                    if ( ! filter.test(response) ) {
                        error = "Please enter a number";
                    }
                    else if (question_data) {

                        filter = /^(-?\d+)-(\d+)$/;

                        var limits = question_data.match(filter);

                        var lower_limit = parseInt(limits[1]);
                        var upper_limit = parseInt(limits[2]);

                        response = parseInt(response);

                        if (
                            (lower_limit && upper_limit) &&
                            (response < lower_limit || response > upper_limit)) {
                            error = "Please enter a number between " + lower_limit + " and " + upper_limit;
                        }
                    }
                break;

                case "Yes/No":

                   var filter = /^(Yes|No)$/i;

                    if ( ! filter.test(response) ) {
                        error = "Please enter YES or NO";
                    }
                break;

                case "Email":

                    if ( ! email_filter.test(response) ) {
                        error = "Please enter an Email address";
                    }
                break;

                case "Grade K-12":

                    var filter  = /^(K|[1-9]|1[012])$/i;

                    if ( ! filter.test(response) ) {
                        error = "Please enter a Grade (K-12)";
                    }
                break;

                case "Date":

                    var filter = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
                    var mdy = response.match(filter);

                    if ( ! mdy) {
                        error = "Please enter a date in the form mm/dd/yyyy";
                    }
                    else {
                        var testDate = new Date(mdy[3], (mdy[1] - 1), mdy[2]);
                        if (mdy[1] != testDate.getMonth() + 1 ||
                            mdy[2] != testDate.getDate()      ||
                            mdy[3] != testDate.getFullYear()) {
                            error = "Please enter a date in the form mm/dd/yyyy";
                        }
                    }
                break;

                case "Choice":
                case "Custom":

                    var splitter = /^\/(.*)\/(.*)$/;
                    var parts    = question_data.match(splitter);

                    var patt = question_data;
                    var attr = "";

                    if (parts && parts[1]) {
                        patt = parts[1];
                        }

                    if (parts && parts[2]) {
                        attr = parts[2];
                        }

                    var re       = new RegExp(patt, attr);

                    if ( ! re.test(response) ) {
                        error = "Please enter a valid response";
                    }
                break;

            }

            if (error != '') {

                alert(error + " [" + response + "]");
                textarea[i].focus();

                return false;
            }

        }

    }

    doSubmit();

    return true;

}

function doSubmit() {

    var form  = document.getElementById('form_submit');

    form.submit();

    return true;

}

function addListeners(e) {

    var listen = document.getElementById('submit_form');
    addEvent(listen, 'click', checkForm, false);

    listen = document.getElementById('retrieve_reg');
    addEvent(listen, 'click', getPreviousRegistrant, false);

}

addEvent(window, 'load', init, false);
addEvent(window, 'load', addListeners, false);
