
/**************************************************************

	Script		: Validate
	Version		: 2.1
	Authors		: Samuel Birch
	Desc		: Form validation
	Licence		: Open Source MIT Licence

**************************************************************/
function strlen (string) {
    return (string+'').length;
}




var Validate = new Class({
	
	getOptions: function(){
		return {
			validateOnBlur: true,
			errorClass: 'error',
			errorMsgClass: 'errorMessage',
			dateFormat: 'dd/MM/yy',
			onFail: Class.empty,
			onSuccess: false,
			showErrorsInline: true,
			label: 'Proszę czekać...'
		};
	},

	initialize: function(form, options){
		this.setOptions(this.getOptions(), options);
		
		this.form = $(form);
		this.elements = this.form.getElements('.required');
		
		this.list = [];
		

		
		
		
		this.elements.each(function(el,i){
			if(this.options.validateOnBlur){
				el.addEvent('blur', this.validate.bind(this, el));
			}
		}.bind(this));
		
		this.form.addEvent('submit', function(e){
			var event = new Event(e);
			var doSubmit = true;
	
	var keynum;
	var keychar;
	var numcheck;

	if(window.event) // IE
	  {
  		keynum = event.keyCode;
	  }
	else if(event.which) // Netscape/Firefox/Opera
	  {
  		keynum = event.which;
	  }
	
	  

			
			this.elements.each(function(el,i){
				if(! this.validate(el)){
				  
					event.stop();
					doSubmit = false;
					this.list.include(el);
				}else{
					this.list.remove(el);
				}
			}.bind(this));

if (keynum == 13) {
	///doSubmit = false;
}			
			if(doSubmit==true){
				if(this.options.onSuccess){
					event.stop();
					this.options.onSuccess(this.form);
				}else{
					this.form.getElement('input[type=submit]').setProperty('value',this.options.label);
				}
			}else{
				this.options.onFail(this.getList());
			}
			
		}.bind(this));
		
	},
	
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i){
			if(el.title != ''){
			var li = new Element('li').injectInside(list);
			new Element('label').setProperty('for', el.id).setText(el.title).injectInside(li);
			}
		});
		return list;
	},
	
	validate: function(el){
		var valid = true;
		this.clearMsg(el);
		
		switch(el.type){
		  case 'password':
			case 'text':
			case 'textarea':
			case 'select-one':
				if(el.value != ''){
					if(el.hasClass('email')){
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Proszę wpisać poprawny adres e-mail.');
						}
					}
					
					
					if(el.hasClass('repassword')){
						if(el.value==$('haslo').value){
						  valid = true;
						}else{
						  valid = false;
							this.setMsg(el, 'Hasła nie zgadzają się ze sobą');
						}
					}
					
					if(el.hasClass('required')){
						if(el.value!=''){
						  valid = true;
						}else{
						  valid = false;
							this.setMsg(el, 'Uzupełnij wymagane pola');
						}
					}					
					
					if(el.hasClass('remail')){
						if(el.value==$('email').value){
						  el.addClass('green');
						  valid = true;
						}else{
						  valid = false;
						  el.removeClass('green');
							this.setMsg(el, 'Adresy nie zgadzają się ze sobą');
						}
					}
					
					if(el.hasClass('login')){
					  var dys = this;
						var regNum = /^[A-Za-z0-9_]{4,}$/;
						if(el.value.match(regNum)){
						  //ajaxowe sprawdzenie loginu
						  var myXHR = new XHR({method: 'get', onSuccess: function(odpowiedz){if(odpowiedz==1) {dys.setMsg(el, 'Podany login jest zajęty.'); el.addClass('red');el.removeClass('green'); }else {el.addClass('green');el.removeClass('red');}}}).send('./?c=mdAdministracja-cmWolnyLoginAjax', 'login=' + el.value);
						  //myXHR.onSuccess{alert('gotowe')};
						  
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Login musi składać się conajmniej z 4 znaków, bez polskich liter.');
						}
					}
					
					if(el.hasClass('mail')){
					  var dys = this;
						var myXHR = new XHR({method: 'get', onSuccess: function(odpowiedz){if(odpowiedz==1) {dys.setMsg(el, 'Podany e-mail jest zajęty.'); el.addClass('red');el.removeClass('green'); }else {el.addClass('green');el.removeClass('red');}}}).send('./?c=mdAdministracja-cmWolnyLoginAjax', 'login=' + el.value);
						  //myXHR.onSuccess{alert('gotowe')};
						  
							valid = true;
						}
					
					if(el.hasClass('number')){
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
						if(el.value.match(regNum)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Dopuszczalne są tylko cyfry');
						}
					}
					
					if(el.hasClass('kod_promocyjny')){
						var regNum = /^[A-Za-z0-9]{10}$/;
						if(el.value.match(regNum)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Kod promocyjny musi składać się z 10 znaków');
						}
					}
					
					if(el.hasClass('pierwszaduza')){
						var regNum = /^[A-ZĄĆĘŁŃÓŚŻŹ]{1}[A-ZĄĆĘŁŃÓŚŻŹa-ząćęłńóśżź \-]*$/;
						if(el.value.match(regNum)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Pierwsza litera musi być duża.');
						}
					}
					
					if(el.hasClass('login')){
						var regNum = /^[A-Za-z0-9_]{4,}$/;
						if(el.value.match(regNum)){
						  //ajaxowe sprawdzenie loginu
						  var myXHR = new XHR({method: 'get', onSuccess: function(odpowiedz){if(odpowiedz==1) alert('Podany login jest zajęty!');}}).send('./?c=mdAdministracja-cmWolnyLoginAjax', 'login=' + el.value);
						  //myXHR.onSuccess{alert('gotowe')};
						  
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Login musi składać się conajmniej z 4 znaków, bez polskich liter.');
						}
					}
					 
					
					if(el.hasClass('postcode')){
						///var regPC = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/
						var regPC = /^[0-9]{2}\-[0-9]{3}$/;
						var regPC1 = /^[0-9]{2}[0-9]{3}$/;
						if( (el.value.match(regPC)) || (el.value.match(regPC1)) ){
							if ($('miejscowosc').value == '') {
							$('miejscowosc').readOnly=true;							
							$('miejscowosc').addClass('ajax-loading');
							var myXHR = new XHR({
								method: 'get', 
								onSuccess: function(odpowiedz){
									///alert(odpowiedz);
									if(odpowiedz!='') { 
										
										if ( strlen(odpowiedz) > 2) {										
										$('miejscowosc').removeClass('ajax-loading');
										$('miejscowosc').readOnly=true;
										$('miejscowosc').value=odpowiedz;
									} else if (odpowiedz != '0') {
										
										$('miejscowosc').removeClass('ajax-loading');
										$('wyb_adres').addClass('ajax-loading');
										$('miejscowosc').value='Wybierz miejscowość:';
										$('miejscowosc').readOnly=false;
										$('wyb_adres').style.display='block';
										
										
										var objec = new Ajax("./?c=mdAdministracja-cmKodPocztowyAjax", {
		  								method: 'get',
		  								postBody: 'kod=' + el.value,
		  								update: 'adresy',
		  								evalScripts: true,
		  								onComplete: function()
              								{
										$('wyb_adres').removeClass('ajax-loading');
										$('miejscowosc').readOnly=false;
              								}
      	  
    									}).request();

										
										
										
									} else { $('miejscowosc').removeClass('ajax-loading');$('miejscowosc').value=''; $('miejscowosc').readOnly=false;
									}
										

										} else { $('miejscowosc').removeClass('ajax-loading');$('miejscowosc').value=''; $('miejscowosc').readOnly=false; }
									}
						        }).send('./?c=mdAdministracja-cmKodPocztowyIleAjax', 'kod=' + el.value);
								}
							
							valid = true;
						}else{
							$('miejscowosc').value = '';
							$('miejscowosc').readOnly=false;
							valid = false;
							this.setMsg(el, 'Proszę wpisać poprawny kod pocztowy.');
						}
					}
					
					if(el.hasClass('date')){
						var d = Date.parseExact(el.value, this.options.dateFormat);
						if(d != null){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Proszę wpisać datę w formacie: '+this.options.dateFormat.toLowerCase());
						}
					}
					
				}else{
					valid = false;
					this.setMsg(el);
				}
				break;
				
			case 'checkbox':
				if(!el.checked){
					valid = false;
					this.setMsg(el);
				}else{
					valid = true;
				}
				break;
				
			case 'radio':
				var rad = $A(this.form[el.name]);
				var ok = false;
				rad.each(function(e,i){
					if(e.checked){
						ok = true;
					}
				});
				if(!ok){
					valid = false;
					this.setMsg(rad.getLast(), 'Proszę wybrać opcję.');
				}else{
					valid = true;
					this.clearMsg(rad.getLast());
				}
				break;
				
		}
		return valid;
	},
	
	setMsg: function(el, msg){

		if(msg == undefined){
			msg = el.title;
		}
		if(this.options.showErrorsInline){
			if(el.error == undefined){
				el.error = new Element('span').addClass(this.options.errorMsgClass).setText(msg).injectAfter(el);
			}else{
				el.error.setText(msg);
			}
			el.addClass(this.options.errorClass);
		}
	},
	
	clearMsg: function(el){
		el.removeClass(this.options.errorClass);
		if(el.error != undefined){
			el.error.remove();
			el.error = undefined;
		}
	}
	
});

Validate.implement(new Options);
Validate.implement(new Events);


/*************************************************************/


