function checkNIP(input_data) {
  if ( !input_data.match( /^[0-9]{3}-[0-9]{2}-[0-9]{2}-[0-9]{3}$/ )&& !input_data.match( /^[0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}$/ )&& !input_data.match( /^[0-9]{10}$/ ) )
  return false;
  var my_nums = input_data.replace(/-/g,'');
  var valid_nums = "657234567";
  var sum=0;
  for (var temp=8;temp>=0;temp--)
  sum += (parseInt(valid_nums.charAt(temp)) * parseInt(my_nums.charAt(temp)));
  if ( (sum % 11) == 10 ? false : ((sum % 11) == parseInt(my_nums.charAt(9))) )
  return true;
  else
  return false;
}

/* funkcja pomocnicza ktora ponizej podepne do walidacji jquery  */
function validateNum(NumStr, String)
{
    for(var Idx=0; Idx<NumStr.length; Idx++) {
        var Char = NumStr.charAt(Idx);
        var Match = false;
        for(var Idx1=0; Idx1<String.length; Idx1++) {
            if(Char == String.charAt (Idx1))
                Match = true;
        }
        if (!Match)
            return false;
    }
    return true;
} 

$.validator.addMethod("phoneCall", function(value) {
    if(value == "") return true;
		return validateNum(value,"1234567890#+-we. ")
}, 'Pole może zawierać tylko cyfry, #, spację, plus, myślnik i słowo "wew.". Usuń inne znaki.');

$.validator.addMethod("postCode", function(value) {
    if(value == "") return true;
    
		return value.match(/[-0-9]+/);
}, 'Pole "kod pocztowy" może zawierać tylko cyfry i myślnik. Usuń inne znaki.');

$.validator.addMethod("validNIP", function(value) {
  
	if(value == "") return true;
		return checkNIP(value);
}, 'Taki NIP nie istnieje. Wprowadź poprawny.');

$.validator.addMethod("skypeID", function(value) {
  if(value == "") return true;
		return validateNum(value,"1234567890.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUVWXYZ")
}, 'Poprawny identyfikator Skype może zawierać tylko cyfry, litery, myślnik i podkreślnik. Usuń inne znaki.');

$.validator.addMethod("digitYear", function(value) {
  if(value == "") return true;
		return validateNum(value,"1234567890")
}, 'Pole "rok zalożenia" może zawierać tylko cyfry. Usuń inne znaki.');

$.validator.addMethod("passwordMatch", function(value) {
		if( value == $("#passwd1").val() )  {
			return true;
		}
		return false;
}, 'Hasła nie są identyczne.');

$.validator.addMethod("mustBeChecked", function(value) {
		if( $("#regulations").attr('checked'))  {
			return true;
		}
		return false;
}, 'Akceptacja regulaminu jest warunkiem rejestracji.');

function isValidURL(url){
  if(value == "") return true;
    var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\dąćęółśżźĄĆĘÓŁŚŻŹńŃ]{2,2})+(:([\d\w]|%[a-fA-f\dąćęółśżźĄĆĘÓŁŚŻŹńŃ]{2,2})+)?@)?([\d\wąćęółśżźĄĆĘÓŁŚŻŹńŃ][-\d\wąćęółśżźĄĆĘÓŁŚŻŹńŃ]{0,253}[\d\wąćęółśżźĄĆĘÓŁŚŻŹńŃ]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\dąćęółśżźĄĆĘÓŁŚŻŹńŃ]{2,2})*)?$/;
    if(RegExp.test(url)){ return true; } else { return false; }
} 

jQuery.validator.addMethod("url2", function(value, element, param) {
  if(value == "") return true;
	return (value=='')?true:isValidURL(value);
}, 'Wprowadź poprawny adres www');

$(document).ready( function() {
	$("html").css({"overflow-y":"scroll"});	
	// validate signup form on keyup and submit
	var validator = null;
	
	function simple() {
	  validator = $("#rejestracja").validate({
		"rules": {
/* STEP 1: */
			"userEmail":{ "email":true, "required":true, "remote":"\/ajaxhelpers\/email_exist\/" },
			"passwd1": { "minlength": 8, "required":true },
			"regulations": {"mustBeChecked":true },
			"nazwa": { "minlength": 5, "required":true }
		},
		"messages": {
			userEmail: {
				email: "Wprowadź poprawny adres e-mail",
				required: "Pole wymagane.",
				remote: "W naszej bazie danych jest już taki użytkownik. Wprowadź inny adres."},
			opis: {
			    maxlength: "Pole 'O firmie' może mieć maksymalnie 3000 znaków."
			},
			passwd1: {
				required:"Pole 'hasło' jest wymagane",
				minlength:"Za krótkie hasło. Wprowadź hasło mające min. 8 znaków." },
			nazwa: {
				required:"Pole 'nazwa firmy' jest wymagane",
				minlength:"Za krótka nazwa firmy. Wprowadź nazwę mającą min. 5 znaków."  },
			miasto_kod: { 
				maxlength: "Kod pocztowy jest za długi",
				minlength: "Poprawny format kodu pocztowego to XX-XXX, gdzie X to cyfra. Popraw kod." },
			tel1: {
				number: "Niedozwolone znaki",
				maxlength: "Numer telefonu może mieć maksymalnie 25 znaków. Skróć numer." },
			fax: {
				number: "Numer fax składa się z cyfr",
				maxlength: "Numer faksu może mieć maksymalnie 25 znaków. Skróć numer" },
			www1: {
				url: "Wprowadź poprawny adres www"
			},
			email1: "Wprowadź poprawny adres email",
			gg_id: "Poprawny identyfikator GG zawiera tylko cyfry. Usuń inne znaki.",
			rok_zalozenia: {
        minlength: "Data musi składać się z 4 cyfr. Popraw datę." },
			liczba_trenerow: "Usuń znaki inne niż cyfry."
		},
		"errorPlacement": function(error, element) {
			if ( element.is(":radio") ) {
				element.parent().next().children(".required, .dsc").hide();
				error.appendTo( element.parent().next().children(".inf") );
			}
			else if ( element.is(":checkbox") ) {
				element.parent().next().children(".required, .dsc").hide();
				error.appendTo ( element.parent().next().children(".inf") );
			}
			else {
				element.parent().next().children(".required, .dsc").hide();
				error.appendTo( element.parent().next().children(".inf") );
			}
		},
		// set this class to error-labels to indicate valid fields
		"success": function(label) {
			// set &nbsp; as text for IE
			label.parent().parent().children(".required").hide(); //ukrywanie guzika required
			label.html("&nbsp;").addClass("checked");
		}
	});

  };
  
  simple();
  
	$("#regulations").change(function(){
		if( $(this).attr('checked') ) {
			$(this).parent().parent().children(".status").html("<span class=\"inf\"><label class=\"error checked\" generated=\"true\">&nbsp;</label></span>");
		}else {
			$(this).parent().parent().children(".status").html("<span class=\"inf\"><label class=\"error\" generated=\"true\">Musisz zaakceptować regulamin</label></span>");
		}
	});
		
		/* ------------------- NAWIGACJA  setps ------------------ */ 
	$("#form_type_simple").click( function() {
			$("#tableStep2").slideUp("slow");
			$("#opis").val('');
			$("#liczba_trenerow, #rok_zalozenia, #gg_id, #skype_id, #email1, #www1, #fax, #tel1, #nip, #miejscowosc_name, #miasto_kod, #adres, #miejscowosc_id, #opis").attr('value', '');
			$("#liczba_trenerow, #rok_zalozenia, #gg_id, #skype_id, #email1, #www1, #fax, #tel1, #nip, #miejscowosc_name, #miasto_kod, #adres, #miejscowosc_id, #opis").each(function() { $(this).rules("remove"); });
	});		
	
	$("#form_type_extended").click( function() {
			$("#tableStep2").slideDown("slow");
			
			$("#miasto_kod").rules("add", {"maxlength": 6,"minlength": 6, "postCode":true });
			$("#nip").rules("add",  {"validNIP":true});
			$("#tel1").rules("add",  { "phoneCall": true, "maxlength": 25 });
			$("#fax").rules("add",   { "phoneCall": true, "maxlength": 25 });
			$("#www1").rules("add",  "url2");
			$("#email1").rules("add",  "email");
			$("#skype_id").rules("add",  "skypeID");
			$("#gg_id").rules("add",  "number");
			$("#rok_zalozenia").rules("add",  {"digitYear":true, "minlength":4 });
			$("#liczba_trenerow").rules("add",  "number");
			$("#opis").rules("add",  {"maxlength": 3000 });

	});
	
	/* focus on 1st input */ 
	$("input:text:first").focus();
	
	/* autocomplete */
	function findValueCallback1(event, data, formatted) {
		if (!data) {
			$("#tdMiejscowoscStatus").html('<label class="alert"><small>Nieznana miejscowość. Sprawdź pisownię.'+
				' Jeśli jest poprawna, wypełniaj formularz dalej - zostanie poddana moderacji.</small></label>');			
			$("#miejscowosc_id").attr("value", "");
			/* $("#miejscowosc_name").focus(); */		
		}
		else {
			$("#miejscowosc_id").attr("value", data[2]);
			$("#tdMiejscowoscStatus").html('<span class="inf">&nbsp;</span>'); /* czyszczenie*/
		}
	}
	
	$("#miejscowosc_name").autocomplete("/ajaxhelpers/getMiejscowosciLike/", {
		 matchContains: false, mustMatch: false,
		 minChars: 1, max: 15, scroll: true, autoFill: true,
		formatItem: function(row)  {
			return row[0] + " (" + row[1] + ")";
		}
	});
	
	/* ta metoda odpala sie tylko po wypełnieniu pola */
	$("#miejscowosc_name").result(findValueCallback1).change( function() {
		$(this).search();
	});
	
	function forma(num) {
	    if(num == 1) return "(pozostał 1 znak)";
	    if((Math.floor(num / 10) % 10 != 1) && (num % 10 == 2 || num % 10 == 3 || num % 10 == 4)) return "(pozostały " + num + " znaki)";
	    return "(pozostało "+num+" znaków)";
	}
	
	function forma2(num) {
	    if(num == 1) return "(za dużo o 1 znak)";
	    if((Math.floor(num / 10) % 10 != 1) && (num % 10 == 2 || num % 10 == 3 || num % 10 == 4)) return "(za dużo o " + num + " znaki)";
	    return "(za dużo o "+num+" znaków)";
	}
	
	$('.limit').each(function(i, e) {
	    var textarea = $('textarea', e)[0];
	    var limit = +$(e).attr('rel');   
	    var len = textarea.value.length;
	    var id = "field_" + Math.floor(Math.random()*10001);
	    var span = $('<span id="'+id+'">(pozostało '+(limit - len)+' znaków)</span>').appendTo($('.label', e));
	    $(textarea).keyup(function(event) {
	        var len = textarea.value.length;
	        if(limit - len >= 0) {
	            span.css('color','#aaa');
	            span.html(forma(limit - len)); 
	        }
	        else {
	            span.css('color','red');
	            span.html( forma2(len - limit));
	        }
	    });
	});
});

