var IgnoreEnterKey = false;

function FileUploadFormSubmitted(SubmittingForm)
{
	FormSubmitted(SubmittingForm);
}

function FormSubmitted()
{
	var FMForm = GetFMForm();
	
	if (FMForm)
		EnableDisableFormButtons(FMForm, true);
}

function EnableFormButtons()
{
	var FMForm = GetFMForm();

	if (FMForm)
		EnableDisableFormButtons(FMForm, false);
}

function EnableDisableFormButtons(Form, Disable)
{
	var FormInputs = Form.getElementsByTagName('input');

	for (var a = 0; a < FormInputs.length; a++)
	{
		if (typeof FormInputs[a].type != 'undefined' && FormInputs[a].type != null)
		{
			var InputType = FormInputs[a].type.toLowerCase();

			if (InputType == 'submit' || InputType == "reset")
			{
				if (Disable)
				{
					FormInputs[a].onclick = function() { return false; };
					FormInputs[a].style.color = '#CCCCCC';
				}
				else
				{
					FormInputs[a].onclick = function() { this.onclick = function() { return false; } };
					FormInputs[a].style.color = '';
				}
			}
		}
	}
}

function MatrixColumnSelected(SelectedColumn, MaxPerColumn)
{
	var MatrixID = SelectedColumn.name.substring(0, SelectedColumn.name.indexOf('_'));	
	var FormInputs = document.body.getElementsByTagName('input');
	var SelectedColumnValue = SelectedColumn.value.toLowerCase();
	var SelectedColumns = 1;
	
	for (var a = 0; a < FormInputs.length; a++)
	{
		if (typeof FormInputs[a].name != 'undefined' && FormInputs[a].name != null && 
			FormInputs[a].name.indexOf(MatrixID) == 0 && FormInputs[a].name != SelectedColumn.name)
		{
			var CurrColumnValue = FormInputs[a].value.toLowerCase();
			
			if (FormInputs[a].checked && CurrColumnValue == SelectedColumnValue)
			{					
				if (SelectedColumns >= MaxPerColumn)
					FormInputs[a].checked = false;
				else
					SelectedColumns++;
			}		
		}
	}
}

function HideTableRows(TableID, LinkText, RowsToDisplay, NumberOfColumns)
{
	var FieldTable = document.getElementById('FieldTable' + TableID);

	if (FieldTable != undefined && FieldTable.rows != undefined && RowsToDisplay < FieldTable.rows.length)
	{
		for (var a = 0; a < FieldTable.rows.length; a++)
		{
			if (FieldsContainData(FieldTable.rows[a].getElementsByTagName('input')) && a + 1 > RowsToDisplay)
			{
				RowsToDisplay = a + 1;
				continue;
			}

			if (FieldsContainData(FieldTable.rows[a].getElementsByTagName('select')) && a + 1 > RowsToDisplay)
			{
				RowsToDisplay = a + 1;
				continue;
			}
			
			if (FieldsContainData(FieldTable.rows[a].getElementsByTagName('textarea')) && a + 1 > RowsToDisplay)
			{
				RowsToDisplay = a + 1;
				continue;
			}			
		}
		
		for (var a = 0; a < FieldTable.rows.length; a++)
		{
			if (a >= RowsToDisplay)
				FieldTable.rows[a].style.display = 'none';
			else 
				FieldTable.rows[a].style.display = '';
		}

		if (RowsToDisplay < FieldTable.rows.length)
		{
			FieldTable.NewRow = FieldTable.insertRow(FieldTable.rows.length);
			var LinkCell = FieldTable.NewRow.insertCell(0);

			LinkCell.colSpan = NumberOfColumns;
			LinkCell.style.textAlign = 'right';
			LinkCell.innerHTML = '<a href="javascript:void(0);" title="' + LinkText + '" onclick="AddFieldTableRow(\'' + TableID + '\');">' + LinkText + '</a>';
		}
	}
}

function AddFieldTableRow(TableID)
{
	var FieldTable = document.getElementById('FieldTable' + TableID);

	if (FieldTable != undefined && FieldTable != null && FieldTable.rows != undefined)
	{		
		var HiddenCount = 0;		
	
		for (var a = 0; a < FieldTable.rows.length; a++)
		{
			if (FieldTable.rows[a].style.display.toLowerCase() == 'none')
			{
				HiddenCount++;
				
				if (HiddenCount == 1)
					FieldTable.rows[a].style.display = '';
			}
		}

		if (HiddenCount <= 1 && FieldTable.NewRow != undefined)
			FieldTable.NewRow.style.display = 'none';
	}
}

function FieldsContainData(FieldsToCheck)
{
	var ContainsData = false;
	
	if (FieldsToCheck != undefined && FieldsToCheck.length != undefined)
	{
		for (var a = 0; a < FieldsToCheck.length; a++)
		{
			var Field = FieldsToCheck[a];

			if (Field.value != undefined && Field.value.length > 0)
				ContainsData = true;
			else if (Field.checked != undefined && Field.checked == true)
				ContainsData = true;
			else if (Field.selectedIndex != undefined && Field.selectedIndex > 0)
				ContainsData = true;
			else if (Field.type == 'file' && Field.getAttribute('filecached'))
				ContainsData = true;

			if (ContainsData)
				break;
		}
	}
	
	return ContainsData;
}

function GetFMForm()
{
	var FMForm = document.getElementById('FMFormTag');

	if (!FMForm)
	{
		var AllForms = document.getElementsByTagName('form');

		for (var a = 0; a < AllForms.length; a++)
		{
			var FormInputs = AllForms[a].getElementsByTagName('input');

			for (var b = 0; b < FormInputs.length; b++)
			{
				if (FormInputs[b].name == 'FormKey' && FormInputs[b].type.toLowerCase() == 'hidden')
				{
					FMForm = AllForms[a];
					break;
				}
			}
		}
	}

	return FMForm;
}

function RegisterFormKeyDownEventHandler()
{
	var FormInputs = document.getElementsByTagName('input');
	var EventName = 'onkeypress';
	
	if (window.event)
		EventName = 'onkeydown';
	
	for (var a = 0; a < FormInputs.length; a++)
	{		
		if (FormInputs[a].type != undefined && FormInputs[a].type.toLowerCase() != 'textarea' && FormInputs[a].name != undefined && FormInputs[a].name.match('[0-9]+_?[0-9]+') != null)
			StackFormEvent(FormInputs[a], EventName, KeyDownEventHandler);
	}
}

function KeyDownEventHandler(e)
{
	if (e.keyCode == 13)
	{
		e.returnValue = false;
		e.cancel = true;

		if (!IgnoreEnterKey)
		{
			var FormInputs = document.getElementsByTagName('input');
			
			for (var a = 0; a < FormInputs.length; a++)
			{		
				if (FormInputs[a].type != undefined && FormInputs[a].type.toLowerCase() == 'submit')
				{
					var CssClass = FormInputs[a].getAttribute('class');
					
					if (CssClass == null || CssClass == undefined)
						CssClass = FormInputs[a].getAttribute('className');
					
					if (CssClass != null && CssClass != undefined && CssClass.toLowerCase() == 'mainbutton')
						FormInputs[a].click();
				}
			}
		}
		
		return false;
	}
}

function RegisterFormOnSubmit()
{
	var FMForm = GetFMForm();

	if (FMForm)
		StackFormEvent(FMForm, 'onsubmit', function() { FormSubmitted(FMForm) });
}

function FixFormEvent (e)
{
	//IE doesn't pass event parameters to the function
	if (typeof e == 'undefined')
		e = window.event;
	
	//w3c/mozilla use e.target, IE uses srcElement
	if (e.srcElement)
		e.target = e.srcElement;

	//e.returnValue can be used to cancel some event types;
	e.returnValue = true;
							
	return e;
} 

function StackFormEvent(EventObject, EventName, EventFunction)
{
	if (EventObject.StackedFormEvents == undefined)
		EventObject.StackedFormEvents = new Object();

	if (EventObject.StackedFormEvents[EventName] == undefined)
	{
		EventObject.StackedFormEvents[EventName] = new Array();

		if (typeof EventObject[EventName] == 'function')
			EventObject.StackedFormEvents[EventName][0] = EventObject[EventName];
		else if (EventObject[EventName] != undefined)
			EventObject.StackedFormEvents[EventName][0] = function() { eval(EventObject[EventName]); };

		EventObject[EventName] = function(event)
		{
			event = FixFormEvent(event);
			RunStackedFunctions(event, EventObject, EventName);
			return event.returnValue;
		};
	}

	EventObject.StackedFormEvents[EventName][EventObject.StackedFormEvents[EventName].length] = EventFunction;
}

function RunStackedFunctions(event, EventObject, EventName)
{
	if (EventObject.StackedFormEvents != undefined && EventObject.StackedFormEvents[EventName] != undefined)
	{
		for (var a = 0; a < EventObject.StackedFormEvents[EventName].length; a++)
			EventObject.StackedFormEvents[EventName][a](event);
	}
}

StackFormEvent(window, 'onload', RegisterFormKeyDownEventHandler);
StackFormEvent(window, 'onload', RegisterFormOnSubmit);
StackFormEvent(window, 'onunload', EnableFormButtons);
