/*
Stukje voor forms
onchange="this.select('option[value=3]').first().selected = true;"
*/

function setSelects(form){
    if (form){
        var form = $(form);
    } else {
        var form = document.body;
    }
    var selects = form.select('select.setme');
    selects.each(function(s){
        var options = s.select('option');
        if (options[0].value != "NULL" && options[0].value != ""){
            s.select('option[value='+options[0].value+']').last().selected = true;
            options[0].remove(); 
		}
    });
}


/* 
    By Ronald -- :D
    Dit is nog niet af. meerdere velden werken niet maar dat maak ik later af...
**/
var Validate = Class.create({
    initialize: function(form) {                                                        //initialize, zorg dat form en group bestaan.
        this.form = $(form);                                                            //zet form als standaard.
        this.fields = this.form.select('input.required','select.required','textarea.required');             // pak alle velden die required zijn binnen dit form.
    },
    setGroup: function(group){                                                          //verwisseling van groep, dit is als je required wilt laten afhangen van een input. 
        this.fields = this.form.select('input.required','select.required','textarea.required');             // update de fields naar volledig.
        this.group = $(group);                                                          //de specifieke groep die je wilt laten zien en controleren.
        var groups = this.form.select('tbody.group');                                   // alle groepen
        groups = groups.without(this.group);                                            // alle groepen zonder de specifieke groep die je wilt laten zien en controleren.
        fields = this.fields;                                                           //zorg dat de fields variable mogelijk is binnen groups.each
        groups.each(function(group){                                                    // per alle groepen die je niet wilt zien
            group_fields = group.select('input.required','select.required','textarea.required');            // pak de required velden binnen de groep
            group_fields.each(function(group_field){                                    // per required veld:
                fields = fields.without(group_field);                                   //haal de required velden uit de totale velden lijst die gecontroleerd moet worden.
            }); 
            group.hide();                                                               // hide de groepen die niet zichtbaar  moeten zijn
        });
        this.fields = fields;                                                           // update de class fields
        this.group.show();                                                              // laat de groep die zichtbaar moet zijn zien.
    },
    validate: function(){                                                               // controleren of de gegevens correct zijn
        var total_labels = this.form.select('label.required');                          // alle labels pakken en weer zwart maken.
                
        total_labels.each(function(label_b){
            label_b.removeClassName('required');
            //label_b.setStyle({'color':''});
        });

        var error_id = Array();
        var success = true;
        var inputs = this.fields;                                                       //alle velden
        var form = this.form;
        inputs.each(function(input){                                                    // per veld controleren of de input goed is. Als je een type wilt toevoegen  kan dat hier, gewoon een else if  toevoegen.
            if (input.type == "checkbox") {
                if (!input.checked){
                    success = false;
                    error_id[error_id.size()] = input;                                  // veld id meegeven zodat je kan aangeven wat incorrect is
                }
            } else if (input.type == "text") {
                if (!input.value){
                    success = false;
                    error_id[error_id.size()] = input;
                }
                if (input.hasClassName('email')){                                       // email controle of het email adres correct is.
                    if(!input.value.match(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/)){
                        success = false;
                        error_id[error_id.size()] = input;
                    }
                }
                if (input.hasClassName('digit')){                                       // getallen  en '-' only
                    if(input.value.replace(/ /,'').match(/[^\d-]/)){
                        success = false;
                        error_id[error_id.size()] = input;
                    }
                }
                if (input.hasClassName('url')){                                         // url met http:// ervoor only
                    if(!input.value.match(/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i)){
                        success = false;
                        error_id[error_id.size()] = input;
                    }
                }
                if (input.hasClassName('bond')){
                    var parents = input.ancestors();
                    var children = parents[0].childElements();
                    input.id = children[0].id;
                    if (input.value == ""){
                        success = false;
                        error_id[error_id.size() - 1] = input;  
                    }
                }
            } else if (input.type == "select-one") {                                    // selectbox, eerste mag niet genomen worden.
                if (!input.value || input.value == "NULL"){
                    success = false;
                    error_id[error_id.size()] = input;
                }
            } else if (input.type == "textarea") {                                      //textarea moet gebruikt worden.
                if (!input.value || input.value == "NULL"){
                    success = false;
                    error_id[error_id.size()] = input;
                }
            } else if (input.type == "radio") {
                var radiobuttons = form.select('input[name="'+input.name+'"]');
                var radioInUse = 0; 
                radiobuttons.each(function(rb){
                    if (rb.checked) radioInUse = 1; 
                });
                if (radioInUse == 0){
                    success = false;
                    input.id = input.name;
                    error_id[error_id.size()] = input;
                }
            } else if(input.type =="password"){
                if(input.value.toArray().size() < 6){
                    success = false;
                    error_id[error_id.size()] = input;
                }
            }else {
                alert('geen validatie voor het type veld: '+input.type);
            }
        });
        
        //check for same
        var fields = this.form.select('input[class*="same"]');
        fields.each(function(sf){
            var sameFields = new Array;
            sf.classNames().each(function(c){
                if (c.startsWith('same=')){
                    c = c.substr(5);
                    sameFields = c.split('=');
                }
            });
            
            sameFields.each(function(sfcheck){
                if(sf.value != $F(sfcheck)){
                    success = false;
                    error_id[error_id.size()] = $(sfcheck);
                    error_id[error_id.size()] = $(sf);
                }
            });
        });
        error_id.uniq();

        if (success) this.form.submit();                                                //als het lukte, submit
        else {                                                                          // zo niet. zorg dat alle labels een rode tekst krijgen.
            var form = this.form;
            var labels = Array();
            error_id.each(function(er){
                labels = form.select('label[for="'+er.id+'"]');
                //alert(labels+ " van: "+er.id);
                labels[0].addClassName('required'); 
                //labels[0].setStyle({'color':'red'});
            });
        }
    }
});

/*
example:

<form id="testform" action="">
    <table>
        <tr><td><label for="field_first">first:</label></td><td><input checked="checked" type="radio" onclick="validate.setGroup('first');" name="group" id="field_first"/></td></tr>
        <tr><td><label for="field_second">second:</label></td><td><input type="radio" onclick="validate.setGroup('second');"name="group" id="field_second"/></td></tr>
       
        <tbody id="first" class="group">
            <tr><td><label for="name">Name:</label></td><td><input type="text" class="required"  name="name" id="name"/></td></tr>
        </tbody>
        <tbody id="second" class="group">
            <tr><td><label for="name2">Name2:</label></td><td><input type="text" class="required" name="name2" id="name2"/></td></tr>
        </tbody>
        <tr><td><label for="email">email:</label></td><td><input type="text" class="required email"  name="email" id="email"/></td></tr>
        <tr><td><label for="website">website(met http://)":</label></td><td><input type="text" class="required url"  name="website" id="website"/></td></tr>
        <tr><td><label for="telephone">telephone:</label></td><td><input type="text" class="required digit"  name="telephone" id="telephone"/></td></tr>
        <tr><td><input onclick="validate.validate();" type="button" value="validate"/></td><td></td></tr>
    </table>
</form>

<script type="text/javascript">
    var validate = new Validate("testform");
    validate.setGroup("first");
</script>

*/
