/*
 *	@author: Mircea Zetea
 *	@package: SkyPointe
 *	@description: website concept
 *	@requires: jQuery javascript library
*/

validField = '#FFFFFF';
invalidField = '#EAE3DD';
required = /^req_/;
elem = '';
el = '';
validForm = true;
validLink = '';
validChrs = /[0-9a-zA-Z]/
validFormSubmitTo = ""; // script where the valid VALID will be sent to - leave empty for same as action defined in the <form> tag
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;
	temp = "";
	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;
	}
}


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 (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 (document.getElementById(id).value == '' && required.test(id))
	{
		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++)
	{
		if (required.test(form.elements[j].id) && form.elements[j].style.visibility != 'hidden')
		{
			if (validate(form.elements[j], msg, doAlert, msgElemId) == false)
			{
				validForm = false;
				alert ("The fields marked with * are required! \n Please complete all required fields!")
				if (focusedEl == '')
				{
					focusedEl = form.elements[j];
				}
				break;
			}
		}
	}

	if (validForm == false)
	{
		focusedEl.focus();
		if (doAlert == true)
		{
			alert(msg);
		}
		return false;
	}
	else
	{
		if (validFormSubmitTo != "")
			form.action = validFormSubmitTo;
		return true;
	}
}

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);
	}
}

