function testIle(inp,val,max)
{
	if (is_numeric(val))
	{
		
		if (val > max)
		{
			alert('Podana ilość jest za duża');
			inp.value = '1';
			return false;
			
		
		}
	
	}
	else
	{
		
		return false;
	}
	
	return true;

}

function sendForm()
{

     if ($('f_nazwisko').value == "") {
          alert('Wypełnij pole "Nazwisko"');
          return false;
     }
     if ($('f_telefon').value == "" && $('f_faks').value == "" && $('f_email').value == "") 
     {
          alert('Przynajmniej jeden kontakt zwrotny powinien zostać wypełniony');
          return false;
      }
     if ($('f_uwagi').value == "") 
     {
          alert('Podaj treść wiadomości');
          return false;
      }
     var req = new Request({
			method: 'post',
			url: 'tools.php',
			data: {
                    'do' : 'sendForm',
                    'f_nazwisko' : $('f_nazwisko').value,
                    'f_telefon'  : $('f_telefon').value,
                    'f_faks'     : $('f_faks').value,
                    'f_email'    : $('f_email').value,
                    'f_uwagi'    : $('f_uwagi').value
			
			},
			onRequest: function() { //document.getElementById('f_send').disabled = 'true';
			 },
			onComplete: function(response) { 
			
                    //document.getElementById('formzapytania').innerHTML = '<b>Formularz został wysłany pomyślnie.<br />Dziękujemy';
			
			 }
		}).send();

     return false;

}

function test2Ile(inp,max)
{
	val = document.getElementById(inp).value;
	if (is_numeric(val))
	{
		
		if (val > max)
		{
			alert('Podana ilość jest za duża');
			document.getElementById(inp).value = '1';
			return false;
			
		
		}
	
	}
	else
	{
		
		return false;
	}
	
	return true;

}


function doReg()
{
	$('timie_nazwisko').removeClass('error');
	$('tulica').removeClass('error');
	$('tkod_miasto').removeClass('error');
	$('temail').removeClass('error');
	$('tpassword').removeClass('error');
	var error = 0;
	var jSonRequest = new Request.JSON( {url:"tools.php", 
	
		onComplete: function(response){
   			 try{
   			 		if ($('imie_nazwisko').value == "")
						{
							$('timie_nazwisko').addClass('error');
							error = 1;
							alert('Nie podałeś imienia i nazwiska.');
						} 
   			 		if ($('ulica').value == "") 
						{
							$('tulica').addClass('error');
							error = 1;	
							//alert(error);
							alert('Nie podałeś ulicy.');
						} 
   			 		if ($('kod_miasto').value == "")
						{
							$('tkod_miasto').addClass('error');
							error = 1;
							//alert(error);
							alert('Nie podałeś kodu pocztwoego i miasta.');
						} 
					if (!mailcheck($('email').value))
					{
						error = 1;
						//alert(error);
						alert('Podany email nie jest prawidłowy.');
					
					}
					
					
					if ( response.available == "no") 
					{
						//alert(response.available);
						$('temail').addClass('error');
						error = 1;
						//alert(error);
						alert('Podany email jest już wykorzystany');
					} 
					else
					{
					
						
					}
					if (error == 1) return false;
					$('rejestracja').submit();
						
				} 
				catch (err)
				{
					alert(err);
				}
	}
	}).POST({'do': 'registration_process','uid' : $('email').value});
	
     return false;


}

function testPassword(e)
{
	if (e == "") return false;
	ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";
	for(i=0; i < e.length ;i++){
		if(ok.indexOf(e.charAt(i))<0){ 
			return false;
		}	
	} 
	return true;
}

function mailcheck(e) {
	
	ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";

	for(i=0; i < e.length ;i++){
		if(ok.indexOf(e.charAt(i))<0){ 
			return (false);
		}	
	} 

	if (document.images) {
		re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
		re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
		if (!e.match(re) && e.match(re_two)) {
			return (-1);		
		} 
	}
}

function logMeIn()
{
	var jSonRequest = new Json.Remote("tools.php", 
	{
		onComplete: function(response){
   			 try{
   			 		if (response.exists == "yes")
						{
							$('loginform').submit();
						}			
						else 
						{
							$('loginerror').setHTML('Podane dane logowania są nieprawidłowe. Spróbuj ponownie.');
						}
				} 
				catch (err)
				{
					alert(response.exists);
				}
	}
	}).send({'do': 'logmein','username' : $('lusername').getValue(),'password': $('lpassword').getValue()});
}

function getFaAdres(uid)
{
	var jSonRequest = new Json.Remote("tools.php", 
	{
		onComplete: function(response) {
   			 try{
   			 		$('f_imie_nazwisko').setValue = response.f_imie_nazwisko;
   			 		$('f_ulica_dom').setValue = response.f_ulica_dom;
   			 		$('f_kod_miasto').setValue = response.f_kod_miasto;
   			 		$('f_nip').setValue = response.nip;
				} 
				catch (err)
				{
					alert('blad');
				}
	}
	}).send({'do': 'getFaAdres','uid' : uid});
	
	
}

function getWysAdres(uid)
{
	var jSonRequest = new Json.Remote("tools.php", 
	{
		onComplete: function(response) {
   			 try{
   			 		$('w_imie_nazwisko').setValue = response.w_imie_nazwisko;
   			 		$('w_ulica_dom').setValue = response.w_ulica_dom;
   			 		$('w_kod_miasto').setValue = response.w_kod_miasto;
				} 
				catch (err)
				{
					alert('blad');
				}
	}
	}).send({'do': 'getWysAdres','uid' : uid});
	
	
}

function is_numeric( mixed_var ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: David
    // *     example 1: is_numeric(186.31);
    // *     returns 1: true
    // *     example 2: is_numeric('Kevin van Zonneveld');
    // *     returns 2: false
    // *     example 3: is_numeric('+186.31e2');
    // *     returns 3: true
 
    return !isNaN( mixed_var );
}
/* Validator */

var fValidator = new Class({
	Implements: [Options, Events],
	options: {
		msgContainerTag: "span",
		msgClass: "fValidator-msg",

		styleNeutral: {"background-color": "#ffc", "border-color": "#cc0"},
		styleInvalid: {"background-color": "#fcc", "border-color": "#c00"},
		styleValid: {"background-color": "#cfc", "border-color": "#0c0"},

		language: "en",
		languageConfig: {	
			en: {	required:	"To pole jest wymagane.",
					alpha:		"This field accepts alphabetic characters only.",
					alphanum:	"This field accepts alphanumeric characters only.",
					integer:	"Please enter a valid integer.",
					real:		"Please enter a valid number.",
					date:		"Please enter a valid date (mm/dd/yyyy).",
					dateISO8601:"Please enter a valid date (yyyy-mm-dd).",
					dateEU:		"Please enter a valid date (dd-mm-yyyy).",
					email:		"Podaj prawidłowy adres email.",
					phone:		"Please enter a valid phone.",
					url:		"Please enter a valid url.",
					zip:		"Please enter a valid postal code",
					confirm:	"Podane hasła muszą się zgadzać."
				},
			nl: {	required:	"Dit veld is verplicht.",
					alpha:		"U kunt in dit veld alleen karakters uit het alphabet invoeren.",
					alphanum:	"U kunt in dit veld alleen alphanumerieke karakters invoeren.",
					integer:	"Voer een geheel getal in.",
					real:		"Voer een getal in.",
					date:		"Voer een geldige datum in (mm/dd/yyyy).",
					dateISO8601:"Voer een geldige datum in (yyyy-mm-dd).",
					dateEU:		"Voer een geldige datum in (dd-mm-yyyy).",
					email:		"Voer een geldig emailadres in.",
					phone:		"Voer een geldig telefoonnummer in.",
					url:		"Voer een geldige url in.",
					zip:		"Voer een geldigep postcode in",
					confirm:	"Het bevestigingswachtwoord komt niet overeen met het originele wachtwoord."
				},
			/* Italian and spanish translation by davcaffa */
			it: {	required:	"Questo campo &egrave; obbligatorio.",
					alpha:		"Questo campo accetta solo lettere.",
					alphanum:	"Questo campo accetta solo caratteri alfanumerici.",
					integer:	"Per favore inserisca un valido numero intero.",
					real:		"Per favore inserisca un numero valido.",
					date:		"Per favore inserisca una data in formato valido (mm/gg/aaaa).",
					dateISO8601:"Per favore inserisca una data in formato valido (aaaa-mm-gg).",
					dateEU:		"Per favore inserisca una data in formato valido (mm-gg-aaaa).",
					email:		"Per favore inserisca una email valida.",
					phone:		"Per favore inserisca un telefono valido.",
					url:		"Per favore inserisca un indirizzo internet valido.",
					zip:		"Per favore inserisca un codice postale valido.",
					confirm:	"La password di controllo non &egrave; uguale alla password originale."
				},
			es: {	required:	"Este campo es un campo obligatorio.",
					alpha:		"Este campo acepta solo letteras.",
					alphanum:	"Este campo acepta solo caracteres alfanum&eacute;ricos.",
					integer:	"Este campo acepta solo n&uacute;meros enteros.",
					real:		"Este campo acepta &uacute;nicamente caracteres num&eacute;ricos.",
					date:		"Por favor inserte una fetcha en formato valido (mm/dd/aaaa).",
					dateISO8601:"Por favor inserte una fetcha en formato valido (aaaa-mm-dd).",
					dateEU:		"Por favor inserte una fetcha en formato valido (mm-dd-aaaa).",
					email:		"Por favor inserte un correo electr&oacute;nico valido.",
					phone:		"Por favor inserte un numero de tel&eacute;fono valido.",
					url:		"Por favor inserte una direc&iacute;on de internet valido.",
					zip:		"Por favor inserte un codigo postal valido.",
					confirm:	"La contrase&ntilde;a de controlo no es igual a la contrase&ntilde;a original."
					},
			/* French translation by Stephane */
			fr : { 	required: "Ce champ est obligatoire.", 
					alpha: "Ce champ n'accepte que des caract&egrave;res alphab&eacute;tiques.", 
					alphanum: "Ce champ n'accepte que des caract&egrave;res alpha-num&eacute;riques.", 
					integer: "Veuillez saisir un entier.", 
					real: "Veuillez saisir un nombre.", 
					date: "Veuillez saisir une date valide (mm/dd/yyyy).", 
					dateISO8601:"Veuillez saisir une date valide (yyyy-mm-dd).", 
					dateEU: "Veuillez saisir une date valide (dd-mm-yyyy).", 
					email: "Veuillez saisir un e-mail valide.", 
					phone: "Veuillez saisir un num&eacute;ro de t&eacute;l&eacute;phone valide.", 
					url: "Veuillez saisir une url valide.",
					zip: "Veuillez saisir une code postal valide.",
					confirm: "La confirmation du mot de passe ne correspond pas &agrave; l'original." 
					// You can change "e-mail" to "adresse &eacute;lectronique", or "&eacute;mel" for the french purists (not in use).
					},
			/* German translation by Axel Beck */
			de: { 	required: "Dies ist ein Pflichtfeld.",
					alpha: "Hier sind ausschlie&szlig;lich Buchstaben erlaubt.", 
					alphanum: "Hier sind ausschlie&szlig;lich Buchstaben und Ziffern erlaubt.", 
					integer: "Bitte geben Sie eine g&uuml;ltige ganze Zahl ein.", 
					real: "Bitte geben Sie eine g&uuml;ltige Zahl ein.", 
					date: "Bitte geben Sie ein g&uuml;ltiges Datum ein (MM/TT/JJJJ).", 
					dateISO8601:"Bitte geben Sie ein g&uuml;ltiges Datum ein (JJJJ-MM-TT).", 
					dateEU: "Bitte geben Sie ein g&uuml;ltiges Datum ein (TT-MM-JJJJ).", 
					email: "Bitte geben Sie eine g&uuml;ltige E-Mailadresse ein.", 
					phone: "Bitte geben Sie eine g&uuml;ltige Telefonnummer ein.", 
					url: "Bitte geben Sie einen g&uuml;ltigen URL ein.", 
					zip: "Bitte geben Sie einen g&uuml;ltigen Postcode ein.", 
					confirm: "Die Wiederholung des Passworts stimmt nicht mit dem Original &uuml;berein." 
					},
			/* Swedish translation by Tom Stone (http://tomstone.se) */
			sv: {	required: "Obligatoriskt fĂ¤lt.",
					alpha:  "Endast bokstĂ¤ver godkĂ¤nns.",
					alphanum: "Endast siffror godkĂ¤nns.",
					integer: "Skriv in ett heltal.",
					real:  "Skriv in ett nummer.",
					date:  "Skriv in ett giltigt datum (mm/dd/ĂĽĂĽĂĽĂĽ).",
					dateISO8601:"Skriv in ett giltigt datum (ĂĽĂĽĂĽĂĽ-mm-dd).",
					dateEU:  "Skriv in ett giltigt datum (dd-mm-ĂĽĂĽĂĽĂĽ).",
					email:  "Skriv en giltig emailadress.",
					phone:  "Skriv ett giltigt telefonnummer.",
					url:  "Skriv en giltig webbadress.",
					confirm: "LĂśsenord och BekrĂ¤fta lĂśsenord Ă¤r olika."
					},
			/* Portugese translation by akira_lee */
			pt: { required: "Este campo ĂŠ de preenchimento obrigatĂłrio.",
				  alpha:  "Este campo sĂł aceita caracteres alfanumĂŠricos.",
				  alphanum: "Este campo sĂł aceita caracteres alfanumĂŠricos.",
				  integer: "Digite um nĂşmero inteiro vĂĄlido.",
				  real:  "Digite nĂşmeros vĂĄlidos.",
				  date:  "Digite uma data vĂĄlida (mm/dd/yyyy).",
				  dateISO8601:"Digite uma data vĂĄlida (yyyy-mm-dd).",
				  dateEU:  "Digite uma data vĂĄlida (mm-dd-yyyy).",
				  email:  "Preencha o campo com um e-mail vĂĄlido.",
				  phone:  "Digite um nĂşmero de telefone vĂĄlido.",
				  url:  "Digite um URL vĂĄlido.",
				  confirm: "A Password de confirmaĂ§ĂŁo nĂŁo ĂŠ igual Ă  Password original."
				 }
		},

		required: {type: "required", re: /[^.*]/},
		alpha: {type: "alpha", re: /^[a-z ._-]+$/i},
		alphanum: {type: "alphanum", re: /^[a-z0-9 ._-]+$/i},
		integer: {type: "integer", re: /^[-+]?\d+$/},
		real: {type: "real", re: /^[-+]?\d*\.?\d+$/},
		date: {type: "date", re: /^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$/},
		dateISO8601: {type: "dateISO8601", re: /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/},
		dateEU: {type: "dateEU", re: /^(((([1-9])|([0-2][0-9])|(3[01]))[-]((0[13578])|([13578])|(1[02])))|((([1-9])|([0-2][0-9])|(30))[-]((0[469])|([469])|(11)))|((([1-9])|([0-2][0-9])))[-](2|02))[-]\d{4}$|^\d{4}$/},
		email: {type: "email", re: /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i},
		phone: {type: "phone", re: /^[\d\s ().-]+$/},
		url: {type: "url", re: /^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i},
		confirm: {type: "confirm"},
		zip: {type: "zip", re: /^\d{5}(-\d{4})?$/i},

		onValid: Class.empty,
		onInvalid: Class.empty
	},

	initialize: function(form, options) {
		this.form = $(form);
		this.setOptions(options);

		this.fields = this.form.getElements("*[class^=fValidate]");
		this.validations = [];

		this.fields.each(function(element) {
			if(!this._isChildType(element)) element.setStyles(this.options.styleNeutral);
			element.cbErr = 0;
			var classes = element.getProperty("class").split(' ');
			classes.each(function(klass) {
				if(klass.match(/^fValidate(\[.+\])$/)) {
					var aFilters = eval(klass.match(/^fValidate(\[.+\])$/)[1]);
					for(var i = 0; i < aFilters.length; i++) {
						if(this.options[aFilters[i]]) this.register(element, this.options[aFilters[i]]);
						if(aFilters[i].charAt(0) == '=') this.register(element, $extend(this.options.confirm, {idField: aFilters[i].substr(1)}));
					}
				}
			}.bind(this));
		}.bind(this));

		this.form.addEvents({
			"submit": this._onSubmit.bind(this),
			"reset": this._onReset.bind(this)
		});
	},

	register: function(field, options) {
		field = $(field);
		this.validations.push([field, options]);
		field.addEvent("blur", function() {
			this._validate(field, options);
		}.bind(this));
	},

	_isChildType: function(el) {
		var elType = el.type.toLowerCase();
		if((elType == "radio") || (elType == "checkbox")) return true;
		return false;
	},

	_validate: function(field, options) {
		switch(options.type) {
			case "confirm":
				if($(options.idField).get('value') == field.get('value')) this._msgRemove(field, options);
				else this._msgInject(field, options);
				break;
			default:
				if(options.re.test(field.get('value'))) this._msgRemove(field, options);
				else this._msgInject(field, options);
		}
	},

	_validateChild: function(child, options) {
		var nlButtonGroup = this.form[child.getProperty("name")];
		var cbCheckeds = 0;
		var isValid = true;
 		for(var i = 0; i < nlButtonGroup.length; i++) {
			if(nlButtonGroup[i].checked) {
				cbCheckeds++;
				if(!options.re.test(nlButtonGroup[i].get('value'))) {
					isValid = false;
					break;
				}
			}
		}
		if(cbCheckeds == 0 && options.type == "required") isValid = false;
		if(isValid) this._msgRemove(child, options);
		else this._msgInject(child, options);
	},

	_msgInject: function(owner, options) {
		if(!$(owner.getProperty("id") + options.type +"_msg")) {
			var msgContainer = new Element(this.options.msgContainerTag, {"id": owner.get("id") + options.type +"_msg", "class": this.options.msgClass})
				.set('html', this.options.languageConfig[this.options.language][options.type])
				.setStyle("opacity", 0)
				.injectAfter(owner);
			var myFx = new Fx.Tween(msgContainer, {
					duration: 500,
					transition: Fx.Transitions.linear					
				}).start('opacity', 0, 1);
			owner.cbErr++;
			this._chkStatus(owner, options);
		}
	},

	_msgRemove: function(owner, options, isReset) {
		isReset = isReset || false;
		if($(owner.getProperty("id") + options.type +"_msg")) {
			var el = $(owner.getProperty("id") + options.type +"_msg");
			var myFx = new Fx.Tween(el, {
					duration: 500,
					transition: Fx.Transitions.linear,
					onComplete: function() {el.destroy()}
				}).start('opacity', 1, 0);
			if(!isReset) {
				owner.cbErr--;
				this._chkStatus(owner, options);
			}
		}
	},

	_chkStatus: function(field, options) {
		if(field.cbErr == 0) {
			var myFx = new Fx.Morph(field, {
					duration: 500,
					transition: Fx.Transitions.linear					
				}).start(this.options.styleValid);			
			this.fireEvent("onValid", [field, options], 50);
		} else {
			var myFx = new Fx.Morph(field, {
					duration: 500,
					transition: Fx.Transitions.linear					
				}).start(this.options.styleInvalid);			
			this.fireEvent("onInvalid", [field, options], 50);
		}
	},

	_onSubmit: function(event) {
		var event = new Event(event);
		var isValid = true;

		this.validations.each(function(array) {
			if(this._isChildType(array[0])) this._validateChild(array[0], array[1]);
			else this._validate(array[0], array[1]);
			if(array[0].cbErr > 0) isValid = false;
		}.bind(this));

		if(!isValid) event.stop();
		return isValid;
	},

	_onReset: function() {
		this.validations.each(function(array) {
			if(!this._isChildType(array[0])) array[0].setStyles(this.options.styleNeutral);
			array[0].cbErr = 0;
			this._msgRemove(array[0], array[1], true);
		}.bind(this));
	}
});