/**
 * 
 */

var SForm = Class.create({
	initialize: function(name)
	{
		this.name = name;
		this.bledy = 0;
		this.form = $(name);
		var inputs = this.form.getElementsByTagName('input');
		for(var i=0;i<inputs.length;i++)
		{
			if(inputs[i].type=='file')
			{
				inputs[i].observe('change',this.fileOnChange.bindAsEventListener(this));
			}
			if(inputs[i].hasClassName('change_block'))
			{
				inputs[i].observe('click',this.changeBlock);
			}
		}
		$(name).observe('submit',this.submit.bindAsEventListener(this));
	},
	changeBlock: function(event)
	{
		var element = event.findElement();
		if(!$(element.id+'_div'))
		{
			return false;
		}
		if(element.checked)
		{
			$(element.id+'_div').show();
		}
		else
		{
			$(element.id+'_div').hide();
		}
	},
	serializujRadio: function(div)
	{
		var labels = div.getElementsByTagName('label');
		for(var i=0;i<labels.length;i++)
		{
			var pole = $(labels[i].htmlFor);
			if(pole && pole.getAttribute('type')=='radio' && pole.checked)
			{
				return labels[i].innerHTML.stripTags();
			}
		}
		return '';
	},
	serializujPole: function(label)
	{
		var dane_pole = new Object();
		dane_pole.tytul = label.innerHTML.stripTags();
		dane_pole.nazwa = label.htmlFor;
		dane_pole.typ = 'pole';
		var pole = $(label.htmlFor);
		if(!pole)
		{
			return false;
		}
		var tag = pole.tagName.toLowerCase();
		switch(tag)
		{
			case 'input':
				if(pole.getAttribute('type')=='radio')
				{
					return false;
				}
				else if(pole.getAttribute('type')=='file')
				{
					dane_pole.typ = 'pole_plik';
				}
			case 'select':
			case 'textarea':
				dane_pole.wartosc = $F(label.htmlFor);
				return dane_pole;
				break;
			case 'div':
				dane_pole.wartosc = this.serializujRadio(pole);
				return dane_pole;
				break;
		} 
	},
	serializujSekcja: function(sekcja)
	{
		var dane_sekcja = new Object();
		if(sekcja.getElementsByTagName('h3').length>0)
		{
			dane_sekcja.tytul = sekcja.getElementsByTagName('h3')[0].innerHTML.stripTags();
		}
		else if(sekcja.getElementsByTagName('h4').length>0)
		{
			dane_sekcja.tytul = sekcja.getElementsByTagName('h4')[0].innerHTML.stripTags();
		}
			
		dane_sekcja.typ = 'sekcja';
		var podsekcja = sekcja.getElementsByClassName('podsekcja');
		if(podsekcja.length>0)
		{
			dane_sekcja.podsekcje = new Array();
			for(var i=0;i<podsekcja.length;i++)
			{
				dane_sekcja.podsekcje[i] = this.serializujSekcja(podsekcja[i]);
			}
		}
		else
		{
			dane_sekcja.pola = new Array();
			var j = 0;
			var labels = sekcja.getElementsByTagName('label');
			for(var i=0;i<labels.length;i++)
			{
				var dane_pola = this.serializujPole(labels[i]);
				if(dane_pola)
				{
					var pole = $(labels[i].htmlFor);
					pole.removeClassName('blad');
					if(!dane_pola.wartosc && $(labels[i]).hasClassName('wymagane'))
					{
						this.bledy++;
						pole.addClassName('blad');
					}
					dane_sekcja.pola[j++] = dane_pola;
				}
			}
		}
		return dane_sekcja;
	},
	fileOnChange: function(event)
	{
		var element = event.element();
		this.form.target="file_loader";
		this.form.action='/cgs_free/system/formularz_file_upload.php?file_name='+element.name;
		this.form.submit();
		this.form.action='';
		this.form.target='';
	},
	submit: function(event)
	{
		Event.stop(event);
		
		this.bledy = 0;
		var dane_sekcje = new Array();
		var j = 0;
		
		var sekcje = $$("#"+this.name+" .sekcja");
		for(var i=0;i<sekcje.length;i++)
		{
			if(sekcje[i].visible())
			{
				dane_sekcje[j++] = this.serializujSekcja(sekcje[i]);
			} 
		}

		if(this.bledy==0)
		{
			var captcha = $('captcha') ? '&captcha='+$('captcha').value : '';
			new Ajax.Request(this.form.action,{
				method: 'post',
				parameters: 'wartosci='+dane_sekcje.toJSON()+captcha,
				onSuccess: this.onResponse.bind(this)
			});
		}
		else
		{
			alert('Musisz wypełnić wymagane pola!');
		}
	},
	onResponse: function(transport)
	{
		if(transport.responseText.match(/SFORM_CAPTCHA_ERROR/))
		{
			alert('Nieprawidłowy kod obrazka');
			$('siimage').src = '/securimage/securimage_show.php?sid='+Math.random();
		}
		else
		{
			this.form.parentNode.innerHTML = transport.responseText;
			SForm.Init();
		}
	}
});

Object.extend(SForm,{
	Init: function()
	{
		var forms = $$('.sform');
		for(var i=0;i<forms.length;i++)
		{
			new SForm(forms[i].id);
		}
	}
});

document.observe('dom:loaded',SForm.Init);

