function slPopUp(URL, frame, width, height) {

	var screenWidth = document.all ? document.body.clientWidth : innerWidth;
	var screenHeight = document.all ? document.body.clientHeight : innerHeight;

	x = (screenWidth - width) / 2;
	y = (screenHeight - height) / 2;

	var positioning = "left=" + x + ",top=" + y + ",screenX=" + x + ",screenY=" + y + ",width=" + width + ",height=" + height;
	var props = "toolbar=0,location=0,directories=0,status=0,menubar=1,scrollbars=1,resizable=1,";
	var popup = window.open(URL, frame, positioning + ',' + props);
	popup.focus();
}

function selectChooserValue(formName, elementName, value, label) {
	document.forms[formName].elements[elementName].value = value;
	document.forms[formName].elements[elementName + ".display"].value = label;
}

function selectOption(theLinkID, formName, elementName, value, classSel, classUnsel) {
	var prevVal = document.forms[formName].elements[elementName].value;
	document.forms[formName].elements[elementName].value = value;

	var thisEl = document.getElementById(theLinkID);
	if (!thisEl)
		return;

	thisEl.className = classSel;

	var prevElID = theLinkID.substring(0, theLinkID.length - value.length) + prevVal;

	var prevEl = document.getElementById(prevElID);
	if (prevEl)
		prevEl.className = classUnsel;
}

function addSelected(formName, elementName, value, label, tableID) {

	var prevVal = document.forms[formName].elements[elementName].value;
	if (prevVal == null || prevVal == "") {
		document.forms[formName].elements[elementName].value = value;
	} else {
		var vals = prevVal.split(",");
		var found = false;
		for ( var i = 0; i < vals.length; ++i) {
			if (vals[i] == value) {
				found = true;
				break;
			}
		}
		if (!found) {
			prevVal = prevVal + "," + value;
		}
		document.forms[formName].elements[elementName].value = prevVal;
	}

	var theText1 = document.createTextNode(label);
	var theText2 = document.createTextNode('entfernen');

	var theNewTR = document.createElement('tr');
	var theNewTD1 = document.createElement('td');
	var theNewTD2 = document.createElement('td');

	var theNewA = document.createElement('a');

	theNewA.onclick = function() {
		removeSelected(formName, elementName, value, theNewTR.id);
	};

	theNewA.appendChild(theText2);

	theNewTD1.appendChild(theText1);
	theNewTD2.appendChild(theNewA);

	theNewTR.appendChild(theNewTD1);
	theNewTR.appendChild(theNewTD2);

	var trID = tableID + "_" + value;
	theNewTR.setAttribute("id", trID);

	var table = document.getElementById(tableID + "_tbody");
	if (table == undefined)
		alert("no table tbody for id " + tableID + "_tbody");

	table.appendChild(theNewTR);

}

function removeSelected(formName, elementName, value, trID) {
	var prevVal = document.forms[formName].elements[elementName].value;
	if (prevVal != null) {
		var vals = prevVal.split(",");
		var newVal = "";
		var count = 0;
		for ( var i = 0; i < vals.length; ++i) {
			if (vals[i] == value)
				continue;
			count++;
			if (count > 1)
				newVal = newVal + ",";
			newVal = newVal + vals[i];
		}

		document.forms[formName].elements[elementName].value = newVal;
	}
	var trEl = document.getElementById(trID);
	if (trEl) {
		trEl.parentNode.removeChild(trEl);
	} else
		alert('tr not found');
}

function rate(url, trid, v) {

	new Ajax.Request(url, {
		asynchronous : true,
		onSuccess : function(o) {
			var row = document.getElementById(trid);
			if (!row)
				return;
			for ( var i = 0; i < row.childNodes.length; i++) {
				var div = row.childNodes[i].childNodes[0];
				if (!div)
					continue;
				if (o.responseText == 'reload')
					location.reload();
				else {
					div.className = row.childNodes[i].getAttribute("id") == trid + "_option_" + v ? "selection_1" : "selection_0";
				}
			}
		},
		onFailure : function(o) {
			alert("Transaction failed.  The error is: " + o.statusText);
		}
	});
}

function loadContent(elid, url, onsuccess) {
	var el = $(elid);
	if (!el)
		alert("no element found!");

	Element.setStyle(el, {
		cursor : "wait"
	});

	new Ajax.Updater({
		success : elid,
		failure : 'dump_error'
	}, url, {
		asynchronous : true,
		evalScripts : true,
		onSuccess : function(o) {
			if (onsuccess)
				eval(onsuccess);
			Element.setStyle(el, {
				cursor : "auto"
			});
		},
		onFailure : function(o) {
			Element.setStyle(el, {
				cursor : "auto"
			});
		}
	});
}

function loadContentAndHighlight(elid, url, callerID, highlightClass, normalClass) {
	loadContent(elid, url, "highlightGenericListElement('" + callerID + "', '" + highlightClass + "', '" + normalClass + "')");
}

function loadChildFrameAndHighlight(frame, url, callerID, highlightClass, normalClass) {
	frames[frame].location.href = url;
	highlightGenericListElement(callerID, highlightClass, normalClass);
}
function loadSiblingFrame(frame, url) {
	parent.frames[frame].location.href = url;
}

function loadSiblingFrameAndHighlight(frame, url, callerID, highlightClass, normalClass) {
	parent.frames[frame].location.href = url;
	highlightGenericListElement(callerID, highlightClass, normalClass);
}
function loadSiblingChildFrameAndHighlight(sibling, frame, url, callerID, highlightClass, normalClass) {
	parent.frames[sibling].frames[frame].location.href = url;
	highlightGenericListElement(callerID, highlightClass, normalClass);
}

function highlightGenericListElement(callerID, highlightClass, normalClass) {
	var myElement = $(callerID);
	if (!myElement)
		return;

	var otherElements = document.getElementsByClassName(highlightClass);
	for ( var i = 0; i < otherElements.length; ++i) {
		var otherElement = otherElements[i];
		otherElement.className = normalClass;
	}

	highlightElement(callerID, highlightClass);
}

function highlightElement(callerID, highlightClass) {
	var myElement = $(callerID);
	if (!myElement)
		return;

	myElement.className = highlightClass;
}

function printDebug(msg, clear) {
	var div = $('dump_error');
	if (!div)
		return;
	if (clear)
		div.innerHTML = msg;
	else {
		div.innerHTML = div.innerHTML + "<br />" + msg;
	}
}

function updateFCKFields(formID) {
	if (!window.FCKEditorAPI) {
		return;
	}
	try {
		var elements = Form.getElements(formID);
		for ( var i = 0; i < elements.length; ++i) {
			var element = elements[i];
			var editor = FCKeditorAPI.GetInstance(element.name);
			if (editor) {
				editor.UpdateLinkedField();
				printDebug("updated fck editor content (" + element.name + ")");
			}
		}
	} catch (err) {

	}
}

function submitAjaxForm(formID, elid, url, isOnSubmit, haveFCK) {
	var el = $(elid);
	if (!el)
		alert("no element found!");

	if (haveFCK)
		updateFCKFields(formID);

	var theParams = "";
	if (url.indexOf("?") > -1) {
		theParams = url.substring(url.indexOf("?") + 1);
		url = url.substring(0, url.indexOf("?"));
	}

	var formParams = Form.serialize(formID);
	if (formParams != "")
		theParams += "&" + formParams;

	Element.setStyle(el, {
		cursor : "wait"
	});

	// printDebug(theParams, true);
	new Ajax.Updater({
		success : elid,
		failure : 'dump_error'
	}, url, {
		method : 'post',
		asynchronous : true,
		evalScripts : true,
		parameters : theParams,
		onSuccess : function(o) {
			Element.setStyle(el, {
				cursor : "auto"
			});
			if (onsuccess)
				eval(onsuccess);
		},
		onFailure : function(o) {
			Element.setStyle(el, {
				cursor : "auto"
			});
			alert("Transaction failed.  The error is: " + o.statusText);
		}
	});
	if (isOnSubmit)
		return false;
}

function submitAjaxFormCP(formID, cpid, url, isOnSubmit, haveFCK, slCP, spinnerID) {

	if (slCP) {
		slUpdateEditors($(cpid));
	}

	if (haveFCK)
		updateFCKFields(formID);

	var theParams = "";
	if (url.indexOf("?") > -1) {
		theParams = url.substring(url.indexOf("?") + 1);
		url = url.substring(0, url.indexOf("?"));
	}

	var formParams = Form.serialize(formID);
	if (formParams != "")
		theParams += "&" + formParams;

	if (slCP) {
		slById(cpid).loadPost(url, theParams, spinnerID);
	} else {

		new Ajax.Request(url, {
			method : 'post',
			asynchronous : true,
			evalScripts : true,
			parameters : theParams,
			onSuccess : function(o) {
				var widget = dojo.widget.byId(cpid);
				var wUrl = widget.href;
				// alert("setting content ...");
				widget.setContent(o.responseText);
				widget.href = wUrl;
			},
			onFailure : function(o) {
				alert(o);
			}
		});

	}
	if (isOnSubmit)
		return false;
}

function submitAjaxFormCP2(formID, formID2, cpid, url, isOnSubmit, haveFCK, slCP, spinnerID) {

	if (slCP) {
		slUpdateEditors();
	}

	if (haveFCK)
		updateFCKFields(formID);
	if (haveFCK)
		updateFCKFields(formID2);

	var theParams = "";
	if (url.indexOf("?") > -1) {
		theParams = url.substring(url.indexOf("?") + 1);
		url = url.substring(0, url.indexOf("?"));
	}

	var formParams = Form.serialize(formID);
	formParams += "&" + Form.serialize(formID2);
	if (formParams != "")
		theParams += "&" + formParams;

	if (slCP) {
		slById(cpid).loadPost(url, theParams, spinnerID);
	} else {
		new Ajax.Request(url, {
			method : 'post',
			asynchronous : true,
			evalScripts : true,
			parameters : theParams,
			onSuccess : function(o) {
				var widget = dojo.widget.byId(cpid);
				var wUrl = widget.href;
				// alert("setting content ...");
				widget.setContent(o.responseText);
				widget.href = wUrl;
			},
			onFailure : function(o) {
				alert(o);
			}
		});
	}
	if (isOnSubmit)
		return false;
}

function submitSimpleAjaxFormAsURL(formID, cpid, url, slCP) {

	var theParams = "";
	if (url.indexOf("?") > -1) {
		theParams = url.substring(url.indexOf("?") + 1);
		url = url.substring(0, url.indexOf("?"));
	}

	var formParams = Form.serialize(formID);
	if (formParams != "")
		theParams += "&" + formParams;

	url = url + "?" + theParams;

	if (slCP) {
		slById(cpid).load(url);
		return;
	}

	dojo.widget.byId(cpid).setUrl(url);
}

function submitAtoZ(formID, elid, url, azEl, azVal) {
	document.forms[formID].elements[azEl].value = azVal;
	submitAjaxForm(formID, elid, url);
}

function submitAtoZ_CP(formID, elid, url, azEl, azVal, slCP) {
	document.forms[formID].elements[azEl].value = azVal;
	submitAjaxFormCP(formID, elid, url, false, false, slCP);
}

function reloadCP(cpid, url) {
	new Ajax.Request(url, {
		method : 'get',
		asynchronous : true,
		evalScripts : true,
		onSuccess : function(o) {
			dojo.widget.byId(cpid).setContent(o.responseText);
			dojo.widget.byId(cpid).href = url;
		},
		onFailure : function(o) {
			alert(o);
		}
	});
}

function hover(el, active, inactive, status) {
	if (!el)
		return;
	if (el.className != active && el.className != inactive)
		return;
	el.className = status ? active : inactive;
}

function toggleCheckboxes(formName, elementName, checked) {

	var form = document.forms[formName];
	if (!form)
		return;
	for ( var i = 0; i < form.elements.length; ++i) {
		var el = form.elements[i];
		if (el.name == elementName)
			el.checked = checked;
	}

}

function switchGUIPage(formName, elementName) {

	var form = document.forms[formName];
	if (!form)
		return;
	document.location.href = document.forms[formName].elements[elementName].value;
}

function slSelectTreeNode(treeID, logicalPath, trigger, base_url) {

	var gui_tree = YAHOO.widget.TreeView.getTree(treeID);
	if (!gui_tree)
		return;

	var node = gui_tree.getNodeByProperty('sl_path', logicalPath);
	if (!node)
		return;

	var sl_id = node.data['sl_id'];
	if (!sl_id)
		return;

	if (trigger && base_url) {
		triggerGUITree(sl_id, base_url);
	} else {
		highlightGUITreeNode(sl_id);
	}
}

function triggerGUITree(sl_id, base_url) {
	var gui_tree = YAHOO.widget.TreeView.getTree('gui_tree');
	var node = gui_tree.getNodeByProperty('sl_id', sl_id);
	if (!node)
		return;
	var situation = node.data['situation'];
	var situation_args = node.data['situation_args'];
	var addParams = '&args.situation=' + situation + (situation_args ? '&' + situation_args : '');
	loadContent('gui_main', base_url + addParams, "highlightGUITreeNode('" + sl_id + "')");

}

function highlightGUITreeNode(sl_id) {
	var gui_tree = YAHOO.widget.TreeView.getTree('gui_tree');
	var treeDiv = document.getElementById('gui_tree');
	if (!treeDiv)
		return;
	var treeDivA = treeDiv.getElementsByTagName('a');
	if (treeDivA && treeDivA.length > 0) {
		for ( var i = 0; i < treeDivA.length; ++i)
			treeDivA[i].style.fontWeight = 'normal';

	}

	var currNode = gui_tree.getNodeByProperty('sl_id', sl_id);
	if (!currNode)
		alert("cannot find node to highlight: " + sl_id);

	var nodeA = currNode.getLabelEl();
	if (nodeA) {
		nodeA.style.fontWeight = 'bold';
	}
	if (!currNode.expanded)
		currNode.toggle();
}

function slSetFormElement(e, v) {
	// this method is only necessary because the code isn't recognized by the
	// eval() function.
	$(e).value = v;
}

function changeIMG(elid, filename, alt_text) {
	var el = $(elid);
	if (!el)
		alert("no element found!");

	var path = el.src;
	var lastSlash = path.lastIndexOf("/");
	el.src = path.substring(0, lastSlash) + "/" + filename;

}

function removeAMP(s) {
	while (true) {
		var i = s.indexOf("&amp;");
		if (i == -1)
			break;
		s = s.substring(0, i) + "&" + s.substring(i + "&amp;".length);
	}
	return s;
}

function addOrReplaceArg(url, arg, value) {
	url = removeAMP(url);

	var match = "&args." + arg + "=";
	var matchPos = url.indexOf(match);
	if (matchPos == -1) {
		return value == null ? url : (url + match + value);
	}
	var trailing = url.substring(matchPos + match.length);
	return url.substring(0, matchPos) + (value == null ? "" : (match + value)) + (trailing.indexOf("&") == -1 ? "" : trailing.substring(trailing.indexOf("&")));
}

function restoreIconSrc() {
	if (this.icon.src.substr(-'/elements/apps/gui/https/icons/current/loading.jpg'.length) == '/elements/apps/gui/https/icons/current/loading.jpg') {
		this.icon.src = this.oldIconSrc;
	}
}

function slTreeCreateClicked(selectedNode, controllerId, args) {

	if (!selectedNode || selectedNode.actionIsDisabled(selectedNode.actions.ADDCHILD)) {
		return false;
	}

	// this.icon = icon;
	// this.oldIconSrc = icon.src;

	this.controller = dojo.widget.manager.getWidgetById(controllerId);

	if (!selectedNode) {
		return false;
	}

	// this.icon.src = '/elements/apps/gui/https/icons/current/loading.jpg';

	try {
		controller.createChild(selectedNode, selectedNode.children.length, args, dojo.lang.hitch(this, restoreIconSrc));
	} catch (err) {

	}
	// restoreIconSrc.apply(this);
}

function slTreeMoveClicked(selectedNode, controllerId, icon, direction) {
	if (selectedNode.actionIsDisabled(selectedNode.actions.MOVE)) {
		return false;
	}

	// this.icon = icon;
	// this.oldIconSrc = icon.src;

	this.controller = dojo.widget.manager.getWidgetById(controllerId);

	if (!selectedNode) {
		alert('No node selected');
		return false;
	}

	if (direction == 'up') {
		if (!selectedNode.getPreviousSibling())
			return;
		controller.move(selectedNode, selectedNode.parent, selectedNode.getParentIndex() - 1);
	} else if (direction == 'down') {
		if (!selectedNode.getNextSibling())
			return;
		controller.move(selectedNode, selectedNode.parent, selectedNode.getParentIndex() + 1);
	}

}

function slTreeEditClicked(selectedNode, controllerId, guiId) {

	if (!selectedNode || selectedNode.actionIsDisabled(selectedNode.actions.EDIT)) {
		return false;
	}

	this.controller = dojo.widget.manager.getWidgetById(controllerId);

	if (!selectedNode) {
		return false;
	}

	// var res = controller.createChild(selectedNode, 0, { suggestedTitle: "New
	// node" }, dojo.lang.hitch(this, restoreIconSrc));
}

function slTreeRemoveClicked(selectedNode, controllerId, icon) {

	if (!selectedNode) {
		alert('No node selected');
		return false;
	}

	if (selectedNode.actionIsDisabled(selectedNode.actions.REMOVE)) {
		return false;
	}

	// this.icon = icon;
	// this.oldIconSrc = icon.src;

	this.controller = dojo.widget.manager.getWidgetById(controllerId);

	// this.icon.src = '/elements/apps/gui/https/icons/current/loading.jpg';

	try {
		controller.removeNode(selectedNode, dojo.lang.hitch(this, restoreIconSrc));

		// if (!res) {
		// restoreIconSrc.apply(this);
		// }
	} catch (err) {
		// restoreIconSrc.apply(this);
	}

}

function dojoBindForm(formID, cpid) {
	dojo.io.bind({
		formNode : document.getElementById(formID),
		mimetype : "text/html",
		load : function(type, data, event) {
			dojo.widget.byId(cpid).setContent(data.getElementById(cpid + "_digest_content").innerHTML);

			var url = data.getElementById(cpid + "_digest_url").innerHTML;
			dojo.widget.byId(cpid).href = url.replace(/&amp;/g, "&");
		},
		error : function(type, arg) {
			alert("form bind error: " + arg.message);
		}
	});
}

function slAjaxNotify(url) {

	new Ajax.Request(url, {
		asynchronous : false,
		onSuccess : function(o) {
		},
		onFailure : function(o) {
			alert("Transaction failed.  The error is: " + o.statusText);
		}
	});
}

function slAddSBM(code) {
	doc = escape(location.href);
	title = escape(document.title);
	switch (code) {
	case 'google':
		window.open('http://www.google.com/bookmarks/mark?op=add&hl=de&bkmk=' + doc + '&title=' + title);
		break;
	case 'delicious':
		window.open('http://del.icio.us/post?url=' + doc + '&title=' + title);
		break;
	case 'mrwong':
		window.open('http://www.mister-wong.de/index.php?action=addurl&bm_url=' + doc + '&bm_description=' + title);
		break;
	case 'yahoo':
		window.open('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=' + doc + '&t=' + title);
		break;
	case 'folkd':
		window.open('http://www.folkd.com/submit/page/' + doc);
		break;
	case 'blinkList':
		window.open('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=' + doc + '&Title=' + title);
		break;
	case 'linkarena':
		window.open('http://linkarena.com/bookmarks/addlink/?url=' + doc + '&title=' + title + '&desc=&tags=');
		break;
	case 'yigg':
		window.open('http://yigg.de/neu?exturl=' + doc + '&exttitle=' + title);
		break;
	case 'furl':
		window.open('http://www.furl.net/storeIt.jsp?u=' + doc + '&t=' + title);
		break;
	case 'oneview':
		window.open('http://beta.oneview.de/quickadd/neu/addBookmark.jsf?URL=' + doc + '&title=' + title);
		break;
	case 'webnews':
		window.open('http://www.webnews.de/einstellen?url=' + doc + '&title=' + title);
		break;
	}
}

function slDojoReloadCPIfNecessary(widgetID, url) {
	if (url == null)
		return;

	var widget = dojo.widget.byId(widgetID);
	if (widget == null)
		return;

	if (widget.href == url)
		return;

	widget.setUrl(url);
}

function slToolboxItemSelected(toolboxID, label, key, hiddenKey, useYui) {

	var c = document.getElementById(toolboxID + '_c');
	c.innerHTML = label;

	if (key != null) {
		var field;

		if (hiddenKey != null) {
			field = document.getElementById(hiddenKey);
		} else {
			field = document.getElementById(toolboxID + '_h');
		}
		if (field != null) {
			field.value = key;
		}
	}

	if (useYui) {
		if ($(toolboxID + '_t')) {
			// TODO: SLPopupMenu doesn't need this anymore
			var widget = slById(toolboxID + '_t');
			if (widget) {
				widget.hide();
			}
		}
	} else {
		var t = dojo.widget.byId(toolboxID + '_t');

		t._hover = false;
		t.close();
	}
}

function slShowFCKEditor(id, toolbarSet, path, buttonId, height) {
	var editor = new FCKeditor(id);

	editor.BasePath = path + '/';
	editor.ToolbarSet = toolbarSet;

	if (height != null) {
		editor.Height = height;
	}

	editor.ReplaceTextarea();

	var button = document.getElementById(buttonId);
	if (button != null) {
		button.style.visibility = 'hidden';
	}
}

function slActivateField(id) {
	$(id).checked = true;
}

function slClick(id) {
	var element = $(id);
	if (element != null) {
		element.onclick();
	}
}

function slIncludeLib(url) {
	document.write('<script type="text/javascript" src="' + url + '"><\/script>');
}

function slIncludeCSS(url) {
	document.write('<link rel="stylesheet" type="text/css" href="' + url + '" />\n');
}

function slSetImgSRC(id, url) {
	if (url == null || url == '') {
		return;
	}

	var img = document.getElementById(id);
	if (img == null)
		return;

	img.src = url;

}

function slAutoCheckboxToggle(id, e, name, autoName) {

	var inputs = $(id).getInputs('checkbox', name);

	if (e.value == autoName) {
		if (!e.checked) {
			return;
		}

		for ( var i = 0; i < inputs.length; i++) {
			if (inputs[i] != e) {
				inputs[i].checked = false;
			}
		}
		return;
	}

	if (e.checked) {
		var all = true;
		var autoElement;
		for ( var i = 0; i < inputs.length; i++) {
			if (inputs[i].value == autoName) {
				autoElement = inputs[i];
			} else {
				if (!inputs[i].checked) {
					all = false;
				}
			}
		}
		autoElement.checked = all;
		if (all) {
			for ( var i = 0; i < inputs.length; i++) {
				if (inputs[i].value != autoName) {
					inputs[i].checked = false;
				}
			}
		}
		return;
	}

	for ( var i = 0; i < inputs.length; i++) {
		if (inputs[i].value != autoName) {
			if (inputs[i].checked) {
				return;
			}
		} else {
			inputs[i].check = true;
		}
	}
}

function slInitAutoCheckboxToggle(formID, fieldName, autoName) {
	var form = $(formID);
	if (!form) {
		return;
	}
	var inputs = form.getInputs('checkbox', fieldName);
	if (!inputs) {
		return;
	}

	for ( var i = 0; i < inputs.length; i++) {
		inputs[i].observe('click', slAutoCheckboxToggle.curry(formID, inputs[i], fieldName, autoName));
	}
}

function slHideEmbededObjects() {
	$$('object', 'embed').each(function(node) {
		// node.style.visibility = 'hidden'
		node.style.display = 'none';
	});
}

function slShowEmbededObjects() {
	$$('object', 'embed').each(function(node) {
		// node.style.visibility = 'visible'
		node.style.display = 'block';
	});
}

function slToggleCheckboxesWithClass(className, checked) {
	slToggleCheckboxesWithClass(className, checked, true);
}

function slToggleCheckboxesWithClass(className, checked, triggerOnchange) {
	var elements = $$('.' + className);
	for ( var i = 0; i < elements.length; ++i) {
		var e = elements[i];
		e.checked = checked;
		if (triggerOnchange)
			e.onchange();
	}
}

function slSuspendOnClick(id) {
	var e = $(id);
	if (!e) {
		return;
	}

	var oc = Element.readAttribute(e, 'onclick');
	if (oc) {
		Element.writeAttribute(e, 'onclick', '');
		Element.writeAttribute(e, 'slsupsendedonclick', oc);
	}
}

function slReattachOnClick(id) {
	var e = $(id);
	if (!e) {
		return;
	}

	var oc = Element.readAttribute(e, 'slsupsendedonclick');
	if (oc) {
		Element.writeAttribute(e, 'onclick', oc);
	}
}

var SLFlash = Class.create({

	initialize : function(id) {
		this.id = id;
	},

	run : function() {
		var ret = AC_GetArgs(arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash");
		this.generateObject(ret.objAttrs, ret.params, ret.embedAttrs);
	},

	generateObject : function(objAttrs, params, embedAttrs) {
		var str = '';
		if (isIE && isWin && !isOpera) {
			str += '<object ';
			for ( var i in objAttrs) {
				str += i + '="' + objAttrs[i] + '" ';
			}
			str += '>';
			for ( var i in params) {
				str += '<param name="' + i + '" value="' + params[i] + '" /> ';
			}
			str += '</object>';
		} else {
			str += '<embed ';
			for ( var i in embedAttrs) {
				str += i + '="' + embedAttrs[i] + '" ';
			}
			str += '> </embed>';
		}

		$(this.id).update(str);
	}
});

function slToggleTableRow(rowID, className) {

	var row = $(rowID);
	var table = row.up('table');

	var rows = table.select('tr');
	for ( var i = 0; i < rows.length; i++) {
		rows[i].removeClassName(className);
	}
	row.addClassName(className);
}

function slEnsureElement(id, html) {
	if ($(id) != undefined) {
		return;
	}
	var body = document.getElementsByTagName('body').item(0);
	Element.insert(body, {
		bottom : html
	});
}

function slEnsureDialog(id, width, height) {
	if ($(id) != undefined) {
		return;
	}
	var body = document.getElementsByTagName('body').item(0);
	Element.insert(body, {
		bottom : '<div id=\"' + id + '\" class=\"gui_dialog\" style=\"display:none\" slModifyable=\"true\" slWidth=\"' + width + '\" slHeight=\"' + height + '\"><div class=\"hd\"> </div><div class=\"bd\"> </div></div>'
	});
}

function slOnKeyDownEnter(e, f) {
	if ((e == undefined ? window.event : e).keyCode == 13) {
		f();
	}
	return true;
}

function slClock(clockID, seconds, showDate) {

	var clockElement = $(clockID);
	if (clockElement == null) {
		return;
	}

	var currDate = new Date();

	var hour = currDate.getHours();
	var result = ((hour < 10) ? " 0" : " ") + hour;

	var minute = currDate.getMinutes();
	result += ((minute < 10) ? ":0" : ":") + minute;

	if (seconds) {
		var second = currDate.getSeconds();
		result += ((second < 10) ? ":0" : ":") + second;
	}

	if (showDate) {
		var year = currDate.getFullYear();
		var month = currDate.getMonth() + 1;
		result = currDate.getDate() + "." + month + "." + year + " " + result;
	}

	clockElement.innerHTML = result;

	setTimeout("slClock('" + clockID + "', " + seconds + ", " + showDate + ")", 1000);
}

function slInitFormInfoText(id, text, css) {

	text = '\u200b' + text;

	var e = $(id);

	if (!e.value || e.value == '') {
		e.value = text;
		e.addClassName(css);
	}

	e.observe('blur', function(event) {
		var element = Event.element(event);
		if (element.value == '') {
			element.addClassName(css);
			element.value = text;
		}
	});

	e.observe('focus', function(event) {
		var element = Event.element(event);
		element.removeClassName(css);
		if (element.value == text) {
			element.value = '';
		}
	});
}

function slPrintElement(id) {
	var e = document.getElementById(id);
	var w = window.open('', "print", "width=740,height=325,top=200,left=250,toolbars=no,scrollbars=yes,status=no,resizable=no");
	w.document.writeln(e.innerHTML);
	w.document.close();
	w.focus();
	w.print();
	w.close();
}

