var disableSubmitButtonsForm;
var hasChangedArray = [];

function disableSubmitButtons(e)
{	
	if (!e)
	{
		e = window.event;
	}
	if (e.target)
	{
		disableSubmitButtonsForm = e.target;
	}
	else if (e.srcElement)
	{
		disableSubmitButtonsForm = e.srcElement;
	}
	if (disableSubmitButtonsForm.nodeType)
	{
		if (disableSubmitButtonsForm.nodeType == 3) // defeat Safari bug
		{
			disableSubmitButtonsForm = disableSubmitButtonsForm.parentNode;
		}
	}
	if (hasChangedArray.length == 0)
	{
		setTimeout("_disableSubmitButtons();", 0);
	}
	if (disableSubmitButtonsForm && disableSubmitButtonsForm.elements && disableSubmitButtonsForm.elements["scrollTo"]) disableSubmitButtonsForm.elements["scrollTo"].value = getScrollTop();
	return true;
}

function _disableSubmitButtons()
{
	if (disableSubmitButtonsForm.elements)
	{
		for (var i = 0; i < disableSubmitButtonsForm.elements.length; i++)
		{
			var ele = disableSubmitButtonsForm.elements[i];
			if (ele.type == "submit") ele.disabled = true;
		}
	}
}

var lastClickedLink = null;
var lastClickedLinkTime = 0;

function preventDoubleClickForm(e)
{
	preventDoubleClick(e, true);
}

function preventDoubleClick(e, isForm)
{
	var time = new Date();
	time = time.getTime();
	
	if (!e)
	{
		e = window.event;
	}
	if (e.target)
	{
		lastClickedLink = e.target;
	}
	else if (e.srcElement)
	{
		lastClickedLink = e.srcElement;
	}
	if (lastClickedLink.nodeType)
	{
		if (lastClickedLink.nodeType == 3) // defeat Safari bug
		{
			lastClickedLink = lastClickedLink.parentNode;
		}
	}
	if (isForm === true)
	{
		if (lastClickedLink.type == null)
		{
			if (lastClickedLink.href == null) return true;
		}
		else if (lastClickedLink.type != "submit" && lastClickedLink.type != "image") return false;
		if (lastClickedLink && lastClickedLink.form && lastClickedLink.form.elements && lastClickedLink.form.elements["scrollTo"]) lastClickedLink.form.elements["scrollTo"].value = getScrollTop();
	}

	if (lastClickedLinkTime != 0 && time - lastClickedLinkTime < 1000 && time - lastClickedLinkTime > 10) 
	{
		alert("Bitte warten.\r\n\r\nDie angeforderte Seite wird noch geladen!");
		return false;
	}
	lastClickedLinkTime = time;
	return true;
}

for (var i = 0; i < document.links.length; i++)
{
	var link = document.links[i];
	if (link.onclick == null) link.onclick = preventDoubleClick;
}

for (var i = 0; i < document.forms.length; i++)
{
	var form = document.forms[i];	
	if (form.onclick == null) form.onclick = preventDoubleClickForm;
	else if (form.onsubmit == null) form.onsubmit = disableSubmitButtons;
}

function checkForChanged(obj)
{
	var form = obj.form;
	var elements = form.elements;
	var name = obj.name;
	if (elements["default_"+name] == null) return;
	var found = false;
	for (var i = 0; i < hasChangedArray.length; i++)
	{
		if (hasChangedArray[i] == name)
		{
			found = true;
			break;
		}
	}
	if (!found) 
	{
		if (form.elements["default_"+name] != null) 
		{
			i = 0;
			hasChangedArray.push(name);
		}
	}

	var hasNotChanged = true;
	var currentValue = obj.value;
	var defaultValue = form.elements["default_"+name].value;
	var type = obj.type;
	if (type == "checkbox") hasNotChanged = defaultValue == ((obj.checked)? 1 : 0);
	else if (type.indexOf("select") != -1) hasNotChanged = (currentValue == defaultValue || currentValue == "__NVS__" && (defaultValue == 0 || defaultValue == ""));
	else hasNotChanged = currentValue == defaultValue;

	if (hasNotChanged) hasChangedArray.splice(i, 1);
	hasNotChanged = hasChangedArray.length == 0;
	
	if (elements["saveData"]) elements["saveData"].disabled = hasNotChanged;
	if (elements["saveList"]) elements["saveList"].disabled = hasNotChanged;
	if (elements["saveOverview"]) elements["saveOverview"].disabled = hasNotChanged;
	
	if (hasNotChanged) window.onbeforeunload = null;
	else window.onbeforeunload = askForSave;
}

var unloadReturnValue="Die Daten wurden verändert, aber nicht gespeichert. Sollen die Änderungen verworfen werden?";
function askForSave(evt)
{
	var message = unloadReturnValue;
	if (typeof evt == 'undefined') 
	{
		evt = window.event;
	}
	if (evt) 
	{
		evt.returnValue = message;
	}
	return message;
}
