function sei_generate_action(elementkind, elementkey, settings, mode)
{
	if (typeof(mode)=="undefined")
		mode="join";

	if (typeof(sei_action_settings)!="object")
		sei_action_settings=new Array;

	if (typeof(sei_action_settings[elementkind])!="object")
		sei_action_settings[elementkind]=new Array;

	if (typeof(sei_action_settings[elementkind][elementkey])!="object")
		sei_action_settings[elementkind][elementkey]=new Array;

	if (mode=="only")
	{
		sei_action_settings_before=sei_action_settings;
		sei_action_settings=new Array;
		sei_action_settings[elementkind]=new Array;
		sei_action_settings[elementkind][elementkey]=new Array;
	}

	if (settings=="reset")
	{
		sei_action_settings[elementkind][elementkey]=null;
		sei_action_settings[elementkind][elementkey]=new Array;
		sei_action_settings[elementkind][elementkey]["reset"]=true;
	}
	else
	{
		sei_action_settings[elementkind][elementkey]["reset"]=null;

		settingarray=settings.split(";");

		for (settingcounter=0; settingcounter<settingarray.length; settingcounter++)
		{
			curraction=settingarray[settingcounter].split("=");

			if (curraction[1]=="null")
				sei_action_settings[elementkind][elementkey][curraction[0]]=null;
			else
				sei_action_settings[elementkind][elementkey][curraction[0]]=""+curraction[1];

			if (mode=="only")
				sei_action_settings_before[elementkind][elementkey][curraction[0]]=""+curraction[1];
		}
	}

	urlaction="";

	for (currelementkind in sei_action_settings)
	{
		if (urlaction>"")
			urlaction+=")";

		urlaction+=currelementkind+"(";

		counter=0;

		for (currelementkey in sei_action_settings[currelementkind])
		{
			if (counter>0)
				urlaction+="!!";

			urlaction+="key!"+currelementkey;

			for (currkey in sei_action_settings[currelementkind][currelementkey])
			{
				if (sei_action_settings[currelementkind][currelementkey][currkey]!=null && (sei_action_settings[currelementkind][currelementkey][currkey]>"" || sei_action_settings[currelementkind][currelementkey][currkey]==false || sei_action_settings[currelementkind][currelementkey][currkey]==true))
					urlaction+="!!"+currkey+"!"+sei_action_settings[currelementkind][currelementkey][currkey];
			}

			counter++;
		}
	}

	urlaction+=")";

	if (mode=="only")
		sei_action_settings=sei_action_settings_before;

	return urlaction;
}

function sei_get_action(elementkind, elementkey, setting)
{
	if (typeof(sei_action_settings)!="object")
		return false;

	if (typeof(sei_action_settings[elementkind])!="object")
		return false;

	if (typeof(sei_action_settings[elementkind][elementkey])!="object")
		return false;

	if (typeof(sei_action_settings[elementkind][elementkey][setting])=="undefined")
		return false;
	else
		return sei_action_settings[elementkind][elementkey][setting];
}

function sei_do_action(elementkind, elementkey, settings, seturl, formname, addreload)
{
	urlaction=sei_generate_action(elementkind, elementkey, settings);

	if (typeof(seturl) != "undefined" && seturl>"")
		newurl=sei_href_parameter_add("sei_custom_action="+urlaction, seturl);
	else
		newurl=sei_href_link("sei_custom_action="+urlaction);

	if (typeof(formname)!="undefined" && formname>"")
	{
		if(typeof(sei_fieldchange_cancel)=="function")
			sei_fieldchange_cancel();

		if (typeof(addreload)=="undefined" || addreload==true)
			document.forms[formname].action=sei_href_parameter_add("action=reload", newurl);
		else
			document.forms[formname].action=newurl;

		document.forms[formname].submit();
	}
	else
		document.location=newurl;
}

function sei_save_action(elementkind, elementkey, settings, application)
{
	urlaction=sei_generate_action(elementkind, elementkey, settings, "only");

	newurl=sei_href_link("sei_custom_action="+urlaction+"&app="+application, HTTP_SYS+"components/usersystem/pages/savesettings.php");

	sei_reload_jscode(newurl);
}