$(document).ready(
		function()
		{
			$('#statute').dialog({height: 400, width: 600, zIndex: 80, autoOpen: false});
			$('#viewStatute').click(function(){$('#statute').dialog('open')});
			
			$('.qmark').tooltip({ 
				track: false, 
				delay: 0, 
				showURL: false, 
				showBody: " - ", 
				fade: 250 
			});
			
			/*
			*
			*	Obsługa formularza
			*
			*/
			
			$('#need-invoice').click(
				function(){
					if($(this).attr('checked'))
						$('#invoice').show();
					else
						$('#invoice').hide();
				});
				
			$('#not-all').click(
				function(){
					if($(this).attr('checked'))
						{
							$('.qw').removeAttr('disabled');
							$('#member-options select').change();
						}
					else
						{
							$('.qw').attr('disabled',true);
							$('#members fieldset').find('input, select').removeAttr('disabled');
						}
				});
			
			$('#member-options select').change(
				function(){
					if($('#not-all').attr('checked'))
					{
						$('#members fieldset').each(
							function(){
								$(this).find('input, select').removeAttr('disabled');
								
								if($('#members fieldset').index(this)>($('#member-options select').val()))
									$(this).find('input, select').attr('disabled',true).removeClass('invalid').removeClass('success');
							}
						);
					}
				}
			);
			
			/*
			*
			*	Dodanie reguł walidacji
			*
			*/
			
			$('input[rel=firstname]').addClass('req');
			$('input[rel=lastname]:first').addClass('req');
			$('input[rel=mail]:first').addClass('req');
			$('input[rel=phone]:first').addClass('req');
			$('input[rel=phone]').addClass('phone');
			$('input[rel=nip]').addClass('nip');
			$('input[rel=postcode]').addClass('postcode');
			
			$('#need-invoice').click(
				function(){
					if($(this).attr('checked'))
						$('#invoice input[rel!=nip]').addClass('req');
					else
						$('#invoice input[rel!=nip]').removeClass('req');
				});
				
			$('input').keyup(
				function()
				{
					if($(this).hasClass('req'))
					{
						if($(this).val().length == 0) 
						{
							$(this).removeClass('success');
							$(this).addClass('invalid');
						}
						else
						{
							$(this).addClass('success');
							$(this).removeClass('invalid');
						}
					}
					
					if($(this).hasClass('mail'))
					{
						switchClasses(ValidMail($(this).val()),this);
					}
					
					if($(this).hasClass('postcode'))
					{
						switchClasses(ValidPostcode($(this).val()),this);	
					}
					
					if($(this).hasClass('nip'))
					{
						switchClasses(ValidNIP($(this).val()),this);
					}
					
					if($(this).hasClass('phone'))
					{
						switchClasses(ValidPhone($(this).val()),this);
					}
				}
			);
			
			$('input').change(function(){ $(this).keyup() });
			
			$('#know-from').change(
				function()
				{
					switchClasses(($(this).val()>0),this);
				}
			);
			
			$('.bus_stop').change(
					function()
					{
						switchClasses(($(this).val()>=0),this);
					}
			);
			
			$('form').submit(
				function(){
					$('#formAlert').html('');
					$('input').each(function(){ 
						if(!$(this).attr('disabled'))
							$(this).keyup(); 
					});
					
					$('#know-from').change();
					$('.bus_stop').change();
					
					if(!$('#need-invoice').attr('checked'))
					{
						$('#invoice *').removeClass('invalid');
					}
					
					if($('form .invalid').length > 0)
					{
						$('#formAlert').html('Proszę poprawić pola zaznaczone na czerwono.<ul id="error-list"></ul>');
						$('.invalid').each(function(){
						var label = $(this).prev('label').text();
						label = label.split(':')[0];
						var member = '';
							
							if($(this).parents('fieldset').length > 0)
							{
								if($('fieldset').index($(this).parents('fieldset'))!=($('fieldset').length-1))
									member = ', dla uczestnika nr.'+$('fieldset').index($(this).parents('fieldset'));
								else
									member = ', podając dane do faktury.';
							}
							
							if($(this).hasClass('req'))
							{
								$('#error-list').append('<li>Nie wypełniłeś, lub wypełniłeś błędnie pole <b>'+label+'</b>'+member+'</li>');
							}
							else
							{
								$('#error-list').append('<li>Wypełniłeś błędnie pole <b>'+label+'</b>'+member+'</li>');
							}
						});
						return false;
					}
					
					if(!$('#acc-statute').attr('checked') || !$('#acc-data').attr('checked'))
					{
						alert('Musisz zaakceptować warunki uczestnictwa i wyrazić zgodę na przetwarzanie danych.');
						return false;
					}
					
					$(this).find('input').attr('disabled',false);
					return true;
				}
			);
		}
	);
	
/*
*
* Funkcje walidujące
*
*/
function switchClasses(valid,obj)
{
	if(!valid)
	{
		$(obj).removeClass('success');
		$(obj).addClass('invalid');
	}
	else
	{
		if($(obj).hasClass('req'))
		{
			if(!$(obj).hasClass('invalid')) $(obj).addClass('success');
		}
		else
		{
			$(obj).addClass('success');
			$(obj).removeClass('invalid');
		}
	}
}

function ValidNIP(input_data)
{
	if(input_data.length == 0)
		return true;
	else
	{
		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;
	}
}

function ValidPostcode(input)
{
	if(input.length == 0)
		return true;
	else if ( !input.match( /^[0-9]{2}-[0-9]{3}$/ ))
		return false;
	else
		return true;
}

function ValidPhone(input)
{
	input = input.replace(/-/g,'');
	input = input.replace(/ /g,'');
	input = input.replace(/\+/g,'');
	if(input.length == 9 || input.length == 11 || input.length == 0 || (input.length == 10 && input[0]=='0'))
	return true;
	else
	return false;
}

function ValidMail(input_data)
{
	var valid = /^[0-9a-z]+([\.\-_][0-9a-z]+)*\@[0-9a-z]+([\.\-][0-9a-z]+)*\.(([a-z]{2,4}))$/
	if(!input_data || input_data.match(valid))
		return true;
	else
		return false;
}
