function validate_email(email)
{
	email.toString();
	
	// nazwa uzytkownika
	var ucases	=	"[-a-z0-9!#$%&\'*+/=?^_`{|}~]";
	var user	=	ucases+"+([.]"+ucases+"+)*";
	
	// domena
	var dcases	=	"([a-z0-9]+([-a-z0-9]*[a-z0-9]+)?)";
	var domain	=	"("+dcases+"){1,63}([.]"+dcases+"){1,63}";
	
	var formula = "^"+user+"[@]"+domain+"$";
	var test = email.match(formula);

	if (test == null)	{	return false;	}
	return true;
}

/*
function check_email(email)
{
	if(!validate_email(email))
	else	{	alert("Adres email nie jest poprawny !");	}
}
*/
	// "ab*": oznacza ci1g, w którym 'a' wystepuje przed zero lub wiecej liter 'b' ("a", "ab", "abbb", etc.);
	// "ab+": to samo tylko wystepuje przynajmniej jedno 'b' ("ab", "abbb", etc.);
	// "ab?": 'b' wystepuje raz lub wcale;
	// "a?b+$": mo?liwe wyst1pienie 'a' przed jedn1 lub wiecej 'b'.
	
	// "[ab]": pasuje do ci1gu, który zawiera albo a albo b (to samo co "a|b");
	// "[a-d]": ci1g zawiera znak z przedzia3u od a do d (to samo co "a|b|c|d" oraz "[abcd]");
	// "^[a-zA-Z]": ci1g zaczynaj1cy sie od litery;
	// "[0-9]%": ci1g zawieraj1cy cyfre przed znakiem procenta;
	// ",[a-zA-Z0-9]$": ci1g koncz1cy sie przecinkiem przed znakiem alfanumerycznym.
	// "a(bc){1,5}": jedno do pieciu powtórzen "bc."
	
	// [a-z0-9] - wystepuje ktorys z tych znakow na pierwszej pozycji ( eliminacja -domena.pl )
	// [-a-z0-9]* - wystepuje cos na pozycji 2 w gore ( www.domena-------------x.pl jedst ok )
 	// [a-z0-9] - wystepuje na ostatniej pozycji ( eilinacja "domena-.pl" )

/*
Po pierwsze rzuamy okiem na dwa znaki pe3ni1ce specjaln1 role: '^' i '$' . Okreolaj1 one pocz1tek i koniec danego 3ancucha, jak w poni?szych przyk3adach: 
"^The": pasuje do ka?dego 3ancucha rozpoczynaj1cego sie od "The";
"of despair$": pasuje do ka?dego 3ancucha koncz1cego sie fragmentem "of despair";
"^abc$": to 3ancuch zaczynaj1cy sie i koncz1cy "abc" -- dlatego pasuj1cym 3ancuchem dla tego wyra?enia jest tylko "abc"!
"notice": 3ancuch zawieraj1cy w sobie s3owo "notice".
Jak widaa w ostatnim z powy?szych przyk3adów, jeoli nie u?yjesz wspomnianych dwóch znaków specjalnych, to okreolasz ze wzór mo?e znajdowaa sie w dowolnym miescu przeszukiwanego 3ancucha -- you're not "hooking" it to any of the edges.

Wyró?niamy równie? symbole'*', '+', i '?', które symbolizuj1 czestotliwooa lub liczbe wyst1pien znaku w ci1gu. Oznaczaj1 odpowiednio: "zero lub wiecej", "raz lub wiecej", and "zero lub raz."
A oto przyk3ady:

"ab*": oznacza ci1g, w którym 'a' wystepuje przed zero lub wiecej liter 'b' ("a", "ab", "abbb", etc.);
"ab+": to samo tylko wystepuje przynajmniej jedno 'b' ("ab", "abbb", etc.);
"ab?": 'b' wystepuje raz lub wcale;
"a?b+$": mo?liwe wyst1pienie 'a' przed jedn1 lub wiecej 'b'.

Mo?esz rownie? okreolia dok3adn1 ilooa jak równie? górne i dolne granice ilooci wyst1pien:
"ab{2}": pasuje do ci1gu rozpoczynaj1cego sie od 'a' i maj1cego w dalszej czeoci dok3adnie dwa 'b' ("abb");
"ab{2,}": wystepuj1 przynajmniej dwa 'b' ("abb", "abbbb", etc.);
"ab{3,5}": od trzech do pieciu 'b' ("abbb", "abbbb", or "abbbbb").
Zawsze musisz okreolia doln1 granice przedzia3u (i.e, "{0,2}", not "{,2}"). Jak ju? pewnie zauwa?y3eo, symbole '*', '+', i '?' daj1 ten sam efekt co przy u?yciu ograniczen: "{0,}", "{1,}", i "{0,1}",.


W jezyku php wyró?niamy nastepuj1ce funkcje realizuj1ce operacje na napisach wykorzystuj1c wyra?enia regularne: ereg, eregi, ereg_replace, eregi_replace, split, spliti oraz sql_regcase.

Teraz, aby okreolia grupe znaków, postaw je wewn1trz nawiasów:

"a(bc)*": pasuje do ci1gu, w którym wyst1pi zero lub wiecej powtórzen "bc";
"a(bc){1,5}": jedno do pieciu powtórzen "bc."

Istnieje równie? symbol '|', który odpowiada operatorowi OR:

"hi|hello": pasuje do ci1gu, w którym wystepuje "hi" lub "hello";
"(b|cd)ef": ci1g zawieraj1cy albo "bef" lub "cdef";
"(a|b)*c": ci1g zawieraj1cy sekwencje a's lub b's koncz1cy sie na c;

Znak ('.') zastepuje ka?dy pojedynczy znak:

"a.[0-9]": ci1g zawieraj1cy znak a postawiony przed jednym dowolnym znakiem i cyfr1;
"^.{3}$": ci1g zawieraj1cy dok3adnie trzy znaki.

Nawiasy kwadratowe okreolaj1, które znaki s1 dozwolone na pojedynczej pozycji w stringu:

"[ab]": pasuje do ci1gu, który zawiera albo a albo b (to samo co "a|b");
"[a-d]": ci1g zawiera znak z przedzia3u od a do d (to samo co "a|b|c|d" oraz "[abcd]");
"^[a-zA-Z]": ci1g zaczynaj1cy sie od litery;
"[0-9]%": ci1g zawieraj1cy cyfre przed znakiem procenta;
",[a-zA-Z0-9]$": ci1g koncz1cy sie przecinkiem przed znakiem alfanumerycznym.

Mo?esz równie? wylistowaa znaki których nie chcesz -- u?yj '^' jako pierwszego znaku w nawiasach kwadratowych.

(i.e., "%[^a-zA-Z]%" pasuje do ci1gu który nie zawiera litery miedzy znakami procenta).


*/