function isNumberKey(evt)
{
	try
	{
		var charCode = (evt.which) ? evt.which : event.keyCode
	    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=45)
	    	return false;
	}catch(err) { }

	return true;
}

function isNumberKeyEven(evt)
{
	try
	{
		var charCode = (evt.which) ? evt.which : event.keyCode
	    if (charCode > 31 && (charCode == 49 || charCode == 51 || charCode == 53 || charCode == 55 || charCode == 57) && charCode!=45)
	    	return false;
	}catch(err) { }

	return true;
}

function isCodeKey(evt)
{

	try
	{
		var charCode = (evt.which) ? evt.which : event.keyCode
	    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=45)
	    	return false;
	}catch(err) { }

	return true;
}

jQuery(document).ready(function(){		
	
	validateNewsletterForm();
	validateSearchForm();
	validateSearch2Form();
	validateRegisterForm();
	validateLoginForm();
	validateLoginBoxForm();
	validatePassForm();
	validateAddressForm();
	validateSendForm();
	validateChangepassForm();
	validateStep3Form();
	validateStep4Form();
	//validateRatyForm();
});


function validateNewsletterForm(){
	var vregisterForm = jQuery("#newsletterForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			newsletter_email: {
				required: true,
				email: true
			},
			newsletter_name: {
				required: true
			}
		},
		messages: { 
			newsletter_email: {
				required:  "Podaj adres e-mail!",
				email: 'Błędny adres e-mail!'
			},
			newsletter_name: {
				required:  "Podaj imię!"
			}
		} 
	}); 
}


function validateSearchForm(){
	var vregisterForm = jQuery("#searchForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter("a.searchForm").css({display:"none"}).slideDown();
  		},

		rules: { 
			serach_word: {
				required: true,
				minlength: 3
			}
		},
		messages: { 
			serach_word: {
				required:  "min. 3 znaki!",
				minlength: "min. 3 znaki!"
			}
		} 
	}); 
}

function validateSearch2Form(){
	var vregisterForm = jQuery("#searchForm2").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter("#psearch").css({display:"none"}).slideDown();
  		},

		rules: { 
			serach_word: {
				required: true,
				minlength: 3
			}
		},
		messages: { 
			serach_word: {
				required:  "Podaj wyszukiwaną frazę!",
				minlength: "Podaj minimalnie 3 znaki!"
			}
		} 
	}); 
}


function validateRegisterForm(){
	var vregisterForm = jQuery("#registerForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			email: {
				required: true,
				email: true,
				remote: 'ajax/checkemail'
			},	
			emailconfirm: {
				required: true,
				equalTo: "#email"
			},
			username: {
				required: true,
				remote: 'ajax/checkusername'
			},
			password: {
				required: true
			},
			passwordconfirm: {
				required: true,
				equalTo: "#password"
			},
			accept: {
				required: true
			}
		},
		messages: { 
			email: {
				required:  "To pole jest wymagane!",
				email: 'Błędny adres e-mail!',
				remote: 'Podany e-mail już istnieje w bazie!'
			},
			emailconfirm: {
				required:  "To pole jest wymagane!",
				equalTo: "Źle powtórzony adre e-mail!"
			},
			username: {
				required: "To pole jest wymagane!",
				remote: 'Login już jest zajęty!'
			},
			password: {
				required: "To pole jest wymagane!"
			},
			passwordconfirm: {
				required: "To pole jest wymagane!",
				equalTo: "Źle powtórzone hasło!"
			},
			accept: {
				required: "To pole jest wymagane!"
			}
		} 
	}); 
}

function validateLoginForm(){
	var vregisterForm = jQuery("#loginForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			username: {
				required: true
			},
			password: {
				required: true
			}
		},
		messages: { 
			username: {
				required: "To pole jest wymagane!"
			},
			password: {
				required: "To pole jest wymagane!"
			}
		} 
	}); 
}

function validateLoginBoxForm(){
	var vregisterForm = jQuery("#loginBoxForm").validate({ 
		errorElement: "p",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			username: {
				required: true
			},
			password: {
				required: true
			}
		},
		messages: { 
			username: {
				required: "To pole jest wymagane!"
			},
			password: {
				required: "To pole jest wymagane!"
			}
		} 
	}); 
}

function validatePassForm(){
	var vregisterForm = jQuery("#passForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			email: {
				required: true,
				email: true,
				remote: 'ajax/checkemailtopassreminder'
			}
		},
		messages: {
			email: {
				required: "To pole jest wymagane!",
				email: 'Błędny adres e-mail!',
				remote: 'Brak użytkownika o podanym e-mailu!'
			}
		} 
	}); 
}

function validateAddressForm(){
	var vregisterForm = jQuery("#addressForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element.parent().children(':last-child')).css({display:"none"}).slideDown();
  		},
  		groups: {
	    	postcode: "postcode1 postcode2",
	    	invoicepostcode: "invoicepostcode1 invoicepostcode2"
  		},

		rules: { 
			name: {
				required: true
			},
			surname: {
				required: true
			},
			street: {
				required: true
			},
			phone: {
				required: true
			},
			house: {
				required: true
			},
			postcode1:{
	  			required: true,
	  			rangelength: [2, 2]
	  		},
	  		postcode2:{
	  			required: true,
	  			rangelength: [3, 3]
	  		},
	  		city:{
	  			required: true
	  		},
	  		
	  		
	  		
	  		invoicename: {
				required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked')){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			}
			},
			invoicestreet: {
				required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked')){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			}
			},
			invoicehouse: {
				required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked')){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			}
			},
			invoicepostcode1:{
	  			required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked')){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			},
	  			rangelength: [2, 2]

	  		},
	  		invoicepostcode2:{
	  			required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked')){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			},
	  			rangelength: [3, 3]

	  		},
	  		invoicecity:{
	  			required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked')){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			}
	  		},
	  		invoicenip:{
	  			required: {
	  				depends: function(element) {
	  					if ( jQuery('#displayinvoice').attr('checked') && jQuery('#invoicetype2').attr('checked') ){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			}
	  		},
	  		email:{
	  			required: {
	  				depends: function(element) {
	  					if ( jQuery('#quest').val()==1 ){
	  						return true;
	  					}else{
	  						return false;
	  					}
	  				}
	  			},
	  			email: true
	  		}
	  		
		},
		messages: { 
			name:{
				required: 'Podaj imię!'
			},
			surname:{
				required: 'Podaj nazwisko!'
			},
			street:{
				required: 'Podaj ulicę!'
			},
			phone:{
				required: 'Podaj numer telefonu!'
			},
			house:{
				required: 'Podaj numer domu!'
			},
			postcode1:{
				required: 'Podaj kod!',
	  			rangelength: 'Podaj 2 cyfry kodu!'

			},
			postcode2:{
				required: 'Podaj kod!',
	  			rangelength: 'Podaj 3 cyfry kodu!'

			},
			city:{
				required: 'Podaj miasto!'
			},
			
			
			invoicename:{
				required: 'Podaj imię / nazwę firmy!'
			},
			invoicestreet:{
				required: 'Podaj ulicę!'
			},
			invoicehouse:{
				required: 'Podaj numer domu!'
			},
			invoicepostcode1:{
				required: 'Podaj kod!',
	  			rangelength: 'Podaj 2 cyfry kodu!'

			},
			invoicepostcode2:{
				required: 'Podaj kod!',
	  			rangelength: 'Podaj 3 cyfry kodu!'

			},
			invoicecity:{
				required: 'Podaj miasto!'
			},
			invoicenip:{
				required: 'Podaj NIP!'
			},
			email: {
				required: 'Podaj e-mail!',
				email: 'Błędny adres e-mail!'
			}
		} 
	}); 
}

function validateSendForm(){
	var vregisterForm = jQuery("#sendForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			email: {
				required: true,
				email: true
			},
			phone: {
				required: true
			},
			person: {
				required: true
			},
			notice: {
				required: true
			}
		},
		messages: { 
			email: {
				required:  "Podaj adres e-mail!",
				email: 'Błędny adres e-mail!'
			},
			phone: {
				required:  "Podaj numer telefonu!"
			},
			person: {
				required:  "Podaj osobę kontaktową!"
			},
			notice: {
				required:  "Podaj treść zapytania!"
			}
		} 
	}); 
}

function validateChangepassForm(){
	var vregisterForm = jQuery("#changepassForm").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element).css({display:"none"}).slideDown();
  		},

		rules: { 
			oldpassword: {
				required: true,
				remote: domain+'ajax/checkpass'
			},
			password: {
				required: true
			},
			passwordconfirm: {
				required: true,
				equalTo: "#password"
			},
			accept: {
				required: true
			}
		},
		messages: { 
			oldpassword: {
				required: "To pole jest wymagane!",
				remote: 'Błędne hasło!'
			},
			password: {
				required: "To pole jest wymagane!"
			},
			passwordconfirm: {
				required: "To pole jest wymagane!",
				equalTo: "Źle powtórzone hasło!"
			},
			accept: {
				required: "To pole jest wymagane!"
			}
		} 
	}); 
}

function valitadeProductForm() {
	var productForm = $('#productForm').validate({
		errorElement: "span",
		submitHandler: function(form) {
		   	sendProductForm(form);
   		},
		
		errorPlacement: function(error, element) {
       		error.insertAfter(element);
  		},
		rules: {
			name: {
				required: true
			},
			email: {
				required: true,
				email: true
			},
			text: {
				required: true
			}
		},
		messages: {
			name: {
				required: "Pole jest wymagane"
			},
			email: {
				required: "Pole jest wymagane",
				email: "Błędny adres e-mail"
			},
			text: {
				required: "Pole jest wymagane"
			}
		}
	});
}

function validateStep3Form() {
	var step3Form = jQuery("#step3Form").validate({ 
		errorElement: "span",
		
		errorPlacement: function(error, element) {
       		error.insertBefore(element).parent().css({display:"block"});
  		},

		rules: { 
			deliver: {
				required: true
			},
			payment1: {
				required: {
	  				depends: function(element) {
	  					if ($('input:radio[name=deliver]:checked').val() == 1) {
	  						return true;
	  					} else {
	  						return false;
	  					}
	  				} 
	  			}
	  		},
	  		payment2: {
				required: {
	  				depends: function(element) {
	  					if ($('input:radio[name=deliver]:checked').val() == 2) {
	  						return true;
	  					} else {
	  						return false;
	  					}
	  				} 
	  			}
	  		}
		},
		messages: {
			deliver: {
				required: "Proszę wybrać formę dostawy!"
			},
			payment1: {
				required: "Proszę wybrać formę płatności!"
			},
			payment2: {
				required: "Proszę wybrać formę płatności!"
			}
		} 
	}); 
}

function validateStep4Form() {
	var step4Form = jQuery("#cartstep4Form").validate({ 
		errorElement: "p",
		
		errorPlacement: function(error, element) {
       		error.insertBefore(element).parent().css({display:"block"});
  		},

		rules: { 
			raty_zgoda: {
				required: true
			}
		},
		messages: {
			raty_zgoda: {
				required: "Pole jest wymagane!"
			}
		} 
	}); 
}

function validateRatyForm(){
	var ratyForm = jQuery("#ratyForm").validate({ 
		errorElement: "span",
		submitHandler: function(form) {
		   	countInstalment(form);
   		},

		errorPlacement: function(error, element) {
  		},

		rules: { 
			kodLiniiKredytowej: {
				required: true
			},
			liczbaRat: {
				required: true
			},
			wplataWlasna: {
				required: true
			}
		} 
	}); 
}

function validateWniosekForm() {
	var wniosekForm = $('#wniosekForm').validate({
		errorElement: 'span',
		errorPlacement: function(error, element) {
			if (element.attr("name") != "serDowodu_1")
			{
				if (element.attr("name") == 'zrodloDochoduDataOd' || element.attr("name") == 'zrodloDochoduDataDo')
				{
					error.insertAfter('#gwiazdka').css({display:"none"}).slideDown();
					element.css({border: '1px solid #ff0000'});
				}
				else
				{
					error.insertAfter(element).css({display:"none"}).slideDown();
					element.css({border: '1px solid #ff0000'});
				}	
			}
			else 
				error.insertAfter("input[name='nrDowodu_1']");

		},
		highlight:	function(element, errorClass) {				
   			$(element).css({border: '1px solid #ff0000'});				
		},	
		unhighlight:	function(element, errorClass) {				
			$(element).css({border: '1px solid #E0E0E0'});	
			if ($(element).attr("name") == 'serDowodu_1' || $(element).attr("name") == 'nrDowodu_1')	
			{
				$("input[name='serDowodu_1']").css({border: '1px solid #E0E0E0'});	
				$("input[name='nrDowodu_1']").css({border: '1px solid #E0E0E0'});	
			}
		},
		groups: {
	    	idcart: "serDowodu_1 nrDowodu_1"
  		},
		rules: {
			pesel: {
				required: true,
				pesel: true
			},
			imie: {
				required: true,
				accept: "[a-zA-Z]+"
			},
			nazwisko: {
				required: true,
				accept: "[a-zA-Z]+"
			},
			kodPocz: {
				required: true,
				postalCode: true
			},
			miasto: {
				required: true
			},
			ulica: {
				required: true
			},
			nrDomu: {
				required: true
			},
			nrMieszkania: {
				required: true
			},
			email: {
				required: true,
				email: true
			},
			telKontakt: {
				required: true,
				number: true,
				rangelength: [9, 9]
			},
			serDowodu_1: {
				required: true,
				rangelength: [3, 3],	
//				idcart: true
			},
			nrDowodu_1: {
				required: true,
				rangelength: [6, 6],
//				idcart: true
			},
			serDowodu_2: {
				required: true,
				rangelength: [2, 2]
			},
			nrDowodu_2: {
				required: true,
				rangelength: [7, 7]
			},
			serDowodu2: {
				required: true
			},
			nrDowodu2: {
				required: true
			},
			zrodloDochodu: {
				required: true
			},
			dochodNetto: {
				required: true,
				accept: "[0-9,.]+"
			},
			liczbaCzlonkowGospDomowego: {
				required: true,
				number: true
			},
			zgoda_1: {
				required: true
			},
			zrodloDochoduDataOd: {
				required: {
					depends: function(element) {
	  					if ($("#zrodloDochodu").val() == '10132221033011' || $("#zrodloDochodu").val() == '40102201022011' || $("#zrodloDochodu").val() == '60132221033011') {
	  						return true;
	  					} else {
	  						return false;
	  					}
	  				}
				},
				myDate: {
					depends: function(element) {
	  					if ($("#zrodloDochodu").val() == '10132221033011' || $("#zrodloDochodu").val() == '40102201022011' || $("#zrodloDochodu").val() == '60132221033011') {
	  						return true;
	  					} else {
	  						return false;
	  					}
	  				}
				}
			},
			zrodloDochoduDataDo: {
				required: false,
				myDate: true
			}
		},
		messages: {
			pesel: {
				required: "Pole jest wymagane"
			},
			imie: {
				required: "Pole jest wymagane",
				accept: "Błędne imię"
			},
			nazwisko: {
				required: "Pole jest wymagane",
				accept: "Błędne nazwisko"
			},
			kodPocz: {
				required: "Pole jest wymagane"
			},
			miasto: {
				required: "Pole jest wymagane"
			},
			ulica: {
				required: "Pole jest wymagane"
			},
			nrDomu: {
				required: "Pole jest wymagane"
			},
			nrMieszkania: {
				required: "Pole jest wymagane"
			},
			email: {
				required: "Pole jest wymagane",
				email: "Błędny adres e-mail"
			},
			telKontakt: {
				required: "Pole jest wymagane",
				number: "Błędny number telefonu",
				rangelength: "Numer musi posiadać 9 cyfr"
			},
			serDowodu_1: {
				required: "Pole jest wymagane",
				rangelength: "Serial wymaga 3 znaków"
			},
			nrDowodu_1: {
				required: "Pole jest wymagane",
				rangelength: "Numer wymaga 6 cyfr"
			},
			serDowodu_2: {
				required: "Pole jest wymagane",
				rangelength: "Serial wymaga 2 znaków"
			},
			nrDowodu_2: {
				required: "Pole jest wymagane",
				rangelength: "Numer wymaga 7 cyfr"
			},
			serDowodu2: {
				required: "Pole jest wymagane"
			},
			nrDowodu2: {
				required: "Pole jest wymagane"
			},
			zrodloDochodu: {
				required: "Pole jest wymagane"
			},
			dochodNetto: {
				required: "Pole jest wymagane",
				accept: "To nie jest liczba"
			},
			liczbaCzlonkowGospDomowego: {
				required: "Pole jest wymagane",
				number: "To nie jest liczba"
			},
			zgoda_1: {
				required: "Pole jest wymagane"
			},
			zrodloDochoduDataOd: {
				required: "Pole jest wymagane"
			}
		}
	});
	
	$.validator.addMethod("accept", function(value, element, param) {
		return value.match(new RegExp("." + param + "$"));
	});

	
	$.validator.addMethod("pesel", function(value, element) {
		var pesel = value.replace(/[\ \-]/gi, ''); 
		if (pesel.length != 11) { 
			return false; 
		} else {
			var steps = new Array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3); 
			var sum_nb = 0;
			for (var x = 0; x < 10; x++) { 
				sum_nb += steps[x] * pesel[x];
			}
			sum_m = 10 - sum_nb % 10;
			
			if (sum_m == 10) { 
				sum_c = 0; 
			} else { 
				sum_c = sum_m;
			}
			
			if (sum_c != pesel[10]) {
				return false;
			}
		}
		return true;	
	}, "Proszę o podanie prawidłowego numeru PESEL");
	
	$.validator.addMethod('postalCode', function (value) {	    
		return /^((\d{2}-\d{3}))$/.test(value);
	}, 'Format kodu: xx-xxx');	
	
	$.validator.addMethod('myDate', function (value) {	  
		if (value!='')
			return /^((\d{4}-\d{2}-\d{2}))$/.test(value);
		else
			return true;	
	}, 'Format daty: RRRR-MM-DD');	
	
	$.validator.addMethod('idcart', function(value) {
		_1 = $("input[name='serDowodu_1']").val();
		_2 = $("input[name='nrDowodu_1']").val();
		_all = _1+_2;
		
		if (_all.length != 9)
			return false;
		
		if (!(/^[a-zA-Z]{3}$/.test(_1)))
			return false;
			
		if (!(/^[0-9]{6}$/.test(_2)))
			return false;	

		checkSum = 7 * getLetterValue(_all[0]);
		checkSum += 3 * getLetterValue(_all[1]);
		checkSum += 1 * getLetterValue(_all[2]);
		checkSum += 7 * getLetterValue(_all[4]);
		checkSum += 3 * getLetterValue(_all[5]);
		checkSum += 1 * getLetterValue(_all[6]);
		checkSum += 7 * getLetterValue(_all[7]);
		checkSum += 3 * getLetterValue(_all[8]);
		checkSum %= 10;
		
		if (checkSum != getLetterValue(_all[3]))
			return false;
		
		return true;
		
	}, 'Błędna seria lub/i numer');
}

function getLetterValue(letter)
{
	letterValues = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	letterValuesLen = 36;

	for (i=0; i<letterValuesLen; i++)
	{
	  if (letter == letterValues[i])
	  {
	     return i;
	  }
	}
	return -1;
}
