/*Copyright Lutz Eymers <ixtab@polzin.com>*/
function isDigit( ch )
{
  if ( (ch >= '0') && (ch <= '9') )
	return true;
  else
	return false;
}
function isAlpha( ch )
{
  if ( ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) )
	 return true;
  else
	return false;
}
function isAlnum( ch )
{
  if ( isAlpha( ch ) || isDigit( ch ) )
	return true;
  else
	return false;
}
function notIn( str1, str2 )
{
  var i = 0;
  var j = str2.length;
  for( ; i<j; i++ )
  {
	var str3 =  str2.charAt(i);
	if( str1.indexOf( str3 ) != -1 )
	  return false;
  }
  return true;
}
function checkUsername( username, mustBeQuoted )
{
  var i = 0;
  var j = username.length;
  if ( username.charAt(0) != '"' )
  {
	if ( (username.charAt(0) <  ' ') || (username.charAt(0) >  '~')
		  || !notIn( mustBeQuoted, username.charAt(0) ) )
	  return false;
	for( i=1; i<j; i++ )
	{
	  if ( ( (username.charAt(i) < ' ') || (username.charAt(i) >  '~')
			|| !notIn ( mustBeQuoted, username.charAt(i) ) )
		   && ( username.charAt(i-1) != '\\' ) )
		return false;
	}
  }
  else
  {
	if ( username.charAt( j-1 ) != '"' )
	  return false;
	for( i=1; i<j-1; i++ )
	{
	  if ( ( (username.charAt(i) == '\n') || (username.charAt(i) == '\r')
			|| (username.charAt(i) == '\"') )
		  && (username.charAt(i-1) != '\\') )
		return false;
	}
  }
  return true;
}
function checkNr ( nr )
{
  var i=0;
  var j=nr.length;
  if( j < 1 )
	return false;
  for( ; i<j; i++ )
	if( ( nr.charAt(i) < '0' ) || ( nr.charAt(i) > '9' ) )
	  return false;
  return true;
}
function checkIpnr( ipnr )
{
  var iL=0;
  var iC=0;
  var i=0;
  var sNr = "";
  for( ; i< ipnr.length; i++ )
  {
	if ( ipnr.charAt(i) == '.' )
	{
	  if ( !iL || (iL> 3) || parseInt( sNr,10 ) > 255 )
		return false;
	  iC++;
	  iL = 0;
	  sNr = "";
	  continue;
	}
	if ( isDigit ( ipnr.charAt(i) ) )
	{
	  iL++;
	  sNr = sNr + ipnr.charAt(i);
	  continue;
	}
	return false;
  }
  if ( parseInt( sNr,10 ) > 255 )
	return false;
  if ( ( (iC==3) && (iL>=1) && (iL<=3) ) || ( (iC==4) && (!iL) )  )
	return true;
  else
	return false;
}
function checkFqdn( fqdn )
{
  var iL=0;
  var iC=0;
  var i=fqdn.length-1;
  if ( (fqdn.charAt(0) == '.') || (fqdn.charAt(0) == '-') )
	return false;
  if ( fqdn.charAt(i) == '.' )
	i=i-1;
  for( ; i>=0; i-- )
  {
	if ( fqdn.charAt(i) == '.' )
	{
	  if ( iL < 2 && iC < 2 )
		return false;
	  if ( fqdn.charAt(i-1) == '-' )
		return false;
	  iC++;
	  iL = 0;
	  continue;
	}
	if ( isAlnum ( fqdn.charAt(i) ) )
	{
	  iL++;
	  continue;
	}
	if ( fqdn.charAt(i) == '-' )
	{
	  if ( !iL )
		return false;
	  iL++;
	  continue;
	}
	return false;
  }
  if ( !iC || ( iL == 1 && iC < 2 ) || ( !iL && iC==1 ) ) {
	return false;
  }
  return true;
}
function checkHostname( hostname )
{
  if ( hostname.charAt(0) == '[' )
  {
	if ( hostname.charAt(hostname.length-1) != ']' )
	  return false;
	var ipnr = hostname.substring( 1, hostname.length -1 );
	  return checkIpnr( ipnr );
  }
  if ( hostname.charAt(0) == '#' )
  {
	var nr = hostname.substring( 1, hostname.length );
	  return checkNr( nr );
  }
  return checkFqdn( hostname );
}
function checkEmailAdr( address )
{
  var status = true;
  var username = "";
  var hostname = "";
  if ( address.length < 8 )
	return false;
  var seperate = address.lastIndexOf("@");
  if ( seperate == -1 )
	return false;
  username = address.substring(0, seperate );
  if ( ! checkUsername( username, "<>()[],;:@\" " ) )
	return false;
  hostname = address.substring(seperate+1, address.length );
  if ( ! checkHostname( hostname ) )
	return false;
  return true;
}

/*additional form-validation code by Jan Schlüter || Big Bang enterprises*/
function checkAll() {
  for(var i=0;i<document.forms[0].length;++i)
    if (document.forms[0].elements[i].type=="checkbox")
      document.forms[0].elements[i].checked=true;
}
function handleCheck(cb) {
  if (!cb.checked)
    document.newsletter.all.checked=false;
}
/*str empty or consisting of blanks only?*/
function isEmpty(str) {
  var e=true;
  for(var i=0;(e)&&(i<str.length);i++)
	e=e&&(str.charAt(i)==" ");
  return e;
}
function checkfrm(sitelang) {
  var c=false;
  for(var i=0;(!c)&&(i<=4);i++)
	c=c||document.newsletter.elements[i].checked;
  var n=document.newsletter.name.value;
  var n_def=(sitelang == 1031) ? "Ihr Name" : "Your name";
  var m=document.newsletter.email.value;
  var m_def=(sitelang == 1031) ? "Ihre e-mail-Adresse" : "Your e-mail address";
  var l=document.newsletter.language.value;
  if (!c) {
	if (l == 1031) {
	  alert("Bitte wählen Sie die Software aus, zu\nder Sie Update-Benachrichtigungen\nerhalten möchten!\n");
	}
	else {
	  alert("Please select software you wish to\nreceive update notifications about!\n");
	}
	document.newsletter.elements[0].focus();
	return false;
  }
  else if (isEmpty(n)||n==n_def) {
	if (l == 1031) {
	  alert("Bitte geben Sie Ihren Namen ein!\n");
	}
	else {
	  alert("Please enter your name!\n");
	}
	document.newsletter.name.focus();
	return false;
  }
  else if (isEmpty(m)||m==m_def) {
	if (l == 1031) {
	  alert("Bitte geben Sie Ihre Email-Adresse ein!\n");
	}
	else {
	  alert("Please enter your email address!\n");
	}
	document.newsletter.email.focus();
	return false;
  }
  else if (js11) {
	if (checkEmailAdr(m)) {
	  return true;
	}
	else {
	  if (l == 1031) {
		alert("Ihre Email-Adresse ist ungültig!\n");
	  }
	  else {
		alert("Your email address is invalid!\n");
	  }
	  document.newsletter.email.focus();
	  return false;
	}
  }
  else return true;
}
