/* For form validation
*/

function pw_validate_form(form_naam)
{
    var form_is_ok = true;
    var required_counter = 0;
    var error_message = "";
    var error_in_current_field = false;

    var valid_required_string = document.forms[form_naam].elements['valid_required'].value;
    var valid_required_array = valid_required_string.split(",");
    var required_fields = new Array();

    // map array keys to a form reference
    for (rc = 0; rc < valid_required_array.length; rc++)
    {
        var formfield_to_map = form_naam + "[" + valid_required_array[rc] + "]";
        required_fields.push(formfield_to_map);
    }

    // map valid_email hidden field to a reference variable so that this script can use it for checking
    if (document.forms[form_naam].elements['valid_email'])
    {
        // the idea is that each form field mentioned in the valid_email hidden field is added to a required_email array, which is checked later
        var valid_email_string = document.forms[form_naam].elements['valid_email'].value;
        var valid_email_array = valid_email_string.split(",");
        var required_email = new Array();

        for (ec = 0; ec < valid_email_array.length; ec++)
        {
            var emailfield_to_map = form_naam + "[" + valid_email_array[ec] + "]";
            required_email.push(emailfield_to_map);
            //alert(emailfield_to_map);
        }
    }

    // loop through all required fields
    for (key_checktextfield=0; key_checktextfield < required_fields.length; key_checktextfield++)
    {
        //alert(required_fields[key_checktextfield] + " " + required_fields[key_checktextfield].length); // for debug

        // check if required field is present
        if (document.forms[form_naam].elements[required_fields[key_checktextfield]])
        {
            // the required field exists!
            var existing_required_field = document.forms[form_naam].elements[required_fields[key_checktextfield]];

            // before checking set current field to no error found
            error_in_current_field = false;

            // check if the required field contains data
            if (existing_required_field.value == "")
            {
                error_in_current_field = true;
                //alert("missing field " + existing_required_field.name);
            }

            // should the required field validate as an e-mail?
            if (document.forms[form_naam].elements['valid_email'])
            {
                // check if a required_email array exists
                if (required_email)
                {
                    // loop through the required_email array
                    for (ec = 0; ec < required_email.length; ec++)
                    {
                        //alert(required_email[ec];
                        // check if the currently checked required field is present in the required_email array
                        if (required_email[ec] == existing_required_field.name)
                        {
                            // if it is present, check if it is a valid e-mail address
                            if (pw_is_valid_email(existing_required_field.value) == false)
                            {
                                error_in_current_field = true;
                                error_message = error_message + "Er is een ongeldig e-mail adres ingevuld!\r\n";
                            }
                        }
                    }
                }
            }

            // show error fields graphically in form by changing border color
            if (error_in_current_field == true)
            {
                if(existing_required_field.style.border == "solid 1px black")
                {
                    existing_required_field.style.border = "solid 2px red";
                } else {
                    existing_required_field.style.border = "solid 2px red";
                }
                form_is_ok = false;
            } else {
                existing_required_field.style.border = "solid 1px black";
            }
        } else {
            // array's are not detected properly
            //alert("For admin: required field " + required_fields[key_checktextfield] + " not found in form.");  // for debug
        }
    }

    if(form_is_ok == false)
    {
        error_message = "Niet alle verplichte velden zijn goed ingevuld!\r\n" + error_message;
        error_message = error_message +  "De niet goed ingevulde velden zijn met rood gemarkeerd.";
        alert (error_message);
    } else {
        document.forms[form_naam].submit.value = 'Bezig....';
        document.forms[form_naam].submit.disabled = true;
    }
    return form_is_ok;
}


function pw_is_valid_email(str)
{
   // are regular expressions supported?
   var supported = 0;
   if (window.RegExp)
   {
     var tempStr = "a";
     var tempReg = new RegExp(tempStr);
     if (tempReg.test(tempStr)) supported = 1;
   }
   if (!supported)
   {
     return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
   } else {
       var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
       var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
       return (!r1.test(str) && r2.test(str));
   }
}
