// Validierung von Formularfeldern
// dirk.malorny@firstgate.de

function chkForm(form) 
{	
	var i=0;
	var item;
	var bild;
	var text;
	var valid=true;
	while (form.elements[i]) {
		
		item=form.elements[i];
		
		var id = item.id.split(":");
		var typcheck=id[0];
		var optcheck=id[1];

		text=document.getElementById(form.id+item.name);
		
		if (bild) bild.src = "gifs/pfeil/gelb.gif";
		if (text) text.className = "label";

		var isVisible = true;
		$(item).parents().each(function(){
			if(this.style.display == "none"){
				isVisible = false;
			}	
  	});
		
		//erforderliches Feld ist leer?
		if ((optcheck=="erforderlich") && (item.value=="") && (isVisible)) {
			mark(bild,text);
			valid=false;
		}
		
		//Telefonnummern korrekt?
		if ((item.value!="") && (typcheck=="zahl") && (!checkTelefon(item.value))) {
			mark(bild,text);
            valid=false;
        } 

		//PLZ korrekt?
        if ((item.value!="") && (typcheck=="plz") && (!checkPLZ(item.value))) {
			mark(bild,text);
            valid=false;
        }

		//E-Mail-Adressen korrekt?
        if ((item.value!="") && (typcheck=="mail") && (!checkEmailAdr(item.value))) {
			mark(bild,text);
            valid=false;
        }
        //alert("name: "+item.name+"\ntyp: "+typcheck+"\noptional: "+optcheck+"\nvalue: "+item.value+"\nvalid: "+valid);
		i++;
	}
	return valid;
}


// Feld als Fehlerhaft markieren.
function mark(bild,text)
{
	 if (bild) bild.src = "/gifs/pfeil/rot.gif";
     if (text) text.className = "fehler";
}




//---martchouk---parametervalidierung----------------------------

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 checkPLZ(nr)
{
    var j=nr.length;

    if( j < 4 ) return false;
	if( j > 5 ) return false;

    return checkNr(nr);
}


function checkTelefon(nr)
{
	var i=0;
	var j=nr.length;

	if( j < 1 )
	return false;

	for( ; i<j; i++ ) {
		var curCh = nr.charAt(i);
		if( ( !isDigit(curCh) ) && ( curCh != '/') && ( curCh != '-') && ( curCh != ' ') )
			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;
}

function checkEmail( email, allowFullname )
{
	var existFullname = false;
	var status = true;
	var fullname = "";
	var adress = "";
	if ( email.length < 8 )
		return false;
	var emailBegin = email.indexOf("<");
	var emailEnd = email.lastIndexOf(">");

	if ( (emailBegin == -1) && (emailEnd == -1) )
		return checkEmailAdr( email );

	if ( ( (emailBegin == -1) && (emailEnd != -1) )
		|| ( (emailBegin != -1) && (emailEnd == -1) ) )
	return false;

	adress = email.substring( emailBegin+1, emailEnd );

	if ( ! checkEmailAdr( adress ) )
		return false;

	if ( email.length == adress.length + 2 )
		return true;
	else
		if ( ! allowFullname )
			return false;

	if ( emailEnd == email.length - 1 )
	{
		if ( emailBegin == 0 )
			return true;
		if ( email.charAt( emailBegin -1 ) != ' ' )
			return false;
		fullname = email.substring( 0, emailBegin-1 );
			return checkUsername ( fullname, "<>()[],;:@\"" );
	}

	return false ;
}
//---ende parametervalidierung----------------------------------

