function Tart(str)
{
    function rozbij(strin,znak){
	var str=del_nav(strin);
	var naw=0;
	var nr=0;
	var tt=new Array();
	tt[0]='';    
	for(var i=0;i<str.length;i++){
	    if(str.charAt(i)=="(" ) naw++;
	    if(str.charAt(i)==")" ) naw--;
	    if(naw==0 && str.charAt(i)==znak){ nr++; tt[nr]='';}
	    else tt[nr]+=str.charAt(i);    
	}
	return tt;
    }

    function del_nav(str){
	var naw=0;
	var out=false;
	for(var i=0;i<str.length;i++){
	    if(str.charAt(i)=="(" ) naw++;
	    if(str.charAt(i)==")" ) naw--;
	    if(naw==0 && str.charAt(i).match(/[,+]/g) ) out=true;
	}
	return (out)? str:str.replace(/(\)$)|(^\()/g,"");
    }

    function f_or( param_str ){ //po przecinku
	var t= new Array();
	var param_tab = rozbij( param_str , ',');	
	for( var i=0; i<param_tab.length; i++){
		t[i]=f_and( param_tab[i] );
		if (t[i]=='')	return '';
	}
	return t[0];	
    }

    function f_and( param_str ){ //po plusie
	var wynik = '';
	var param_tab = rozbij( param_str , '+');
	for(var i=0; i<param_tab.length;i++){
	    var t=test( param_tab[i] );
	    if (t != '') wynik+=t+',';	
	}
	return wynik;
    }

    function test_el_prosty( param_str ){
	return (param_str.match(/[,+]/g))? 0:1;
    }
    
    function test( param_str ){
	if(!param_str) return '';
	if (!test_el_prosty( param_str ))
	    return f_or( param_str );
	else{
	    var not=false;
	    if(param_str.indexOf('!')>=0){ param_str=param_str.substr(1); not=true; }
	    var ident=document.getElementById( param_str );
	    if(ident.value!='') useStyle(param_str,'');
	    if(!not)
	    return (ident.value!='')? '':param_str;	    
	    else return (ident.value!='')? param_str:'';	    
	}    
    }    
    return test( str.replace(/\s/g,'') );
}

function wyczysc(str)
{
    str=str.replace(/([)(+])|([,]{1,})/g,',');
    str=str.replace(/(^[, ])|([, ]$])/g,',');
    return str;
}
