var validField = '#FFFFFF';
var invalidField = 'lightgrey';
var required = /^req_/;
var elem = '';
var el = '';
var validForm = true;
var validLink = '';
var validChrs = /[0-9a-zA-Z]/
var validFormSubmitTo = ""; // script where the valid VALID will be sent to - leave empty for same as action defined in the <form> tag
var defaultSubmitTo = "" // script where the INVALID form will be sent to - leave empty for same as action defined in the <form> tag

function validate(element, msg, doAlert, msgId)
{
	var valid = true;
	var temp = "";
	var elem = element;

	switch (element.type)
	{
		case 'text':
		{
			temp = text(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			else
			{
				document.getElementById(element.id).style.backgroundColor = validField;
			}
			break;
		}
		
		case 'textarea':
		{
			temp = textarea(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			else
			{
				document.getElementById(element.id).style.backgroundColor = validField;
			}
			break;
		}
		
		case 'select-one':
		{
			temp = selectOne(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			else
			{
				document.getElementById(element.id).style.backgroundColor = validField;
			}
			break;
		}
		
		case 'select-multiple':
		{
			temp = selectMultiple(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			else
			{
				document.getElementById(element.id).style.backgroundColor = validField;
			}
			break;
		}
		
		case 'checkbox':
		{
			temp = checkbox(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				//document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			break;
		}
		
		case 'radio':
		{
			temp = radio(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				//document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			break;
		}
		case 'password':
		{
			temp = password(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			else
			{
				document.getElementById(element.id).style.backgroundColor = validField;
			}
			break;
		}
		case 'file':
		{
			temp = testFile(element);
			if (!temp)
			{
				valid = temp;
				createmsg(msg, doAlert, msgId);
				document.getElementById(element.id).style.backgroundColor = invalidField;
			}
			else
			{
				document.getElementById(element.id).style.backgroundColor = validField;
			}
			break;
		}
	}

	if (valid == false)
	{
		return false;
	}
	else
	{
		return true;
	}
}


function text(element)
{
	var number = /number$/;
	var notNumber = /[^0-9]/;
	var isEmail = /email/;
	var uniqueEmail = /unique/;
	var isURL = /website/;
	var isUser = /username/;
	var validChar = /[^0-9a-zA-Z]/;
	temp = "";
	id = element.id


	if (!validChrs.test(document.getElementById(id).value) && required.test(id))
	{
		return false;
	}
	else if (isUser.test(id))
	{
		if (document.getElementById(id).value.length < 3)
		{
			return false;
		}
		else if (validChar.test(document.getElementById(id).value))
		{
			return false;
		}
		else
		{
			//type = 'user';
			//process(element, type);
			return true;
		}
	}

	else if (isEmail.test(id))
	{
		temp = emailCheck(document.getElementById(id).value);
		if(temp && document.getElementById(id).value != '')
		{
			if (uniqueEmail.test(id))
			{
				type = 'email';
				process(element, type);
			}
			else
			{
				return true;
			}
		}
		else
		{
			return false;
		}
	}
	
	else if (number.test(id))
	{
		if (required.test(id))
		{
			if (notNumber.test(document.getElementById(id).value) || document.getElementById(id).value == "")
			{
				return false;
			}
			else
			{
				return true;
			}
		}
		else
		{
			if (document.getElementById(id).value == '')
			{
				return true;
			}
			else if (document.getElementById(id).value != '' && notNumber.test(document.getElementById(id).value))
			{
				return false;
			}
			else
			{
				return true;
			}
		}
	}

	else if (isURL.test(id))
	{
		if (document.getElementById(id).value == '')
		{
			return false;
		}
		else if (!CheckDomain(id))
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	
	else if (document.getElementById(id).value == '' && required.test(id))
	{
		return false;
	}
	
	else
	{
		return true;
	}
	
	return false;
}

function password(element)
{
	id = element.id
	if (document.getElementById(element.id).id == 'req_password' && (document.getElementById(element.id).value == '' || document.getElementById(element.id).value.length < 6))
	{
		return false;
	}
	else if (document.getElementById(element.id).id == 'req_confirm_password' && (document.getElementById(element.id).value == '' || document.getElementById(element.id).value != document.getElementById('req_password').value || document.getElementById('req_password').value.length < 6))
	{
		return false;
	}
	else if (document.getElementById(element.id).value == '')
	{
		return false;
	}
	else
	{
		return true;
	}
}

function selectOne(element)
{
	id = element.id
	if (document.getElementById(id).options[document.getElementById(id).selectedIndex].value == 'null')
	{
		return false;
	}
	else
	{
		return true;
	}
}

function selectMultiple(element)
{
	id = element.id
	if (document.getElementById(element).value == '')
	{
		return false;
	}
	else
	{
		return true;
	}
}

function checkbox(element)
{
	id = element.id
	checked = false;
	elem = document.getElementsByName(element.name);
	
	for (i = 0; i < elem.length; i++)
	{
		if (elem[i].checked == true)
		{
			checked = true;
		}
	}
	
	if (checked == true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function radio(element)
{
	id = element.id
	checked = false;
	elem = document.getElementsByName(element.name);

	for (i = 0; i < elem.length; i++)
	{
		if (elem[i].checked == true)
		{
			checked = true;
		}
	}
	
	if (checked == true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function textarea(element)
{
	id = element.id
	
	if (!validChrs.test(document.getElementById(element.id).value))
	{
		return false;
	}
	else if (document.getElementById(element.id).value == '')
	{
		return false;
	}
	else
	{
		return true;
	}
}

function testFile(element)
{
	id = element.id
	if (document.getElementById(element).value == '')
	{
		return false;
	}
	else
	{
		return true;
	}
}

function nextstep(form, doAlert, msg, msgElemId)
{
	validForm = true;
	focusedEl = '';
	
	if (doAlert == undefined)
		doAlert = false;
	if (msg == undefined)
		msg = '';
	if (msgElemId == undefined)
		msgElemId = '';
	
	for (j = 0; j < form.elements.length; j++)
	{
		required = /^req_/
		if (required.test(form.elements[j].id) && form.elements[j].style.visibility != 'hidden')
		{
			if (validate(form.elements[j], msg, doAlert, msgElemId) == false)
			{
				validForm = false;
				if (focusedEl == '')
				{
					focusedEl = form.elements[j];
				}
			}
		}
		else if (typeof req2 != 'undefined')
		{
			required = req2
			if (req2.test(form.elements[j].id) && form.elements[j].style.visibility != 'hidden')
			{
				if (validate(form.elements[j], msg, doAlert, msgElemId) == false)
				{
					validForm = false;
					if (focusedEl == '')
					{
						focusedEl = form.elements[j];
					}
				}
			}
		}
	}

	if (validForm == false)
	{
		if (doAlert == true)
		{
			focusedEl.focus();
			alert(msg);
		}
		return false;
	}
	else
	{
		if (validFormSubmitTo != "")
			form.action = validFormSubmitTo;
		return true;
	}
}

function resetForm(form)
{
	for (i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].type != 'submit' && form.elements[i].type != 'reset' && form.elements[i].type != 'button' && form.elements[i].type != null)
		{
			//alert(form.elements[i].type + ' - ' + form.elements[i].value);
			form.elements[i].style.backgroundColor = validField;
			switch (form.elements[i].type)
			{
				case 'text':
				{
					form.elements[i].value = '';
					break;
				}
				case 'select-one':
				{
					form.elements[i].options[form.elements[i].selectedIndex].value = 'null';
					break;
				}
				case 'checkbox' || 'radio':
				{
					form.elements[i].checked = '';
				}
			}
		}
	}
	form.elements[1].focus();
}


function emailCheck(email)
{
	var at="@";
	var dot=".";
	var lat=email.indexOf(at);
	var lastChr=email.length;
	var ldot=email.indexOf(dot);

	if (lat==-1)
	{
		return false;
	}
	
	if (lat==-1 || lat==0 || lat==lastChr)
	{
		return false;
	}
	
	if (ldot==-1 || ldot==0 || ldot==lastChr-1)
	{
		return false;
	}
	
	if (email.indexOf(at,(lat+1))!=-1)
	{
		return false;
	}
	
	if (email.substring(lat-1,lat)==dot || email.substring(lat+1,lat+2)==dot)
	{
		return false;
	}
	
	if (email.indexOf(dot,(lat+2))==-1)
	{
		return false;
	}
	
	if (email.indexOf(" ")!=-1)
	{
		return false;
	}
	
	return true;
}

function createmsg(msg, doAlert, msgId)
{
	if (msg != '')
	{
		if (msgId && doAlert != true)
		{
			writeMessage = document.getElementById(msgId); //if the message will be displayed in another tag or element, this would be its id
			writeMessage.innerHTML = msg;
		}
		//else if (doAlert == true && msgId == "")
		//	alert (msg);
	}
}

