/*
'-------------------------------------------------------------------------
' formcheck.js
'-------------------------------------------------------------------------
'
' Copyright     (C) 2001  ib-tool GmbH, 3w technologies
' 
' Produkt       Kundeninformationssystem
'
' Titel         Formular Felder Prüfung
'
'-------------------------------------------------------------------------
'
'               Version:                Author:                 Date:
' Ident.        1D                      MB 						22.02.2004
'				Funktionsbeschreibung ergänzt
'
' Ident.        1C                      MB 						02.11.2002
'				neue Funktion isValidUsrPwd (Security Problem) 
'
' Ident.        1B                      MB 						09.09.2002
'				Funktion isNum,isDate geändert => Prüfung auf "."
'
' Ident.        1A                      MB / Nen				29.03.2001
'               (created)				
'																							
'-------------------------------------------------------------------------
'
' Beschreibung  Diese Library enthält Funktionen, die  für die Überprüfung der 
'               Formular-Felder verwendet werden können.
'               Funktionen:
'               - isEmpty        			prüft, ob String leer ist
'               - isNum          			prüft, ob die Zahl numerisch ist und im
'                                			gegebenen Wertebereich liegt
'               - isDate         			prüft, ob Datum gültig ist
'				- checkStartEndDate	 		prüft, ob das EndeDatum >= ist als das StartDatum
'				- checkStartGroesserEndDat	prüft, ob das StartDatum > ist als das EndDatum
'				- isValidFilename			prüft, ob der Filename gültig ist
'				- isValidUsrPwd				prüft, ob der Username und Passwort gültig ist
'											( Funktion PruefeZeichen wird verwendet)                                                                
'               - isEmail        			prüft, ob Email Adresse gültig ist
'								 			( div. Funktionen werden verwendet)															
' 
'-------------------------------------------------------------------------
*/

// check if string is empty
//-------------------------
function isEmpty(str)
{
	var tmpStr;
  
	tmpStr = trim(str);
	if (tmpStr.length == 0) {
		return true;
	}
	else
	{
		return false;
	}
}

// check if number is valid
//-------------------------
function isNum(num, minValue, maxValue)
{
	var tmpNum, d;

	tmpNum = trim(num);
	d=".";
	if (tmpNum.length == 0) {
		return false;
	}
	if (isNaN(tmpNum) == true) {
		return false;
	}
	if (tmpNum.indexOf(d)!=-1){
		return false;
	}
	if (tmpNum < minValue || tmpNum > maxValue) {
		return false;
	}
}

// check is Date is valid
//-------------------------
function isDate(TT,MM,JJJJ,Startjahr,Endjahr)
{
	var Tag, Monat, Jahr, d;
	var Datum ="", Laenge, tageMonat;

	Datum=Datum.concat(TT,".",MM,".",JJJJ);
	Laenge=Datum.length;
	d=".";
	if ((TT.indexOf(d)!=-1) || (MM.indexOf(d)!=-1) || (JJJJ.indexOf(d)!=-1)){
		return false;
	}
	if (Laenge==10) {
		Tag=TT;
		Monat=MM;
		Jahr=JJJJ;
	}
	else {
		return false;
	}

	if (Monat==4 || Monat==6 || Monat==9 || Monat==11) {
		tageMonat=30;
	}
	else if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12) {
		tageMonat=31;
	}
	else if(Monat==2 && Jahr%4==0 && Jahr%100!=0 || Jahr%400==0) {
		tageMonat=29;
	}
	else if(Monat==2 && Jahr%4!=0 || Jahr%100==0 && Jahr%400!=0) {
		tageMonat=28;
	}

	if (Tag>=1 && Tag<=tageMonat && Monat>=1 && Monat<=12 && Jahr>=Startjahr && Jahr<=Endjahr) {
		return true;
	}
	else {
		return false;
	}
}


// check is EndDate >= StartDate
function checkStartEndDate(sTT,sMM,sJJJJ,eTT,eMM,eJJJJ)
{
	var OK=false;
	if ((eJJJJ == sJJJJ)&&(sMM == eMM)&&(sTT == eTT)) {
		OK=true;
	}
	else if (eJJJJ > sJJJJ) {
		OK=true;
	}
	else if (eJJJJ == sJJJJ) {
		if (eMM > sMM) {
			OK=true;
		}
		else if (eMM == sMM) {
			if (eTT > sTT) {
				OK=true;
			}
		}
	}
	return OK;
}

// check is StartDate > EndDate
function checkStartGroesserEndDate(sTT,sMM,sJJJJ,eTT,eMM,eJJJJ)
{
	var OK=false;
	if (eJJJJ > sJJJJ) {
		OK=true;
	}
	else if (eJJJJ == sJJJJ) {
		if (eMM > sMM) {
			OK=true;
		}
		else if (eMM == sMM) {
			if (eTT > sTT) {
				OK=true;
			}
		}
	}
	return OK;
}

// check is valid Filename
function isValidFilename(Eingabe)
{
	var Zeichen="\\/|:*?\"<>¦";
	var c, d, laenge;
	
	laenge=Eingabe.length;

	if (Eingabe!="")
	{
		for (c=0; c<laenge; c++) {
			d=Eingabe.charAt(c);
			if (Zeichen.indexOf(d)!=-1)	{
				return false;
    			break;
			}
		}
		return true;
	}
 	else {
		return false;
	}
}

//------------------------------------------------------------
// check is Username and Passwort valid
//
//------------------------------------------------------------
function isValidUsrPwd(str)
{
	var tmpStr;
	// Zulässige Zeichen für Username und Passwort definieren
	var ZugelasseneZeichen = new String("abcdefghijklmnopqrstuvwxyzäöüàèé")
	ZugelasseneZeichen += ZugelasseneZeichen.toUpperCase() + "0123456789.-_@"
	
	//alert(ZugelasseneZeichen);
  
	tmpStr = trim(str);

	if (PruefeZeichen(tmpStr, ZugelasseneZeichen)) {
		return true;
	}
	else
	{
		return false;
	}
}

//--- Unterprogramm, welches die Zeichen prüft
function PruefeZeichen(tmpStr, ZugelasseneZeichen)
{ 
	for (var Pos = 0; Pos < tmpStr.length; Pos++) {
		if (ZugelasseneZeichen.indexOf(tmpStr.charAt(Pos)) == -1) {
			return false;
		}
	}
	return true;
}

//------------------------------------------------------------
// check is Email is valid
// (div. Funktionen werden verwendet)
//------------------------------------------------------------

function isEmail(Eingabe)
{
        if ( ! checkEmail( Eingabe, true ) ) {
               return false;
        } 
		else {
          return true;
		}
}


  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;
  }


  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 ;
  }

//------------------------------------------------------------

		