/* **************************************************************
   @Nazwa: /js/formularz.js
   @Autor: Tomasz Łabacki
   @Email: tomasz@labacki.com
   @www:   http://labacki.com
   @Data:  13 marca 2010 13:08
   @Opis:  Walidacja formularzy klasy "sprawdz"

Aby formularz został sprawdzony podczas próby jego wysłania,
należy nadać mu klasę "sprawdz". Sprawdzenie wykonuje się następująco:
każdy element formularza (input, select czy textarea) ma opisującą go
etykietę (<label>), bezpośrednio na niego wskazującą (dzięki atrybutowi
"for"). Jeśli w treści etykiety będzie gwiazdka ("*"), to wskazywany
przez nią element formularza zostanie sprawdzony, czy nie jest pusty
(input,textarea), lub czy nie ma wartości "none" (select, domyślna
pierwsza wartość). Całość dzieje się w formularz.js, a przykładami są
formularze wykonane i pokazywane na stronie, lub to:

<label for="test">* Adres email</label>
<input id="test" name="moja_nazwa"/>
ten input musi mieć wartość i javascript to sprawdzi

<label for="test">Adres email</label>
<input id="test" name="moja_nazwa"/>
ten input nie musi mieć wartości
************************************************************** */

$(document).ready(function(){
    // Walidacja formularza
    $("form.sprawdz").submit(function(){
        // na początku zakładamy, że błędu nie ma
        var error_form=false;
        
        $(this).find("input,textarea,select").each(function(){
            // id elementu formularza
            var id=$(this).attr("id");

            // szukamy treść <label> powiązanego z tym elementem
            var tresc_label=$("form.sprawdz label[for="+id+"]").text();

            // czy ta treść zawiera gwiazdkę?
            var szukane_reg=new RegExp("\\*","i");
            if(szukane_reg.test(tresc_label)){
                // OK, ten element formularza musi być wypełniony
                if( ($(this).is("input") && $(this).val()=="") ||
                    ($(this).is("textarea") && $(this).val()=="") ||
                    ($(this).is("select") && $(this).val()=="none")) {
                        $(this).addClass("error");
                        error_form=true;
                } else {$(this).removeClass("error");}

                // A jeśli element to checkbox, to zaznaczamy jego <label> jako error
                if ($(this).attr("type")=="checkbox" && $("input#"+id+":checked").val()===undefined){
                    $("form.sprawdz label[for="+id+"]").addClass("error");
                } else {$("form.sprawdz label[for="+id+"]").removeClass("error");}
            }
        });
        return !error_form;
    });

});
