function isMail (emailStr, language)
	{
		var emailPat=/^(.+)@(.+)$/
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
		var validChars="\[^\\s" + specialChars + "\]"
		var quotedUser="(\"[^\"]*\")"
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom=validChars + '+'
		var word="(" + atom + "|" + quotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		
		var matchArray=emailStr.match(emailPat)
		if (matchArray==null) 
			{
				if ( language == 'ro' )
					alert("Adresa de mail pare sa fie incorecta! (verificati @ si .)");
				else
					alert("Email address seems incorrect (check @ and .'s)");
				return false;
			}
		var user=matchArray[1]
		var domain=matchArray[2]
		
		if (user.match(userPat)==null) 
			{
				if ( language == 'ro' )
					alert("User-ul introdus nu este unul valid!");
				else
					alert("The part of your email address before the '@' doesn't seem to be valid!");
				return false;
			}
		
		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null) 
			{
				  for (var i=1;i<=4;i++) 
				  {
					if (IPArray[i]>255) 
						{
							if ( language == 'ro' )
								alert("Adresa IP este invalida!");
							else
								alert("Destination IP address is invalid!");
							return false;
						}
				  }
				return true;
			}
		
		var domainArray=domain.match(domainPat)
		if (domainArray==null) {
			if ( language == 'ro' )
				alert("Domeniul introdus nu este unul valid!");
			else
				alert("Part of your email address after the '@' doesn't seem to be valid!");
			return false;
		}
		
		var atomPat=new RegExp(atom,"g")
		var domArr=domain.match(atomPat)
		var len=domArr.length
		if (domArr[domArr.length-1].length<2 || 
			domArr[domArr.length-1].length>3) {
				if ( language == 'ro' )
		   			alert("Adresa introdusa trebuie sa se termine intr-un domeniul sau cod de tara!");
		   		else
		   			alert("The address must end in a top level domain (e.g. .com), or two letter country!");
		   return false;
		}
		
		if (len<2) {
			if ( language == 'ro' )
		   		alert("Adresa nu are atasat un hostname!");
		   	else
		   		alert("This address is missing a hostname!");
		   return false;
		}
		
		return true;
	}
	
function getObj(name)
	{
		if (document.getElementById)
			{
				this.obj = document.getElementById(name);
				this.style = document.getElementById(name).style;
			}
		else if (document.all)
			{
				this.obj = document.all[name];
				this.style = document.all[name].style;
			}
	}

function validNewsletterForm(lang)
	{
		var mail        = new getObj('mail').obj;
		var nl_displays = new getObj('nl_displays').obj;
		var nl_printers = new getObj('nl_printers').obj;
		var nl_inks     = new getObj('nl_inks').obj;
		var nl_second   = new getObj('nl_second').obj;

		// set languages...
		if ( lang == 'ro' )
			{
				lng_mail_adr = 'Introduceti o adresa de mail!';
				lng_type_sel = 'Selectati un tip de newsletter!';
			}
		else
			{
				lng_mail_adr = 'Enter an email address!';
				lng_type_sel = 'Select a newsletter type!';
			}

		// do tests...
		if ( mail.value == "" )
			{ alert(lng_mail_adr); mail.focus(); return false; }
		if ( isMail(mail.value, lang) == false )
			{ mail.focus(); return false; }
		
		if ( ( nl_displays.checked == false ) && ( nl_printers.checked == false ) && ( nl_inks.checked == false ) && ( nl_second.checked == false ) )
				{ alert(lng_type_sel); return false; }

		return true;
	}