/*
pola typy:
notnull
email
telefon stacjonarny
telefon komórkowy
nueryczne
literki
*/
(function ($){
  jQuery.fn.formValidate=function(settings){
    var forms=$(this); /* wynik selektora JQuery */

    var options=jQuery.extend({
      rules: {
          email: {
            className: 'email',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z_+])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne<br />'
          },
          telefon: {
            className: 'telefon',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[0-9]{9}$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne! <b>poprawny format: xxxxxxxxx</b><br />'
          },
          numer: {
            className: 'numer',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[0-9]+$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne<br />'
          },
          kodPocztowy: {
            className: 'kodPocztowy',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[0-9]{2}-[0-9]{3}$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne<br />'
          },
          napis: {
            className: 'napis',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[a-zA-Z-.ąęćśżźńółĘĆĄŹŻŚÓŃŁ]+$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne<br />'
          },
          ulica: {
            className: 'ulica',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[0-9\ a-zA-Z-.ąęćśżźńółĘĆĄŹŻŚÓŃŁ]+$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne<br />'
          },
          alphaNum: {
            className: 'alphaNum',
            validate: function(elem){
               /* sprawdzamy email */
               var ereg=/^[0-9a-zA-Z]+$/;
               if(!ereg.test(elem.value) && elem.value.length>0)
                   return false;
               return true;
            },
            komunikatBledu: 'dane w polu <b>%poleNazwa%</b> są nie poprawne<br />'
          },
          notNull: {
            className: 'notNull',
            validate: function(elem,names){
                if(elem.type=='checkbox' && elem.checked == false) {
                    return false;
                }
                if(elem.type=='radio'){
                    try{
                    var elem=$(elem);
                    var radioName=elem.attr("name");
                    if(typeof(names[radioName])=='undefined'){
                        names[radioName]=radioName;
                        if($('input[type="radio"][name="'+radioName+'"]:checked').length == 0) {
                          $('input[type="radio"][name="'+radioName+'"]').parent().addClass(options.errorClass);
                          return false;
                        }
                        else {
                             $('input[type="radio"][name="'+radioName+'"]').parent().removeClass(options.errorClass);
                        }
                   }
                   } catch(e){alert(e.message);}
                }
                if(elem.type=='text' && elem.value.length == 0) {
                    return false;
                }
                if(elem.tagName=='SELECT' && elem.selectedIndex == 0) {
                    return false;
                }
                if(elem.tagName=='TEXTAREA' && elem.innerHTML.length == 0) {
                    return false;
                }
                return true;
            },
            komunikatBledu: 'Pole <b>%poleNazwa%</b> nie może być puste <br />'
          }

      },

      errorClass: 'error'
    },settings);


    var waliduj=function(form){
        var errorMessage = '';
        var czyPoprawny=true;
        var names={};
        for(ruleName in options.rules) {
          rule = options.rules[ruleName];

          var formElems = $('#'+form.id+' .'+rule.className);
          /* alert(rule.className);
          alert(formElems.length); */
          formElems.each(function(){
               if(!rule.validate(this,names)){
                 errorMessage+= rule.komunikatBledu.replace(/%poleNazwa%/,this.title);
                 $(this).addClass(options.errorClass);
                 czyPoprawny = false;
               }else{
                 ;//$(this).removeClass(options.errorClass);
               }

          });
        };

        if(!czyPoprawny) {
          //wyrzucic komunikat do pola bledu
          _alert('<p>'+errorMessage+'</p> ');
          return false;
        }
        return true;

    }

    $("#okienkoConfirm").dialog('destroy');
    $("#okienkoConfirm #trescDialogG").html('');
    $("#okienkoConfirm").attr("title","Komunikat");
    var okienko =  $("#okienkoConfirm").dialog({
			bgiframe: true,
			modal: true,
                        autoOpen: false,
                        width:390,
			buttons: {
				Ok: function() {
                                    $("#okienkoConfirm #trescDialogG").html('');
                                    $(this).dialog('close');
				}
			}
		});

    var _alert=function(textAlert){
        okienko.html(textAlert);
        okienko.dialog('open');
    }

    var _init=function(){
      forms.each(function(){
        $(this).bind('submit',function(e){
          if(waliduj(this))
              this.submit();
          else{
              e.preventDefault();
          }
        });
        var inputs = $('#'+this.id+' :input');
        inputs.each(function() {
            //alert(typeof(this.onclick));
            $(this).bind('click', function(e) {
                $(this).removeClass(options.errorClass);
            });
        });

      });
    }

    _init();
  }
})(jQuery);
