/*
pola typy:
notnull
email
telefon stacjonarny
telefon komorkowy
numeryczne
literki
*/
(function ($){
  jQuery.fn.formValidate=function(settings){
    var forms=$(this); /* wynik selektora JQuery */
    if(typeof(settings) == 'undefined') {
        settings = {
            rules: {}
        };
    }

    var rules = jQuery.extend({
        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 />'
        },
        wwwhref: {
        	className: 'wwwhref',
        	validate: function(elem) {
        		var ereg = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/;
				if(!ereg.test(elem.value) && elem.value.length>0) { return false; }
        		return true;
        	},
        	komunikatBledu: 'w polu <b>%poleNazwa%</b> powinien znajdować się poprawny adres www'
        },
        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 />'
        },
        moreThanZero: {
            className: 'moreThanZero',
            validate: function(elem){
               /* sprawdzamy czy to liczba */
               var ereg=/^[0-9]+$/;
               if(!ereg.test(elem.value) && elem.value.length>0) { return false; }
               var iVal = parseFloat(elem.value); // konwersja na liczbe 
               if (isNaN(iVal)) { return false; } // wywal sie jezeli mamy NaNa
               if (iVal <= 0) { return false; } // wywal sie jezeli mamy zero
               return true;
            },
            komunikatBledu: 'liczba w polu <b>%poleNazwa%</b> musi być większa od zera<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.value == 0) {
                    return false;
                }
                return true;
            },
            komunikatBledu: 'Pole <b>%poleNazwa%</b> nie może być puste <br />'
        }
    },settings.rules);


    var options=jQuery.extend({
      errorClass: 'error'
    },settings);
    options.rules = rules;

    var waliduj=function(form){
        var errorMessage = '';
        var czyPoprawny=true;

            for(ruleName in options.rules) {
              var names={};
              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;

    }

    var okienko =  $("#okienkoConfirm").dialog({
			bgiframe: true,
			modal: true,
                        autoOpen: false,
			buttons: {
				Ok: function() {
					$(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();
              return false;
          }
        });
        var inputs = $('#'+this.id+' :input');
        inputs.each(function() {
            //alert(typeof(this.onclick));
            $(this).bind('click', function(e) {
                $(this).removeClass(options.errorClass);
            });
        });

      });
    }

    _init();
  }
})(jQuery);