/*
	General form handling for ICenter WebDev Panel
	Copyright (c) 2005 Patryk Zawadzki <patrys at icenter pl>
*/

var formRequired = new Array();

function handleFormFieldCheck(tested, format)
{
	switch (format)
	{
	case 'any':
		return (tested != '');
	case 'date':
		return /[1-2][0-9]{3}\-[0-1][0-9]\-[0-3][0-9]{1}/.test(tested);
	case 'email':
		return /^[_.a-zA-Z0-9-]+@[.a-zA-Z0-9-]+\.[a-zA-Z]+$/.test(tested);
	case 'integer':
		return /[0-9]+/.test(tested);
	}
	return true;
}

function handleFieldChanged(e)
{
	var event = e ? e : window.event;
	var target = event.target ? event.target : event.srcElement;

	target.className = target.className.replace(' inputError', '');
}

function handleTabbedSwitch(tabbedId)
{
	var tabbed = document.getElementById(tabbedId);
	var selectbox = document.getElementById(tabbedId + '-select');

	if (selectbox)
	{
		selectbox = selectbox.value;
	}
	else
	{
		selectbox = '1';
	}

	var elems = tabbed.getElementsByTagName('DIV');
	for (var i = 0; i < elems.length; i++)
	{
		var elem = elems[i];
		var mask = new RegExp('^' + tabbedId + '-page');
		if (mask.test(elem.id))
		{
			if (elem.id == tabbedId + '-page' + selectbox)
			{
				elem.className = '';
			}
			else
			{
				elem.className = 'tabHidden';
			}
		}
	}
	return false;
}

function handleForm(formId)
{
	
	var form = document.getElementById(formId);
	var missing;
	
	var controls = form.getElementsByTagName("INPUT");
	for (var i = 0; i < controls.length; i++)
	{
		var control = controls[i];
		var req = formRequired[formId][control.name];
		if (req)
		{
			control.className = control.className.replace(' inputError', '');
			switch (control.type)
			{
			case 'text':
			case 'password':
				if (!handleFormFieldCheck(control.value, req))
				{
					if (!missing)
						missing = control;
					control.className += ' inputError';
					addEvent(control, "keyup", handleFieldChanged);
				}
				break;
			case 'checkbox':
				if (!control.checked)
				{
					if (!missing)
						missing = control;
					control.className += ' inputError';
				}
				break;
			}
		}
	}

	controls = form.getElementsByTagName("SELECT");
	for (var i = 0; i < controls.length; i++)
	{
		var control = controls[i];
		var req = formRequired[formId][control.name];
		if (req)
		{
			control.className = control.className.replace(' inputError', '');
			if (!control.value)
			{
				if (!missing)
					missing = control;
				control.className += ' inputError';
			}
		}
	}

	controls = form.getElementsByTagName("TEXTAREA");
	for (var i = 0; i < controls.length; i++)
	{
		var control = controls[i];
		var req = formRequired[formId][control.name];
		if (req)
		{
			control.className = control.className.replace(' inputError', '');
			if (!handleFormFieldCheck(control.value, req))
			{
				if (!missing)
					missing = control;
				control.className += ' inputError';
				addEvent(control, "keyup", handleFieldChanged);
			}
		}
	}

	if (missing)
	{
		missing.focus();
		alert('You have to fill all the required fields.');
		return false;
	}

	var elems = form.getElementsByTagName("DIV");
	for (var i = 0; i < elems.length; i++)
	{
		var elem = elems[i];
		if (elem.className == "progressBar")
		{
			elem.className = "progressBarOn";
		}
	}

	var submitbutton = document.getElementById("submit");
	if(submitbutton)
	{
		submitbutton.disabled=true;
		submitbutton.style.color="#A9A9A9";
		submitbutton.value="Sending...";
	}
	
	return true;
}

function formSelectAll(form, name)
{
	var frm = document.getElementById(form);
	var elems = frm.getElementsByTagName("INPUT");
	for (var i = 0; i < elems.length; i++)
	{
		var elem = elems[i];
		if (elem.type == "checkbox")
		if (elem.name == name)
		{
			elem.checked = true;
		}
	}
	return false;
}

function formDeselectAll(form, name)
{
	var frm = document.getElementById(form);
	var elems = frm.getElementsByTagName("INPUT");
	for (var i = 0; i < elems.length; i++)
	{
		var elem = elems[i];
		if (elem.type == "checkbox")
		if (elem.name == name)
		{
			elem.checked = false;
		}
	}
	return false;
}

function removeRepetitive(elem)
{
	new Effect.Fade(elem,
		{ duration: 1.0 },
		{ afterFinish: function()
			{
				element.innerHTML = "";
				element.parentNode.removeChild(element);
			}
		});
	return false;
}
