/* 

  * o------------------------------------------------------------------------------o
  * | Biblioteki te zostały dołączone do oprogramowania tej strony na licencji     | 
  * | IT4Business i bez pisemnej zgody IT4Business nie mogą zostać użyte na        |
  * | żadnej innej stronie oraz w żadnej innej aplikacji. Po więcej szczegółów     |
  * | zapraszmy pod adres:                                                         |
  * |                                                                              |
  * |       http://it4business.pl/license.txt                                      |
  * |                                                                              |
  * o------------------------------------------------------------------------------o
  * 
  * o------------------------------------------------------------------------------o
  * | This package is licensed under the IT4Business license. A quick summary is   |
  * | that it is attached to this site as library and can not be used on other     |
  * | sites or application without permission of IT4Business. For more details     |
  * | please look at:                                                              |
  * |                                                                              |
  * |       http://it4business.pl/license.txt                                      |
  * |                                                                              |
  * o------------------------------------------------------------------------------o
  *
  * © Copyright IT4Business

*/

/* @ignore */
var stopAtFirstError = true;
/* @ignore */
var scrollToField = true;

/* Walidator formularzy. Wystarczy wywolac ta funkcje, aby uruchomic walidacje
 * wybranego formularza przed wysylka.
 *
 * Aby walidacja dzialal nalezy kazdy z elementow typu input lub textbox 
 * uzupelnic o tag validate='typ' gdzie typ to jeden z ciagow:
 * 	s - string
 *	n - numer
 *  e - email
 *  c - checkbox
 *
 * @param form string selektor jQuery (np. "#form_kontakt")
 * @param errorStops bool opcjonalny przelacznik czy skrypt ma sie zatrzymywac po kazdym bledzie
 * @param scroll bool opcjonalny przelacznik czy skrypt ma przewijac strone do pola z bledem
 * @param errorFunction function opcjonalna funkcja obslugi bledow
*/
function formValidator(form, errorStops, scroll, errorFunction, preValidateFunction)
{	
		// nie podano nazwy funkcjo do błedów? weź standardową
		if(typeof(errorFunction) != "undefined")
			formValidatorError = errorFunction;
		else
			formValidatorError = formValidatorErrorFunction;
		
		// nie podano nazwy funkcjo do błedów? weź standardową
		if(typeof(preValidateFunction) != "undefined")
			formValidatorPreValidate = preValidateFunction;
		else
			formValidatorPreValidate = formPreValidateFunction;
			
		// zatrzymujemy po kazdym bledzie?
		if(typeof(errorStops) != "undefined")
			stopAtFirstError = errorStops;
		
		// zatrzymujemy po kazdym bledzie?
		if(typeof(errorStops) != "undefined")
			stopAtFirstError = errorStops;
			
		// przewijamy do pola?
		if(typeof(scroll) != "undefined")
			scrollToField = scroll;
			
		// pobierz wszystkie formularze
		$(form).submit(function(event)	{
			var allFieldsOk=true;
			
			formValidatorPreValidate($(this));
			
			// waliduj po kolei pola input i textarea
			$(this).find('input,textarea').each(function() {
					// jeśli zdefinjowany mamy tag - waliduj
					if(typeof($(this).attr('validate')) != 'undefined')
					{
						allFieldsOk = allFieldsOk & formValidatorValidateField($(this));
						if(stopAtFirstError && !ok)
							return false;
					}
			});
			
			if(allFieldsOk)
				return true;
			else
				return false;
		});
};

/* Zwraca czy w formularzu znajduja sie bledy
 * @param form string selektor jQuery (np. "#form_kontakt")
*/
function formValidatorHasErrors(form)
{
	var allFieldsOk=true;
	
	// waliduj po kolei pola input i textarea
	$(form).find('input,textarea').each(function() {
			// jeśli zdefinjowany mamy tag - waliduj
			if(typeof($(this).attr('validate')) != 'undefined')
			{
				allFieldsOk = allFieldsOk & formValidatorValidateField($(this));
				if(stopAtFirstError && !ok)
					return false;
			}
	});

	if(allFieldsOk)
		return false;
	else
		return true;
}

/* Funkcja wywolywana przed walidacja
 * @param form string selektor jQuery (np. "#form_kontakt")
*/
function formPreValidateFunction(form)
{
	
}

/* Prosta, przykladowa funkcja obslugi bledow wyswietlajaca wylacznie wiadomosc
 * @param element object objekt jQuery na ktorym wystapil blad
 */
function formValidatorErrorFunction(element)
{
	alert(element.attr('message'));
}

/* Funkcja scrollujaca zawartosc okna do elementu
 * @param element object objekt jQuery na ktorym wystapil blad
 */
function formValidatorScrollFunction(element)
{
	if(!scrollToField)
		return;
		
	var pos = element.position().top;
	$('html, body').animate({scrollTop:pos}, 800);
}

/* Funkcja walidująca pole 
 * element object uchwyt do obiektu jQuery
*/
function formValidatorValidateField(element)
{
	
	// rodzaj pola
	var kind = element.attr('validate');

	// nie mamy wprowadzonej wartosci dla tego elementu
	if(element.val()=='undefined' || element.val()=='' || element.val()==null || element.val()==element.attr('orgValue'))
	{
			var width = element.width();
			var top = element.attr('poz');
			
			formValidatorError(element);
			formValidatorScrollFunction(element);
			return false;
	}
	
	// sprawdź dla róznych wartości pól
	switch(kind)
	{				
		// string
		case 's':
		{
				pattern = /^[a-zA-ZążśźęćńółĄŻŚŹĘĆŃÓŁ,-,.,0-9\s^\/\/\?$]{2,}$/;
				seq = element.val();
				//if(pattern.test(seq)==false)
				if(seq.length < 3)
				{
					formValidatorError(element);
					formValidatorScrollFunction(element);
					return false;
				}
				break;
		}
		// liczba
		case 'n':
		{
				pattern = /^[\d\s-+]+$/;
				seq = element.val();
				if(pattern.test(seq)==false)
				{
					formValidatorError(element);
					formValidatorScrollFunction(element);
					return false;
				}
				break;
		}
		// e-mail
		case 'e':
		{
				pattern = /^[0-9a-z_.-]+@+[0-9a-z.-]+\.[a-z]{2,3}$/i;
				seq = element.val();
				if(pattern.test(seq)==false)
				{
					formValidatorError(element);
					formValidatorScrollFunction(element);
					return false;
				}
				break;
		}
		// checkbox
		case 'c':
		{
				if(element.attr("checked") != "checked")
				{
					formValidatorError(element);
					formValidatorScrollFunction(element);
					return false;
				}
				break;
		}
	}
	
	return true;
};
