function isEmail(str) 
{
	if (str == '')
		return true;
		
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)

	if (str.indexOf(at)==-1)
	   return false

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
	   return false

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
	    return false
	
	if (str.indexOf(at,(lat+1))!=-1)
	    return false
	
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
		false

	if (str.indexOf(dot,(lat+2))==-1)
	    return false
		
	if (str.indexOf(" ")!=-1)
	    return false
	
	return true					
}


function isEmpty(str) 
{
	// Check whether field is empty.
	for (var intLoop = 0; intLoop < str.length; intLoop++)
		if (" " != str.charAt(intLoop))
			return false;
	return true;
}
 

function validate(f, error_span_id, normal_tag, error_tag) 
{
	var CR = "\n";	
	if (error_span_id != '')
		CR = "<br/>\n";
		
	var strError = "";
	var strDiff = "";
	
	for (var intLoop = 0; intLoop < f.elements.length; intLoop++)
	{
		var err = false;
		
		if (null!=f.elements[intLoop].getAttribute("required")) 
		{
			var ok = true;
			if (f.elements[intLoop].getAttribute('type') == 'checkbox')
				ok = f.elements[intLoop].checked;
			else
				ok = !isEmpty(f.elements[intLoop].value);

			if (!ok)
			{
				if ("" != strError)
					strError += ", ";
				strError += f.elements[intLoop].name;
				
				f.elements[intLoop].setAttribute('class', error_tag);
				err = true;
			}
			else
				f.elements[intLoop].setAttribute('class', normal_tag);
		}

		if (null != f.elements[intLoop].getAttribute('email'))		
		{
			if (!isEmail(f.elements[intLoop].value))
			{
				strDiff += "Email address is invalid!" + CR;
				f.elements[intLoop].setAttribute('class', error_tag);			
				err = true;
			}
			else
			if (err == false)
				f.elements[intLoop].setAttribute('class', normal_tag);		
		}

		if (null != f.elements[intLoop].getAttribute('minsize'))
		{
			var minsize = f.elements[intLoop].getAttribute('minsize');
			if (f.elements[intLoop].value.length < minsize)
			{
				if ((f.elements[intLoop].value.length == 0) && (err == true))
					;
				else
				{
					strDiff += "The " + f.elements[intLoop].name + " field isn't long enough!" + CR;				
					f.elements[intLoop].setAttribute('class', error_tag);
					err = true;
				}
			}
			else
			if (err == false)
				f.elements[intLoop].setAttribute('class', normal_tag);					
		}

		if (null != f.elements[intLoop].getAttribute('number'))
		{
			var num = parseInt(f.elements[intLoop].value);
			if (num.toString() != f.elements[intLoop].value)
			{
				strDiff += "The " + f.elements[intLoop].name + " field isn't a number!" + CR;				
				f.elements[intLoop].setAttribute('class', error_tag);
				err = true;
			}
			else
			if (err == false)
				f.elements[intLoop].setAttribute('class', normal_tag);					
		}
		
		if (null != f.elements[intLoop].getAttribute('sameAs'))
		{
			var value1 = f.elements[intLoop].value;
			var obj2 = document.getElementById(f.elements[intLoop].getAttribute('sameAs'));
			if (obj2 != null)
			{
				var value2 = obj2.value;
				if (value1 != value2)
				{
					strDiff += "The " + f.elements[intLoop].name + " and " + obj2.name + " fields to not match!" + CR;
					f.elements[intLoop].setAttribute('class', error_tag);							
					err = true;
				}
				else
				if (err == false)			
					f.elements[intLoop].setAttribute('class', normal_tag);		
			}
		}
	}
	
	if (strError != '')
		strError = "The following fields are required: " + strError;
		
	if (strDiff != "")
	{
		if (strError == '')
			strError = strDiff;
		else
			strError = strError + CR + CR + strDiff;
	}		

	if (strError != '') 
	{
		if (error_span_id != '')
		{
			var text = document.getElementById(error_span_id);
			text.innerHTML = "<b>ERRORS:<b><p/>" + strError;
		}
		else
			alert(strError);
		return false;
	} 
	else
		return true;   	
}