
function clear_form(form){
    // Use a whitelist of fields to minimize unintended side effects.
    $(':text, :password, :file', form).val('');
    // De-select any checkboxes, radios and drop-down menus
    $(':input', form).removeAttr('checked').removeAttr('selected');

    return form;
}

function person_duplicator(src_person){
    var index = 0;

    var dup = function(){
        index++;
        var clone = src_person.clone(true);

        clone = clear_form(clone);

        // Replace the input names
        clone.find("input").each(function(i){
            var oldname = $(this).attr("name");
            var newname = oldname.replace("person[0]", "person[" + index + "]");
            $(this).attr("name", newname);
        });

        return clone;
    };

    return dup;
}

function dcteikyo_every(list, pred){
    function every(list) {
        if (0 == list.length) {
            return true;
        }
        else{
            var first = list[0];
            var rest = list.slice(1);

            if (pred(first)) {
                return every(rest);
            }
            else {
                return false;
            }
        }
    }
        
    return every(list);
}

function may_add_person(){
    var person_inputs = $("fieldset.person input");
    is_valid = dcteikyo_every(person_inputs,
                              function(element){
                                  return validator.element(element);
                              });

    if (is_valid){
        return true;
    }
    else {
        validator.form();
        return false;
    }
}

$(document).ready(function(){

    $('fieldset.person .setTitle').click(function(){
        $(this).parent('fieldset.person').find('.perswrap').slideToggle(900);
        //$('fieldset.person .perswrap').slideToggle(900);
        return false;
    });

    var src_person = $("fieldset.person:first").clone(true);
    var create_new_person = person_duplicator(src_person);

    $('.addperson').click(function(){
        if (may_add_person()){
            // Collapse all persons
            var all_persons = $("fieldset.person");

            // var height = all_persons.find("perswrap").height();
            // if (height > 1) {
            //     all_persons.find(".perswrap").slideUp(1000);
            // }
            //all_persons.find(".perswrap").hide();
            all_persons.find(".perswrap").slideUp(1000);

            all_persons.removeClass("new").addClass("old");

            // And change their titles
            var message = teikyoL('Person added') + ' ' + teikyoL('Click to edit');
            all_persons.find(".setTitle").html('<h2>' + message + '</h2>');
            all_persons.find(".setTitle").removeClass("isnew");


            var last_person = $("fieldset.person:last");


            //
            // Create new person
            var new_person = create_new_person();
            new_person.removeClass("old").addClass("new");


            // Set person title
            var message = teikyoL('Add another person');
            new_person.find(".setTitle").html('<h2>' + message + '</h2>');
            new_person.find(".setTitle").addClass("isnew");

            new_person.find(".setDelete").html(teikyoL('Delete this person'));
            new_person.find(".setDelete").css({'display':'block'});
            new_person.find(".setDelete").click(function(){
                new_person.remove();
            });

            // Add person to form (after the last person)
            last_person.after(new_person);

            new_person.find(".perswrap").show();
            // Uncollapse new person
            new_person.find(".perswrap").slideDown(0);
        }
    });
});



