Type.registerNamespace('Linksoft.Forms');
Type.registerNamespace('Linksoft.Grids');
Type.registerNamespace('Linksoft.Utils');
Type.registerNamespace('Linksoft.Menu');
//
Linksoft.Grids.GridData = function (prefix, url, allowAjax, loadPending, loadLinkText) {
	this.prefix = prefix; this.url = url; this.allowAjax = allowAjax; this.loadPending = loadPending; this.loadLinkText = loadLinkText;
	return this;
}
Linksoft.Grids.Data = new Object();

Linksoft.Grids.PrepareGrid = function (prefix, url, allowAjax, loadPending, loadLinkText) {
	Linksoft.Grids.Data[prefix] = new Linksoft.Grids.GridData(prefix, url, allowAjax, loadPending, loadLinkText);

	var hidn = $(".__grid_status_" + prefix);
	if (hidn.length != 0) {
		var forms = $('form');
		if (forms.length > 0) {
			forms.append(hidn);
		}
	}
	if (!loadPending) {
		Linksoft.Grids.PrepareHandlers(prefix);
	}
}

Linksoft.Grids._Data = function Linksoft$Grids$_Data(prefix) {
	if (typeof (prefix) != 'string') {
		var id = $(prefix).parents('.grid').attr('id');
		if (id == null) {
			alert(Linksoft$Grids$_Data.caller + ' called without prefix or DOM object inside a grid!');
			return;
		}
		prefix = id.replace(/^grid_/, '');
	}
	var data = Linksoft.Grids.Data[prefix];
	if (data == null) {
		alert('Unknown grid '+prefix+'!');
		return;
	}
	return data;
}

Linksoft.Grids.Load = function (prefix) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	if (!data.loadPending) {
		Linksoft.Grids.Refresh(prefix);
		return;
	}
	data.url = Linksoft.Utils.FilterQuery(data.url, function (n, v) { return !(v == null || v == '') });

	if (data.allowAjax) {
		$.ajax({
			url: $.param.querystring(data.url, prefix + '.Load=1'),
			cache: false,
			dataType: 'html',
			success: function (result, textStatus, XMLHttpRequest) {
				var grid = $("#grid_" + prefix);
				grid.replaceWith(result);
				data.loadPending = 0;

				data.url = $.param.querystring(data.url, prefix + '.LoadPending=0');
				$(".__grid_status_" + prefix).val(data.url.substring(data.url.indexOf('?') + 1));

				Linksoft.Grids.PrepareHandlers(prefix);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.responseText); }
		})
	} else {
		location.href = data.url;
	}
	return;
}
Linksoft.Grids.Unload = function (prefix) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	var grid = $("#grid_" + prefix);
	grid.replaceWith($('<div class="grid" id="grid_' + prefix + '"><a href="javascript:Linksoft.Grids.Load( ' + "'" + prefix + "'" + ');" class="add_link">' + data.loadLinkText + '</a></div>'));
	data.loadPending = 1;
	data.url = $.param.querystring(data.url, prefix + '.LoadPending=1');
	$(".__grid_status_" + prefix).val(data.url.substring(data.url.indexOf('?') + 1));
}

Linksoft.Grids.PrepareHandlers = function (prefix) {
	var grid = $("#grid_" + prefix);

	var filters = $(".filter :input", grid);
	filters.keypress(function (event) {
		if (event.which == '13') { // handle ENTER pressed in a grid filter
			event.preventDefault();
			this.blur();
		}
	});
}

Linksoft.Grids.Refresh = function (prefix) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	if (data.loadPending) return;
	data.url = Linksoft.Utils.FilterQuery(data.url, function (n, v) { return !(v == null || v == '') });

	if (data.allowAjax) {
		$.ajax({
			beforeSend: function() { $("#jquery-blanket").fadeIn(); },
			url: data.url,
			cache: false,
			dataType: 'json',
			success: function (result, textStatus, XMLHttpRequest) {
				var grid = $("#grid_" + prefix);
				var tbody = $("tbody", grid);
				tbody.html(result.tbody);

				var pager = $(".pager", grid);
				if (result.pager == null || result.pager == "") {
					pager.html("");
				} else {
					pager.html(result.pager);
				}
				var headers = $("tr.header th", grid);
				for (i = 0; i < headers.length - 1; i++) {
					var header = $(headers[i]);
					header.removeClass("sort_desc sort_asc");
					if (result.orders != "") {
						header.addClass(result.orders[i]);
					}
				}

				for (var key in result.filters) {
					var className = result.filters[key];
					key = key.replace('.', '_');
					var input = $("#" + key);

					if (input.length == 0) {
						input = $("#" + key + "_fr,#" + key + "_to");
					}
					input.removeClass("activefilter invalidfilter activegridsearch invalidgridsearch activesearch invalidsearch");
					if (className != "") {
						input.addClass(className);
					}
				}

				$(".__grid_status_" + prefix).val(data.url.substring(data.url.indexOf('?') + 1));
			},
			complete: function () { $("#jquery-blanket").fadeOut(); },
			error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.responseText); }
		})
	} else {
		location.href = data.url;
	}

	return;
}
Linksoft.Grids.SubmitFilters = Linksoft.Grids.Refresh;

Linksoft.Grids.ChangePageSize = function (prefix, size) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;

	if (size == 0) {
		data.url = $.param.querystring(data.url, prefix + '.PS=0&' + prefix + '.P=1');
	} else {
		var query = $.deparam.querystring(data.url);
		var pos = (query[prefix + ".P"] - 1) * query[prefix + ".PS"] + 1;

		data.url = $.param.querystring(data.url, prefix + '.PS=' + size + '&' + prefix + '.P=' + (Math.floor(pos / size)+1));
	}
	return Linksoft.Grids.Refresh(prefix);
}
Linksoft.Grids.ChangePage = function (prefix, page) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	data.url = $.param.querystring(data.url, prefix + '.P=' + page);
	return Linksoft.Grids.Refresh(prefix);
}
Linksoft.Grids.ChangeSort = function (prefix, column) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	var query = $.deparam.querystring(data.url);
	if (query[prefix+".C"] == column) {
		if (query[prefix + ".D"] == "A") {
			data.url = $.param.querystring(data.url, prefix + '.D=D');
		} else {
			data.url = $.param.querystring(data.url, prefix + '.D=A');
		}
	} else {
		data.url = $.param.querystring(data.url, prefix + '.C=' + column + "&" + prefix + ".D=A&" + prefix + '.CC=' + query[prefix + '.C'] + "&" + prefix + ".DD=" + query[prefix + '.D']);
	}
	return Linksoft.Grids.Refresh(prefix);
}
Linksoft.Grids.ClearFilters = function (prefix) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;

	var filter = new RegExp("^" + prefix + "\.(F|S|GS)\.");
	data.url = Linksoft.Utils.FilterQuery(data.url, function (n, v) {
		if (filter.test(n)) {
			$("#" + n.replace(/\./g, '_')).val('');
			$("#" + n.replace(/\./g, '_') + "_fr").val('');
			$("#" + n.replace(/\./g, '_') + "_to").val('');
			return false;
		} else {
			return true;
		}
	});

	return Linksoft.Grids.Refresh(prefix);
}
Linksoft.Grids.ExportTo = function ( prefix, format) {
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	location.href = $.param.querystring(data.url, prefix + '.Export=' + format);
}
Linksoft.Grids.UpdateFilter = function (prefix, queryKey, inputObject, idx) {
	var value = $(inputObject).val();
	var data = Linksoft.Grids._Data(prefix);
	prefix = data.prefix;
	if (idx == null) {
		data.url = $.param.querystring(data.url, queryKey + '=' + encodeURIComponent(value));
	} else {
		var query = $.deparam.querystring(data.url);
		var list = (query[queryKey] == null ? new Array() : query[queryKey].split('|'));
		list[idx] = encodeURIComponent(value);
		list = list.join('|');
		if (list.match('^\\|+$')) {
			list = '';
		}
		data.url = $.param.querystring(data.url, queryKey + '=' + list);
	}
	if (data.allowAjax) {
		return Linksoft.Grids.Refresh(prefix);
	}
	return;
}

Linksoft.Utils.FilterQuery = function (url, tester, no_path) {
	var path;
	var query;
	if (no_path) {
		query = url;
	} else {
		var pos = url.indexOf('?');
		if (pos == -1) { return url; }
		path = url.substring(0, pos);
		query = url.substring(pos + 1);
	}

	var new_query = '';
	$.each(query.split('&'), function (j, v) {
		var pos = v.indexOf('=');
		var name, value;
		if (pos == -1) {
			name = v;
			value = null;
		} else {
			name = v.substring(0, pos);
			value = v.substring(pos + 1);
		}

		if (tester(name, value)) {
			new_query += v + '&';
		}
	});
	new_query = new_query.substring(0, new_query.length - 1);

	if (no_path) {
		return new_query;
	} else {
		return path + '?' + new_query;
	}
}

Linksoft.Grids.ImportStatuses = function (url, for_prefixes) {
	var forms = $('form');
	var statuses;
	if (forms.length == 0) {
		statuses = $('input[type="hidden"][name^="__grid_status_"]');
	} else {
		statuses = $('input[type="hidden"][name^="__grid_status_"]', forms[0]);
	}

	if (for_prefixes) {
		for_prefixes = for_prefixes.split(',');
	}

	for (var i = 0; i < statuses.length; i++) {
		var query = statuses[i].value;
		var prefix = statuses[i].name.substring(14);
		if (!for_prefixes || for_prefixes.indexOf(prefix) > -1) {
			var prefixRE = new RegExp("^" + prefix + "\\.");
			query = Linksoft.Utils.FilterQuery(query, function (n, v) { return prefixRE.test(n); }, true);
			if (url != null && query != null && query != "") {
				url = $.param.querystring(url, query);
			}
		}
	}
	return url;
}

// for menus
function getDivWidth(div) { return div.offsetWidth + 1; }
function getDivHeight(div) { return div.offsetHeight + 1; }
function getDivLeft(div) { var v = 0; while (div != null) { v += div.offsetLeft; div = div.offsetParent; } return v; }
function getDivTop(div) { var v = 0; while (div != null) { v += div.offsetTop; div = div.offsetParent; } return v; }


//  support for two multiselects alongside each other and options being moved between them
function ComplexMultiselect_AllNotSelected(lstSelected, lstNotSelected) {
	var i;
	var len;
	lstSelected.options[lstSelected.length] = new Option("", "");

	for (i = 0; i < lstSelected.length - 1; i++) {
		var opt = new Option(lstSelected.options[i].text, lstSelected.options[i].value);
		var tasks_length = lstNotSelected.length;
		lstNotSelected.options[tasks_length] = opt;
		lstSelected.options[i] = null;
		i--;
	}
	lstSelected.options[lstSelected.length - 1] = null;
}

function ComplexMultiselect_NotSelected(lstSelected, lstNotSelected) {
	var i;
	var len;
	lstSelected.options[lstSelected.length] = new Option("", "");

	for (i = 0; i < lstSelected.length - 1; i++) {
		if (lstSelected.options[i].selected) {
			var opt = new Option(lstSelected.options[i].text, lstSelected.options[i].value);
			var tasks_length = lstNotSelected.length;
			lstNotSelected.options[tasks_length] = opt;
			lstSelected.options[i] = null;
			i--;
		}
	}
	lstSelected.options[lstSelected.length - 1] = null;
}

function ComplexMultiselect_Selected(lstSelected, lstNotSelected) {
	var i;
	lstNotSelected.options[lstNotSelected.length] = new Option("", "");
	for (i = 0; i < lstNotSelected.length - 1; i++) {
		if (lstNotSelected.options[i].selected) {
			var opt = new Option(lstNotSelected.options[i].text, lstNotSelected.options[i].value);
			var tasks_length = lstSelected.length;
			lstSelected.options[tasks_length] = opt;
			lstNotSelected.options[i] = null;
			i--;
		}
	}
	lstNotSelected.options[lstNotSelected.length - 1] = null
}

function ComplexMultiselect_AllSelected(lstSelected, lstNotSelected) {
	var i;
	lstNotSelected.options[lstNotSelected.length] = new Option("", "");
	for (i = 0; i < lstNotSelected.length - 1; i++) {
		var opt = new Option(lstNotSelected.options[i].text, lstNotSelected.options[i].value);
		var tasks_length = lstSelected.length;
		lstSelected.options[tasks_length] = opt;
		lstNotSelected.options[i] = null;
		i--;
	}
	lstNotSelected.options[lstNotSelected.length - 1] = null
}

function ComplexMultiselect_SetSelected(lst, sel) {
	for (i = 0; i < lst.length; i++) {
		lst.options[i].selected = sel;
	}
}

function ComplexMultiselect_Register(lstSelected, lstNotSelected) {
	if (lstSelected.form.onsubmit == null) {
		lstSelected.form.onsubmit = function () {
			ComplexMultiselect_SetSelected(lstSelected, 1);
			ComplexMultiselect_SetSelected(lstNotSelected, 0);
		}
	} else {
		var old = lstSelected.form.onsubmit;
		lstSelected.form.onsubmit = function () {
			old();
			ComplexMultiselect_SetSelected(lstSelected, 1);
			ComplexMultiselect_SetSelected(lstNotSelected, 0);
		}
	}
}


Linksoft.Forms.ToggleValidations = function (runValidation) {
	var forms = $("form");
	for (var formId in forms) {
		var val = Sys.Mvc.FormContext.getValidationForForm(forms[formId]);
		if (val != null) {
			// it's NULL the first time around :-(

			for (var i in val.fields) {
				var field = val.fields[i];
				if (field.elements[0] == null) {
				} else if (field.elements[0].disabled) {
					if (field.validations.length > 0) {
						field.clearErrors();
						field._disabled_validations = field.validations;
						field.validations = new Array();
						field.clearErrors();
					}
				} else {
					if (field._disabled_validations) {
						field.validations = field._disabled_validations;
						field._disabled_validations = null;
					}
				}
			}
			if (runValidation) {
				val.validate('submit');
			}
		}
	}
};

// toggle the visibility of a section of page
//		id = the id of the tag to hide/show
//		def = the default visibility

Linksoft.Forms.TogglerSetting = function (hide, disable) { this.hide = hide; this.disable = disable; return this; }
Linksoft.Forms.TogglerSettings = new Object();

Linksoft.Forms.SetUpToggle = function Linksoft$Forms$Toggle(id, def, hide, disable, toInsert) {
	Linksoft.Forms.TogglerSettings[id] = new Linksoft.Forms.TogglerSetting(hide, disable);

	var section = $("#" + id + ",." + id);
	if (section.length == 0) {
		alert("Did not find a tag with id '" + id + "' for a toggle section!!!");
		return;
	}
	var section_show = $("#" + id + "_Show,." + id + "_Show");
	var section_hide = $("#" + id + "_Hide,." + id + "_Hide");
	var section_OnOff = $("." + id + "_OnOff");

	if (toInsert != null && toInsert != "" && section_OnOff.length == 0) {
		section.prepend($(toInsert));
	}
	section.addClass("_linksoft_toggler_section");
	var status;
	if (def || $("span[id$=\"_validationMessage\"]:visible", section).length > 0) {
		status = 1;
		if (hide) { section.show(); }
		if (disable) { Linksoft.Forms.Enable(section); }
		section_show.hide();
		section_hide.show();
	} else {
		status = 0;
		if (hide) { section.hide(); }
		if (disable) { Linksoft.Forms.Disable(section); }
		section_show.show();
		section_hide.hide();
	}
	section_show.click(function () { if (hide) { section.show(); } if (disable) { Linksoft.Forms.Enable(section); } section_show.hide(); section_hide.show(); status = 1; })
	section_hide.click(function () { if (hide) { section.hide(); } if (disable) { Linksoft.Forms.Disable(section); } section_show.show(); section_hide.hide(); status = 0; })

	if (eval('typeof(window.' + id + '_ontoggle) == "function"')) eval(id + '_ontoggle(' + status + ')');

	var onOffHandler = function () {
		if (status) {
			if (hide) { section.hide(); } if (disable) { Linksoft.Forms.Disable(section); } section_show.show(); section_hide.hide(); status = 0;
		} else {
			if (hide) { section.show(); } if (disable) { Linksoft.Forms.Enable(section); } section_show.hide(); section_hide.show(); status = 1;
		}
	};
	section_OnOff.click(onOffHandler);
	section.bind('_linksoft_toggler_onoff', onOffHandler);
}

Linksoft.Forms.Toggle = function (id, status) {
	var section = $("#" + id + ",." + id);
	if (section.length == 0) {
		alert("Did not find a tag with id '" + id + "' for a toggle section!!!");
		return;
	}
	var section_show = $("#" + id + "_Show,." + id + "_Show");
	var section_hide = $("#" + id + "_Hide,." + id + "_Hide");

	var hide = Linksoft.Forms.TogglerSettings[id].hide;
	var disable = Linksoft.Forms.TogglerSettings[id].disable;

	if (status) {
		if (hide) { section.show(); } if (disable) { Linksoft.Forms.Enable(section); } section_show.hide(); section_hide.show(); status = 1;
	} else {
		if (hide) { section.hide(); } if (disable) { Linksoft.Forms.Disable(section); } section_show.show(); section_hide.hide(); status = 0;
	}

	if (eval('typeof(window.' + id + '_ontoggle) == "function"')) eval(id + '_ontoggle(' + status + ')');
}

Linksoft.Forms.Disable = function (section) {
	var inputs = $("input:enabled,textarea:enabled,select:enabled,input[type=\"hidden\"]", section);
	inputs.addClass("_linksoft_toggler_disabled").attr("disabled", "disabled");

	Linksoft.Forms.ToggleValidations(0);
};
Linksoft.Forms.Enable = function (section) {
	var inputs = $("input._linksoft_toggler_disabled,textarea._linksoft_toggler_disabled,select._linksoft_toggler_disabled", section);
	inputs.removeClass("_linksoft_toggler_disabled").attr("disabled", null);

	Linksoft.Forms.ToggleValidations(0);
};

// usage:
//		Blah blah blah (<span id="deliveryAddr_Show" class="hidden">rozbalit</span><span id="deliveryAddr_Hide" class="hidden">sbalit</span>)
//		<div id="deliveryAddr">
//		...
//		</div><script type="text/javascript">$(function () { Linksoft.Forms.Toggle('deliveryAddr', false); })</script>

// hook to the MicrosoftMvcValidation _displayError
// the $B is a "minimized" name of the internal method
if (Sys.Mvc.FieldContext.prototype.$B != null) {
	Sys.Mvc.FieldContext.prototype.$B__ = Sys.Mvc.FieldContext.prototype.$B;
	Sys.Mvc.FieldContext.prototype.$B = function () {
		field = $(this.validationMessageElement.parentNode);
		if (field.is(':reallyhidden')) {
			var toggler = field.parents("._linksoft_toggler_section");
			if (toggler.length) {
				toggler.trigger('_linksoft_toggler_onoff');
			} else {
				field.show();
			}
		}
		this.$B__();
	}
} else {
	var tmp = Sys.Mvc.FieldContext.prototype._displayError;
	Sys.Mvc.FieldContext.prototype.$B__ = Sys.Mvc.FieldContext.prototype._displayError;
	Sys.Mvc.FieldContext.prototype._displayError = function () {
		field = $(this.validationMessageElement.parentNode);
		if (field.is(':reallyhidden')) {
			var toggler = field.parents("._linksoft_toggler_section");
			if (toggler.length) {
				toggler.trigger('_linksoft_toggler_onoff');
			} else {
				field.show();
			}
		}
		this.$B__();
	}
}

Sys.Mvc.FormContext._Application_Load_original = Sys.Mvc.FormContext._Application_Load;
Sys.Mvc.FormContext._Application_Load = function () {
	Sys.Mvc.FormContext._Application_Load_original();
	Linksoft.Forms.ToggleValidations();
}


//HTML preview support
Linksoft.Forms.ShowPreviewId = 0;
Linksoft.Forms.ShowPreview = function (fieldid, url) {
	fieldid = fieldid.replace(/\./g, "_");
	var field = $("#" + fieldid);

	var form = $("#__linksoft_preview_form");
	if (form.length == 0) {
		$("body").append('<form method="post" action="' + url + '" target="html_preview' + Linksoft.Forms.ShowPreviewId + '" id="__linksoft_preview_form"><input type="hidden" name="code" id="__linksoft_preview_field"/></form>');
		form = $("#__linksoft_preview_form");
	}

	$("#__linksoft_preview_field").val(field.val());

	window.open('', 'html_preview' + Linksoft.Forms.ShowPreviewId, 'help:no,width=550px,height=280px,resizeable=yes,resizable=yes,scrollbars=no,status=no');

	form[0].target = 'html_preview' + Linksoft.Forms.ShowPreviewId;
	form[0].submit();
}

Linksoft.Forms.FormatHtml_Old = {};
Linksoft.Forms.FormatHtml = function (fieldid, url) {
	fieldid = fieldid.replace(/\./g, "_");
	var field = $("#" + fieldid);

	$.ajax({
		url: url,
		cache: false,
		dataType: 'text',
		type: "POST",
		data: { code: field.val() },
		success: function (result, textStatus, XMLHttpRequest) {
			Linksoft.Forms.FormatHtml_Old[fieldid] = field.val();
			field.val(result);
			$('#LksftFrms_revert_' + fieldid).show();
		},
		error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.responseText); }
	})
}
Linksoft.Forms.RevertHtml = function (fieldid, url) {
	fieldid = fieldid.replace(/\./g, "_");
	var field = $("#" + fieldid);
	if (Linksoft.Forms.FormatHtml_Old[fieldid] != null) {
		field.val(Linksoft.Forms.FormatHtml_Old[fieldid]);
		delete Linksoft.Forms.FormatHtml_Old[fieldid];
		$('#LksftFrms_revert_' + fieldid).hide();
	}
}


Linksoft.Menu.Data = new Array();

Linksoft.Menu.GetDivWidth = function (div) { return div.offsetWidth+1; }
Linksoft.Menu.GetDivHeight = function (div) { return div.offsetHeight+1; }
Linksoft.Menu.GetDivLeft = function (div) { var v=0;while (div!=null) { v+=div.offsetLeft;div=div.offsetParent; } return v; }
Linksoft.Menu.GetDivTop = function (div) { var v=0;while (div!=null) { v+=div.offsetTop;div=div.offsetParent; } return v; }

Linksoft.Menu.InitMenu = function (menuid) {
	for (var id in Linksoft.Menu.Data[menuid].SubMenus) {
		var sub=Linksoft.Menu.Data[menuid].SubMenus[id];sub.keep=0;sub.div=document.getElementById(id+'_submenu_');
		var parentDiv=document.getElementById(id);var x=Linksoft.Menu.GetDivLeft(parentDiv);var y=Linksoft.Menu.GetDivTop(parentDiv);var z=(sub.sub=='down')?Linksoft.Menu.GetDivHeight(parentDiv):Linksoft.Menu.GetDivWidth(parentDiv);
		sub.div.style.left=(sub.sub=='down')?(x+'px'):((x+z)+'px');sub.div.style.top=(sub.sub=='down')?((y+z)+'px'):(y+'px');
	}
}

Linksoft.Menu.ItemOver = function (menuid,item,addClass) {
	item.className='item-over'+addClass;
	if (Linksoft.Menu.Data[menuid].SubMenus[item.id]!=null) Linksoft.Menu.ShowSubmenu(menuid,item.id);
}
Linksoft.Menu.ItemOut = function (menuid,item,addClass) {
	item.className='item'+addClass;
	if (Linksoft.Menu.Data[menuid].SubMenus[item.id]!=null) setTimeout("Linksoft.Menu.HideSubmenu('"+menuid+"','"+item.id+"');",Linksoft.Menu.Data[menuid].Delay);
}
Linksoft.Menu.SubItemOver = function (menuid,item,addClass) {
	item.className='item-over'+addClass;
	Linksoft.Menu.ShowSubmenu(menuid,Linksoft.Menu.Data[menuid].SubItems[item.id].parent);
	if (Linksoft.Menu.Data[menuid].SubMenus[item.id]!=null) Linksoft.Menu.ShowSubmenu(menuid,item.id);
}
Linksoft.Menu.SubItemOut = function (menuid,item,addClass) {
	item.className='item'+addClass;
	setTimeout("Linksoft.Menu.HideSubmenu('"+menuid+"','"+Linksoft.Menu.Data[menuid].SubItems[item.id].parent+"');",Linksoft.Menu.Data[menuid].Delay);
	if (Linksoft.Menu.Data[menuid].SubMenus[item.id]!=null) setTimeout("Linksoft.Menu.HideSubmenu('"+menuid+"','"+item.id+"');",Linksoft.Menu.Data[menuid].Delay);
}
Linksoft.Menu.ItemSubmenuOver = function (menuid,id) {
	Linksoft.Menu.ShowSubmenu(menuid,id);
}
Linksoft.Menu.ItemSubmenuOut = function (menuid,id) {
	setTimeout("Linksoft.Menu.HideSubmenu('"+menuid+"','"+id+"');",Linksoft.Menu.Data[menuid].Delay);
}
Linksoft.Menu.ShowSubmenu = function (menuid,id) {
	var sub=Linksoft.Menu.Data[menuid].SubMenus[id];sub.keep++;sub.div.style.visibility='visible';
	if (sub.parent != null) Linksoft.Menu.ShowSubmenu(menuid,sub.parent);
}
Linksoft.Menu.HideSubmenu = function (menuid,id) {
	var sub=Linksoft.Menu.Data[menuid].SubMenus[id];sub.keep--;if (sub.keep<0) sub.keep=0;if (sub.keep==0) sub.div.style.visibility='hidden';
	if (sub.parent != null) setTimeout("Linksoft.Menu.HideSubmenu('"+menuid+"','"+sub.parent+"');",Linksoft.Menu.Data[menuid].Delay);
}


