var siteURL = window.location.href.slice(0, window.location.href.lastIndexOf('/'));

(function() {

var gfxhelp;
if (window.gfxhelp) gfxhelp=window.gfxhelp;
else gfxhelp="/gfx/cms_img/ico_pytajnik_small.png"

function trim(a) {
	return a.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

function parse_class(cl)
{
	if (!cl) return null;
	var ctab=new Array();
	var s,v,n1,s2;
	cl=cl.replace(/\s+/g,' ');
	for (;;) {
		cl=cl.replace(/^\s+/,'');
		if (!cl) break;
		n1=cl.indexOf('[');
		n2=cl.indexOf(' ');
		if (n1<0 && n2<0) {
			ctab.push([cl,'true']);
			break;
		}
		if ((n2>=0 && n2<n1) || (n1<0 && n2>0)) {
			s=cl.substr(0,n2);
			cl=cl.substr(n2+1);
			ctab.push([s,'true']);
			continue;
		}
		s=cl.substr(0,n1);
		cl=cl.substr(n1+1);
		n2=cl.indexOf(']');
		if (n2<0) break;
		v=cl.substr(0,n2);
		cl=cl.substr(n2+1);
		if (!v) v='none';
		ctab.push([s,v]);
	}
	
	if (!ctab.length) return null;
	return ctab;
}

function class_value(cl,arg)
{
	if (!cl) return null;
	var i;
	for (i=0;i<cl.length;i++) if (cl[i][0]==arg) return cl[i][1];
	return null;
}

function get_pair(str)
{
	var re=str.match(/^([0-9]+)-([0-9]+)$/);
	if (!re) return false;
	return [re[1]-'0',re[2]-'0'];
}


var validators=[
	['server',function(val,elm,cont) {
		var dt=class_value(elm.classArray,'data');
		if (!dt) return true;
		var url=class_value(elm.classArray,'url');
		if (!dt) return true;
		dt=dt+encodeURIComponent(val);
		var re=syncJSONRequest(url,dt)
		if (re.indexOf('true')==0) return true;
		return false;

	}],
	['external',function(val,elm,cont) {
			return eval(cont)(val,elm);
	}],
	['kod',function(val,elm,cont) {
		if (val.search(/^[0-9]{2}-[0-9]{3}$/)==0) return true;
		if (val.search(/^[0-9]{5}$/)==0) {
			elm.value=val.substr(0,2)+'-'+val.substr(2)
			return true;
		}
		return false;
	}],
	['equal',function(val,elm,cont) {
		var el=document.getElementById(cont);
		if (!el) return false;
		var v=trim(el.value);
		return v == val;
	}],
	['username',function(val,elm,cont) {
		var minlen=3;
		var v=get_pair(cont);
		if (v) {
			var minv;
			minv=v[0];
			}
			if (val.length < minlen) return false;
			return true;
	}],	
	['password',function(val,elm,cont) {
		var minlen=5;
		var v=get_pair(cont);
		if (v) {
			var minv;
			minv=v[0];
			}
		if (val.length < minlen) return false;
			return true;
	}],
	['email',function(val,elm,cont) {
		if (val.search(/^[-a-z0-9._]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z][a-z]+$/i)<0) return false;
		return true;
	}],
	['nip',function(val,elm,cont) {
		var verificator_nip=[6,5,7,2,3,4,5,6,7];
		val=val.replace(/ /g,'');
		val=val.replace(/-/g,'');
		
		if (val.search(/[0-9]{10}/i)<0) return false;
		
		var i,n;
		for (i=n=0;i<9;i++) n+=val.charAt(i)*verificator_nip[i];
		n%=11;
		return ( n == val.charAt(9));
		return false;
	}],
	/*['text',function(val,elm,cont) {
		var v=get_pair(cont);
		if (v) {
			var minv,maxv;
			minv=v[0];
			maxv=v[1];

			if (val.length <minv || val.length > maxv) return false;
			return true;
		}
		if (!val) return false;
		return true;
	}],*/
	/*Funkcje walidacji by Artur Gruszka*/
	['text',function(val,elm,cont) {
		var minlen=3;
		var v=get_pair(cont);
		if (v) {
			var minv;
			minv=v[0];
			}
			if (val.length < minlen) return false;
			return true;
	}],
	['text_text', function(val,elm,cont){
		var minlen=3;
		var v=get_pair(cont);
		if (v) {
			minlen=v[0];
		}
		if (val.length < minlen) return false;
		if (val.search(/^([a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+)$/)<0) return false;
		return true;
	}],
	['numbers', function(val,elm,cont){
		var minlen=9;
		var v=get_pair(cont);
		if (v) {
			var minv;
			minv=v[0];
			}
		if (val.length < minlen) return false;
		return true;
	}],
	['numbers2', function(val,elm,cont){
		var minlen=9;
		var v=get_pair(cont);
		if (v) {
			var minv;
			minv=v[0];
			}
			if (val.length < minlen) return false;
			return true;
	}],
	['adres', function(val,elm,cont){
		var minlen=1;
		var v=get_pair(cont);
		if (v) {
			var minv;
			minv=v[0];
			}
		if (val.length < minlen) return false;
			return true;
	}]];


function validate_field(elem)
{
	if (!elem.classArray) return;
	var val=trim(elem.value);
	if (!val && class_value(elem,'optional')) return true;
	var i,fun,f;
	for (i=0;i<validators.length;i++) {
		f=class_value(elem.classArray,validators[i][0]);
		if (f) return validators[i][1](val,elem,f);
	}
	return true;
}

function add_class(elem,cls)
{
	if (!elem.className) {
		elem.className=cls;
		return;
	}
	var clist=elem.className.split(' ');
	var i;
	for (i=0;i<clist.length;i++) if (clist[i]==cls) return;
	clist.push(cls)
	elem.className=clist.join(' ');
}

function rem_class(elem,cls)
{
	if (!elem.className) {
		return;
	}
	var clist=elem.className.split(' ');
	var i;
	for (i=clist.length-1;i>=0;i--) if (clist[i]==cls) {
		clist.splice(i,1);
	}
	elem.className=clist.join(' ');
}

function find_li(field)
{
	var li,el;
	for (el=field.parentNode;el && el.nodeName.toLowerCase() != 'form'; el=el.parentNode) {
		if (el.nodeName.toLowerCase() == 'li') {
			li=el;
			if (el.className && el.className.indexOf('final')>=0) break;
		}
	}
	return li;
}

function focus_radio(elem)
{
	var li=find_li(elem);
	if (li) add_class(li,'focus');
}
function unfocus_radio(elem)
{
	var li=find_li(elem);
	if (li) rem_class(li,'focus');
}

function focus_elem(elem)
{
	var li=find_li(elem);
	if (li) add_class(li,'focus');
	if (elem.className.indexOf('autofocus')>=0) {
		if (elem.value == elem.defaultValue) elem.value=''
	}
}

function replace_alt(li,valid)
{
	var divlist=li.getElementsByTagName('div');
	var i,div;
	for (i=0;i<divlist.length;i++) if (divlist[i].className.indexOf('help')>=0) {
		div=divlist[i];
		break;
	}
	if (!div) return;
	var img=div.getElementsByTagName('img')[0];
	if (!img) return;
	if (!img.stdalt || !img.erralt) return;
	img.alt=valid?img.stdalt:img.erralt;

}

function unfocus_elem(elem,fromlist)
{
	var li=find_li(elem);
	var erron=0;
	if (li) {
		if (!fromlist) rem_class(li,'focus');
		if (validate_field(elem)) {
			rem_class(li,'invalid');
			add_class(li,'valid');
			replace_alt(li,true);
		}
		else {
			add_class(li,'invalid');
			rem_class(li,'valid');
			replace_alt(li,false);
			erron=1;
		}
	}
	if (!fromlist && elem.className.indexOf('autofocus')>=0) {
		if (elem.value == '') elem.value=elem.defaultValue;
	}
	if (fromlist) return erron;
}

function unfocus_date(elem,li,fromlist)
{
	var erron=0;
	if (!li) li=find_li(elem);
	if (!li) return;
	date_CorrectHinput(elem.result);
	//if (validate_field(elem)) {
	if (true) {
		rem_class(li,'invalid');
		add_class(li,'valid');
	}
	else {
		add_class(li,'invalid');
		rem_class(li,'valid');
		erron=1;
	}
	if (fromlist) return erron;
}


function script_date(elem)
{
	elem.onfocus=function()
	{
		var li=find_li(elem);
		if (li) {
			add_class(li,'focus');
			li.has_focus=true;
		}
	}
	elem.onblur=function()
	{
		var li=find_li(elem);
		if (!li) return;
		li.has_focus=false;
		rem_class(li,'focus');
		setTimeout(function() {
			if (!li.has_focus) unfocus_date(elem,li);
		},200);
	}
	
}


function script_input(field)
{
	field.onfocus=function() {
		focus_elem(field);
	}
	field.onblur=function() {
		unfocus_elem(field);
	}
	if (field.className.indexOf('online')>=0) {
		field.onkeyup=
		field.omnouseup=function() {
			unfocus_elem(field,true);
		}
	}
}

function script_radio(field)
{
	field.onfocus=function() {
		focus_radio(field);
	}
	field.onblur=function() {
		unfocus_radio(field);
	}
	field.onclick=function() {
		var li;
		if (field.type == 'radio') {
			li=find_li(field);
			if (li) rem_class(li,"invalid");
		}
		else if (field.type == 'checkbox') {
			if (field.className && field.className.indexOf('required')>=0 && field.checked) {
				li=find_li(field);
				if (li) rem_class(li,"invalid");
			}     
		}
		if (field.form.has_depends) make_depend(field.form);
	}
}

function script_sel(field)
{
	field.onfocus=function() {
		focus_radio(field);
	}
	field.onblur=function() {
		unfocus_radio(field);
	}
	var fun=field.onchange;
	var fun2=function() {
			if (field.form.has_depends) make_depend(field.form);
		}
	field.onclick=fun2;
	field.onchange=function() {
		fun2();
		if (fun) fun();
	}
}
function script_button(field)
{
	field.onfocus=function() {
		focus_radio(field);
	}
	field.onblur=function() {
		unfocus_radio(field);
	}
}
function get_inner_text(elem)
{
	var str='';
	function get_text(el)
	{
		for(el=el.firstChild;el;el=el.nextSibling) {
			if (el.nodeType == 3) {
				str+=' '+el.nodeValue;
			}
			else if (el.nodeType == 1) {
				get_text(el);
			}
		}
	}
	get_text(elem);
	return str;
}

function find_error_message(elem)
{
	var li=find_li(elem);
	if (!li) return 'Errorus';
	var divs=li.getElementsByTagName('div');
	var i;
	for (i=0;i<divs.length;i++) {
		if (divs[i].className.indexOf('error')>=0) {
			return get_inner_text(divs[i]);
		}
	}
	return 'Wystąpił błąd formularza. Prosimy sprawdzić czy wszystkie wymagane pola są uzupełnione.';
}
	
function parse_date(v)
{
	var e=v.match(/^([0-9]+)\-([0-9]+)\-([0-9]+)$/);
	if (!e) return null;	
	var dayPrefix = "";
	var monthPrefix = "";
	if (parseInt(e[1],10) < 10)
	{
		dayPrefix = "0";
	}
	if (parseInt(e[2],10) < 10)
	{
		monthPrefix = "0";
	}
	
	return [dayPrefix.concat(parseInt(e[1],10)), monthPrefix.concat(parseInt(e[2],10)), parseInt(e[3],10)];
	
}

function today_array()
{
	var d = new Date();
	var dayPrefix = "";
	var monthPrefix = "";
	if (d.getDate() < 10)
	{
		dayPrefix = "0";
	}
	if (d.getMonth() < 10)
	{
		monthPrefix = "0";
	}
	return [dayPrefix.concat(d.getDate()), monthPrefix.concat(d.getMonth() + 1), d.getFullYear()]
}

function select_SetVal(sel,val)
{
	var i,idx;
	idx=0;
	for (i=0;i<sel.options.length;i++) if (sel.options[i].value == val) {
		idx=i;
		break;
	}
	sel.selectedIndex=idx;
}

function date_CorrectHinput(div)
{
	function pp(a)
	{
		a=a.options[a.selectedIndex].value;
		if (a<10) return '0'+a;
		return a;
	}
	div.hinput.value=pp(div.dateday)+'-'+pp(div.datemonth)+'-'+pp(div.dateyear);
}

function date_SetValueFromArr(div,arr)
{
	select_SetVal(div.dateday,arr[0]);
	select_SetVal(div.datemonth,arr[1]);
	select_SetVal(div.dateyear,arr[2]);
}

function add_calendar(monsy)
{
    var A_CALTPL = {
		"months" : monsy,
		"weekdays" : ["Ni", "Pn", "Wt", "&#346;r", "Cz", "Pt", "So"],
		"yearscroll": true,
		"weekstart": 0,
		"centyear"  : 70,
		"imgpath" : siteURL + "/../../gfx/"
	};
	new tcal ({"controlname": "domains_date"}, A_CALTPL);
}

function create_datepicker(el)
{
	var monsy=[
		['pol',["Sty","Lut","Mar","Kwi",
		"Maj","Cze","Lip","Sie",
		"Wrz","Paz","Lis","Gru"]],
		['polish',["Stycze&#324;","Luty","Marzec","Kwiecie&#324;",
		"Maj","Czerwiec","Lipiec","Sierpie&#324;",
		"Wrzesie&#324;","Pa&#378;dziernik","Listopad","Grudzie&#324;"]],
		['english',["January","February","March","April","May",
		"June","July","August","September","October","November",
		"December"]],
		['eng',["Jan","Feb","Mar","Apr","May",
		"Jun","Jul","Aug","Sep","Oct","Nov",
		"Dec"]],
		['roman',["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII"]],
		['num',['01','02','03','04','05','06','07','08','09','10','11','12']]];
	var date = today_array().join('-');
	if (parse_date(el.value))
	{
		date = parse_date(el.value).join('-');
	}
	if (window.opera)
	{
		//No to w dechê - nie mam prawie nic do roboty
		//alert("Opera");
		el.value = date;
	}
	else
	{
		//No to popracujemy
		//alert("Nie Opera");
		var div=document.createElement('div');	
		div.classArray=el.classArray;
		el.parentNode.replaceChild(div,el);	
		var str = '<input type="text" class="date" name="' + el.name + '" id="'+el.id+'" value="' + date + '"/>';
		div.innerHTML=str;
		document.getElementById(el.id).classArray = parse_class(document.getElementById(el.id).className);
		add_calendar(monsy[1][1]);
	}
}

var has_clicker;
var has_submit;
var depends;
function walk_form(el)
{
	//alert(el.nodeName);
	for (el=el.firstChild;el;el=el.nextSibling) if (el.nodeType == 1) {
		el.classArray=parse_class(el.className);
		//if (el.nodeName.toLowerCase()=='input' && el.classArray) alert(el.classArray.toSource());
		var dep=class_value(el.classArray,'depends');
		//alert(dep);
		if (dep) {
			dep=dep.split('=');
			//alert(dep.toSource());
			if (dep.length == 2) {
				el.depends=dep;
				depends=true;
			}
		}
		var nn=el.nodeName.toLowerCase();
		if (nn=='input') {
			//alert(el.classArray);
			if (class_value(el.classArray,'date')) {
				create_datepicker(el);
				continue;
			}
			//alert(el.type);
			if (el.type=='text' || el.type=='password') {
				script_input(el);
				continue;
			}
			if (el.type == 'radio' || el.type == 'checkbox') {
				script_radio(el);
				continue;
			}
			if (el.type=='submit' || el.type=="image") {
				has_submit=true;
				script_button(el);
				continue;
			}
			if (el.type=='button') {
				script_button(el);
				if (class_value(el.classArray,'submiter')) has_clicker=el;
				continue;
			}
			continue;
		}
		if (nn=='select') {
			script_sel(el);
			continue;
		}
		if (nn=='textarea') {
			script_input(el);
			continue;
		}
		walk_form(el);
	}
}

function do_depend(elem,mode)
{
	var inplist,i;
	if (mode) rem_class(elem,'invisible');
	else add_class(elem,'invisible');
	inplist=elem.getElementsByTagName('input');
	for (i=0;i<inplist.length;i++) inplist[i].disabled=!mode;
	inplist=elem.getElementsByTagName('select');
	for (i=0;i<inplist.length;i++) inplist[i].disabled=!mode;
	inplist=elem.getElementsByTagName('textarea');
	for (i=0;i<inplist.length;i++) inplist[i].disabled=!mode;
}

function is_depend(form,name,value)
{
	var n=0;
	function walk_dep(el)
	{
		var nn=el.nodeName.toLowerCase();
		if (nn=='input') {
			if (el.type!="radio" && el.type!="checkbox") return;
			if (!el.checked) return;
			var nm=el.name.replace(/[\[\]]+$/g,'');
			if (nm!=name) return;
			if ((value == '*' && el.value != '') || el.value == value) n=1;
			return;
		}
		if (nn=='select') {
			if (el.name != name) return;
			var si=el.selectedIndex;
			n=-1;
			if (si>=0 && (el.options[si].value == value ||
			   (value == '*' && el.options[si].value!=""))) n=1;
			return;
		}
		for (el=el.firstChild;el;el=el.nextSibling) {
			walk_dep(el);
			if (n) return;
		}
	}
	walk_dep(form);
	if (n>0) return true;
	return false;
}

function make_depend(form)
{
	function walk_depend(el)
	{
		if (el.depends) {
			var is_active=is_depend(form,el.depends[0],el.depends[1]);
			do_depend(el,is_active);
			if (!is_active) return;
		}
		for (el=el.firstChild;el;el=el.nextSibling) if (el.nodeType==1) {
			walk_depend(el);
		}
	}
	walk_depend(form);
}


function getNodeString(node)
{
	var str='';
	function gns(n)
	{
		if (n.nodeType == 3) {
			str+=' '+n.nodeValue;
			return;
		}
		for (n=n.firstChild;n;n=n.nextSibling) gns(n);
	}
	gns(node);
	return str;
}

function script_help(div)
{
	var d=document.createElement('div');
	div.parentNode.replaceChild(d,div);
	var img=document.createElement('img');
	img.src=gfxhelp;
	img.setAttribute('tabIndex','0');
	img.setAttribute('alt',getNodeString(div));
	img.className='gfxhelp'
	//var img=document.createElement('span');
	//img.innerHTML='<img src="'+gfxhelp+'" tabindex="0" class="gfxhelp">';
	//img=img.firstChild;
	d.appendChild(img);
	d.className='autohelp close'
	d.appendChild(div);
	var li=find_li(d);
	if (li) {
		var dlist=li.getElementsByTagName('div');
		var dl,ix;
		for (ix=0;ix<dlist.length;ix++) if (dlist[ix].className.indexOf('error')>=0) {
			dl=dlist[ix];
			break;
		}
		if (dl) {
			img.stdalt=getNodeString(div);
			img.erralt=getNodeString(dl);
		}
	}
	function swap_img(dv)
	{
		if (dv.className.indexOf('open')>=0) {
			add_class(dv,'close');
			rem_class(dv,'open');
		}
		else {
			rem_class(dv,'close');
			add_class(dv,'open');
		}
	}
	img.onclick=function() {
		swap_img(d);
	}
	img.onfocus=function() {
		var li=find_li(img);
		if (li) add_class(li,'focus');
	}
	img.onblur=function() {
		var li=find_li(img);
		if (li) rem_class(li,'focus');
	}
	if (window.opera) img.onkeypress=function(ev) {
		if (ev.keyCode == 13 || ev.keyCode == 10) {
			swap_img(d);
			if (ev.stopPropagation) ev.stopPropagation();
			if (ev.preventDefault) ev.preventDefault();
			return false;
		}
	}
	else img.onkeydown=function(ev) {
		ev=ev || window.event;
		if (ev.keyCode == 13 || ev.keyCode == 10) {
			swap_img(d);
			if (ev.stopPropagation) ev.stopPropagation();
			if (ev.preventDefault) ev.preventDefault();
			try {
				if (ev.cancelBubble) ev.cancelBubble();
			}
			catch(e) {
			}
			return false;
		}
	}
}


function script_form(form)
{
	if (form.className.search('plain')>=0) return;
	has_clicker=false;
	has_submit=false;
	depends=false;
	walk_form(form);
	form.has_depends=depends;
	if (has_submit) {
		form.onsubmit=function() {
			return validate_form(form);
		}
	}
	else if (has_clicker) {
		var fun=has_clicker.onclick;
		has_clicker.onclick=function() {
			if (!validate_form(form)) return;
			if (fun) fun();
		}
	}
	if (gfxhelp) {
		var divlist=form.getElementsByTagName('div');
		var divarr=new Array();
		for (i=0;i<divlist.length;i++) if (divlist[i].className.indexOf('help')>=0) {
			divarr.push(divlist[i]);
		}
		for (i=0;i<divarr.length;i++) {
			script_help(divarr[i]);
		}
	}
	//alert(form.has_depends);
	if (form.has_depends) make_depend(form);
	
}

function validate_form(form)
{
	var errors=0,n,s,inp,radiolist=false;
	var c='';
	function validator_walk(el)
	{
		var nn=el.nodeName.toLowerCase();
		c+=' '+nn
		if (nn == "textarea" || (nn=="input" && (el.type=="text" || el.type=="password"))) {
			if (el.disabled) return;
			n=unfocus_elem(el,true);
			if (n) {
				errors++;
				if (!s) {
					s=find_error_message(el);
					inp=el;
				}
			}
			return;
		}
		if (nn == "input") {
			if(el.disabled) return;
			if(el.type=="radio") {
				if (!radiolist) radiolist=new Array();
				var nm=el.name.replace(/[\[\]]/g,'');
				var j;
				for (j=0;j<radiolist.length;j++) if (radiolist[j].name == nm) break;
				if (j>=radiolist.length) radiolist.push({name:nm,checked:el.checked,elem:el});
				else if (el.checked) radiolist[j].checked=true;
				return;
			}
			if (el.type=="checkbox") {
				if (!el.checked && class_value(el,'required')) {
					var li=find_li(el);
					if (li) add_class(li,"invalid");
					errors++;
					if (!s) {
						s=find_error_message(el);
						inp=el;
					}
				}
			}
			return;
		}
		if (el.className.indexOf('datecombo')>=0) {
			unfocus_date(el.dateday,null,null);
			return;
		}
		for (el=el.firstChild;el;el=el.nextSibling) if (el.nodeType==1) {
			validator_walk(el);
		} 
	}
	validator_walk(form);
	if (radiolist) {
		var j;
		for (j=0;j<radiolist.length;j++) if (!radiolist[j].checked) {
			var li=find_li(radiolist[j].elem);
			if (li) {
				add_class(li,'invalid');
				rem_class(li,'valid');
			}
			errors++;
			if (!s) {
				inp=radiolist[j].elem;
				s=find_error_message(inp);
			}
		}
	}
	if (errors) {
		if (s) alert(s);
		if (inp) {
			inp.focus();
		}
		return false;
	}
	return true;
}


var formlist;
formlist=document.body.getElementsByTagName('form');

for (var ix=0;ix<formlist.length;ix++) script_form(formlist[ix]);


})();

